gpt4 book ai didi

oracle - 可以在过程之间传递 RECORD 类型的 Oracle 变量而过程不知道其实际类型吗?

转载 作者:行者123 更新时间:2023-12-02 04:18:41 25 4
gpt4 key购买 nike

使用 Oracle 10g PL/SQL。我试图找到一种方法来传递自定义定义的 RECORD 类型,而无需程序知道它的真实类型。听起来像是 SYS.ANYDATA 的工作,但看起来 Oracle 不支持包装 RECORD 类型。例如:

DECLARE
TYPE t_rec IS RECORD (id number);
v_rec t_rec;
v_ad SYS.ANYDATA;
BEGIN
v_rec.id := 1;
v_ad := SYS.ANYDATA.CONVERTOBJECT(v_rec);
END;

失败并出现错误:
v_ad := SYS.ANYDATA.CONVERTOBJECT(v_rec);
*
ERROR at line 7:
ORA-06550: line 7, column 11:
PLS-00306: wrong number or types of arguments in call to 'CONVERTOBJECT'
ORA-06550: line 7, column 3:
PL/SQL: Statement ignored

很明显,convertobject 不希望有记录,但我在 http://download-west.oracle.com/docs/cd/B19306_01/appdev.102/b14258/t_anydat.htm 上看不到任何其他候选人任何一个。

最终,我正在寻找某种将不同 RECORD 类型存储在同一个变量中的方法。我还想避免 Oracle 对象类型(在包之外定义的顶级类型),因为它们有自己的问题。

谢谢。

最佳答案

This section PL/SQL User's Guide and Reference 将表明您不能直接在此处执行您想要执行的操作 - PL/SQL 想要尝试在运行时转换参数。您可能想看看是否可以使 REFCURSOR 工作。简单的例子:

CREATE OR REPLACE PROCEDURE TheTest AS

v_cursor SYS_REFCURSOR;
v_v1 NUMBER;
v_v2 NUMBER;
v_v3 NUMBER;

PROCEDURE getRS(pr OUT SYS_REFCURSOR) IS
BEGIN
OPEN pr FOR SELECT 1,2,3 FROM dual;
END;

BEGIN
getRS(v_cursor);
FETCH v_cursor INTO v_v1, v_v2, v_v3;
dbms_output.put_line(v_v1||','||v_v2||','||v_v3);
CLOSE v_cursor;
END;

然后,您可以将光标变量引用传递给您的心脏内容。

HTH。

编辑:

根据您需要处理的记录类型的数量,另一种选择是使用各种记录类型重载相同的处理程序过程。

关于oracle - 可以在过程之间传递 RECORD 类型的 Oracle 变量而过程不知道其实际类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1076363/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com