儲存過程是一種命名的pl/sql程式塊,它既可以沒有引數,也可以有若干個輸入、輸出引數,甚至可以有多個既作輸入又作輸出的引數,但它通常沒有返回值。儲存過程被儲存在資料庫中,它不可以被sql語句直接執行或呼叫,只能通過execut命令執行或在pl/sql程式塊內部被呼叫。由於儲存過程是已經編譯好的**,所以其被呼叫或引用時,執行效率非常高。
建立儲存過程需要使用procedure關鍵字,其基本語法格式如下:
create [or replace] procedure pro_name [(parameter1[,parameter2]…)] is|as
begin
plsql_sentences;
[exception]
[dowith_sentences;]
end [pro_name];
pro_name:儲存過程名稱。
parameter1:儲存過程的引數,若是輸入引數,則需要在其後面指定「in」關鍵字;若是輸出引數,則需要在其後面指定「out」關鍵字。在in或out關鍵字的後面是引數的資料型別,但不能指定該型別的長度。
plsql_sentences:pl/sql語句,它是儲存過程功能實現的主體。
dowith_sentences:異常處理語句,也是pl/sql語句,這是乙個可選項。
【例項】建立乙個儲存過程,定義1個in模式的變數,用於傳人部門編號;定義2個out模式的字元型別的引數,分別用於返回部門名稱和部門位址。
create or replace procedure pro_dept(num_deptno in number,var_dname out dept.dname%type,var_loc out dept.loc%type) is
/*這裡定義儲存過程的內部變數*/
var_msg varchar2(100);
begin
select dname,loc
into var_dname,var_loc
from dept
where deptno = num_deptno;
exception
when no_data_found then --若查詢語句無返回記錄
var_msg:='未找到部門編號為'||num_deptno||'的記錄';
dbms_output.put_line(var_msg);
end;
【例項】在sql*plus環境中,使用execute(exec)命令執行pro_dept儲存過程。
sql> variable var_dname varchar2(50);
sql> variable var_loc varchar2(50);
sql> exec pro_dept(10,var_dname,var_loc);
【例項】在pl/sql塊中呼叫pro_dept儲存過程
declare
var_dname dept.dname%type;
var_loc dept.loc%type;
begin
pro_dept(10,var_dname,var_loc);
end;
儲存過程可以接受多個引數,引數迷失包括in、out、in out這3中。
in模式引數:這是一種輸入型別的引數,引數值由呼叫方傳人,並且只能被儲存過程讀取。
out模式引數:這乙個輸出型別的引數,表示這個引數在儲存過程中已經被賦值,並且這個引數值可以傳遞到當前儲存過程以外的環境中。
in out模式引數:可以兼顧其他兩種引數的特點,在呼叫儲存過程時,可以從外界向該型別的引數傳入值;在執行完儲存過程之後,可以將該引數返回值傳給外界。
oracle支援在宣告in引數的同時給其初始化預設值,這樣在儲存過程呼叫時,如果沒有向in引數傳入值,則儲存過程可以使用預設值進行操作。
【例項】建立乙個儲存過程,定義1個帶預設值得in引數。
create or replace procedure pro_seldept(num_deptno in number default 10) is
var_dname dept.dname%type; --定義儲存過程內部變數,儲存部門名稱
var_loc dept.loc%type; --定義儲存過程內部變數,儲存部門位址
begin
select dname,loc
into var_dname,var_loc
from dept
where deptno = num_deptno;
end;
呼叫儲存過程:
begin
pro_seldept(); --查詢預設部門編號的資訊
pro_seldept(20); --查詢編號為20的部門資訊
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...