2013-07-30 54 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; 
/