2015-11-18 5 views
0

У меня очень запутанная проблема, которую я не понимаю. Я создаю инструкции INSERT для разных таблиц и выполняю их как пакетные в конце.JDBC/Oracle вставить NULL без подготовленного состояния

Отчетность строят так:

INSERT INTO table VALUES ('anyValue', 'anyValue', 'anyValue', ...) 

Определение таблицы не содержат только VARCHAR, есть число, поплавок и метка времени также, но это не имеет значения, потому что Oracle делает тип преобразование само по себе

нО ... Если я пытаюсь вставить NULL в чИСЛА он говорит неверный номер, но, например, в PLSQL разработчика он работает как шарм. Мне нравится примерно:

INSERT INTO table (varchar, varchar, number, ...) VALUES ('value', 'value', NULL, ...) < - не работает, но зачем?

Я использую базу данных Oracle11g с библиотекой ojdbc6.jar. Я знаю, что приведенный выше синтаксис неверен, но это просто для выяснения типов и того, что я пытаюсь вставить.

Есть ли решение этой проблемы, без с использованием PreparedStatement и SetNull(), потому что я не знаю типов полей во время выполнения

EDIT

INSERT ALL INTO comediatypeadjustments VALUES('1','TEST','1','DEL_COC_361','DEL_COC_361','100','Y','Y','N','GREEN','Y','Y','N','N','LIGHTGREEN','STD','10.65','STD','55.25','N','N',NULL,NULL,NULL,NULL,'N',NULL,NULL,NULL,NULL,'N',NULL,NULL,NULL,NULL,'Y','WHITE','STD_BOLD_UL','44.25',NULL,NULL,'N','N','N',NULL,'N',NULL,'N',NULL,'N',NULL,NULL,NULL,NULL,'Y','N') INTO comediatypeadjustments VALUES('2','TEST','2','DEL_COC_362','DEL_COC_362','100','Y','Y','N','BLUE','Y','Y','N','N','LIGHTGREEN','STD','10.65','STD','55.25','N','N',NULL,NULL,NULL,NULL,'N',NULL,NULL,NULL,NULL,'N',NULL,NULL,NULL,NULL,'Y','WHITE','STD_BOLD_UL','44.25',NULL,NULL,'N','N','N',NULL,'N',NULL,'N',NULL,'N',NULL,NULL,NULL,NULL,'Y','N') SELECT * FROM DUAL 

Exception в thread "main" java.sql.BatchUpdateException: Fehler bei Stapelverarbeitung aufgetreten: ORA-01722: неверный номер

на oracle.jdbc.driver.OracleStatement.executeBatch (OracleStatement.java:4586) на oracle.jdbc.driver.OracleStatementWrapper.executeBatch (OracleStatementWrapper.java:230) на de.draexlmaier.pcm.test. testcase.TestCaseHelper.initializeTestData (TestCaseHelper.java:285) на de.draexlmaier.pcm.test.testcase.TestCaseHelper.setTestName (TestCaseHelper.java:118) в de.draexlmaier.pcm.test.utilities.Main.main (Main.java:19)

+1

Покажите нам свою ** настоящую ** инструкцию, которая генерирует ошибку, и добавляет сообщение об ошибке _complete_, которое вы получаете. ** Редактируйте ** свой вопрос, не публикуйте код в комментариях. Если бы мне пришлось угадать: вы пытаетесь поместить значение символа в числовой столбец, но без реального запроса на него невозможно ответить. –

+0

Вы пробовали '' NULL''? – Fildor

+1

@ Филдор Я искренне надеюсь, что нет, так как это ерунда. Более уместным вопросом будет вопрос, действительно ли ОП попытался «NULL», без каких-либо кавычек. Невозможно сказать по незавершенным доказательствам, которые он опубликовал. – EJP

ответ

-1

Вы можете попробовать пустую строку '', oracle db будет рассматривать ее как null.

+0

Ты шутишь. Oracle будет обрабатывать строковый литерал как число с нулевым значением? Доказательства? – EJP

0

Поскольку вы используете Java, я думаю, что будут проблемы с отображением столбцов и вставленных значений. Сначала укажите имена столбцов, а затем введите значения, такие как

insert into <table>(column_1,column_2,column_3,...) values(val1,val2,val3...); 
Смежные вопросы