Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.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
Sql insert语句的with子句标识符无效oracle_Sql_Oracle - Fatal编程技术网

Sql insert语句的with子句标识符无效oracle

Sql insert语句的with子句标识符无效oracle,sql,oracle,Sql,Oracle,如果未在“insert”语句中使用,则以下查询可以正常工作。对于“insert”语句,我得到了错误“basis.sql\u text:indvalid identifier”。我似乎不明白为什么。想法 with basis as (SELECT DISTINCT b.snap_id, c.begin_interval_time, c.end_interval_time,

如果未在“insert”语句中使用,则以下查询可以正常工作。对于“insert”语句,我得到了错误“basis.sql\u text:indvalid identifier”。我似乎不明白为什么。想法

with basis as
          (SELECT DISTINCT
                  b.snap_id,
                  c.begin_interval_time,
                  c.end_interval_time,
                  a.sql_id,
                  b.executions_delta,
                  DECODE (d.command_type,
                          1, 'Create_Table',
                          2, 'Insert',
                          3, 'Select',
                          6, 'Update',
                          7, 'Delete',
                          26, 'Lock Table',
                          35, 'Alter Database',
                          42, 'Alter Session',
                          44, 'Commit',
                          45, 'Rollback',
                          46, 'Savepoint',
                          47, 'Begin/Declare',
                          command_type) command_type,
                  object_owner,
                  NVL2 (e.index_name, e.table_name, object_name) table_name,
                  object_type,
                  DBMS_LOB.SUBSTR (d.sql_text, 256, 1) sql_text,
                  'DEVSDB1',
                  '20-JUL-12 03.55.21.000000 PM'
             FROM dba_hist_sql_plan@DEVSDB1 A,
                  dba_hist_sqlstat@DEVSDB1 b,
                  dba_hist_snapshot@DEVSDB1 C,
                  dba_hist_sqltext@DEVSDB1 d,
                  dba_indexes@DEVSDB1 E
            WHERE     a.sql_id = b.sql_id
                  AND b.sql_id = d.sql_id
                  AND b.snap_id = c.snap_id
                  AND e.index_name(+) = a.object_name
                  AND object_owner IN ('EG', 'WV90')
                  AND object_type IS NOT NULL
                  AND end_interval_time >= (SYSDATE - 1))                    
INSERT INTO sdhoste.EMSDB_USAGE@DEVSDB1  
  SELECT basis.snap_id,
        basis.begin_interval_time,
        basis.end_interval_time,
        basis.sql_id,
        NVL (basis.executions_delta, '0'),
        basis.command_type,
        basis.object_owner,
        t.table_name,
        basis.object_type,
        basis.sql_text
   FROM    dba_tables@DEVSDB1 T
        LEFT JOIN
           basis
        ON basis.table_name = t.table_name
  WHERE OWNER IN ('EG', 'WV90');

Order by在嵌套的insert查询中不起作用,请将其删除

您的查询中几乎没有错误

1.在使用decode或任何数据库函数时,在
中使用basis{}
给出正确的别名

e、 g

 DECODE (command_type,
         1, 'Create_Table',
         2, 'Insert',
         3, 'Select',
         6, 'Update',
         7, 'Delete',
         26, 'Lock Table',
         35, 'Alter Database',
         42, 'Alter Session',
         44, 'Commit',
         45, 'Rollback',
         46, 'Savepoint',
         47, 'Begin/Declare',
         command_type
        )cmdtype,

2.
basis.exec\u per\u snap
在基本块中没有定义

INSERT INTO sdhoste.EMSDB_USAGE@DEVSDB1
WITH basis AS
(basis query here)
  SELECT basis.snap_id
       , basis.begin_interval_time
       , basis.end_interval_time
       , basis.sql_id
       , NVL (basis.executions_delta, '0')
       , basis.command_type
       , basis.object_owner
       , t.table_name
       , basis.object_type
       , basis.sql_text
    FROM dba_tables@DEVSDB1 T LEFT JOIN basis 
                              ON basis.table_name = t.table_name
   WHERE OWNER IN ('EG', 'WV90'); 

不要把WITH子句放在括号内。

Move
basis
cte再插入。好的,我把顺序调换了。现在它说“缺少选择关键字”,但您仍然需要为具有函数的列提供别名。因此,我最近的更新应该添加这些别名。我找不到很好的引用来解决您的问题。在我看来,您的原始查询是正确的,但需要将CTE包装到subselect:
插入x select*from(with…
。我将其切换到“basis.executions\u delta”。有几个地方的别名是错误的
INSERT INTO sdhoste.EMSDB_USAGE@DEVSDB1
WITH basis AS
(basis query here)
  SELECT basis.snap_id
       , basis.begin_interval_time
       , basis.end_interval_time
       , basis.sql_id
       , NVL (basis.executions_delta, '0')
       , basis.command_type
       , basis.object_owner
       , t.table_name
       , basis.object_type
       , basis.sql_text
    FROM dba_tables@DEVSDB1 T LEFT JOIN basis 
                              ON basis.table_name = t.table_name
   WHERE OWNER IN ('EG', 'WV90');