2009-11-19 38 views
2

是否可以在SQL中執行此操作?在SQL中遷移數據時使用「WITH AS」關鍵字

如果我刪除INSERT語句,SELECT會起作用,如果我插入Oracle抱怨「缺少SELECT關鍵字」。

WITH tmpdata AS 
(
//SOME arbitrary select statement 
) 

INSERT INTO myTable (someId, somevalue, someothervalue) 
SELECT 
mysequence.nextval, 
tmpData.somevalue, 
tmpData.someothervalue, 
FROM 
tmpdata, 
sometabletojoin 
WHERE 
tmpdata.somevalue = sometabletojoin.somevaluebutintheothertable 
+0

我需要使用「CREATE TABLE something AS」語法嗎?如在這裏看到的... http://www.dba-oracle.com/t_sql99_with_clause.htm – benstpierre 2009-11-19 19:24:42

+0

我必須問這個問題 - 你正在使用()SELECT而不是{},因爲在你的問題中,正確的? – dpbradley 2009-11-19 19:53:22

+0

是的,我的意思是()而不是{} – benstpierre 2009-11-19 20:11:53

回答

3

這應該工作:

INSERT INTO myTable (someId, somevalue, someothervalue) 
WITH tmpdata AS 
(
    ... 
) 
SELECT ... 

說明:WITHSELECT屬於一起;他們是同一個查詢的一部分。因此,在您的示例中,Oracle在解析WITH子句後,在到達(意外)INSERT時抱怨「缺少SELECT」。