當前位置:首頁 » 存儲配置 » oracle存儲過程及函數

oracle存儲過程及函數

發布時間: 2022-06-17 04:14:49

Ⅰ oracle怎麼導出function和procere,即函數和存儲過程

oracle中function是函數,而procere是存儲過程。
函數:

函數用於返回特定數據。執行時得找一個變數接收函數的返回值。
語法如下:

1
2
3
4
5
6
7
8
9

create or replace function function_name
(
argu1 [mode1] datatype1,
argu2 [mode2] datatype2, ........
)
return datatype
is
begin
end;

存儲過程:

存儲過程(Stored Procere)是在大型資料庫系統中,一組為了完成特定功能的sql 語句集,存儲在資料庫中,經過第一次編譯後再次調用不需要再次編譯,用戶通過指定存儲過程的名字並給出參數(如果該存儲過程帶有參數)來執行它。存儲過程是資料庫中的一個重要對象,任何一個設計良好的資料庫應用程序都應該用到存儲過程。
語法如下:

1
2
3
4
5

CREATE OR REPLACE PROCEDURE 存儲過程名
IS
BEGIN
NULL;
END;

Ⅱ 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中實現介面的類。

Ⅲ oracle資料庫中函數和存儲過程的區別

函數就是函數,跟你用的oracle 內置函數是一樣的,帶參數或者不帶參數,返回一個結果
創建語句 create or replace funtion (……)
存儲過程一邊是處理比較復雜的處理邏輯或者機械化調用等
創建語句 CREATE OR REPLACE PROCEDURE(……)
他倆是不同的東西,存儲可以調用函數,

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

Oracle中函數和存儲過程僅體現在一個地方:


  1. 函數有返回值,而存儲過程沒有返回值(當然,兩者都可以通過定義out參數來實現返回值)


其實,Oracle函數和存儲過程差別很小,對比其他資料庫,比如SqlServer:

  1. sqlserver中,函數是不能存在非select的dml語句的,換句話說,函數中,sqlserver是不能出現update、delete、insert等語句的

  2. 而Oracle中,是十分自由和寬容的,update、delete、insert等語句都可以出現

  3. 但因為Oracle的自由度,會引起其它一些問題:如果使用C#來調用Oracle的函數時,會出現因函數含有update等語句而無法調用,只能換成存儲過程或者在函數外再加一層存儲過程來實現調用。

Ⅳ oracle 怎麼執行存儲過程跟函數

