sql >> Databáze >  >> RDS >> Oracle

Vnořené kurzory v PL/SQL

Statické kurzory mohou přistupovat pouze ke statickým objektům. Jinými slovy, statické kurzory fungují, pouze pokud jsou v době kompilace známy všechny tabulky a sloupce.

Pokud potřebujete získat přístup k tabulce, jejíž název bude znám pouze během provádění, budete muset použít dynamické SQL . Můžete například použít REF CURSOR ve vašem případě:

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. Kontrola stavu Oracle

  2. Vypočítejte zůstatek pomocí mysql

  3. Zpracování přechodných poruch v .net core 2.1 MVC pro databázi MySQL

  4. Uložená procedura Mysql nebere jako parametr název tabulky