Oracle儲存過程和函式的區別

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

1樓:錢包鼓鼓的

1. 返值區別,函式1返值,儲存程通引數返,或者沒

2.呼叫區別,函式查詢語句直接呼叫,儲存程必須單獨呼叫.

函式般情況用計算並返計算結儲存程般用完特定資料操作(比修改、插入資料庫表或執行某些ddl語句等等)

2樓:匿名使用者

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.傳參列表引數用inoutin out修飾引數型別定能寫列表輸入輸引數

3.儲存程定義引數列表需要用declare宣告宣告引數型別需要寫定要帶

4.as用is替換

5.呼叫帶輸引數程必須要宣告變數接收輸引數值

6.執行儲存程兩種式種使用execute另種用beginend包住

儲存程雖優點卻能使用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.使用beginend)函式除儲存程兩種式外做表示式使用例放select(select f1() form dual;)

總結:返值用儲存函式否則般用儲存程

3樓:匿名使用者

mysql教程4 mysql8運算子、函式、儲存過程及新增資料型別 19.mysql之儲存過程與自定義函式的區別 學習猿地

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

4樓:匿名使用者

一、主體不同

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

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

二、特點不同

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

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

三、功能不同

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

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

5樓:手機使用者

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

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

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

引數的返回情況來看:

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

從呼叫情況來看:

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

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

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

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

6樓:

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

儲存過程和函式的區別 10

7樓:匿名使用者

一、含義不同

1、儲存過程:儲存過程是 sql 語句和可選控制流語句的預編譯集合,以一個名稱儲存並作為一個單元處理。

2、函式:是由一個或多個 sql 語句組成的子程式,可用於封裝**以便重新使用。 函式限制比較多,如不能用臨時表,只能用表變數等

二、使用條件不同

1、儲存過程:可以在單個儲存過程中執行一系列 sql 語句。而且可以從自己的儲存過程內引用其它儲存過程,這可以簡化一系列複雜語句。

2、函式:自定義函式諸多限制,有許多語句不能使用,許多功能不能實現。函式可以直接引用返回值,用表變數返回記錄集。但是,使用者定義函式不能用於執行一組修改全域性資料庫狀態的操作。

三、執行方式不同

1、儲存過程:儲存過程可以返回引數,如記錄集,函式只能返回值或者表物件。儲存過程的引數有in,out,inout三種,儲存過程宣告時不需要返回型別。

2、函式:函式引數只有in,而函式需要描述返回型別,且函式中必須包含一個有效的return語句。

8樓:越答越離譜

1、定義不同

儲存過程:是在大型資料庫系統中,一組為了完成特定功能的sql 語句集,儲存在資料庫中,經過第一次編譯後呼叫不需要再次編譯,使用者通過指定儲存過程的名字並給出引數(如果該儲存過程帶有引數)來執行它。儲存過程是資料庫中的一個重要物件。

函式:返回型別 名字(形式參數列列)

2、分類不同

函式分為全域性函式、全域性靜態函式;在類中還可以定義建構函式、解構函式、拷貝建構函式、成員函式、友元函式、運算子過載函式、行內函數等。

儲存過程分為系統儲存過程、本地儲存過程、臨時儲存過程、遠端儲存過程、擴充套件儲存過程。

3、功能不同

函式:一個較大的程式一般應分為若干個程式塊,每一個模組用來實現一個特定的功能。所有的高階語言中都有子程式這個概念,用子程式實現模組的功能。

在c語言中,子程式的作用是由一個主函式和若干個函式構成。由主函式呼叫其他函式,其他函式也可以互相呼叫。同一個函式可以被一個或多個函式呼叫任意多次。

儲存過程:這類語言主要提供以下功能,讓使用者可以設計出符合應用需求的程式:

(1)變數說明

(2)ansi(美國國家標準化組織)相容的sql命令(如select,update….)

(3)一般流程控制命令(if…else…、while….)

(4)內部函式

oracle儲存過程遊標和動態賦值問題

隨o天 建立 create or replace procedure t ts ref cur out sys refcursor as begin open ref cur for select leixing from diaobodan end t ts 呼叫 declare s cur sy...

這個oracle自動生成編號的儲存過程為什麼執行不了

oracle 自動生成標識列可以用序列。a 建立序列 create sequence 序列名start with 起始位置 increment by增量大小 maxvalue 最大值 沒有這些nomaxvalue cycle nocycle 是否迴圈 例如 create sequence seq s...

oracle 儲存過程中in條件傳引數

樓上的可以,不過有些語法錯誤,我改改,呵呵 create or replace procedure pd1 p 1 number,p 2 number,p 3 number isv sql varchar2 4000 begin v sql select from table where id in...