暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PL/SQL详解之函数

Oracle微学堂 2018-11-02
799
1
概念

函数和存储过程非常类型,都有三种模式的参数。他们都可以被存储在数据库中,并且在快中调用。

存储过程只能作为一个PL/SQL语句调用,而函数作为表达式的一部分调用。并且它们的定义部分、可执行部分和异常处理部分都是不同的。

2
语法

CREATE [OR REPLACE] FUNCTION schema.function

    [(argument[{IN|OUT|IN OUT}]datatype[,...])]

RETURN return_datatype {IS|AS}

PL/SQL_body;


function是函数名

argument是参数名

datatype是参数的类型

return_datatype是函数返回值的类型

PL/SQL_body是函数的处理部分


参数列表时可选的。在没有参数的情况下,函数的定义与调用都没有圆括号。但返回值类型是必需的,因为函数是作为表达式的一部分调用,必须返回一个值。


CREATE OR REPLACE FUNCTION SalaryStat(

    p_Sex auths.sex%TYPE)

RETURN BOOLEAN IS

    v_MaxAuthors NUMBER;

    v_ReturnValue BOOLEAN;

BEGIN

    SELECT COUNT(author_code)

        INTO v_MaxAuthors

        FROM auths;

    IF v_MaxAuthors> 10 THEN

        v_ReturnValue:=TRUE;

    ELSE

        v_ReturnValue:=FALSE;

    END IF;

    RETURN v_ReturnValue;

END SalaryStat;


DECLARE CURSOR c_Auths IS

    SELECT distinet sex

        FROM auths;

BEGIN

    FOR v_AuthsRecord IN c_Auths LOOP

        IF SalaryStat(v_AuthsRecord.sex) THEN

            UPDATE auths

                SET salary = salary-50

                WHERE sex=v_AuthsRecord.sex;

        END IF;

    END LOOP;

END;

3
返回值

在函数内,是通过RETURN语句来返回值的。

RETURN expression;   

expression是准备返回的值。如果expression的类型和函数头中指定的类型不符,expression类型会自动转换。RETURN语句被执行后,控制权立刻返回给调用环境。

在函数体重可以有多条RETURN语句,但还只能有一条被执行。在函数结束的时候,如果没有执行RETURN语句会产生错误。

CREATE OR REPLACE FUNCTION SalaryStat(

    p_Sex auths.sex%TYPE)

RETURN VARCHAR2 IS

    v_MaxAuthors NUMBER;

BEGIN

    SELECT COUNT(author_code)

        INTO v_MaxAuthors

        FROM auths;

    IF v_MaxAuthors> 10 THEN

        RETURN v_ReturnValue;

    ELSE

        RETURN v_ReturnValue;

    END IF;

END SalaryStat;

RETURN也可以用在存储过程中。在这种情况下,它没有参数。当执行了不带参数的RETURN语句后,立刻将控制权返回到调用环境,并将OUT和IN OUT模式的形参的当前值传给实参,然后继续执行调用存储过程后的语句。

函数和存储过程的相同点:

都可以通过OUT模式的参数返回一个活多个值。

代码都有定义部分、可执行部分和异常部分。

都可以使用缺省值。

都可以用位置表示法和命名表示法调用。

一般情况下,如果只有一个返回值,使用函数;如果有多个返回值则使用存储过程。

扫描二维码关注我的微学堂

搜索刘老师微信号:Rman-2014,备注“Oracle学习与咨询”,即可添加好友;或者扫描下面二维码,关注我的“微学堂”公众号,了解最新OCP认证动态、题库及答案解析、培训机构及讲师介绍、课堂授课内容等。每天还有一篇技术文章发布哦!


最后修改时间:2019-12-20 16:31:22
文章转载自Oracle微学堂,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论