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

Oracle PL/SQL Създаване на таблици в курсора?

Обикновено не изпълнявате DDL (създаване, промяна, премахване) във вашата PL/SQL процедура. Ако имате нужда от таблица за съхраняване на някои временни данни, можете да създадете временни таблици за тази цел. Във вашия случай първо бих създал таблиците

CREATE GLOBAL TEMPORARY TABLE T1
  (
    col1 VARCHAR2(128),
    col2  VARCHAR2(128),
    col3 NUMBER(3) NOT NULL,
    col3 FLOAT(100)
  );

CREATE GLOBAL TEMPORARY TABLE T2 AS
SELECT * FROM other_table WHERE 1 = 0;

И тогава процедурата ще изглежда така

DECLARE
CURSOR CUR IS ...
BEGIN
       FOR rec IN CUR
       LOOP
       --Do stuff here
         END LOOP;

DELETE FROM T1;
DELETE FROM T2;
END;
/

Разбира се, таблиците няма да бъдат премахнати след това, но предполагам, че искате да използвате вашата PL/SQL процедура редовно, не само веднъж, нали?

Ако все пак искате да изпълнявате DDL във вашата процедура, тогава трябва да използвате динамичен sql (незабавно изпълнение). Въпреки това трябва да сте наясно, че DDL операциите изпълняват имплицитни ангажименти, така че вашата процедура няма да бъде единична атомна транзакция.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Не мога да вмъкна арабски знаци в базата данни на Oracle

  2. Защо не мога да направя a с x като (...) с ADODB и Oracle?

  3. Как да обърнете низ в Oracle (11g) SQL, без да използвате функцията REVERSE().

  4. Може ли %NOTFOUND да върне null след извличане?

  5. Таблица за попълване на диапазони