【发布时间】:2013-10-04 23:15:36
【问题描述】:
我有一个存储过程,我从记录数组(费用)中填充表,然后将这些行放入参考游标。
TYPE rctl IS REF CURSOR ;
Fees t_Fees;
type t_Fees is table of t_FeeRecord index by binary_integer;
type t_FeeRecord is record(
description varchar2(80),
amount number(12,2),
taxAmount number(12,2)
);
--populate the Fees array
INSERT into TEMPORARY_FEE(description,amount,tax) values(Fees(i).description,Fees(i).Amount,Fees(i).Tax);
OPEN rc1 FOR SELECT description,amount TEMPORARY_FEES;
这一切都很好(填充记录,插入临时表并填充引用游标)但是是否可以消除表并将我的记录数组直接传递到ref_cursor?我必须将结果以ref_cursor 的形式返回给第三方应用程序。
我想我可以尝试这样的事情。
OPEN rc1 FOR
SELECT * FROM TABLE(cast(Fees as t_FeeRecord));
但我得到了一个无效的数据类型。
【问题讨论】:
-
不适用于包中定义的类型,因为 PL/SQL 类型不能在 SQL 中使用(即使该 SQL 本身在 PL/SQL 中)。您的演员表也是错误的,
table()不对记录类型进行操作。如果t_fees在SQL 级别用create type声明,那么您可以只使用select * from table(fees)。这可行吗?