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

2021-08-16 05:50:45 字數 3297 閱讀 4202

一、儲存過程

1.定義

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

2.建立儲存過程

create [or replace] procedure 儲存過程名

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

as變數名  型別;

begin

程式**體

end;

示例一:無參無返

create

orreplace

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

outas

begin

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

outas

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 procedure

p4as

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

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

orreplace function f1

return varchar--必須有返回值,且宣告返回值型別時不需要加大小

as msg 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;)。

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

**部落格:

Oracle儲存過程和儲存函式

參看 oracle儲存過程 儲存函式 說明 儲存過程 儲存函式都是物件。包括表 檢視 索引 序列 同義詞等也是物件。概念 指儲存在資料庫中供所有使用者程式呼叫的子程式叫儲存 過程 儲存函式。特點 完成特定功能的程式。區別 儲存函式可以通過return子句返回乙個值。建立和使用儲存過程 用create...

ORACLE的儲存過程和函式

儲存過程 儲存函式 指儲存在資料庫中供所有使用者程式呼叫的子程式 儲存過程和儲存函式的相同點 完成特定功能的程式 儲存過程和儲存函式的區別 是否用return語句返回值 儲存函式用return語句返回值,而儲存過程不能 建立和使用儲存過程 用create procedure 命令建立儲存過程和儲存函...

oracle儲存過程和儲存函式(1)

第乙個儲存過程 create orreplace procedure sayhelloworld asbegin dbms output.put line hello world end 呼叫儲存過程 1.execute exec 2.在儲存過程中呼叫 begin sayhelloworld end...