Ich nehme an, Sie tun etwas wie das Folgende:
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;
Zur Kompilierzeit wird die Tabelle TEMP
, existiert nicht . Es wurde noch nicht erstellt. Da es nicht existiert, können Sie nicht daraus auswählen; Sie müssen also auch das SELECT dynamisch durchführen. Es besteht eigentlich keine Notwendigkeit, in diesem bestimmten Fall ein SELECT durchzuführen Situation, obwohl Sie den zurückkehren können
Syntax.
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;
Die Notwendigkeit, Tabellen dynamisch zu erstellen, ist jedoch normalerweise ein Hinweis auf ein schlecht entworfenes Schema. Es sollte nicht wirklich notwendig sein.
Ich kann René Nyffeneggers
empfehlen posten Sie "Warum ist dynamisches SQL schlecht?"
aus Gründen, warum Sie aus Performance-Gesichtspunkten möglichst auf dynamisches SQL verzichten sollten. Bitte beachten Sie auch, dass Sie viel offener für sind SQL-Injection
und sollte Bind-Variablen und DBMS_ASSERT
um sich davor zu schützen.