2013-07-30 53 views
0

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

我无法确定正确的构造函数我已经创建了一个表的记录。我不断得到每个参数的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 

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

回答

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

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