層次查詢
函式儲存過程是乙個有名字的plsql**塊
他沒有返回值但是有輸出引數,(可以將資料傳給外部程式)引數型別有三種: in,out,inout
儲存過程建立之後會儲存到資料庫中
當資料庫啟動時,自動的載入到記憶體中(一次建立,多次使用)
create[or
replace
]procedure 儲存過程名[
(引數名 in
|out
|inout 資料)]is
|asbegin
end;
in:輸入引數,只能讀不能修改,他是預設的引數型別,關鍵字可以省略,可以以任意三種方式傳參out:輸出引數,作用:將程式的處理結果傳給外部程式,它只能以傳變數的方式傳參
inout:結合in和out引數,它也只能以傳變數的方式傳參。
create
orreplace
procedure p1
isbegin
for i in
1..9
loop
for j in
1..i loop
dbms_output.put(j||
'*'||i||
'='||
(i*j)
||' ');
if i*j <
10then
dbms_output.put(
' ')
endif
;end
loop
; dbms_output.new_line();
endloop
;end
舉例:寫乙個儲存過程,傳入兩個引數,乙個引數表示部門編號,乙個引數數字
1.在**塊中呼叫
declare
begin
儲存過程名(引數,);
end;
2.使用call命令呼叫
declare
begin
call 儲存過程名(引數)
;end
;
3.使用exec命令呼叫
declare
begin
exec 儲存過程名(引數);
--只能在sqlplus中使用
end;
不可以在儲存過程中修改in型別引數的值
舉例:寫乙個儲存過程,傳入兩個引數,乙個引數表示部門編號,乙個引數是輸出查詢到的部門的員工人數合計數
create
orreplace
procedure p3(dno number,n out number)
isbegin
select
count(1
)into n from emp where deptno=dno;
end;
呼叫:
declare
--宣告乙個變數儲存員工人數
c number;
begin
--呼叫儲存過程p3
p3(20,c)
dbms_output.put_line(c)
;end
;
舉例:結合in和out引數,只以傳變數的方式傳參
create
orreplace
procedure p4(n in
out number)
isbegin
select
count(1
)into n from emp where deptno=n;
end;
呼叫:
declare
--宣告乙個變數儲存員工人數
v number:=
&部門編號;
begin
--呼叫儲存過程
p4(v)
dbms_output.put_line(v)
;end
;
舉例:寫乙個儲存過程,傳入乙個部門編號,將部門下的員工資訊以游標返回
create
orreplace
procedure p5(dno number,v out sys_refcursor)
;--這裡為什麼用系統游標呢?
isbegin
open v for
select
*from emp where deptno=dno;
--開啟游標
end;
呼叫上述儲存過程p5
declare
cur sys_refcursor;
v emp%rowtype;
begin
p5(10,cur)
;loop
fetch cur into v;
exit
when cur%notfound;
dbms_output.put_line(v.empno||
','||v.ename||
','||v.job||
','||v.mgr||
','||v.hiredate||
','||v.sal||
','||v.comm||
','||v.deptno)
;end
loop
;close cur;
end;
select 列名 from 表名 start
with 條件 connect
by prior 連線條件;
舉例:
將乙個表中全部的人的層級按照職位高低排序叫做層級查詢
層級查詢需要用到的 偽列叫做 level
函式也是乙個有名字的plsql**塊,他一般來完成乙個功能和計算過程。函式必須呼叫時使用返回值,引數分為輸入引數和輸入輸出引數,
1.函式中不允許使用臨時表
2.在一些情況下不能使用dml語句
3.函式可以在**塊中呼叫,也可以在sql語句中使用
create[or
replace
]function 函式名[
(引數 in
|out|in
out 資料型別,..
.)]return 返回值型別
isbegin
return語句
end;
舉例:寫乙個函式,計算乙個數的階乘,並返回階乘結果
create
orreplace
function fn1(n number)
return
18 儲存過程 SQL
好文要頂 一 建立 使用儲存過程 oracle版本 create procedure mailinglistcount listcount out integer is v rows integer begin select count into v rows from customers wher...
sql 儲存過程 函式
1 建立儲存過程 1 語法 create or replace procedure procedure name argument type 型別 變數的說明 begin 執行部分 exception 可選的異常錯誤處理程式 end 建立過程 sql create or replace proced...
sql儲存過程和函式的區別
1.自定義函式必須有返回值,標量值或者錶值。儲存過程可以沒有返回值 儲存過程是通過引數返回的,可以有多個或者沒有 2.對於儲存過程來說可以返回引數,如記錄集,而函式只能返回值或者表物件。函式只能返回乙個變數 而儲存過程可以返回多個。儲存過程的引數可以有in,out,inout三種型別,而函式只能有i...