【发布时间】:2021-04-05 16:29:58
【问题描述】:
这是 12c 数据库中的 PL/SQL。
我需要能够将游标记录传递给函数。问题是光标来自三个不同的表,其中一个必须使用 * 来选择该表中的所有(数百个)字段。
如果我选择不同的字段(从较小的测试表中),它可以工作,如果我从一个表中使用 select * 而没有其他字段(不涉及其他表),它可以工作,但是我找不到任何方法来使这个工作从三个表中选择(示例仅显示两个)并从其中一个表中使用 *(选择所有字段)。
我已经使用预定义的游标尝试了 FETCH INTO 和 SELECT INTO。我尝试使用带有 FOR myRecord IN (SELECT a.*, ...) 的游标记录和 创建匹配对象(因为无法在架构级别创建记录)
这些工作
myVarA a%ROWTYPE;
SELECT a.* INTO myVarA
FROM a;
SELECT a.myAfield, b.myBfield INTO myVarA, myVarB
FROM a, b;
但我需要这个来工作:
myVarA a%ROWTYPE;
SELECT a.*, b.myBfield INTO myVarA, myVarB
FROM a, b;
使用游标记录
myRecord myObjectTypeWithAllFields; -- ojbect, not record as record can't be declared at schema level
FOR myRecord IN (SELECT a.*, b.myBfield FROM a, b);
newVar := myFunction(myRecord); -- this won't work
使用 PLS-00306 调用函数失败:调用 myFunction 时参数的数量或类型错误;
该函数会做很多在许多包中都相似的繁琐工作,但也有大量独特的工作 在每个包中,所以我不能只处理函数中的整个游标循环。我真的需要一次将一行传递给函数。
有没有办法做到这一点?
【问题讨论】: