当一个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;
参考文档https://help.aliyun.com/zh/polardb/polardb-for-oracle/statement?spm=a2c4g.11186623.0.i30
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。