2014-01-19 36 views
2

我的印象是,它不能,但我在這些2個實施例(使用Oracle XE和SQL開發)跑:子查詢可以與VALUES關鍵字一起使用嗎?

實施例1 - 執行沒有錯誤

insert into regions (region_id, region_name) 
values ((select max(region_id)+1 from regions), 'Great Britain'); 

實施例2 - 返回錯誤(如下所示)

insert into regions (region_id, region_name) 
values (select region_id, region_name from regions); 

錯誤:

Error starting at line 1 in command: 
insert into regions (region_id, region_name) 
values (select region_id, region_name from regions) 
Error at Command Line:2 Column:9 
Error report: 
SQL Error: ORA-00936: missing expression 
00936. 00000 - "missing expression" 
*Cause:  
*Action: 

所以,看起來還有更多。任何人都可以提供一個解釋,說明在什麼條件下可以/不可以包含VALUES關鍵字的子查詢?

回答

3

您需要在子括號中插入子查詢。 values的開局準則不算。它是一個列表的開始,而不是子查詢。當他們返回一行和一列時,您可以在VALUES子句中包含子查詢。

相反,不過,你可以使用這個語法:

insert into regions (region_id, region_name) 
    select max(region_id) + 1, 'Great Britain' 
    from regions; 

更重要的是將分配序列的region_id(身份證或其它數據庫中自動增量列),所以它被自動分配。然後你會這樣做:

insert into regions (region_name) 
    select 'Great Britain' 
    from dual; 
+1

明白了 - 因此,在'VALUES'子句中只允許標量子查詢? –

+1

@JeffLevine。 。 。是的,這是一個很好的說法。我簡單地避免了'VALUES'子句,因爲'insert。 。 。選擇'做它所做的一切,以及更多。 –

相關問題