从 Oracle 12c 函数返回多个值
Posted
技术标签:
【中文标题】从 Oracle 12c 函数返回多个值【英文标题】:Returning multiple values from an Oracle 12c function 【发布时间】:2014-11-07 23:47:30 【问题描述】:我正在 Oracle 12c 中编写一个函数(它必须是一个函数),它应该返回 3 个值,order_line.o_id
,我在函数中创建的变量 total
,以及我在函数中创建的 discounted_amount
变量在函数中创建。
我已经获得了创建 discounted_amount 变量并返回它的函数,但我不确定如何让它返回这两个值。
CREATE OR replace FUNCTION DiscountsReport (input_o_id IN REAL)
RETURN REAL
IS
output_o_id NUMBER;
total REAL;
discounted_total REAL;
percent REAL;
BEGIN
output_o_id := input_o_id;
SELECT SUM(o.ol_quantity * o.ol_price)
INTO total
FROM order_line o
WHERE o.o_id = input_o_id;
IF total > 100 THEN
percent := 0.1;
ELSIF total > 200 THEN
percent := 0.2;
ELSE
percent := 0.0;
END IF;
discounted_total := ( total * ( 1 - percent ) );
RETURN discounted_total;
END;
【问题讨论】:
一个函数只能返回一个东西。您可以创建一个包含三列的对象(或记录类型)并返回该对象或记录的实例。或者您可以将函数声明为具有多个OUT
参数,但这在架构上似乎是一个糟糕的选择。
【参考方案1】:
创建一个新类型:
CREATE OR REPLACE TYPE new_type AS OBJECT(v1 type1, v2 type2, v3 type3);
并在RETURN
之后使用它(调用结果output
- 它的类型是new_type
)。
您可以使用以下方式访问这些值:
output.v1
output.v2
output.v3
【讨论】:
当我尝试使用您提到的 create of replace 语句(使用正确的类型而不是 type1 除外)我收到错误“错误(5,1):PLS-00103:遇到符号“创建" " 在该行之后/之前添加/
,看看会发生什么......(在新行上)
啊……真尴尬。是的,就是这样,哈哈。然后如何创建该类型的实例以在运行时从函数中获取输出
类似这样的东西:RETURN new_type
,在IS
:output new_type
,在BEGIN和END之间:output.v1/2/3 := x1/2/3
和RETURN output
好的,很酷。我正在测试函数,但我不知道如何打印 new_type 的实例。有什么特别的方法可以做到吗?以上是关于从 Oracle 12c 函数返回多个值的主要内容,如果未能解决你的问题,请参考以下文章