0

这个问题是我的问题的一部分,如何通过 ado 参数对象将 javascript 数组传递给 oracle 存储过程

我认为将它分成 3 个小部分会更快地得到答案。

对于这个问题。

我知道我们可以声明一个表类型并使用

select last_name 
from employees in (select * from table(cast(my_table_type_var as my_table_type));

但我总是从创建包含一个过程的新包中得到错误。我读到一些线程说我需要清除 sql(in schema) 类型,因为 sql 和 pl/slq 没有使用相同的引擎。我尝试通过 spl*plus 在模式中创建类型,但仍然出现相同的错误,所以我首先需要一个工作包示例。

4

1 回答 1

1

您需要一个 SQL 对象来TABLESELECT. 这是一个小例子(9iR2):

SQL> CREATE TYPE table_number is TABLE OF NUMBER;
  2  /

Type created.

SQL> SELECT * FROM TABLE(table_number(1,2,3));

COLUMN_VALUE
------------
           1
           2
           3

您可以在此处改用函数(请注意,我的 TYPE 仍然在包外定义):

SQL> CREATE OR REPLACE PACKAGE pkg AS
  2     FUNCTION f RETURN table_number;
  3  END;
  4  /

Package created.

SQL> CREATE OR REPLACE PACKAGE BODY pkg AS
  2     FUNCTION f RETURN table_number IS
  3     BEGIN
  4        RETURN table_number(4,5,6);
  5     END;
  6  END;
  7  /

Package body created.

SQL> SELECT * FROM table(pkg.f);

COLUMN_VALUE
------------
           4
           5
           6
于 2012-07-11T14:53:41.423 回答