0

甲骨文 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

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

4

2 回答 2

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;
/
于 2013-07-30T22:15:54.483 回答
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 小提琴

于 2013-07-30T22:10:37.220 回答