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

Oracle ORA-06531获取错误: 对未初始化集合的引用

askTom 2017-03-10
2082

问题描述

嗨,

我们正在运行下面提到的程序,

CREATE OR REPLACE PROCEDURE rec_test (p_party_number          IN     VARCHAR2,
                                      records           IN     test_TBL_TYPE,
                                      x_return_status      OUT VARCHAR2,
                                      x_return_msg         OUT VARCHAR2)
IS
    p_distributor_flag   VARCHAR2 (1) := 'N';
    p_action             VARCHAR2 (10);
    p_view_only_permit   VARCHAR2 (1);
    p_demo_permit        VARCHAR2 (1);
    p_account_num        VARCHAR2 (40);
BEGIN
    FOR i IN 1 .. records.COUNT
    LOOP
  
        p_party_num := records (i).party_num;
        p_action := records (i).act;
        p_view_only_permit := records (i).view_only;
        p_demo_permit := records (i).demo;

        xxtest_pkg.test_prc (p_number,
                             p_party_num,
                             p_per_party_num,
                             p_dist_flag,
                             p_act,
                             x_return_status,
                             x_return_msg);
        EXIT WHEN x_return_status = 'E';
    END LOOP;
EXCEPTION
    WHEN OTHERS
    THEN
        x_return_status := 'E';
        x_return_msg := SQLERRM;
END;
/

---anonymous block---------

DECLARE
    -- Declarations
    var_P_PARTY_NUMBER   VARCHAR2 (32767);
    var_V1  test_TBL_TYPE ;
    var_X_RETURN_STATUS      VARCHAR2 (32767);
    var_X_RETURN_MSG         VARCHAR2 (32767);
BEGIN
    -- Initialization
    var_P_PARTY_NUMBER := 1234567;
     var_V1 := ?

    -- Call
     xxtest_pkg.test_prc (p_number,
                             p_party_num,
                             p_per_party_num,
                             p_dist_flag,
                             p_act,
                             x_return_status,
                             x_return_msg);

    -- Transaction Control
    COMMIT;

    -- Output values, do not modify
    :5 := var_X_RETURN_STATUS;
    :6 := var_X_RETURN_MSG;
    DBMS_OUTPUT.put_line ('Status: ' || var_X_RETURN_STATUS);
    DBMS_OUTPUT.put_line ('Message: ' || var_X_RETURN_MSG);
END;

需要知道如何在var_V1变量中传递tale类型值,以便我可以成功运行匿名块。

现在我得到ORA-06531: 未初始化集合错误的引用。

请建议。

谢谢。

test_tbl_type的定义:

CREATE OR REPLACE TYPE test_tbl_type
 IS TABLE OF  test_rec_type;
/

CREATE OR REPLACE TYPE test_rec_type as object
  (
      party_num        VARCHAR2 (40),
      act     VARCHAR2 (10),
      view_only   VARCHAR2 (1),
      demo      VARCHAR2 (1)
   );
/







专家解答

您将其初始化为test_tbl_type,其中包含许多test_rec_types:

CREATE OR REPLACE TYPE test_rec_type as object
  (
      party_num        VARCHAR2 (40),
      act     VARCHAR2 (10),
      view_only   VARCHAR2 (1),
      demo      VARCHAR2 (1)
   );
/
CREATE OR REPLACE TYPE test_tbl_type
 IS TABLE OF  test_rec_type;
/

declare
  v test_tbl_type;
begin
  v := test_tbl_type (
    test_rec_type('a', 'b', 'c', 'd'),
    test_rec_type('a', 'b', 'c', 'd')
  ); 
  
  dbms_output.put_line(v(1).party_num);
end;
/

PL/SQL procedure successfully completed.
a

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

评论