儲存過程 函式
pl/sql中,匿名塊我們要想下一次執行,則需要儲存在磁碟介質上,這樣每次用的時候,很麻煩。下面簡單的介紹儲存過程
儲存過程:
不帶引數的儲存過程:
create or replace procedure WOO is
v_sum number :=0;
begin
for i in 1 .. 100
loop
v_sum := v_sum + i;
end loop;
DBMS_OUTPUT.PUT_LINE(v_sum);
end WOO;
呼叫:
我們在pl/sql中測試:
begin
-- Call the procedure
woo;
end;
5050
5050
PL/SQL 過程已成功完成。
我們在sqlplus裡執行:
SQL> declare
2 v_name varchar2(10); ==>注意這裡我們需要定義一個變數用來接收傳出的p_name
3 begin
4 P_I(1,v_name);
5 DBMS_OUTPUT.PUT_LINE(v_name);
6 end;
7 /
wang
PL/SQL 過程已成功完成。
我們根據輸入的ID來查詢name:
create or replace procedure P_n(p_id_name in out varchar2)
is
begin
select name into p_id_name from t where id =to_number( p_id_name); ==>注意這裡我們強制轉換,oracle也會自動轉換,但是如果自己不強制轉換,如果id上有索引,則就不走索引了
end P_n;
在pl/sql裡測試:
透過上面的帶引數舉例,細心的讀者已經發現已經說明了在pl/sql中很讓初學者頭疼的in , out , in out引數:
in:在塊中不可以改變,傳進去的數不可以改變,如果上面的塊中有p_id=3,則會報錯
out:OUT表示從儲存過程返回引數
in out :IN OUT 表示傳遞引數和返回引數
函式:
上面已經介紹了儲存過程,儲存過程可以代替函式,只是函式有返回值。過程和函式很多相似,下面簡述函式:
不帶引數的函式:
create or replace function jisuan return number is
v_sum number :=0;
begin
for i in 1..100
loop
v_sum := v_sum + i;
end loop;
DBMS_OUTPUT.PUT_LINE(v_sum);
return v_sum ;
end jisuan; ==>這裡可以寫上函式名稱或者直接省略也行
帶引數的函式:
create or replace function f_diy(r in number) return number is
s number := 0;
PI constant number := 3.14159;
begin
s :=PI*r*r;
return s;
DBMS_OUTPUT.PUT_LINE(s);
end f_diy;
在sqlplus裡執行:
SQL> select f_diy(90) wang from dual;
WANG
----------
25446.879
儲存過程:
不帶引數的儲存過程:
create or replace procedure WOO is
v_sum number :=0;
begin
for i in 1 .. 100
loop
v_sum := v_sum + i;
end loop;
DBMS_OUTPUT.PUT_LINE(v_sum);
end WOO;
呼叫:
我們在pl/sql中測試:
begin
-- Call the procedure
woo;
end;
5050
在sqlplus中測試:
SQL> execute woo; ==>(EXEC)5050
PL/SQL 過程已成功完成。
或者:
SQL> begin
2 woo;
3 end;
4 /
5050
PL/SQL 過程已成功完成。
帶引數的儲存過程:
在pl/sql裡執行:SQL> begin
2 woo;
3 end;
4 /
5050
PL/SQL 過程已成功完成。
使用者hr裡有張表t
我們向t裡插進資料行:
create or replace procedure P_t(p_id in int, p_name in varchar2) is
begin
insert into t values(p_id,p_name);
COMMIT;
end P_t;
在pl/sql測試:
begin
-- Call the procedure
p_t(p_id => :p_id,
p_name => :p_name);
end;
下面輸入視窗裡的型別是float,string,oracle裡沒有這連個型別,我想應該是工具的問題.
我們根據id查詢name:
create or replace procedure P_i(p_id in number, p_name out varchar2) is ==>注意這裡的型別後面不需要加精度,只需要寫上變數的型別
begin
select name into p_name from t where id=p_id;
end P_i;
我們向t裡插進資料行:
create or replace procedure P_t(p_id in int, p_name in varchar2) is
begin
insert into t values(p_id,p_name);
COMMIT;
end P_t;
在pl/sql測試:
begin
-- Call the procedure
p_t(p_id => :p_id,
p_name => :p_name);
end;
下面輸入視窗裡的型別是float,string,oracle裡沒有這連個型別,我想應該是工具的問題.
我們根據id查詢name:
create or replace procedure P_i(p_id in number, p_name out varchar2) is ==>注意這裡的型別後面不需要加精度,只需要寫上變數的型別
begin
select name into p_name from t where id=p_id;
end P_i;
我們在sqlplus裡執行:
SQL> declare
2 v_name varchar2(10); ==>注意這裡我們需要定義一個變數用來接收傳出的p_name
3 begin
4 P_I(1,v_name);
5 DBMS_OUTPUT.PUT_LINE(v_name);
6 end;
7 /
wang
PL/SQL 過程已成功完成。
我們根據輸入的ID來查詢name:
create or replace procedure P_n(p_id_name in out varchar2)
is
begin
select name into p_id_name from t where id =to_number( p_id_name); ==>注意這裡我們強制轉換,oracle也會自動轉換,但是如果自己不強制轉換,如果id上有索引,則就不走索引了
end P_n;
在pl/sql裡測試:
透過上面的帶引數舉例,細心的讀者已經發現已經說明了在pl/sql中很讓初學者頭疼的in , out , in out引數:
in:在塊中不可以改變,傳進去的數不可以改變,如果上面的塊中有p_id=3,則會報錯
out:OUT表示從儲存過程返回引數
in out :IN OUT 表示傳遞引數和返回引數
函式:
上面已經介紹了儲存過程,儲存過程可以代替函式,只是函式有返回值。過程和函式很多相似,下面簡述函式:
不帶引數的函式:
create or replace function jisuan return number is
v_sum number :=0;
begin
for i in 1..100
loop
v_sum := v_sum + i;
end loop;
DBMS_OUTPUT.PUT_LINE(v_sum);
return v_sum ;
end jisuan; ==>這裡可以寫上函式名稱或者直接省略也行
create or replace function f_diy(r in number) return number is
s number := 0;
PI constant number := 3.14159;
begin
s :=PI*r*r;
return s;
DBMS_OUTPUT.PUT_LINE(s);
end f_diy;
在sqlplus裡執行:
SQL> select f_diy(90) wang from dual;
WANG
----------
25446.879
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29876893/viewspace-1564514/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 儲存過程與儲存函式儲存過程儲存函式
- 儲存過程與函式儲存過程函式
- Mysql 的儲存過程和儲存函式MySql儲存過程儲存函式
- MySQL 儲存過程和函式MySql儲存過程函式
- MySQL儲存過程 (即函式)MySql儲存過程函式
- MySQL儲存過程和函式MySql儲存過程函式
- mySql 儲存過程與函式MySql儲存過程函式
- SQL server儲存過程函式SQLServer儲存過程函式
- mysql儲存函過程和儲存函式都屬於儲存程式MySql儲存函式
- 儲存過程vs.函式QM儲存過程函式
- mysql儲存過程基本函式(轉)MySql儲存過程函式
- mysql和orcale的儲存過程和儲存函式MySql儲存過程儲存函式
- MySQL入門--儲存過程(PROCEDURE)和儲存函式(FUNCTION)MySql儲存過程儲存函式Function
- MySQL自定義函式與儲存過程MySql函式儲存過程
- 七、函式-儲存過程-觸發器函式儲存過程觸發器
- PLSQL學習-【7儲存過程、函式】SQL儲存過程函式
- 儲存過程和函式的區別儲存過程函式
- MySQL 5.5 建立儲存過程和函式MySql儲存過程函式
- MySQL4:儲存過程和函式MySql儲存過程函式
- openGauss 函式及儲存過程支援函式儲存過程
- 函式儲存過程併發控制-案例函式儲存過程
- mysql儲存過程及日期函式實踐MySql儲存過程函式
- mysql儲存過程procedure、函式function的用法MySql儲存過程函式Function
- PL/SQL 中的儲存過程與函式SQL儲存過程函式
- 【fosoyo】SQL Server儲存過程/函式加/解密SQLServer儲存過程函式解密
- Oracle 11g系列:函式與儲存過程Oracle函式儲存過程
- 在Oracle中查詢儲存過程和函式Oracle儲存過程函式
- SQL中儲存過程和函式的區別SQL儲存過程函式
- day25-索引和函式及儲存過程索引函式儲存過程
- 函式儲存過程被誤刪恢復步驟函式儲存過程
- (9)mysql 中的儲存過程和自定義函式MySql儲存過程函式
- php呼叫mysql儲存過程和函式的方法(轉)PHPMySql儲存過程函式
- 破解儲存過程,函式,檢視,觸發器解密儲存過程函式觸發器解密
- MySQL優化---儲存過程和儲存函式-1-轉自部落格園MySql優化儲存過程儲存函式
- (Oracle)儲存過程、儲存函式和包的相關知識與例項Oracle儲存過程儲存函式
- 匯出系統表中的儲存過程和函式儲存過程函式
- 儲存過程的引數可以使用sql的函式儲存過程SQL函式
- MySQL儲存過程詳解 mysql 儲存過程MySql儲存過程