2017-02-18 4 views
0

以下のコードを使用してテーブルを作成しようとしています。即時実行を使用してテーブルを作成しようとしています

set serveroutput on; 
DECLARE 
cursor c1 is select '''create table demo1 (demo varchar2(100))''' c2 from dual; 
testvar c1%rowtype; 
BEGIN 
open c1; 
fetch c1 into testvar; 
close c1; 
execute immediate testvar.c2; 
END; 

が、それは

を与えている

ORA-00900:無効なSQL文 ORA-06512:行で8 00900. 00000 - "無効なSQLステートメント"

は、このコードで何が間違っています。

+2

ステートメントの周りの余分な引用符を取り除きます。 –

+0

文字列リテラルと文字列変数の違いについて混乱しているようです。値にリテラルから値が割り当てられていても、変数には一重引用符は含まれません。 –

答えて

3

実際にブロックを使用して動的に処理したい場合は、これらの3行のコードを除いては何も必要ありません。デュアルから選択する必要はありません。

declare 
vsql varchar2 (100) := 'create table demo1 (demo varchar2(100))'; 
begin 
execute immediate vsql; 
end; 

注:selectからcreate tableステートメントを選択する意味はありません。あなたが他の特定の要件を持っているなら、人々がここであなたを助けることができるように言いなさい。

ところで、あなたはウィリアム

set serveroutput on; 
DECLARE 
cursor c1 is select 'create table demo1 (demo varchar2(100))' c2 from dual; 
testvar c1%rowtype; 
BEGIN 
open c1; 
fetch c1 into testvar; 
close c1; 
execute immediate testvar.c2; 
END 

で述べたように、あなたが余分な'を削除した後simplly動作します阻止。

関連する問題