gpt4 book ai didi

oracle - PL/SQL 表函数 - 如何返回空结果集?

转载 作者:行者123 更新时间:2023-12-01 21:20:06 26 4
gpt4 key购买 nike

我正在尝试创建一个 PL/SQL 表函数。我不介意它是否是 PIPELINED。我只希望它返回一个可查询的结果集。

我想从一个空的结果集开始。 (因为有可能我打算构建的结果集是空的。)

是否可以创建返回零行的 PL/SQL 表函数?

在我能找到的书籍和教程中,我只看到必须至少返回一条记录的示例。

问题示例:

CREATE OR REPLACE PACKAGE z_util AS
TYPE t_row
IS RECORD (
CATEGORY VARCHAR2( 128 CHAR )
, MEASURE NUMBER
);
TYPE t_tab
IS TABLE OF t_row;
FUNCTION f_test
RETURN t_tab;
END z_util;
/

CREATE OR REPLACE PACKAGE BODY z_util AS
FUNCTION f_test
RETURN t_tab IS
retval t_tab;
BEGIN
RETURN retval;
END;
END z_util;
/

SELECT test.*
FROM TABLE ( z_util.f_test ) test;

输出:

Error starting at line : 24 in command -
SELECT test.*
FROM TABLE ( z_util.f_test ) test
Error at Command Line : 25 Column : 14
Error report -
SQL Error: ORA-00902: invalid datatype
00902. 00000 - "invalid datatype"
*Cause:
*Action:

最佳答案

是这样的吗?

SQL> CREATE TYPE t_row AS OBJECT (id NUMBER, name VARCHAR2 (50));
2 /

Type created.

SQL> CREATE TYPE t_tab IS TABLE OF t_row;
2 /

Type created.

SQL> CREATE OR REPLACE FUNCTION f_test
2 RETURN t_tab
3 AS
4 retval t_tab;
5 BEGIN
6 RETURN retval;
7 END;
8 /

Function created.

SQL> SELECT f_test FROM DUAL;

F_TEST(ID, NAME)
--------------------------------------------------------------------


SQL>

说这太简单了并且在打包时不起作用:

SQL> CREATE OR REPLACE PACKAGE pkg_test
2 AS
3 FUNCTION f_test
4 RETURN t_tab;
5 END;
6 /

Package created.

SQL> CREATE OR REPLACE PACKAGE BODY pkg_test
2 AS
3 FUNCTION f_test
4 RETURN t_tab
5 AS
6 retval t_tab;
7 BEGIN
8 RETURN retval;
9 END f_test;
10 END pkg_test;
11 /

Package body created.

SQL> select pkg_test.f_test from dual;

F_TEST(ID, NAME)
-------------------------------------------------------


SQL>

工作正常。您是否碰巧在包中声明了类型?如果是,请尝试在 SQL 级别创建它。

关于oracle - PL/SQL 表函数 - 如何返回空结果集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63846125/

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