sql >> Databáze >  >> RDS >> Oracle

Příkazy DDL v PL/SQL?

Předpokládám, že děláte něco jako následující:

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;

Při kompilaci tabulky TEMP , neexistuje . Ještě to nebylo vytvořeno. Protože neexistuje, nemůžete si z něj vybrat; proto také musíte provést SELECT dynamicky. V tomto konkrétním vlastně není potřeba provádět SELECT situace, i když můžete použít returning into syntaxe.

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;

Potřeba dynamicky vytvářet tabulky je však obvykle známkou špatně navrženého schématu. Nemělo by to být opravdu nutné.

Mohu doporučit René Nyffenegger's příspěvek "Proč je dynamické SQL špatné?" z důvodů, proč byste se měli dynamickému SQL vyhnout, pokud je to možné, z hlediska výkonu. Uvědomte si také, že jste mnohem otevřenější vůči SQL injection a měl by používat proměnné vazby a DBMS_ASSERT pomoci se proti tomu bránit.



  1. Chyby implementace JPA eclipse dvou cizích klíčů @IdClass

  2. Oracle Stored Procedure a vlastní datový typ

  3. Seznam všech databází z propojeného serveru na SQL Server (příklady T-SQL)

  4. SQL Odstranění řádků na základě jiné tabulky