建立時的基本定義與呼叫注:
create or replace
沒有就建立,有的話就更新。
sql> create or replace procedure helloworld as
2 begin
3 dbms_output.put_line('hello world');
4 end helloworld;
5 /procedure created.
sql> set serveroutput on
sql>
sql> begin
2 helloworld();
3 end;
4 /hello world
pl/sql procedure successfully completed.
修改儲存過程
sql> create or replace procedure helloworld as
2 begin
3 dbms_output.put_line('hello world v2.0');
4 end helloworld;
5 /procedure created.
sql>
sql> set serveroutput on
sql>
sql> begin
2 helloworld();
3 end;
4 /hello world v2.0
pl/sql procedure successfully completed.
引數定義
單個引數
sql> create or replace procedure helloworld1 (
2 p_user_name varchar2
3 ) as
4 begin
5 dbms_output.put_line('hello ' || p_user_name || '!');
6 end helloworld1;
7 /procedure created.
sql>
sql>
sql> begin
2 helloworld1('edward');
3 end;
4 /hello edward!
pl/sql procedure successfully completed.
in、out、in out
sql> create or replace procedure helloworld2 (
2 p_user_name in varchar2,
3 p_out_val out varchar2,
4 p_inout_val in out varchar2
5 ) as
6 begin
7 dbms_output.put_line('hello ' || p_user_name || p_inout_val || '!');
8 p_out_val := 'a';
9 p_inout_val := 'b';
10 end helloworld2;
11 /
procedure created.
sql> declare
2 p_outval varchar2(10);
3 p_inoutval varchar2(10) := '~hi~';
4 begin
5 helloworld2('edward', p_outval, p_inoutval);
67 dbms_output.put_line('p_outval=' || p_outval);
8 dbms_output.put_line('p_inoutval=' || p_inoutval);
9 end;
10 /
hello edward~hi~!
p_outval=a
p_inoutval=b
pl/sql procedure successfully completed.
sql>
引數的預設值
sql> create or replace procedure helloworld3 (
2 p_user_name varchar2,
3 p_val1 varchar2 default ' good moning,',
4 p_val2 varchar2 default ' nice to meet you'
5 ) as
6 begin
7 dbms_output.put_line('hello ' || p_user_name || p_val1 || p_val2 || '!'
);8 end helloworld3;
9 /procedure created.
sql> begin
2 helloworld3('edward');
3 helloworld3('edward', ' good night,');
4 helloworld3('edward', ' good night,', 'bye');
5 end;
6 /hello edward good moning, nice to meet you!
hello edward good night, nice to meet you!
hello edward good night,bye!
pl/sql procedure successfully completed.
指定引數名稱呼叫
此部分使用 「引數預設值」那一小節的儲存過程。
用於說明當最後2個引數是有預設的時候,如何跳過中間那個。
sql> begin
2 helloworld3('edward');
3 helloworld3('edward', p_val1 => ' good night,');
4 helloworld3('edward', p_val1 => ' good night,', p_val2 => 'bye');
5 helloworld3('edward', p_val2 => ' heihei ');
6 end;
7 /hello edward good moning, nice to meet you!
hello edward good night, nice to meet you!
hello edward good night,bye!
hello edward good moning, heihei !
pl/sql procedure successfully completed.
儲存過程返回結果集
有些人原先是在sql server下的儲存過程的。
sql server的儲存過程,可以在裡面寫一段sql語句,然後其它的開發語言比如c#,可以在呼叫儲存過程的後,獲取到儲存過程執行所返回的結果集。
此方法在 sql server 中可用,在 oracle 中不可用。
首先舉乙個 sql server 的成功的例子:
createprocedure testproc
asbegin
select'hello 1'as a,'world 1'as b unionall
select'hello 2'as a,'world 2'as b;
endbegin
declare @rc int;
execute @rc = testproc;
print @rc;
enda b
hello 1 world 1
hello 2 world 2
(2 行受影響)
然後 照著寫乙個 oracle 的。
sql> create or replace procedure testproc
2 as
3 begin
4 select 'hello 1' as a, 'world 1' as b from dual union all
5 select 'hello 2' as a, 'world 2' as b from dual ;
6 end;
7 /
警告:建立的過程帶有編譯錯誤。
sql> show err;
procedure testproc出現錯誤:
line/col error
4/3 pls-00428: 在此 select 語句中缺少 into 子句
假如要實現 儲存過程返回結果集,以便讓 c# 之類的**呼叫的話,請參考 oracle 函式 當中的 返回結果集的函式的部分。
oracle 儲存過程例1
一 功能設計 開發目標研究生招生系統,要求設計pl sql程式對考生的成績資料進行處理,處理的邏輯是根據每門專業課的最低分數線和總分的最低分數線自動將考生歸類為錄取考生 調劑考生 落選考生。為此設計2個資料表,graduate資料表存放考生成績,result資料表存放處理結果,pl sql程式完成的...
oracle儲存過程和儲存函式(1)
第乙個儲存過程 create orreplace procedure sayhelloworld asbegin dbms output.put line hello world end 呼叫儲存過程 1.execute exec 2.在儲存過程中呼叫 begin sayhelloworld end...
學習Oracle 的儲存過程1
先來看一看什麼叫儲存過程吧,在oracle中,可以在資料庫中定義子程式,這種程式塊被稱作儲存過程 procedure 他存放在資料字典中,可以在不同的使用者和應用程式之間共享,並可實現程式的優化和重用,有什麼優點 第一,過程在伺服器端執行,速度快。第二,過程執行一次後 就駐留在高速緩衝儲存器,在以後...