开发者社区 > 云原生 > Serverless > 正文

在PL/SQL函数中,声明和引用变量及中间结果遵循什么原则?

在PL/SQL函数中,声明和引用变量及中间结果遵循什么原则?

展开
收起
邂逅青青 2024-08-15 22:11:16 16 0
1 条回答
写回答
取消 提交回答
  • 当一个PL/SQL函数被声明为带有输出参数,输出参数可以用普通输入参数相同的方式被给定$``n名称以及可选的别名。一个输出参数实际上是一个最初为 NULL 的变量,它应当在函数的执行期间被赋值。该参数的最终值就是要被返回的东西。例如,sales-tax 例子也可以用这种方式来做:

    CREATE FUNCTION sales_tax(subtotal real, OUT tax real) IS
    BEGIN
        tax := subtotal * 0.06;
    END;
    

    当返回多个值时,输出参数最有用。一个小例子是:

    CREATE FUNCTION sum_n_product(x int, y int, OUT sum int, OUT prod int) IS
    BEGIN
        sum := x + y;
        prod := x * y;
    END;
    

    这实际上为该函数的结果创建了一个匿名记录类型。如果给定了一个RETURNS子句,它必须RETURNS record。

    声明一个PL/SQL函数的另一种方式是用RETURNS TABLE,例如:

    CREATE FUNCTION extended_sales(p_itemno int)
    RETURN TABLE(quantity int, total numeric) IS
    BEGIN
        RETURN QUERY SELECT s.quantity, s.quantity * s.price FROM sales AS s
                     WHERE s.itemno = p_itemno;
    END;
    

    这和声明一个或多个OUT参数并且指定RETURNS SETOF ``sometype完全等效。

    当PL/SQL函数的返回类型被声明为多态类型时, 一个特殊的参数 $0 已创建。它的数据类型是函数的实际返回类型,从实际输入类型推导出来。 $0被初始化为空并且不能被该函数修改,因此它能够被用来保持可能需要的返回值,不过这不是必须的。 $0也可以被给定一个别名。例如,这个函数工作在任何具有一个+操作符的数据类型上:

    CREATE FUNCTION add_three_values(v1 anyelement, v2 anyelement, v3 anyelement)
    RETURN anyelement IS
    DECLARE
        result ALIAS FOR $0;
    BEGIN
        result := v1 + v2 + v3;
        RETURN result;
    END;
    

    通过声明一个或多个输出参数为多态类型可以得到同样的效果。在这种情况下,不使用特殊的$0参数,输出参数本身就用作相同的目的。例如:

    CREATE FUNCTION add_three_values(v1 anyelement, v2 anyelement, v3 anyelement,
                                     OUT sum anyelement)
    IS
    BEGIN
        sum := v1 + v2 + v3;
    END;
    

    image.png
    参考文档https://help.aliyun.com/zh/polardb/polardb-for-oracle/statement?spm=a2c4g.11186623.0.i30

    2024-08-16 08:56:59
    赞同 9 展开评论 打赏

快速交付实现商业价值。

相关电子书

更多
SQL Server 2017 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载