静的カーソルは静的オブジェクトにのみアクセスできます。つまり、静的カーソルは、コンパイル時にすべてのテーブルと列がわかっている場合にのみ機能します。
実行中にのみ名前がわかるテーブルにアクセスする必要がある場合は、動的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;