PL / SQL表功能-如何返回空结果集?

东狮

我正在尝试创建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级别上创建它。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

SQL COMMAND返回空结果集的地址

来自分类Dev

PL/SQL 如何从返回类型表的函数中获取结果

来自分类Dev

PL / SQL如何从创建或替换功能返回用户定义的记录

来自分类Dev

PL / SQL如何从创建或替换功能返回用户定义的记录

来自分类Dev

PL / SQL过程未返回预期结果

来自分类Dev

为什么SQL函数总是返回空结果集?

来自分类Dev

根据SQL Server中变量的值返回空结果集

来自分类Dev

SSIS执行SQL任务存储过程返回空结果集

来自分类Dev

我的SQL返回空结果集,怎么办?

来自分类Dev

为什么SQL函数总是返回空结果集?

来自分类Dev

ORA-06504:PL/SQL:执行时返回结果集变量的类型

来自分类Dev

获取匿名PL / SQL的结果

来自分类Dev

如何在PL / SQL Developer中调试管道功能?

来自分类Dev

从函数返回表。pl / sql

来自分类Dev

PL / SQL select返回多行

来自分类Dev

PL / SQL返回游标

来自分类Dev

如何返回空结果集

来自分类Dev

PL SQL映射结果集为多个记录

来自分类Dev

R表功能-如何删除0计数

来自分类Dev

如何动态填充列表功能

来自分类Dev

如何创建带有输入参数的 PL/SQL 存储过程以返回数据集

来自分类Dev

在PL \ SQL中设置SYS_REFCURSOR以返回数据集

来自分类Dev

如何将拆分结果推入数组PL SQL并使用ref游标返回数组数据

来自分类Dev

如何制作动态 pl/sql?

来自分类Dev

ORACLE PL-SQL如何使用功能分割字符串并返回列表

来自分类Dev

如何从匿名PL / pgSQL块返回结果?

来自分类Dev

Oracle SQL Developer PL / SQL返回数组

来自分类Dev

更高级的PL / SQL查询结果比较

来自分类Dev

EXECUTE IMMEDIATE PL / SQL块返回类型