sql >> データベース >  >> RDS >> Oracle

PL/SQLのネストされたカーソル

    静的カーソルは静的オブジェクトにのみアクセスできます。つまり、静的カーソルは、コンパイル時にすべてのテーブルと列がわかっている場合にのみ機能します。

    実行中にのみ名前がわかるテーブルにアクセスする必要がある場合は、動的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;
    


    1. グループの結果はサブグループになります

    2. mysqlのビット単位のシフト

    3. MySQLの情報スキーマのクエリ:なぜですか?どのように?

    4. Workbench6.0でuseLegacyAuth=1を設定する