有没有办法在选择语句中使用varchar 2的表

时间:2019-04-25 12:11:13

标签: sql oracle plsql

我有一个存储函数,该函数返回varchar2表。 我想在选择中使用它

存储函数:-

create or replace PACKAGE TESTSTR AS 

 TYPE strings_t IS TABLE OF VARCHAR2 (4000);

FUNCTION strings
   RETURN strings_t; 

END TESTSTR;

select * from  TABLE (TESTSTR.strings())

它抛出了无效的数据类型错误

  

ORA-00902:无效的数据类型

2 个答案:

答案 0 :(得分:2)

如果要在PL / SQL之外使用列表,如您的帖子所述,则需要在数据库中定义OBJECT类型。例如,

CREATE OR REPLACE TYPE my_string AS OBJECT (val varchar2(4000));
CREATE OR REPLACE TYPE my_string_t AS TABLE OF my_string;

...,然后使用my_string_t代替您的PL / SQL strings_t类型。

只要您的字符串列表少于32768个元素,您就可以使用预定义的SYS.ODCIVARCHAR2LIST对象类型,从而省去了声明任何新对象类型的麻烦。

例如

CREATE OR REPLACE PACKAGE teststr AS
  FUNCTION strings RETURN sys.odcivarchar2list;
END teststr;

CREATE OR REPLACE PACKAGE BODY teststr AS
  FUNCTION strings RETURN sys.odcivarchar2list IS
    l_list sys.odcivarchar2list;
  BEGIN
    SELECT rownum 
    BULK COLLECT INTO l_list
    FROM DUAL
    CONNECT BY ROWNUM <= 1000;

    RETURN l_list;
  END strings;
END teststr;

SELECT * FROM table(teststr.strings);

答案 1 :(得分:0)

使用以下选项创建函数,例如     功能字符串     返回string_t     流水线是     -将类型变量声明为空     开始     -把你的逻辑放在这里     管排(out_variable);     例外     -如果有的话     结束;

使用查询找出答案:     从表中选择*(tester.strings);