2009-11-19 58 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”。