當前位置:首頁 » 服務存儲 » 存儲過程函數
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

存儲過程函數

發布時間: 2022-01-13 15:51:10

Ⅰ 怎樣從存儲過程中調用函數

一,存儲過程:
1、 在oracle的 配置和移植工具 àNET MANAGER中配置連接
2、 在plsql中新建SQL窗口,編寫存儲過程
3、 在plsql中新建測試窗口,在begin end之間調用
4、 查看編譯錯誤:在命令窗口中show errors procere procere_name
或者 編輯的方式打開存儲過程,在編譯時會有錯誤提示

二,存儲過程基本語法
create procere <過程名>(<參數列表,無參時忽略>)
as|is
變數聲明、初始化
begin
業務處理、邏輯代碼
exception
異常捕獲、容錯處理
end <過程名>;
參數:<參數名> in|out|in out <參數類型,無長度說明> ,如:v_name varchar2
in:入參
out:出參
in out:出入參
註:as|is表示as或is
調用語法:
1)、exec <過程名>;
2)、execute <過程名>;
3)、在PL/SQL語句塊中直接調用。
例:
create or replace procere up_wap(v_param1 in out varchar2,v_param2 in out varchar2)
is
v_temp varchar2(20);
begin
dbms_output.put_line('交換前參數1:'||v_param1||' 參數2:'||v_param2);
v_temp:=v_param1;
v_param1:=v_param2;
v_param2:=v_temp;
dbms_output.put_line('交換後參數1:'||v_param1||' 參數2:'||v_param2);
exception
when others then dbms_output.put_line('There is a error when the procere up_wap executing!');
end up_wap;
/
-- 調用存儲過程
declare
v_param1 varchar2(20):='param1';
v_param2 varchar2(20):='param2';
begin
up_wap(v_param1 => v_param1,v_param2 => v_param2);
end;

Ⅱ 存儲過程和函數有何區別

存儲過程和函數目的是為了 可重復地 執行操作資料庫的sql語句的集合。

區別是寫法和調用上。

寫法上:存儲過程的參數列表可以有輸入參數、輸出參數、可輸入輸出的參數;

函數的參數列表只有輸入參數,並且有return <返回值類型,無長度說明>。

返回值上:

存儲過程的返回值,可以有多個值,

函數的返回值,只有一個值。

調用方式上:

存儲過程的調用方式有:

1)、exec <過程名>;

2)、execute <過程名>;

3)、在PL/SQL語句塊中直接調用。

函數的調用方式有:

在PL/SQL語句塊中直接調用。

具體分為:

----調用FUNCTION add_three_numbers

----1. 位置表示法調用函數

BEGIN

dbms_output.put_line(add_three_numbers(2,4,5));

END;

----2. 命名表示法調用函數

BEGIN

dbms_output.put_line(add_three_numbers(b=>3, a=>4,c=>2));

END;

----3. 混合使用位置表示法和命名表示法調用函數

BEGIN

dbms_output.put_line(add_three_numbers(3, b=>4,c=>2));

END;

----4. 排除表示法

BEGIN

dbms_output.put_line(add_three_numbers(12,c=>2));

END;

----5. sql調用表示法 --混合表示法

SELECT add_three_numbers(3, b=>4,c=>2) FROM DUAL;

----1. 該函數接受3個可選參數,返回3個數字的和

CREATE OR REPLACE FUNCTION add_three_numbers

(

a NUMBER:=0, b NUMBER:=0, c NUMBER:=0

)

RETURN NUMBER IS

BEGIN

RETURN a+b+c;

END;

存儲過程:

基本語法:

create procere <過程名>(<參數列表,無參時忽略>)

as|is

變數聲明、初始化

begin

業務處理、邏輯代碼

exception

異常捕獲、容錯處理

end <過程名>;

參數:<參數名> in|out|in out <參數類型,無長度說明> ,如:v_name varchar2

in:入參

out:出參

in out:出入參

註:as|is表示as或is

調用語法:

1)、exec <過程名>;

2)、execute <過程名>;

3)、在PL/SQL語句塊中直接調用。

例:

create or replace procere up_wap(v_param1 in out varchar2,v_param2 in out varchar2)

is

v_temp varchar2(20);

begin

dbms_output.put_line('交換前參數1:'||v_param1||' 參數2:'||v_param2);

v_temp:=v_param1;

v_param1:=v_param2;

v_param2:=v_temp;

dbms_output.put_line('交換後參數1:'||v_param1||' 參數2:'||v_param2);

exception

when others then dbms_output.put_line('There is a error when the procere up_wap executing!');

end up_wap;

/

-- 調用存儲過程

declare

v_param1 varchar2(20):='param1';

v_param2 varchar2(20):='param2';

begin

up_wap(v_param1 => v_param1,v_param2 => v_param2);

end;

/

自定義函數(function)

基本語法:

create function <函數名>(<參數列表,無參時忽略>)

return <返回值類型,無長度說明>

as|is

變數聲明、初始化

begin

業務處理、邏輯代碼

return <返回的值>;

exception

異常捕獲、容錯處理

end <函數名>;

參數:in 入參

註:只有入參的類型。

