Java 创建表后立即插入行-Oracle
我尝试在使用Java中的以下查询创建表后立即插入一组行,如下所示: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
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'')';