确定正确的Oracle构造函数(ORA-06550 / PLS-00306错误)

时间:2013-07-30 21:23:59

标签: oracle oracle11g

Oracle 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

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

2 个答案:

答案 0 :(得分:2)

试试这个:

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;
/

答案 1 :(得分:1)

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