【问题标题】:Why the table of my function is not acceptable?为什么我的函数表不可接受?
【发布时间】:2013-05-13 05:45:07
【问题描述】:
CREATE OR REPLACE
PACKAGE PKG
AS
TYPE RESULT_T
IS
  TABLE OF VARCHAR2(3000);
FUNCTION GENERATEF
  RETURN RESULT_T ;
END PKG;
/
CREATE OR REPLACE
PACKAGE BODY PKG
AS
FUNCTION GENERATEF
  RETURN RESULT_T
IS
  i_t RESULT_T := RESULT_T();
BEGIN

  FOR TLC IN 1..3
  LOOP
    i_t.extend;
    i_t(i_t.last) := tlc;
  END LOOP;
  RETURN i_t;
END;
END PKG;
/

当我想执行“select * from table(pkg.GENERATEF);”时,系统告诉我有一个“无效的datatype”。我不确定是什么导致了问题。

【问题讨论】:

    标签: sql function sql-types


    【解决方案1】:

    这种类型RESULT_T 不是全局定义的,因此 Oracle(或任何 DBMS)无法识别这种类型,因此无法将输出转换为表格形式。

    你可以在包外指定这个类型为-

    Create or Replace TYPE RESULT_T IS
      TABLE OF VARCHAR2(3000);
    

    然后从你的包中删除这个类型的定义 -

    CREATE OR REPLACE PACKAGE Pkg AS
      /*TYPE RESULT_T
      IS
        TABLE OF VARCHAR2(3000);*/
      FUNCTION Generatef RETURN Result_t;
    END Pkg;
    /
    CREATE OR REPLACE PACKAGE BODY Pkg AS
      FUNCTION Generatef RETURN Result_t IS
        i_t Result_t := Result_t();
      BEGIN
    
        FOR Tlc IN 1 .. 3 LOOP
          i_t.EXTEND;
          i_t(i_t.LAST) := Tlc;
        END LOOP;
        RETURN i_t;
      END;
    END Pkg;
    /
    

    然后你什么时候查询 -

    select * from table(pkg.GENERATEF);你会得到想要的结果。

    【讨论】:

      猜你喜欢
      • 2011-12-28
      • 2011-01-15
      • 2022-12-11
      • 2015-08-21
      • 2020-06-25
      • 1970-01-01
      • 2020-04-12
      • 2021-09-30
      • 2021-05-02
      相关资源
      最近更新 更多