Oracle
 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да създадете PL/SQL слаб референтен курсор в базата данни на Oracle

  2. Извличане на XML елементи от XMLType Oracle

  3. Проверете дължината на колоната в XMLTable

  4. java.sql.SQLRecoverableException - свържете се отново от jdbc

  5. pl/sql функцията е извикана колко пъти?