為什麼要建立儲存過程?儲存過程有什麼用?
建立儲存過程就在硬碟上生成了乙個檔案,而不是像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...