sql >> Database teknologi >  >> RDS >> Oracle

Indlejrede markører i PL/SQL

Statiske markører kan kun få adgang til statiske objekter. Med andre ord virker statiske markører kun, hvis alle tabeller og kolonner er kendt på kompileringstidspunktet.

Hvis du har brug for at få adgang til en tabel, hvis navn kun vil blive kendt under udførelsen, skal du bruge dynamisk SQL . For eksempel kan du bruge en REF CURSOR i dit tilfælde:

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. SQL Server Database Snapshots -4

  2. Måde man prøve flere SELECT'er, indtil et resultat er tilgængeligt?

  3. Hvordan indstiller jeg programmæssigt forbindelsesstrengen for Entity-Framework Code-First?

  4. MySQL INSERT-sætning i to tabeller ved hjælp af AI-værdi fra den ene i den anden