【问题标题】:An Oracle stored procedure accept array(table) parameter in package example needed需要包示例中的 Oracle 存储过程接受数组(表)参数
【发布时间】:2012-07-11 05:18:53
【问题描述】:

这个问题是我的问题how to pass javascript array to oracle store procedure by ado parameter object的一部分

我认为把它分成 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 在模式中创建类型,但仍然得到相同的错误 所以我首先需要一个工作包示例。

【问题讨论】:

    标签: arrays oracle stored-procedures open-array-parameters


    【解决方案1】:

    您需要一个 SQL 对象才能从 SELECT 调用 TABLE 运算符。这是一个小例子(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
    

    【讨论】:

    • 非常感谢,看了你的例子table function description,我明白了大部分。但我正在调试自己的包存储过程,创建它没有错误,但调用它时出错。我是新手,我不知道如何在评论中格式化我的代码。我在下一条评论中添加了我所有的男女同校。希望你能帮助我。
    • 创建或替换类型 t_table 是 VARCHAR2(255) 的表; / CREATE OR REPLACE PACKAGE simon_pkg IS TYPE t_table IS TABLE of VARCHAR2(255); TYPE c_cursor 是 ref CURSOR; PROCEDURE f (t_input in t_table,c_out out c_cursor);结尾; / 创建或替换包体 simon_pkg IS PROCEDURE f (t_input in t_table,c_out out c_cursor) IS v_cursor c_cursor; BEGIN OPEN v_cursor FOR SELECT last_name FROM employees WHERE last_name IN (SELECT * FROM TABLE(t_input)); c_out := v_cursor;结束 f;结尾; /
    • 我将创建一个新问题。我可以在评论中格式化我的代码。
    猜你喜欢
    • 2010-10-24
    • 2015-10-11
    • 1970-01-01
    • 2019-01-11
    • 1970-01-01
    • 2019-01-20
    • 1970-01-01
    • 1970-01-01
    • 2021-09-11
    相关资源
    最近更新 更多