Oracle 尝试使用executeimmediate创建表

Oracle 尝试使用executeimmediate创建表,oracle,plsql,Oracle,Plsql,我正在尝试使用下面的代码创建一个表 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:无效

我正在尝试使用下面的代码创建一个表

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行 90000000-“无效的SQL语句”


此代码中有什么错误

如果您真的想使用
PLSQL
块动态执行,那么只需要这三行代码。无需从双重选择

declare
vsql   varchar2 (100) := 'create table demo1 (demo varchar2(100))';
begin
execute immediate vsql;
end;
注意:从select中选择CREATETABLE语句没有任何意义。如果您有任何其他具体要求,请说明,以便人们可以在这里帮助您

顺便说一句,一旦删除了William提到的额外的
,块就会简单地工作

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

)

如果您真的想使用
PLSQL
块动态执行,那么只需要这三行代码。无需从双重选择

declare
vsql   varchar2 (100) := 'create table demo1 (demo varchar2(100))';
begin
execute immediate vsql;
end;
注意:从select中选择CREATETABLE语句没有任何意义。如果您有任何其他具体要求,请说明,以便人们可以在这里帮助您

顺便说一句,一旦删除了William提到的额外的
,块就会简单地工作

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

)

去掉语句周围的额外引号。您似乎对字符串文字和字符串变量之间的区别感到困惑。变量不包含单引号,即使该值是从具有单引号(必须)的文字赋值的。请去掉语句周围的额外引号。您似乎对字符串文字和字符串变量之间的区别感到困惑。变量不包含单引号,即使该值是从具有单引号(必须)的文本赋值的。