gpt4 book ai didi

oracle - 从 Oracle 函数返回表

转载 作者:行者123 更新时间:2023-12-02 11:41:30 26 4
gpt4 key购买 nike

我在这里查看了许多解决方案来尝试解决这个问题,它们已经取得了很大的进展,但现在我陷入了一些我似乎无法克服的错误中。

我使用的是 Oracle 11g。我需要一个函数来返回记录集(表)。这是我正在使用的代码:

CREATE TYPE T_TABLE IS OBJECT
(
Field1 int
, Field2 int
);

CREATE TYPE T_TABLE_COLL IS TABLE OF T_TABLE;

CREATE OR REPLACE FUNCTION FN_MyFunction
RETURN T_TABLE_COLL
IS
BEGIN
FOR I IN (SELECT Field1, Field2 FROM Table1) LOOP
IF I.Field1 = 1 THEN
BEGIN
INSERT INTO T_TABLE
SELECT Field1, Field2
FROM Table2
WHERE Field2 = I.Field2;
END;
ELSIF I.Field1 = 2 THEN
BEGIN
INSERT INTO T_TABLE
SELECT Field1, Field2
FROM Table2
WHERE Field2 = I.Field2;
END;
END IF;
END LOOP;
RETURN T_SMRYACCT_TABLE_COLL;
END;

我从中收到的错误是:

  1. FUNCTION FN_MyFunction 行和 PL/SQL 上的语句被忽略:ORA-04044:不允许在每行 INSERT INTO T_TABLE_COLL 行上使用过程、函数、包或类型

  2. PLS-00330:RETURN 行上类型名称或子类型名称的使用无效

我对表类型做错了什么?

最佳答案

T_TABLE_COLL 是一个集合。您不能对集合使用插入

CREATE OR REPLACE FUNCTION FN_MyFunction
RETURN T_TABLE_COLL
IS
l_res_coll T_TABLE_COLL;
l_index number;
BEGIN
l_res_coll := T_TABLE_COLL();
FOR I IN (SELECT col1, col2 FROM Table1)
LOOP
IF I.col1 = 1 THEN
l_res_coll.extend;
l_index := l_res_coll.count;
l_res_coll(l_index):= T_TABLE(i.col1, i.col2);
END IF;
END LOOP;
return l_res_coll;
END;

正在运行的函数

select *
from table(FN_MyFunction())

要获取有关集合是什么以及如何使用它们的更多信息,请阅读 this

关于oracle - 从 Oracle 函数返回表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12338573/

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