sql >> Database >  >> RDS >> Oracle

Geneste cursors in PL/SQL

Statische cursors hebben alleen toegang tot statische objecten. Met andere woorden, statische cursors werken alleen als alle tabellen en kolommen bekend zijn tijdens het compileren.

Als je een tabel wilt openen waarvan de naam alleen bekend is tijdens de uitvoering, moet je dynamische SQL . U kunt bijvoorbeeld een REF CURSOR in jouw geval:

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. Gegevens extraheren uit PostgreSQL DB zonder pg_dump te gebruiken

  2. Alleen back-up SQL-schema?

  3. MySQL-databaseontwerp met internationalisering

  4. MySQL cumulatieve som volgorde op datum