天天看點

遊标中嵌套遊标 oracle,oracle – PL / SQL中的嵌套遊标

靜态遊标隻能通路靜态對象.換句話說,隻有在編譯時知道所有表和列時,靜态遊标才起作用.

如果您需要通路其名稱僅在執行期間已知的表,則必須使用dynamic SQL.例如,您可以在您的情況下使用REF CURSOR:

DECLARE

var_table_name VARCHAR2(30);

var_dimension_key VARCHAR2(30);

cur_dimension_key SYS_REFCURSOR;

BEGIN

FOR cur_all_dim IN (SELECT table_name

FROM dba_tables

WHERE dba_tables.tablespace_name = 'USERS'

AND dba_tables.owner = 'DWH_CORE'

AND UPPER(dba_tables.table_name) LIKE ('%DIM%%')

AND UPPER(dba_tables.table_name) NOT LIKE ('%TEMP%')

AND UPPER(dba_tables.table_name) NOT LIKE ('%DEBUG%')

AND UPPER(dba_tables.table_name) NOT LIKE ('%LOG%'))

LOOP

OPEN cur_dimension_key

FOR 'SELECT dimention_key

FROM ' || cur_all_dim.table_name;

LOOP

FETCH cur_dimensions_key INTO var_dimension_key;

EXIT WHEN cur_dimensions_key%NOTFOUND;

dbms_output.put_line(cur_all_dim.table_name);

dbms_output.put_line(var_dimension_key);

END LOOP;

CLOSE cur_dimension_key;

END LOOP;

END;