Oracle Select生成插入

时间:2016-05-05 10:40:58

标签: sql oracle

我有像

这样的查询
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);

2 个答案:

答案 0 :(得分:2)

尝试使用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

答案 1 :(得分:1)

我猜测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;