【问题标题】:Determine Correct Oracle Constructor (ORA-06550/PLS-00306 error)确定正确的 Oracle 构造函数(ORA-06550/PLS-00306 错误)
【发布时间】:2013-07-31 06:28:40
【问题描述】:

甲骨文 11g

我无法为我创建的表的记录确定正确的构造函数。我不断收到每个参数的 ORA-06550/PLS-00306 错误组合。

例如,一个示例表定义为:

CREATE TABLE TMP_EXAMPLE_TABLE
(
  ID        NUMBER(8)                 NOT NULL PRIMARY KEY,
  FK_ID     NUMBER(8)                 NOT NULL,
  SOME_DATA NUMBER(8)   
)
TABLESPACE MyTablespace;

我尝试如下实例化一条记录:

DECLARE
      TYPE example_rec_tab IS TABLE OF TMP_EXAMPLE_TABLE%ROWTYPE;
      example_recs example_rec_tab;  
  BEGIN
    example_recs.EXTEND;
    example_recs(example_recs.COUNT) := example_rec_tab(1, 2, 3);
  END;

但我明白了

ORA-06550: line 6, column 41:
PLS-00306: wrong number or types of arguments in call to 'EXAMPLE_REC_TAB'
ORA-06550: line 6, column 41:
PLS-00306: wrong number or types of arguments in call to 'EXAMPLE_REC_TAB'
ORA-06550: line 6, column 41:
PLS-00306: wrong number or types of arguments in call to 'EXAMPLE_REC_TAB'
ORA-06550: line 6, column 5:
PL/SQL: Statement ignored

我看不出这里有什么问题,更一般地说,我想知道如何为我尝试创建的任何记录确定正确的构造函数。

【问题讨论】:

    标签: oracle oracle11g


    【解决方案1】:

    试试这个:

    DECLARE 
          SUBTYPE my_row_type IS TMP_EXAMPLE_TABLE%ROWTYPE;
          TYPE example_rec_tab IS TABLE OF my_row_type;
          example_recs example_rec_tab;  
          my_row my_row_type;
      BEGIN
        example_recs := example_rec_tab();
        example_recs.EXTEND;
        SELECT 1 , 2 , 3  INTO my_row FROM dual;
        example_recs(example_recs.COUNT) := my_row ;
      END;
    /
    

    【讨论】:

      【解决方案2】:

      example_rec_tab(1, 2, 3) 正在尝试创建一个,而不是单个记录。您需要填充记录的各个字段;并且您需要在开始之前实例化表格:

      DECLARE
        TYPE example_rec_tab IS TABLE OF TMP_EXAMPLE_TABLE%ROWTYPE;
        example_recs example_rec_tab;
      BEGIN
        example_recs := example_rec_tab();
        example_recs.EXTEND;
        example_recs(example_recs.COUNT).id := 1;
        example_recs(example_recs.COUNT).id := 2;
        example_recs(example_recs.COUNT).id := 3;
      END;
      /
      

      SQL Fiddle.

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-25
        • 1970-01-01
        • 2012-07-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多