Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 直接路径插入查询生成ORA-00918错误_Oracle_Ora 00918_Direct Path - Fatal编程技术网

Oracle 直接路径插入查询生成ORA-00918错误

Oracle 直接路径插入查询生成ORA-00918错误,oracle,ora-00918,direct-path,Oracle,Ora 00918,Direct Path,您能解释一下为什么在执行此查询时生成错误ORA-00918吗 INSERT INTO CLG_TEST_2 (CLG_TEST_2.record_id, CLG_TEST_2.chain_id, CLG_TEST_2.chain_n, CLG_TEST_2.contact_info) select * from ( SELECT 1, 1, 0, '2222' from dual UNION ALL SELECT 2, 2, 0, '4444' from dual UNION ALL

您能解释一下为什么在执行此查询时生成错误ORA-00918吗

INSERT INTO CLG_TEST_2 (CLG_TEST_2.record_id, CLG_TEST_2.chain_id, 

CLG_TEST_2.chain_n, 
CLG_TEST_2.contact_info)

select * from (

SELECT 1, 1, 0, '2222' from dual UNION ALL

SELECT 2, 2, 0, '4444' from dual UNION ALL

SELECT 3, 3, 0, '6666' from dual

)
第1行出错 ORA-00918:定义不明确的列


脚本在第2行终止。

我没有看到任何直接路径插入。不管怎样,试试这个

INSERT INTO CLG_TEST_2 (CLG_TEST_2.record_id, CLG_TEST_2.chain_id,     
   CLG_TEST_2.chain_n, 
   CLG_TEST_2.contact_info)    
SELECT 1, 1, 0, '2222' from dual UNION ALL
SELECT 2, 2, 0, '4444' from dual UNION ALL
SELECT 3, 3, 0, '6666' from dual

顺便说一句,为什么要使用数字中的字符串?

问题在于,您在查询上使用select*而不给列指定别名;这将有助于:

INSERT INTO CLG_TEST_2 (CLG_TEST_2.record_id,
                        CLG_TEST_2.chain_id,
                        CLG_TEST_2.chain_n,
                        CLG_TEST_2.contact_info)
select *
from (
        SELECT 1 a, 1 b, 0 c, '2222' d from dual UNION ALL
        SELECT 2  , 2  , 0  , '4444'   from dual UNION ALL
        SELECT 3  , 3  , 0  , '6666'   from dual
     )
但是,您可以简化代码:

INSERT INTO CLG_TEST_2 (record_id, chain_id, chain_n, contact_info)
    SELECT 1, 1, 0, '2222' from dual UNION ALL
    SELECT 2, 2, 0, '4444' from dual UNION ALL
    SELECT 3, 3, 0, '6666' from dual
更多关于错误原因的信息

您的代码:

SQL> INSERT INTO CLG_TEST_2 (
  2      CLG_TEST_2.record_id,
  3      CLG_TEST_2.chain_id,
  4      CLG_TEST_2.chain_n,
  5      CLG_TEST_2.contact_info)
  6  select * from (
  7      SELECT 1, 1, 0, '2222' from dual UNION ALL
  8      SELECT 2, 2, 0, '4444' from dual UNION ALL
  9      SELECT 3, 3, 0, '6666' from dual
 10  );
select * from (
       *
ERROR at line 6:
ORA-00918: column ambiguously defined
稍有不同:

SQL> INSERT INTO CLG_TEST_2 (
  2      CLG_TEST_2.record_id,
  3      CLG_TEST_2.chain_id,
  4      CLG_TEST_2.chain_n,
  5      CLG_TEST_2.contact_info)
  6  select * from (
  7      SELECT 1, 2, 0, '2222' from dual UNION ALL
  8      SELECT 2, 2, 0, '4444' from dual UNION ALL
  9      SELECT 3, 3, 0, '6666' from dual
 10  );

3 rows created.
有什么不同

在第一排,我换了衣服

SELECT 1, 1, 0, '2222' --> SELECT 1, 2, 0, '2222'
          ^                          ^
原因是:

SQL> SELECT 1, 2, 0, '2222' from dual UNION ALL
  2  SELECT 2, 2, 0, '4444' from dual UNION ALL
  3  SELECT 3, 3, 0, '6666' from dual;

         1          2          0 '222
---------- ---------- ---------- ----
         1          2          0 2222
         2          2          0 4444
         3          3          0 6666

SQL> SELECT 1, 1, 0, '2222' from dual UNION ALL
  2  SELECT 2, 2, 0, '4444' from dual UNION ALL
  3  SELECT 3, 3, 0, '6666' from dual;

         1          1          0 '222
---------- ---------- ---------- ----
         1          1          0 2222
         2          2          0 4444
         3          3          0 6666

SQL>
这里有两个别名为“1”的列,这会使外部select*混淆

另外,a是不同的东西