PL SQL儲存過程

2021-08-31 17:09:33 字數 2688 閱讀 4120

為什麼要建立儲存過程?儲存過程有什麼用?

建立儲存過程就在硬碟上生成了乙個檔案,而不是像declare,只是在記憶體中存放,

退出的時候就失去了相關操作.

儲存過程把複雜的業務邏輯都放在塊中進行處理,讓外界呼叫時可以直接使用.

不用第二次轉換.

1.建立儲存過程的語法:

create or replace procedure 儲存過程名字(引數名1  in/out/in out   引數型別,引數名2  .....,引數名3)

is/as

變數名 變數型別;

begin

處理業務邏輯;

end;

例子(不帶任何引數的儲存過程):

--or replace 可以省略,含義是:如果存在此儲存過程就覆蓋掉之前的

create or replace procedure myproc

isbegin

dbms_output.put_line('hello');

end;

執行儲存過程:  sql>exec myproc(引數1,引數2);/如果不帶引數:sql>exec myproc;

2.關於in / out  / in out這三種用法:

in :引數是帶值傳入的,預設情況就是in

out:引數是不帶值傳入,帶值輸出.

in out:  帶值輸入,帶值輸出.

下面是這三種情況的乙個小小的用法:

例 一  (關於in):

create or replace procedure myproce(emp_empno emp.empno%type)

is a emp.sal%type;

begin

select sal into a from emp where empno = emp_empno;

dbms_output.put_line(a);

end;

執行也可以用begin  ....end塊..

begin

myproce(7369);

end;

例二(關於out的用法)

create or replace procedure myproce(emp_empno emp.empno%type,i out number) is

a emp.sal%type;

begin

select sal into a from emp where empno = emp_empno;

i:=a;

dbms_output.put_line(i);

end;

執行儲存過程

declare

n number;

begin

--n:=100

myproce(7369,n);

end;

從這個事例我們可以看出 out引數不能傳入引數值,只能輸出引數值,

in的可以接受引數值,

可以這樣執行:   

sql> var m number;

sql> exec myproce(7369,:m);--    傳入out引數需要用var定義變數然後在變數前面加  : 傳入

sql>print m;

最後總結了一點:

帶in的引數放在等式右邊,帶out的兩邊都可以放,但是放在右邊才有意義.

in out兩邊都可以放.

我們再來看看in out的用法

例子如下:

create or replace procedure myproce(emp_empno emp.empno%type,  i in out number) is

a emp.sal%type;

begin

select sal into a from emp where empno = emp_empno;

dbms_output.put_line(a||'begain,,,,,,,,,,,');

dbms_output.put_line(i||'over');

end;

執行**塊如下:

declare

s number;

begin

s:=100;

myproce(7369,s);--注意這裡的s 它只能是引數,不能是具體值,除了in外 out/in out不能直接帶值傳

end;

如果這裡不用in out 這裡定義的s 傳值進去是無效的,也就是答應dbms_output.put_line(i||'over')沒有列印i的值

它是不會帶任何值的,而in out就可以帶值也可以不帶值....

在sqlplus中執行時

首先宣告變數 sql>var n number;--宣告傳入進去的變數

sql>exec :n:=100;--給變數賦值,

sql>exec myproce(7369,n);--執行儲存過程;

你范德薩范德薩

PL SQL儲存過程

or replace 建立或替換,如果存在就替換,不存在就建立create or replace procedure piscursor cisselect from dept2 for update beginfor row record in c loopif row record.deptno...

pl sql 儲存過程

在這段時間的開發中資料庫用的是oracle以前用的都是mssql它們的儲存過程的寫法還有一點不一樣,所以花了一天的時間看了看!以下是我做的乙個小例子!create table mytesttable id number,name varchar2 10 insert into mytesttable...

PL SQL 儲存過程

1 游標的設計開發 什麼是游標,為什麼用游標,怎樣使用游標 2 儲存過程 儲存過程的建立,引數使用,儲存過程的執行 3 儲存函式的設計 函式的建立,引數使用,函式的呼叫 4 包的設計與應用 什麼是包,包的建立及使用 儲存過程 建立語法 create or replace procedure proc...