当前位置: 首页 > 知识库问答 >
问题:

通过SELECT查询插入的列太多

韦飞尘
2023-03-14
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>
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 WHEN...THEN INTO...SELECT模式中可以选择的列数是否有限制?

注意:我使用的是Oracle 11.2.0.1.0,我试图在生产中执行的实际查询更加复杂,并且引用了其他表(使用“values”是不够的)。这只是简化的情况...

共有1个答案

丁豪
2023-03-14

使用别名:

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在执行语义分析时不查看数据值。

 类似资料:
  • 问题内容: 我需要用一个查询插入多行(行数不是常数),所以我需要像这样执行查询: 我知道的唯一方法是 但我想要一些更简单的方法。 问题答案: 我构建了一个程序,该程序将多行插入到位于另一个城市的服务器上。 我发现使用此方法的速度大约是的10倍。就我而言,tup是一个包含约2000行的元组。使用此方法大约花了10秒钟: 使用此方法需要2分钟:

  • 问题内容: 我试图使用临时表开发此存储过程,但是那行不通,所以我改用表变量。我需要对表变量执行临时动态查询,然后使用该表变量执行最终查询。问题是我收到错误消息“必须声明标量变量@clms”。我假设Exec没有该表变量的作用域? 问题答案: 这是简单的最小示例。您可以使用语句。关键是要在动态查询的内部和外部声明表变量。在动态查询结束时,只需从表变量中选择并将结果集插入外部表变量中即可:

  • 我使用GraphDB存储库,希望通过Java使用SPARQLRepository执行一些查询。当我阅读这些问题时,它工作得很好。但当我有一个查询“creategraph:example”或一个insert-and-delete查询时,它就不起作用了。当我通过GraphDB UI执行查询时,它运行良好。SPARQLRepository的doku说,我需要第二个endpoint,根据GraphDB d

  • select 数据库查询select($table, $columns, $where) table [string] 表名. columns [string/array] 要查询的字段名. where (optional) [array] 查询的条件.select($table, $join, $columns, $where) table [string] 表名. join [array] 多

  • select 数据库查询select($table, $columns, $where) table [string] 表名. columns [string/array] 要查询的字段名. where (optional) [array] 查询的条件.select($table, $join, $columns, $where) table [string] 表名. join [array] 多

  • 问题内容: 在我的tempTBL上,我的linksTBL上有ID,名称,URL,猫,被插入的列TBL我的类别上的ID:名称,别名列在TBL上我在extraTBL上有:cl_id,link_id,cat_id我有:id,link_id,值 我如何执行单个查询以从tempTBL中选择isinsrted = 0的所有项目,然后将它们插入linksTBL并为插入的每个记录选择拾取ID(主要的),然后将该I