調用oracle存儲過程用begin...end的方式。
基本語法:
begin
存儲過程名(參數1,參數2……);--如果無參數則省略括弧及括弧內部分end;
如,有存儲過程:
create
or
replace
procere
p_testasv_begintime
varchar2(20);v_endtime
varchar2(20);v_str
varchar2(10);begin
v_begintime:=to_char(sysdate,'yyyy-mm-dd
hh24:mi:ss');
select
'badkano'
into
v_str
from
al;
v_endtime:=to_char(sysdate,'yyyy-mm-dd
hh24:mi:ss');
dbms_output.put_line('開始時間為:'||v_begintime);
dbms_output.put_line('結束時間為:'||v_endtime);end;
執行:begin
p_test;end;

Ⅵ Oracle中存儲過程和函數的區別

定義:
存儲過程(Stored Procere )是一組為了完成特定功能的SQL 語句集,經編譯後存儲在資料庫中。用戶通過指定存儲過程的名字並給出參數(如果該存儲過程

帶有參數)來執行它。

存儲過程是資料庫中的一個重要對象,任何一個設計良好的資料庫應用程序都應該用到存儲過程。

存儲過程是由流控制和SQL 語句書寫的過程,這個過程經編譯和優化後存儲在資料庫伺服器中,應用程序使用時只要調用即可。

在ORACLE 中,若干個有聯系的過程可以組合在一起構成程序包。

優 點:

1. 存儲過程只在創造時進行編譯,以後每次執行存儲過程都不需再重新編譯,而一般SQL語句每執行一次就編譯一次,所以使用存儲過程可提高資料庫執行速度。

2.當對資料庫進行復雜操作時(如對多個表進行Update、Insert、Query、Delete時),可將此復雜操作用存儲過程封裝起來與資料庫提供的事務處理結合一起使用。

3.存儲過程可以重復使用,可減少資料庫開發人員的工作量。

4.安全性高,可設定只有某用戶才具有對指定存儲過程的使用權。

存儲過程與函數的對比

存儲過程的優缺點
優點:減少網路交互的成本。
缺點:
a、不可移植性,每種資料庫的內部編程語法都不太相同,當你的系統需要兼容多種資料庫時,最好不要用存儲過程。
b、學習成本高,DBA一般都擅長寫存儲過程,但並不是每個程序員都能寫好存儲過程,除非你的團隊有較多的開發人員熟悉寫存儲過程,否則後期系統維護會產生問題。
c、業務邏輯多處存在,採用存儲過程後也就意味著你的系統有一些業務邏輯不是在應用程序里處理,這種架構會增加一些系統維護和調試成本。
d、存儲過程和常用應用程序語言不一樣,它支持的函數及語法有可能不能滿足需求,有些邏輯就只能通過應用程序處理。
e、如果存儲過程中有復雜運算的話,會增加一些資料庫服務端的處理成本,對於集中式資料庫可能會導致系統可擴展性問題。
f、為了提高性能,資料庫會把存儲過程代碼編譯成中間運行代碼(類似於java的class文件),所以更像靜態語言。當存儲過程引用的對像(表、視圖等等)結構改變後,
存儲過程需要重新編譯才能生效,在24*7高並發應用場景,一般都是在線變更結構的,所以在變更的瞬間要同時編譯存儲過程,這可能會導致資料庫瞬間壓力上升引起故障(Oracle資料庫就存在這樣的問題)。

Ⅶ oracle中的存儲過程與函數

函數是有返回值的,存儲過程沒有。
在BODY中的話,一般函數都是SELECT語句,而存儲過程是包括DML語句的。

Ⅷ oracle存儲過程與函數題目

函數和存儲過程的區別
從參數的返回情況來看:
如果返回多個參數值最好使用存儲過程,如果只有一個返回值的話可以使用函數;
從調用情況來看:
如果在sql語句(dml或select)中調用的話一定是存儲函數或存儲的封裝函數不可以是存儲過程,但調用存儲函數的時候還有好多限制以及函數的純度等級的問題,你可以參考《oracle9ipl\sql程序設計》(機械工業出版社);
如果是在過程化語句中調用的話,就要看你要實現什麼樣的功能。函數一般情況下是用來計算並返回一個計算結果而存儲過程一般是用來完成特定的數據操作(比如修改、插入資料庫表或執行某些ddl語句等等),所以雖然他們的語法上很相似但用戶在使用他們的時候所需要完成的功能大部分情況下是不同的。

Ⅸ oracle中函數和存儲過程的區別和聯系

在oracle中,函數和存儲過程是經常使用到的,他們的語法中有很多相似的地方,但也有自己的特點。剛學完函數和存儲過程,下面來和大家分享一下自己總結的關於函數和存儲過程的區別。
一、存儲過程

1.定義

存儲過程是存儲在資料庫中提供所有用戶程序調用的子程序,定義存儲過程的關鍵字為procere。

2.創建存儲過程

create [or replace] procere 存儲過程名

[(參數1 類型,參數2 out 類型……)]

as

變數名類型;

begin

程序代碼體

end;

示例一:無參無返

create or replace procere p1
--or replace代表創建該存儲過程時,若存儲名存在,則替換原存儲過程,重新創建
--無參數列表時,不需要寫()
as
begin
dbms_output.put_line('hello world');
end;

--執行存儲過程方式1
set serveroutput on;
begin
p1();
end;
--執行存儲過程方式2
set serveroutput on;
execute p1();

示例二:有參有返

create or replace procere p2
(name in varchar2,age int,msg out varchar2)
--參數列表中,聲明變數類型時切記不能寫大小,只寫類型名即可,例如參數列表中的name變數的聲明
--參數列表中,輸入參數用in表示,輸出參數用out表示,不寫時默認為輸入參數。
------------輸入參數不能攜帶值出去,輸出參數不能攜帶值進來,當既想攜帶值進來,又想攜帶值出去,可以用in out
as
begin
msg:='姓名'||name||',年齡'||age;
--賦值時除了可以使用:=,還可以用into來實現
--上面子句等價於select '姓名'||name||',年齡'||age into msg from al;
end;
--執行存儲過程
set serveroutput on;
declare
msg varchar2(100);
begin
p2('張三',23,msg);
dbms_output.put_line(msg);
end;

示例三:參數列表中有in out參數

create or replace procere p3
(msg in out varchar2)
--當既想攜帶值進來,又想攜帶值出去,可以用in out
as
begin
dbms_output.put_line(msg); --輸出的為攜帶進來的值
msg:='我是從存儲過程中攜帶出來的值';
end;

--執行存儲過程
set serveroutput on;
declare
msg varchar2(100):='我是從攜帶進去的值';
begin
p3(msg);
dbms_output.put_line(msg);
end;

示例四:存儲過程中定義參數

create or replace procere p4
as
--存儲過程中定義的參數列表
name varchar(50);
begin
name := 'hello world';
dbms_output.put_line(name);
end;
---執行存儲過程
set serveroutput on;
execute p4();

總結:1.創建存儲過程的關鍵字為procere。

2.傳參列表中的參數可以用in,out,in out修飾,參數類型一定不能寫大小。列表中可以有多個輸入輸出參數。

3.存儲過程中定義的參數列表不需要用declare聲明,聲明參數類型時需要寫大小的一定要帶上大小。

4.as可以用is替換。

5.調用帶輸出參數的過程必須要聲明變數來接收輸出參數值。

6.執行存儲過程有兩種方式,一種是使用execute,另一種是用begin和end包住。

存儲過程雖然有很多優點,但是它卻不能使用return返回值。當需要使用return返回值時,我們可以使用函數。

二、存儲函數

1.函數與存儲過程的結構類似,但是函數必須有一個return子句,用於返回函數值。

create or replace function f1
return varchar--必須有返回值,且聲明返回值類型時不需要加大小
as
msg varchar(50);
begin
msg := 'hello world';
return msg;
end;

--執行函數方式1
select f1() from al;
--執行函數方式2
set serveroutput on;
begin
dbms_output.put_line(f1());
end;

三、存儲過程與存儲函數的區別和聯系

相同點:1.創建語法結構相似,都可以攜帶多個傳入參數和傳出參數。

2.都是一次編譯,多次執行。

不同點:1.存儲過程定義關鍵字用procere,函數定義用function。

2.存儲過程中不能用return返回值,但函數中可以,而且函數中必須有return子句。

3.執行方式略有不同,存儲過程的執行方式有兩種(1.使用execute2.使用begin和end),函數除了存儲過程的兩種方式外,還可以當做表達式使用,例如放在select中(select f1() form al;)。

總結:如果只有一個返回值,用存儲函數,否則,一般用存儲過程。

熱點內容
光貓ftp怎麼打開 發布:2025-03-28 18:21:54 瀏覽:903
安卓aid是什麼 發布:2025-03-28 18:21:01 瀏覽:787
編譯的三種結構 發布:2025-03-28 18:11:53 瀏覽:262
我的世界如何用紅石崩伺服器 發布:2025-03-28 18:09:25 瀏覽:668
iso腳本軟體 發布:2025-03-28 18:07:31 瀏覽:869
手機怎麼刪除安卓配置 發布:2025-03-28 18:04:24 瀏覽:269
php轉為數組 發布:2025-03-28 18:02:42 瀏覽:802
內存儲器層次 發布:2025-03-28 18:02:38 瀏覽:61
思域哪個配置有led 發布:2025-03-28 17:52:00 瀏覽:36
內存資料庫jdbc 發布:2025-03-28 17:41:47 瀏覽:749