Вставить строки, как только таблица будет создана - Oracle - PullRequest
1 голос
/ 05 марта 2012

Я попытался вставить набор строк, как только будет создана таблица, используя следующий запрос в 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;

Не удалось. Было ли это из-за использования оператора «немедленное выполнение»?

1 Ответ

2 голосов
/ 05 марта 2012

Исходя из вашей первой итерации вопроса, он, вероятно, потерпит неудачу, потому что ваша первая вставка находится в полностью другой таблице:

execute immediate 'insert into PRINTING_JOB_STATE (ID, NAME) values ... '
execute immediate 'insert into REPRO_PRINTING_JOB_STATE (ID, NAME) values .... '

Другими словами, вы используете PRINTING_JOB_STATE вместо REPRO_PRINTING_JOB_STATE.


Однако теперь, когда вы подтвердили, что это просто опечатка с вашей стороны, вам нужно проверить использование одинарных кавычек в операторах вставки.Тот факт, что ваша динамическая строка окружена ' символами, означает, что с использованием ' внутри строки (вокруг таких вещей, как QU) будет проблематичным.

Возможно, вынеобходимо экранировать кавычки, используя дублированные кавычки, например:

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

Это две одинарные кавычки по обе стороны от QU и QUEUED, а не двойная кавычка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...