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

Instrukcje DDL w PL/SQL?

Zakładam, że robisz coś takiego:

declare
   v_temp varchar2(20);
begin
   execute immediate 'create table temp(name varchar(20))';
   execute immediate 'insert into temp values(''XYZ'')';

   select name into v_name from temp;
end;

W czasie kompilacji tabela TEMP , nie istnieje . Nie został jeszcze utworzony. Ponieważ nie istnieje, nie możesz z niego wybierać; dlatego musisz również dynamicznie wykonywać SELECT. W tym szczególnie nie ma potrzeby wykonywania SELECT jednak możesz użyć returning into składnia.

declare
   v_temp varchar2(20)
begin
   execute immediate 'create table temp(name varchar2(20))';
   execute immediate 'insert into temp 
                      values(''XYZ'')
                      returning name into :1'
                returning into v_temp;
end;

Jednak potrzeba dynamicznego tworzenia tabel zwykle wskazuje na źle zaprojektowany schemat. To naprawdę nie powinno być konieczne.

Mogę polecić René Nyffeneggera post "Dlaczego dynamiczny SQL jest zły?" z powodów, dla których powinieneś unikać dynamicznego SQL, jeśli to w ogóle możliwe, z punktu widzenia wydajności. Należy również pamiętać, że jesteś znacznie bardziej otwarty na Wstrzyknięcie SQL i powinien używać zmiennych wiązania i DBMS_ASSERT aby pomóc się przed tym chronić.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nie można uzyskać dostępu do serwera Oracle 12c ze zdalnego komputera za pomocą dostawcy .Net

  2. Wyzwalacz SQL dla widoku

  3. Ikony programistów SQL

  4. Jak sklonować użytkownika w Oracle

  5. Próbuję uzyskać rzeczywiste dane, które powodują wyjątek