暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 将数组传递给pl/sql过程

askTom 2017-04-18
250

问题描述

大家好,
这里是我的简单代码:
CREATE OR REPLACE TYPE num_array IS TABLE OF NUMBER;

CREATE OR REPLACE PROCEDURE proc1 (p_array     IN     num_array)
AS
i BINARY_INTEGER :=1;
BEGIN

   FOR i IN p_array.first .. p_array.last
   LOOP
      DBMS_OUTPUT.put_line (p_array (i));
   END LOOP;
 
   DBMS_OUTPUT.put_line (p_array.COUNT);
   
END;


编译进行得很好,但我无法运行此过程!
这是我执行的代码:
DECLARE
  P_ARRAY NUM_ARRAY := NUM_ARRAY(null);
BEGIN

P_ARRAY(1) := 15;
P_ARRAY(2) := 54;
P_ARRAY(3) := 56;

  PROC1(
    P_ARRAY => P_ARRAY
  );
END;



和引发错误: ORA-06533: Subscript超出计数
我在哪里失败?

非常感谢,
盖亚

专家解答

你的程序很好。嵌套表类型与plsql关联数组 * 相似 *,但不完全相同。对于嵌套表,您需要根据需要显式增长表以保存元素。因此

SQL> CREATE OR REPLACE TYPE num_array IS TABLE OF NUMBER;
  2  /

Type created.

SQL>
SQL> DECLARE
  2    P_ARRAY NUM_ARRAY := NUM_ARRAY(null);
  3  BEGIN
  4
  5  P_ARRAY(1) := 15;
  6  P_ARRAY(2) := 54;
  7  P_ARRAY(3) := 56;
  8
  9  END;
 10  /
DECLARE
*
ERROR at line 1:
ORA-06533: Subscript beyond count
ORA-06512: at line 6


SQL>
SQL>
SQL> DECLARE
  2    P_ARRAY NUM_ARRAY := NUM_ARRAY(null);
  3  BEGIN
  4  P_ARRAY.extend(3);   -- add three elements
  5  P_ARRAY(1) := 15;
  6  P_ARRAY(2) := 54;
  7  P_ARRAY(3) := 56;
  8
  9  END;
 10  /

PL/SQL procedure successfully completed.

SQL>
SQL>
SQL> DECLARE
  2    P_ARRAY NUM_ARRAY := NUM_ARRAY(null);
  3  BEGIN
  4  P_ARRAY.extend;   -- add 1 element at a time
  5  P_ARRAY(1) := 15;
  6  P_ARRAY.extend;
  7  P_ARRAY(2) := 54;
  8  P_ARRAY.extend;
  9  P_ARRAY(3) := 56;
 10
 11  END;
 12  /

PL/SQL procedure successfully completed.



「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论