Oracle
 sql >> база данни >  >> RDS >> Oracle

Динамична кръстосана заявка в Oracle

Можете да използвате динамични курсори, за да изпълните динамичен SQL, компилиран от променлива VARCHAR2:

DECLARE 
       w_sql             VARCHAR2 (4000);
       cursor_           INTEGER;
       v_f1    NUMBER (6);
       v_f2    NUMBER (2);
       v_some_value_2_filter_4    NUMBER (2);
       rc      INTEGER         DEFAULT 0;
BEGIN
        -- join as many tables as you need and construct your where clause
        w_sql :='SELECT f1, f2 from TABLE1 t1, TABLE2 t2, ... WHERE t1.f1 =' || v_some_value_2_filter_4 ; 

       -- Open your cursor
       cursor_ := DBMS_SQL.open_cursor;
       DBMS_SQL.parse (cursor_, w_sql, 1);
       DBMS_SQL.define_column (cursor_, 1, v_f1);
       DBMS_SQL.define_column (cursor_, 2, v_f2);
      -- execute your SQL
       rc := DBMS_SQL.EXECUTE (cursor_);

       WHILE DBMS_SQL.fetch_rows (cursor_) > 0
       LOOP
          -- get values from record columns
          DBMS_SQL.COLUMN_VALUE (cursor_, 1, v_f1);
          DBMS_SQL.COLUMN_VALUE (cursor_, 2, v_f2);

          -- do what you need with v_f1 and v_f2 variables

       END LOOP;

END;

Или можете да използвате незабавно изпълнение , по-лесно за изпълнение, ако просто трябва да проверите стойност или да изпълните и вмъкнете/актуализирате/изтриете заявка

    w_sql :='select f1 from table where f1 = :variable';
    execute immediate w_sql into v_f1 using 'valor1'

Ето повече информация за динамичните курсори:http://docs. oracle.com/cd/B10500_01/appdev.920/a96590/adg09dyn.htm




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ORA-28000:акаунтът е заключен Грешка става често

  2. SQL рекурсивна заявка към таблица за саморефериране (Oracle)

  3. Как да създадете индекс за динамични низове за търсене

  4. Как да преконфигурирате Oracle 10g xe на Linux

  5. Как да намерите дата от 48 работни часа, с изключение на събота, неделя и празници в Oracle