必威体育Betway必威体育官网
当前位置:首页 > IT技术

子程序

时间:2019-10-15 04:42:13来源:IT技术作者:seo实验室小编阅读:88次「手机版」
 

子程序

oracle为了方便管理这些代码块,往往会将其封装到一个特定的结构体之中,这样的结构体在Oracle之中就被称为子程序

在Oracle中子程序分为两种:过程、函数

过程定义语法

CREATE [OR REPLACE] PROCEDURE 过程名称([参数名称 [参数模式]NOCOPY 数据类型 [,参数名称 [参数模式] NOCOPY 数据类型 , ….]])[AUTHID [defineR | CURRENT_USER]]

AS | IS

[pragma AUTONOMOUS_transaction ;]

声明部分 ;

BEGIN

程序部分 ;

EXCEPTION

异常处理 ;

END;

/

函数定义语法:

CREATE [OR REPLACE] FUNCTION 函数名([参数 , [参数 , …]])

RETURN 返回值类型

[AUTHID {DEFINER | CURRENT_USER}]

AS | IS

[PRAGMA AUTONOMOUS_TRANSACTION ;]

声明部分 ;

BEGIN

程序部分 ;

[RETURN 返回值 ;]

[EXCEPTION

异常处理]

END [函数名] ;

/

参数模式

在定义子程序时往往需要接收传递的参数,这样对于形式参数的定义就分为了三类:IN、OUT和IN OUT模式,此三类形式定义如下:

IN (默认,数值传递):在子程序之中所做的修改不会影响原始参数内容

OUT (空进带值出):不带任何数值传到子程序之中,子程序可以通过此变量将数值返回给调用处;

IN OUT (地址传递):可以将值传到子程序之中,同时也会将子程序之中对变量的修改返回到调用处。

in模式

过程使用IN参数模式

CREATE OR REPLACE PROCEDURE in_proc(p_paramA IN VARCHAR2, – 明确定义IN参数模式p_paramB VARCHAR2) – 默认的参数模式为IN

AS

BEGIN

DBMS_OUTPUT.put_line('执行in_proc()过程:p_paramA = ’ || p_paramA) ;

DBMS_OUTPUT.put_line('执行in_proc()过程:p_paramB = ’ || p_paramB) ;

END ;

/

DECLARE

v_titleA VARCHAR2(50) := ‘OCP课程’;

v_titleB VARCHAR2(50) := ‘OCM课程’ ;

BEGIN

in_proc(v_titleA , v_titleB) ;

END ;

/

函数使用IN参数模式

CREATE OR REPLACE FUNCTION in_fun(p_paramA IN VARCHAR2 ,p_paramB VARCHAR2 DEFAULT ‘Oracle实战课程’)RETURN VARCHAR2

AS

BEGIN

RETURN ‘mysql实战课程’ ;

END;

/

DECLARE

v_titleA VARCHAR2(50) := ‘OCM课程’;

v_return VARCHAR2(50) ;

BEGIN

v_return := in_fun(v_titleA) ;

DBMS_OUTPUT.put_line('in_fun()函数返回值:v_return = ’ || v_return) ;

END ;

/

OUT模式

函数使用out参数模式

CREATE OR REPLACE FUNCTION out_fun(p_paramA OUT VARCHAR2, – OUT参数模式

p_paramB OUT VARCHAR2) – OUT参数模式 RETURN VARCHAR2

AS

BEGIN

p_paramA := ‘OCP考试’ ; – 此值将返回给实参

p_paramB := ‘OCM考试’ ; – 此值将返回给实参

RETURN ‘Oracle实战课程’ ; – 返回数据

END ;

declare

v_a varchar2(20);

v_b varchar2(20);

v_rul varchar2(20);

begin

v_a:=‘a’;

v_b:=‘b’;

v_rul:=out_fun(v_a,v_b);

dbms_output.put_line(v_a||v_b||v_rul);

end;

过程使用out参数模式

CREATE OR REPLACE PROCEDURE out_proc(p_paramA OUT VARCHAR2, – OUT参数模式p_paramB OUT VARCHAR2) – OUT参数模式

AS

BEGIN

DBMS_OUTPUT.put_line('执行in_proc()过程:p_paramA = ’ || p_paramA) ;

DBMS_OUTPUT.put_line('执行in_proc()过程:p_paramB = ’ || p_paramB) ;

p_paramA := ‘OCP考试’ ; – 此值将返回给实参

p_paramB := ‘OCM考试’ ;-- 此值将返回给实参

END ;

/

declare

v_a varchar2(20);

v_b varchar2(20);

begin

v_a:=‘a’;

v_b:=‘b’;

out_proc(v_a,v_b);

end;

过程使用in out参数模式

CREATE OR REPLACE PROCEDURE inout_proc(p_paramA IN OUT VARCHAR2, – IN OUT参数模式p_paramB IN OUT VARCHAR2 ) – IN OUT参数模式

AS

BEGIN

DBMS_OUTPUT.put_line('执行inout_proc()过程:p_paramA = ’ || p_paramA) ;

DBMS_OUTPUT.put_line('执行inout_proc()过程:p_paramB = ’ || p_paramB) ;

p_paramA := ‘OCP课程’ ; – 此值将返回给实参

p_paramB := ‘OCM课程’ ; – 此值将返回给实参

END ;

/

declare

v_titleA VARCHAR2(50) := ‘Oracle实战课程’;

v_titleB VARCHAR2(50) := ‘MySQL实战课程’ ;

BEGIN

inout_proc(v_titleA , v_titleB) ;

DBMS_OUTPUT.put_line('调用inout_proc()过程之后变量内容:v_titleA = ’ || v_titleA) ;

DBMS_OUTPUT.put_line('调用inout_proc()过程之后变量内容:v_titleB = ’ || v_titleB) ;

END ;

/

in表示传入参数有效果

out表示传入参数无效

in out既可以传入也可以穿出参数

在输出时

过程:设置的变量与参数数量一致

例如:

在这里插入图片描述

函数:设置的变量与函数连接起来

例如:

CREATE OR REPLACE FUNCTION get_salary_fun(p_eno emp.empno%TYPE)

RETURN NUMBER

AS

v_salary emp.sal%TYPE ;

BEGIN

SELECT sal + nvl(comm,0) INTO v_salary FROM emp WHERE empno=p_eno ;

RETURN v_salary ;

END;

/

DECLARE

v_salary NUMBER ;

BEGIN

v_salary := get_salary_fun(7369) ;

DBMS_OUTPUT.put_line(‘雇员7369的工资为:’ || v_salary) ;

END ;

/

相关阅读

分享到:

栏目导航

推荐阅读

热门阅读