在存儲過程和自定義函數中的參數的傳遞(入參和出參)不能使用%type或%rowtype匹配,不能使用空值null,但是存儲過程可以返回空值。

例:

create function uf_select_name_by_id_test(v_id in number)

return varchar2

is

v_name t_test.t_name%type;

begin

select t_name into v_name from t_test where t_id=v_id;

return v_name;

exception

when others then dbms_output.put_line('error');

end uf_select_name_by_id_test;

/

select uf_select_name_by_id_test(1) 姓名 from al;-- select調用

declare --pl/sql語句塊調用

v_name varchar2(20);

begin

v_name:=uf_select_name_by_id_test(1);

dbms_output.put_line('name = '||v_name);

end;

/

Ⅲ 存儲過程和函數的區別是什麼

存儲過程需要單獨執行;
函數可以隨處調用。

存儲過程是保存起來的可以接受和返回用戶提供的參數的 Transact-SQL 語句的集合。
可以創建一個過程供永久使用,或在一個會話中臨時使用(局部臨時過程),或在所有會話中臨時使用(全局臨時過程)。
也可以創建在 Microsoft® SQL Server™ 啟動時自動運行的存儲過程。

用戶定義函數,它是返回值的已保存的 Transact-SQL 常式。用戶定義函數不能用於執行一組修改全局資料庫狀態的操作。
與系統函數一樣,用戶定義函數可以從查詢中喚醒調用。也可以像存儲過程一樣,通過 EXECUTE 語句執行。

http://topic.csdn.net/t/20030806/16/2116067.html

http://www.cnsdn.com.cn/blog/article.asp?id=2035這個的解釋也很好。

Ⅳ Oracle 存儲過程和函數的區別

過程:函數和存儲過程的統稱。

函數:有且僅有一個返回值,可以用於SQL語句中。 如:x := get_X(),select get_X() from al,返回值為函數調用的結果。

存儲過程:無返回值。要返回結果,必須聲明為out參數。
如:sp_x(x,y,z),x和y為in類型參數,z為out/in out類型參數。

在oracle中,封裝工具還有自定義類型、包等。包可以封裝過程和函數,包頭類似JAVA中的介面,包體類似JAVA中實現介面的類。

Ⅳ SQL中存儲過程和函數的區別

本質上沒區別。只是函數有如:只能返回一個變數的限制。而存儲過程可以返回多個。而函數是可以嵌入在sql中使用的,可以在select中調用,而存儲過程不行。執行的本質都一樣。
函數限制比較多,比如不能用臨時表,只能用表變數.還有一些函數都不可用等等.而存儲過程的限制相對就比較少
1. 一般來說,存儲過程實現的功能要復雜一點,而函數的實現的功能針對性比較強。
2. 對於存儲過程來說可以返回參數,而函數只能返回值或者表對象。
3. 存儲過程一般是作為一個獨立的部分來執行(EXEC執行),而函數可以作為查詢語句的一個部分來調用(SELECT調用),由於函數可以返回一個表對象,因此它可以在查詢語句中位於FROM關鍵字的後面。
4. 當存儲過程和函數被執行的時候,SQL Manager會到procere cache中去取相應的查詢語句,如果在procere cache里沒有相應的查詢語句,SQL Manager就會對存儲過程和函數進行編譯。
Procere cache中保存的是執行計劃 (execution plan) ,當編譯好之後就執行procere cache中的execution plan,之後SQL SERVER會根據每個execution plan的實際情況來考慮是否要在cache中保存這個plan,評判的標准一個是這個execution plan可能被使用的頻率;其次是生成這個plan的代價,也就是編譯的耗時。保存在cache中的plan在下次執行時就不用再編譯了。

Ⅵ 資料庫中存儲過程和函數的區別是什麼用自己的話回答。

存儲過程:可以進行增刪查改dml操作,甚至可以進行建表等ddl操作;不能return返回值,可以用out參數返回值。用exec 過程名 的方法調用。
函數,可以return返回值;一般來說,只能進行select操作,不能進行增刪改,也不能進行ddl操作。可以通過賦值的方式調用,也可以在sql語句中使用。

Ⅶ 存儲過程和函數在什麼時候使用

這兩個都是很常用的,具體看要想要什麼功能,如求和 簡單的統計啥的 函數就能搞定,如果想實現一些具體邏輯,比如對比兩個表的結果然後取最小值表的數據,這樣比較復雜的邏輯可以通過存儲過程來實現,存儲過程只是提供了一個實現方式,在程序里也可以實現。

Ⅷ 存儲過程中如何寫函數

最好在一個包裡面定義函數,存儲過程。然後在過程裡面可以調用函數

Ⅸ SQL中存儲過程與自定義函數怎麼互相轉換

--(1):輸入一個數,返回結果為這個數加1
--存儲過程:
create procere pro_test
@input int,
@output int output
as
set @output = @input+1
go

--函數:
create function f_test(@input int)
returns int
as
begin
declare @output int
set @output = @input+1
return @output
end

--(2)輸入一個數,返回一個結果集
--存儲過程:
create procere pro_test2
@input int
as
select * from sysobjects where id = @input
go

--函數:
create function f_test2(@input int)
returns table
as
return (select * from sysobjects where id = @input)