2013-03-06 87 views
0

在我的包的規格,我把:PLSQL嵌套表

type table_info is record (table_name varchar2(20), col_info c_info); 

在我的身體的聲明區我有:

t_info table_info := table_info(); 

我編譯時得到:

Error: PLS-00222: no function with name 'TABLE_INFO' exists in this scope

什麼是錯誤?

回答

1

你並不需要初始化記錄類型的變量:如果您使用的卻記錄嵌套表

SQL> DECLARE 
    2  TYPE typ_rec IS RECORD (a NUMBER, b NUMBER); 
    3  rec typ_rec; 
    4 BEGIN 
    5  rec.a := 1; 
    6  rec.b := 2; 
    7  dbms_output.put_line(rec.a + rec.b); 
    8 END; 
    9/

3 

PL/SQL procedure successfully completed 

,你需要初始化集合:

SQL> DECLARE 
    2  TYPE typ_rec IS RECORD (a NUMBER, b NUMBER); 
    3  TYPE typ_tab IS TABLE OF typ_rec; 
    4  tab typ_tab := typ_tab(); -- initialization 
    5 BEGIN 
    6  tab.extend; 
    7  tab(1).a := 1; 
    8  tab(1).b := 2; 
    9  dbms_output.put_line(tab(1).a + tab(1).b); 
10 END; 
11/

3 

PL/SQL procedure successfully completed 

你可以混合記錄類型和集合類型(varrays不需要初始化):

SQL> DECLARE 
    2  TYPE column_info IS RECORD(
    3  col_name VARCHAR2(20), 
    4  col_value VARCHAR2(1000) 
    5 ); 
    6  TYPE c_info IS VARRAY(10) OF column_info; 
    7  TYPE table_info IS RECORD(
    8  table_name VARCHAR2(20), 
    9  col_info c_info 
10 ); 
11  l_table table_info; 
12 BEGIN 
13  l_table.table_name := 'TABLE_NAME'; 
14  l_table.col_info.extend; 
15  l_table.col_info(1).col_name := 'COL_NAME'; 
16  l_table.col_info(1).col_value := 'COL_VALUE'; 
17 END; 
18/

PL/SQL procedure successfully completed 

閱讀:PL/SQL collection documentation

+0

正如你所看到的,這個strusture的第二個成員是一個集合類型column_info是記錄(col_name varchar2(20),col_value varchar2(1000)); 類型c_info是column_info的varray(10);當我給col_value賦值時,像這樣:t_info.col_info(1).col_name:='table_idx';我得到ORA-06531:引用未初始化的集合 – user1540471 2013-03-06 13:43:27

+0

請編輯您的問題,而不是在評論中添加信息。 – 2013-03-06 13:46:47