gpt4 book ai didi

oracle - 将 RefCursor 插入表中

转载 作者:行者123 更新时间:2023-12-02 06:30:56 25 4
gpt4 key购买 nike

我有一个简单的函数,在其中运行一个返回 RefCursor 的存储过程,并尝试使用该 RefCursor 将数据插入到临时表中。尝试这样做时出现以下错误:

SQL 错误:ORA-00947:值不足

我知道引用游标返回的值数量与临时表完全相同,正确的列名称、顺序和类型。我运行了 print RefCursor,我可以看到所有数据。代码如下:

var r refcursor;

EXEC SCHEMA.PACKAGE.SPROC(:r);

insert into SCHEMA.TEMP_TABLE
values
(r);

我必须补充一点,存储过程有一个定义为 OUT 参数的引用游标,因此它返回正确的类型。使用 print r; 打印正确的数据。

我做错了什么?

编辑:根据建议,我尝试使用对行类型变量的获取,但每当我尝试获取行时都会出现无效数字异常:

DECLARE
cur SYS_refcursor;
rec SCHEMA.TEMP_TABLE%rowtype;

begin
SCHEMA.PACKAGE.SPROC( cur );
LOOP
FETCH cur INTO rec;
EXIT WHEN cur%NOTFOUND;

INSERT INTO SCHEMA.TEMP_TABLE
VALUES rec;
END LOOP;
EXCEPTION
WHEN INVALID_NUMBER THEN
DBMS_output.put_line(rec.move_id);
end;

我添加了异常 block 来查看哪一行失败了,不用说它是第一行。我运行的存储过程返回来自多个表的选择查询的引用游标。临时表定义为引用游标列及其类型的精确副本。不确定是什么原因导致异常。

最佳答案

您无法从refcursor 插入到表中。您可以编写一个从游标中获取数据并将其插入表中的过程。如果 schema.package.sproc 返回 temp_table%rowtype 的引用游标,您可以执行类似的操作

DECLARE
cur sys_refcursor;
rec schema.temp_table%rowtype;
BEGIN
schema.package.sproc( cur );
LOOP
FETCH cur INTO rec;
EXIT WHEN cur%NOTFOUND;

INSERT INTO schema.temp_table
VALUES rec;
END LOOP;
END;

关于oracle - 将 RefCursor 插入表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13482554/

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