Oracle儲存過程

2022-06-27 14:30:13 字數 2530 閱讀 8504

儲存過程是在大型資料庫系統中,一組為了完成特定功能的sql語句集,它儲存在資料庫中,一次編譯後永久有效,使用者通過指定儲存過程的名字並給出引數,來執行它,儲存過程是資料庫中的乙個重要物件,在資料量特別龐大的情況下利用儲存過程能達到倍速的效果提公升。

由於資料庫執行動作時,是現編譯後執行的,然而儲存過程是乙個編譯過的**塊,所以執行速率要比sql語句高。

乙個儲存過程在程式在網路中互動時可以替代大堆的sql語句,所以也能降低網路的通訊量,提高通訊速率。

通過儲存過程能夠使沒有許可權的使用者在控制之下間接的訪問資料庫,從而確保資料的安全。

create or replace procedure p_emp is

begin

-- 儲存過程中至少要有一行有效**

dbms_output.put_line('hello world');

end p_emp;

帶引數的儲存過程在定義引數時要指定引數名稱 引數型別in/out入參還是出參,in可以不寫,預設是入參,引數的資料型別

黃色部分的引數是儲存過程的出參,通過這個出參可以看到儲存過程執行的結果,儲存過程中不建議處理事務,提交和回滾都不建議操作,如果儲存過程有巢狀呼叫的話,讓最外層程式來決定是否提交事務。

給乙個字串,'7788,5566,2233'員工編號,傳入儲存過程,刪除這些員工 記錄,並給出這些員工刪除的結果'true,false,true'刪除成功true,否則false,以字串形式返回。

create or replace procedure p_delete(ids varchar,-- 要刪除的ids

rs out varchar) -- 刪除的結果

isv_ids varchar(50) :=ids;-- 賦值給變數,因為入參無法改變

v_id varchar(5);-- 截取出的id

n number;-- 逗號的位置

begin

loop

exit when v_ids is null;-- ids為null時退出迴圈

n:=instr(v_ids,',');-- 找逗號的位置

if n=0 then -- 沒有逗號

v_id:=v_ids;

v_ids:=null;-- ids變為null,標識著準備退出迴圈

else

v_id:=substr(v_ids,1,n-1);-- 找逗號前的id

v_ids:=substr(v_ids,n+1);-- ids更改為剩下的id資訊

end if;

delete from emp where empno=v_id;-- 刪除記錄

if sql%rowcount=1 then -- 判斷結果

if rs is null then-- 拼接結果

rs:='true';

else

rs:=rs||',true';

end if;

else

if rs is null then

rs:='false';

else

rs:=rs||',false';

end if;

end if;

end loop;

end;

-- 呼叫儲存過程

declare

v_result varchar2(50);

begin

p_delete('7788,5566,2233',v_result);

commit;

dbms_output.put_line('execute result:'||v_result);

-- execute result:true,false,false

end;

Oracle儲存過程呼叫儲存過程

oracle儲存過程呼叫有返回結果集的儲存過程一般用光標的方式,宣告乙個游標,把結果集放到游標裡面,然後迴圈游標 declare newcs sys refcursor cs1 number cs2 number cstype table rowtype table列的個數和newcs返回的個數一樣...

ORACLE儲存過程

自定義函式開始 create or replace function fn wftemplateidget templatecategoryid number,organid number,templatemode number return number istemplateid number i...

Oracle 儲存過程

create or replace procedure p 有就替換,沒有就建立 iscursor c is select from emp for update begin for v emp in c loop if v emp.deptno 10 then update emp2 set sa...