次のようなことをしていると思います:
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;
コンパイル時に、テーブル TEMP
、存在しません 。まだ作成されていません。存在しないため、そこから選択することはできません。したがって、SELECTも動的に実行する必要があります。この特定のでは、実際にはSELECTを実行する必要はありません。 を使用して
構文。
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;
ただし、テーブルを動的に作成する必要があるということは、通常、スキーマの設計が不適切であることを示しています。本当に必要なわけではありません。
DBMS_ASSERT
>
それを防ぐのに役立ちます。