Java 创建表后立即插入行-Oracle

Java 创建表后立即插入行-Oracle,java,oracle,Java,Oracle,我尝试在使用Java中的以下查询创建表后立即插入一组行,如下所示: DECLARE tbl_exist PLS_INTEGER; BEGIN select count(*) into tbl_exist from user_tables where table_name = 'REPRO_PRINTING_JOB_STATE'; if tbl_exist = 0 then execute immediate 'create table REPRO_PRINTING_JOB_S

我尝试在使用Java中的以下查询创建表后立即插入一组行,如下所示:

DECLARE tbl_exist  PLS_INTEGER; 
BEGIN 
select count(*) into tbl_exist  from user_tables where table_name = 'REPRO_PRINTING_JOB_STATE'; 
if tbl_exist = 0 then 
    execute immediate 'create table REPRO_PRINTING_JOB_STATE ( 
    ID varchar2(2) not null primary key, 
    NAME varchar(255) not null )'; 
    execute immediate 'insert into REPRO_PRINTING_JOB_STATE (ID, NAME) values ('QU','IN THE QUEUE')'; 
    execute immediate 'insert into REPRO_PRINTING_JOB_STATE (ID, NAME) values ('IN','INCIDENT')'; 
    execute immediate 'insert into REPRO_PRINTING_JOB_STATE (ID, NAME) values ('CM','COMPLETED')'; 
    execute immediate 'insert into REPRO_PRINTING_JOB_STATE (ID, NAME) values ('PR','PROCESSING')'; 
    execute immediate 'insert into REPRO_PRINTING_JOB_STATE (ID, NAME) values ('CN','CANCELLED')'; 
end if; 
END;

它失败了。这是因为使用了“executeimmediate”语句吗

根据您对问题的第一次迭代,它可能会失败,因为您的第一次插入是在一个完全不同的表中:

换句话说,您使用的是
PRINTING\u JOB\u STATE
,而不是
REPRO\u PRINTING\u JOB\u STATE


然而,现在您已经确认这只是您的一个简单的输入错误,您需要检查insert语句中单引号的使用情况。动态字符串被
'
字符包围这一事实意味着在字符串中使用
'
(围绕
QU
之类的内容)将有问题

您可能需要使用重复的引号来转义引号,例如:

execute immediate 'insert into XYZZY (ID, NAME) values (''QU'', ''QUEUED'')';

这是
QU
排队的
两边的两个单引号,不是双引号。

对此错误表示歉意。真正的查询实际上是正确的。感谢您的回复,那么您是否建议我改为使用“over string”?不,这似乎是一个单字符,双引号。我建议您使用两个字符,都是单引号。换句话说,使用双单引号而不是单双引号。希望澄清:-)
execute immediate 'insert into XYZZY (ID, NAME) values (''QU'', ''QUEUED'')';