2016-05-05 34 views
0

我有查詢像甲骨文選擇其中產生插入

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

不知道它會工作,但盡力'值('|| ID || '','|| NULLIF(NAME,NULL)||');'' – Mihai

+0

@mihai同樣的結果( – quento

回答

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; 
+0

是的,第二個技巧適用於我。謝謝! – quento

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 
+0

,對於所有不是VARCHAR的列: 發現一個非數字字符,其中數字爲 – quento

+0

,我不知道你的表結構,只有字符串可以是空字符串,所以在這個列上只使用case!@GrigoriyDidorenko – sagi