Arrays 需要在包示例中使用Oracle存储过程accept array(table)参数

Arrays 需要在包示例中使用Oracle存储过程accept array(table)参数,arrays,oracle,stored-procedures,open-array-parameters,Arrays,Oracle,Stored Procedures,Open Array Parameters,这个问题是我问题的一部分 我认为把它分成三个小部分会更快得到答案 对于这个问题 我知道我们可以声明表类型并使用 select last_name from employees in (select * from table(cast(my_table_type_var as my_table_type)); 但我总是从创建新包中得到错误,其中包含一个有这个错误的过程。我读到一些线程说我需要清除sqlin模式类型,因为sql和pl/slq使用的引擎不同。我尝试使用spl*plus在模式中创建类

这个问题是我问题的一部分

我认为把它分成三个小部分会更快得到答案

对于这个问题

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

select last_name 
from employees in (select * from table(cast(my_table_type_var as my_table_type));
但我总是从创建新包中得到错误,其中包含一个有这个错误的过程。我读到一些线程说我需要清除sqlin模式类型,因为sql和pl/slq使用的引擎不同。我尝试使用spl*plus在模式中创建类型,但仍然会出现相同的错误
因此,我首先需要一个工作包示例。

您需要一个SQL对象来从SELECT调用表运算符。下面是一个小示例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
您可以在此处使用函数。请注意,my 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

非常感谢你,在我读了你的例子之后,我理解了其中的大部分。但我正在调试我自己的包存储过程,创建它时没有错误,但调用它时出错。我是新来的,我不知道如何在注释中格式化我的代码。我在下一条评论中添加了我所有的coed。希望您能帮助我。创建或替换类型t_table是VARCHAR2255的table;/创建或替换simon_包装类型为t_table为VARCHAR2255的表格;类型c_游标为参考游标;程序f t_输入t_表,c_输出c_光标;完;创建或替换包体simon_pkg是t_表中t_输入的过程,c_out c_cursor是v_cursor c_cursor;开始打开v_光标,从员工中选择姓氏,其中姓氏在TABLEt_输入中选择*;c_out:=v_光标;f端;结束/我将创建一个新问题。我可以在注释中格式化我的代码。