--createor replace 建立或替換,如果存在就替換,不存在就建立
createor replace procedure p
is
cursor c
is
select * from dept2 forupdate;
begin
for row_record in c loop
if (row_record.deptno = 30) then
update dept2 set dname = substr(dname, 0, length(dname) - 3) wherecurrent
of c;
endif;
end loop;
end;
exec p;
begin
p;
end;
--帶參儲存過程
--in 輸入引數,不帶in out 預設輸入引數
--out 輸出引數
--inout 同時帶的是輸入輸入引數
createor replace procedure p2(
a in number,
b number,
s_result out number,
s_temp inout number
)
is
begin
if (a > b) then
s_result := a;
else
s_result := b;
endif;
s_temp := s_temp + 3;
end;
--呼叫儲存過程
declare
v_a number := 4;
v_b number := 6;
v_result number;
v_temp number := 5;
begin
p2(v_a, v_b, v_result, v_temp);
dbms_output.put_line(v_a);
dbms_output.put_line(v_b);
dbms_output.put_line(v_result);
dbms_output.put_line(v_temp);
end;
---刪除乙個表的過程
createor replace procedure drop_table(tname varchar2)
as
total int := 0;
begin
selectcount(*) into total from user_tables
where table_name = upper(tname);
if total >= 1 then
executeimmediate
'drop table '||tname; --此處必須用動態sql
endif;
end;
select * from user_tables;
--遞迴儲存過程
createor replace procedure pro_emp(sempno emp.empno%type, slevel integer)
is
cursor c isselect * from emp where mgr = sempno;
prefixstr varchar(255);
begin
for i in 1..slevel loop
prefixstr := prefixstr || '----';
end loop;
for row_data in c loop
dbms_output.put_line(prefixstr || row_data.ename);
pro_emp(row_data.empno, slevel + 1);
end loop;
end;
select * from emp;
begin
pro_emp(7839, 0);
end;
Oracle PL SQL 儲存過程
1.oracle 提供可以吧pl sql程式儲存在資料庫中,並且可以在任何地方來運用它。這樣就叫儲存過程或者函式。2.建立函式 例 返回helloworld的函式,is相當於declare用於宣告區域性變數,第乙個return只宣告返回型別 create or replace function he...
oracle plsql開發 儲存過程綜合練習
基於表emp和dept 構造procedure change salary 引數 ename in varchar2 salary in number v job out varchar2 v dname out varchar2 先查詢指定員工,如果查出多條記錄,提示並異常退出 如果沒有該名員工,...
oracle pl sql之oracle儲存過程
儲存過程是一種命名pl sql程式塊,它可以被賦予引數,儲存在資料庫中,可以被使用者呼叫。由於儲存過程是已編譯好的 所以在呼叫的時候不必再次進行編譯,從而提高了程式的執行效率。另外使用儲存過程可以實現程式的模組化設計 儲存過程的語法 create or replace procedure proce...