Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Zagnieżdżone kursory w PL/SQL

Kursory statyczne mają dostęp tylko do obiektów statycznych. Innymi słowy, kursory statyczne działają tylko wtedy, gdy wszystkie tabele i kolumny są znane w czasie kompilacji.

Jeśli chcesz uzyskać dostęp do tabeli, której nazwa będzie znana tylko podczas wykonywania, musisz użyć dynamiczny SQL . Na przykład możesz użyć REF CURSOR w twoim przypadku:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jakiej struktury danych użyć, aby posortować te dane w PL/SQL?

  2. Jak połączyć się z Oracle 10g ze zdalnego klienta?

  3. Dynamicznie generuj wyrażenie lambda ze stałymi ze zmiennych

  4. Wywołanie procedury PL/SQL z rekordem zdefiniowanym przez użytkownika jako parametrem IN przy użyciu JDBC

  5. Jak używać wyrazów odrębnych i sumarycznych w wyroczni?