У меня есть запрос вроде

SELECT 'Insert INTO FOO(ID,NAME) values ('||id|| ',' ||NAME||');' as query
FROM FOO

Это всего лишь пример, поскольку я не могу предоставить реальный пример запроса. Итак, НЕ обращайте внимания на то, как это работает, просто верьте, что это работает так, как должно.

Вопрос:

Если в выбранных строках существуют значения NULL, он просто создает '' в запросе INSERT INTO. Итак, я получаю сообщение об ошибке при попытке выполнить запрос на вставку. Как заставить запрос SELECT возвращать NULL вместо ''?

Пример:

У меня есть

Insert INTO FOO(ID,NAME) values (12,);

Я хочу иметь

Insert INTO FOO(ID,NAME) values (12,NULL);
0
quento 5 Май 2016 в 13:40

2 ответа

Лучший ответ

Я предполагаю, что NAME - это строка, поэтому ее следует заключить в одинарные кавычки. Итак, это может быть тот запрос, который вам нужен:

SELECT 'Insert INTO FOO(ID,NAME) values (' || id || ', ''' || NAME ||''');' as query
FROM FOO;

Если проблема в id, вы можете сделать:

SELECT 'Insert INTO FOO(ID,NAME) values (' || (CASE WHEN id IS NULL THEN 'NULL' ELSE CAST(id AS VARCHAR2(255)) END) ||
       ', ''' || NAME ||''');' as query
FROM FOO;
1
Gordon Linoff 5 Май 2016 в 10:55

Попробуйте использовать CASE EXPRESSION:

SELECT 'Insert INTO FOO(ID,NAME)
values ('||CASE WHEN id = '''' then 'NULL' else id end||','|| CASE WHEN NAME = '''' THEN null else NAME end || ');' as query
FROM FOO
2
sagi 5 Май 2016 в 11:01