oracle 儲存過程

2021-07-01 18:40:13 字數 2275 閱讀 1204

儲存過程和函式也是一種pl/sql塊,是存入資料庫的pl/sql塊。但儲存過程和函式不同於已經介紹過的pl/sql程式,我們通常把pl/sql程式稱為無名塊,而儲存過程和函式是以命名的方式儲存於資料庫中的。建立儲存過程,需要有create procedure的系統許可權,該許可權可由系統管理員授予:grant execute on user_tbl to user 。

create [or replace] procedure procedure_name [(parameter1 [model] datatype1, ...)]

is [as]

begin

pl/sql block;

end [procedure_name];

注: procedure_name是儲存過程的名字,parameter用於指定引數,model用於指定引數模式,datatype用於指定引數型別,is [as]用於開始pl/sql**塊。當定義儲存過程的引數時,只能指定資料型別,不能指定資料長度。

編寫儲存過程可以使用任何文字編輯器或直接在sql*plus環境下進行,編寫好的儲存過程必須要在sql*plus環境下進行編譯,生成編譯**,原**和編譯**在編譯過程中都會被存入資料庫。編譯成功的儲存過程就可以在oracle環境下進行呼叫了。

刪除儲存過程:drop  procedure procedure_name

編譯儲存過程:alter procedure procedure_name compile

檢視儲存過程及狀態:

select   object_name,status

from user_objects

where object_type='procedure'

檢視儲存過程的**,其中procedure_name是儲存過程的名字:

select   text

from user_source

where name= procedure_name

執行(或呼叫)儲存過程的人是過程的建立者或是擁有execute any procedure系統許可權的人或是被擁有者授予execute許可權的人。

執行方法1:execute 模式名.儲存過程名[(引數...)];

執行方法2:begin

set serveroutput on

模式名.儲存過程名[(引數...)];

end;

引數的作用是向儲存過程傳遞資料,或從儲存過程獲得返回結果。如果省略in、out或in out,則預設模式是in。

引數名 in       資料型別 default 值

定義乙個輸入引數變數,用於傳遞引數給儲存過程。在呼叫儲存過程時,主程式的實際引數可以是常量、有值變數或表示式等。default 關鍵字為可選項,用來設定引數的預設值。

引數名 out    資料型別

定義乙個輸出引數變數,用於從儲存過程獲取資料,即變數從儲存過程中返回值給主程式。在儲存過程中,引數變數只能被賦值而不能將其用於賦值,在儲存過程中必須給輸出變數至少賦值一次。

引數名 in/out 資料型別 default 值

在儲存過程中,變數接收主程式傳遞的值,同時可以參加賦值運算,也可以對其進行賦值。在儲存過程中必須給變數至少賦值一次。

引數的值由呼叫者傳遞,傳遞的引數的個數、型別和順序應該和定義的一致。如果順序不一致,可以採用以下呼叫方法。

execute change_salary(p_var=>1,p_var2=>2);
可以看出傳遞引數的順序發生了變化,並且明確指出了引數名和要傳遞的值,=>運算子左側是引數名,右側是引數表示式,這種賦值方法的意義較清楚。

使用out型別的引數返回儲存過程的結果。

create or replace procedure parm_count(p_total out number)

asbegin

select count(*) into p_total from com_parm;

end;

在sqlplus中輸入以下命令執行:

declare

v_count number;

begin

parm_count(v_count);

dbms_output.put_line('引數總數為:'||v_count);

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...