Oracle中儲存過程,過程和函式有什麼區別和聯絡

時間 2021-08-14 09:12:54

1樓:匿名使用者

聯絡:1.建立語法結構相似,都可以攜帶多個傳入引數和傳出引數。

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

區別:1.儲存過程定義關鍵字用procedure,函式定義用function。

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

3.執行方式略有不同,儲存過程的執行方式有兩種(1.使用execute2.

使用begin和end),函式除了儲存過程的兩種方式外,還可以當作表示式使用,例如放在select中(select f1() form dual;)。

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

oracle函式和儲存過程有什麼區別

2樓:匿名使用者

一、主體不同

1、函式:當需要分析資料清單中的數值是否符合特定條件時,使用資料庫工作表函式。

2、儲存過程:是在大型資料庫系統中,一組為了完成特定功能的sql 語句集,儲存在資料庫中,一次編譯後永久有效。

二、特點不同

1、函式:只能返回乙個變數,可以嵌入sql中和儲存過程中使用。

2、儲存過程:使用者通過指定儲存過程的名字並給出引數(如果該儲存過程帶有引數)來執行。儲存過程是資料庫中的乙個重要物件。在資料量特別龐大的情況下利用儲存過程能達到倍速的效率提公升。

三、功能不同

1、函式:不能用臨時表,只能用表變數,函式不能執行一組修改全域性資料庫狀態的操作。可以作為查詢語句的乙個部分來呼叫,由於函式可以返回乙個表物件,所以在查詢中位於from關鍵字後面。

2、儲存過程:儲存過程需要讓sql的query可以執行,儲存過程可以返回引數,如記錄集。sql語句中不可以含有儲存過程。

3樓:手機使用者

1. 返回值的區別,函式有1個返回值,而儲存過程是通過引數返回的,可以有多個或者沒有

2.呼叫的區別,函式可以在查詢語句中直接呼叫,而儲存過程必須單獨呼叫.

函式一般情況下是用來計算並返回乙個計算結果而儲存過程一般是用來完成特定的資料操作(比如修改、插入資料庫表或執行某些ddl語句等等)

引數的返回情況來看:

如果返回多個引數值最好使用儲存過程,如果只有乙個返回值的話可以使用函式;

從呼叫情況來看:

如果在sql語句(dml或select)中呼叫的話一定是儲存函式或儲存的封裝函式不可以是儲存過程,但呼叫儲存函式的時候還有好多限制以及函式的純度等級的問題.

oracle函式和儲存過程最大的區別就在於,函式必須帶上乙個return返回值,後面跟的是返回值的型別,而儲存過程可以不帶任何返回值。

另外,儲存過程和函式同樣支援in,out,in out這三種型別的引數,對應的是分別指明輸入性的引數、輸出型的引數、輸入輸出型的引數。也就是說如果我們需要返回多個值,除了可以使用儲存過程來實現之外,也可以用函式來實現,方法是你將其中乙個用return來返回,其他就指明該資料為out引數就可以了。

oracle中儲存過程和函式都可以返回值,但是函式必須要返回值,並一般只返回乙個值,而儲存過程則沒有這個限制。從一般應用上來看,如果不需要返回值或者需要多個返回值,使用儲存過程,如果只用乙個返回值,就使用函式,從一般程式設計師的習慣上來看,這樣更符合思維。

4樓:

最簡單的解釋是 , 函式返回值,而儲存過程不返回。

oracle中函式和儲存過程的區別和聯絡

5樓:匿名使用者

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

一、儲存過程

1.定義

儲存過程是儲存在資料庫中提供所有使用者程式呼叫的子程式,定義儲存過程的關鍵字為procedure。

2.建立儲存過程

create [or replace] procedure 儲存過程名

[(引數1 型別,引數2 out 型別……)]

as變數名  型別;

begin

程式**體

end;

示例一:無參無返

create or replace procedure p1

--or replace代表建立該儲存過程時,若儲存名存在,則替換原儲存過程,重新建立

--無引數列表時,不需要寫()

asbegin

dbms_output.put_line('hello world');

end;

--執行儲存過程方式1

set serveroutput on;

begin

p1();

end;

--執行儲存過程方式2

set serveroutput on;

execute p1();

示例二:有參有返

create or replace procedure p2

(name in varchar2,age int,msg out varchar2)

--引數列表中,宣告變數型別時切記不能寫大小,只寫型別名即可,例如引數列表中的name變數的宣告

--引數列表中,輸入引數用in表示,輸出引數用out表示,不寫時預設為輸入引數。

------------輸入引數不能攜帶值出去,輸出引數不能攜帶值進來,當既想攜帶值進來,又想攜帶值出去,可以用in out

asbegin

msg:='姓名'||name||',年齡'||age;

--賦值時除了可以使用:=,還可以用into來實現

--上面子句等價於select '姓名'||name||',年齡'||age into msg from dual;

end;

--執行儲存過程

set serveroutput on;

declare

msg varchar2(100);

begin

p2('張三',23,msg);

dbms_output.put_line(msg);

end;

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

create or replace procedure p3

(msg in out varchar2)

--當既想攜帶值進來,又想攜帶值出去,可以用in out

asbegin

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 procedure p4

as--儲存過程中定義的引數列表

name varchar(50);

begin

name := 'hello world';

dbms_output.put_line(name);

end;

---執行儲存過程

set serveroutput on;

execute p4();

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

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--必須有返回值,且宣告返回值型別時不需要加大小

asmsg varchar(50);

begin

msg := 'hello world';

return msg;

end;

--執行函式方式1

select f1() from dual;

--執行函式方式2

set serveroutput on;

begin

dbms_output.put_line(f1());

end;

三、儲存過程與儲存函式的區別和聯絡

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

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

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

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

3.執行方式略有不同,儲存過程的執行方式有兩種(1.使用execute2.

使用begin和end),函式除了儲存過程的兩種方式外,還可以當做表示式使用,例如放在select中(select f1() form dual;)。

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

簡述儲存過程和函式的區別,簡述儲存過程和函式在語法上的區別?

mysql教程4 mysql8運算子 函式 儲存過程及新增資料型別 19.mysql之儲存過程與自定義函式的區別 學習猿地 過程是編制程式時定義的乙個語句序列,用來完成某種指定的操作。過程說明是由過程首和分程式 說明部分和過程體 組成,過程定義如下 過程定義 procedure 過程識別符號 形式參...

oracle儲存過程和函式的區別

例子 sql view plain copy print?建立過程 create or replace procedure add emailinfo namee email info.fullname type address email info.email address type isbeg...

SQL語句中儲存過程和呼叫,oracle SQL語句中怎麼樣呼叫儲存過程?

這些是c 的語句,訪問的是windows窗體中的控制項,而儲存過程是不能訪問窗體中的控制項的。你這個要求是無法實現的。oracle sql語句中怎麼樣呼叫儲存過程?如何在select語句中呼叫儲存過程的結果 sql server中儲存過程的返回值不是通過return語句返回的 return語句是在使...