簡體   English   中英

通過SELECT查詢插入太多列

[英]Inserting into too many columns via SELECT query

盡管這可以按預期工作:

SQL> DROP TABLE TEST1;

Table dropped.

SQL> CREATE TABLE TEST1 (COL1 INTEGER, COL2 INTEGER);

Table created.

SQL> INSERT WHEN 1=1
  2  THEN INTO TEST1 (COL1, COL2)
  3  SELECT 1, 0 FROM DUAL;

1 row created.

SQL>

我收到一個奇怪的“ ORA-00918:列定義不明確”錯誤,嘗試使用兩個以上的列:

SQL> DROP TABLE TEST1;

Table dropped.

SQL> CREATE TABLE TEST1(COL1 INTEGER, COL2 INTEGER, COL3 INTEGER);

Table created.

SQL> INSERT WHEN 1=1
  2  THEN INTO TEST1 (COL1, COL2, COL3)
  3  SELECT 1, 0, 0 FROM DUAL;
THEN INTO TEST1 (COL1, COL2, COL3)
          *
ERROR at line 2:
ORA-00918: column ambiguously defined

SQL>

為什么我在這里收到ORA-00918錯誤? 當...然后進入...選擇模式時,我可以在INSERT中選擇多少列嗎?

注意:我使用的是Oracle 11.2.0.1.0,而我嘗試在生產環境中執行的實際查詢更加復雜,並且引用了其他表(並且使用“ VALUES”是不夠的)。 這只是簡化的情況...

我沒有oracle,但似乎是問題所在是內聯查詢(SELECT FROM DUAL) 我建議給該內聯查詢中的所有字段加上別名,然后重試。

INSERT WHEN 1=1
THEN INTO TEST1 (COL1, COL2, COL3)
SELECT 1 AS c1, 0 AS c2, 0 AS c3 FROM DUAL;

使用別名:

SQL> CREATE TABLE TEST1(COL1 INTEGER, COL2 INTEGER, COL3 INTEGER);

Table created.

SQL> INSERT WHEN 1=1
  2    THEN INTO TEST1 (COL1, COL2, COL3)
  3    SELECT 1 "1", 0 "2", 0 "3" FROM DUAL;

1 row created.

出現此歧義的列錯誤的原因是,當您不提供別名時,Oracle將使用一組規則來命名每個列。 在這種情況下,第二和第三列具有相同的名稱( "0" ),因此不能由外部查詢明確引用:

SQL> SELECT 1, 0, 0 FROM DUAL;

         1          0          0
---------- ---------- ----------
         1          0          0

在執行語義分析時,Oracle不會查看數據值。

使用此東西會發生什么?

INSERT WHEN 1=1
THEN INTO TEST1 (COL1, COL2, COL3)
SELECT 1 as col1, 0 as col2, 0 as col3 FROM DUAL;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM