运行 SQL 带有 ROWID 的 Oracle 命令时出现问题

problem when running SQL Oracle command with ROWID

我正在尝试在 TOAD 中执行以下操作,select,但是出现错误:ORA-00933 SQL 命令未关闭命名

SELECT ROWID,
       ECM_WF_PROC.IDWF_PROC, 
       ECM_WF_PROC.PROCESSO, 
       TD_DADOS_ETAPAS.SITUACAO, 
       TD_DADOS_ETAPAS.DATAINICIAL, 
       TD_DADOS_ETAPAS.DATAFINAL, 
       TD_DADOS_ETAPAS.DATAPREVISTA
  FROM ECM_WF_PROC AS ECM_WF_PROC_ETAPAS,
  LATERAL(SELECT ECM_WF_PROC_ETAPAS.SITUACAO AS SITUACAO, 
                 ECM_WF_PROC_ETAPAS.DATAINICIAL AS DATAINICIAL, 
                 ECM_WF_PROC_ETAPAS.DATAFINAL AS DATAFINAL, 
                 ECM_WF_PROC_ETAPAS.DATAPREVISTA AS DATAPREVISTA
            FROM ECM_WF_PROC_ETAPAS AS ECM_WF_PROC_ETAPAS
           WHERE ECM_WF_PROC_ETAPAS.IDEMPRESA = ECM_WF_PROC.IDEMPRESA AND
                 ECM_WF_PROC_ETAPAS.IDWF_PROC = ECM_WF_PROC.IDWF_PROC) AS TD_DADOS_ETAPAS
WHERE ECM_WF_PROC.PROCESSO = '177920';

https://i.imgur.com/B54ZK2A.png

你能帮我解决一下吗?

ROWID 指的是某行的地址,因此您应该提供 table 的名称,以便 Oracle 理解 FROM 中的多个 table ] table 应该为 ROWID.

考虑的子句

使用ECM_WF_PROC_ETAPAS.ROWID

此特定问题 (ORA-00933) 的原因是 from 子句中的 as 关键字。与其他一些数据库不同,在 Oracle 中它会引发错误。例如:

SQL> select *
  2  from dept as d
  3  where deptno = 10;
from dept as d
          *
ERROR at line 2:
ORA-00933: SQL command not properly ended

看看 SQL*Plus 如何很好地显示错误发生的位置?您的 TOAD GUI 也做了同样的事情 - 将 as 涂成蓝色。

没有as:

SQL> select *
  2  from dept d
  3  where deptno = 10;

    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK

SQL>

在你的情况下,你会修改

FROM ECM_WF_PROC AS ECM_WF_PROC_ETAPAS
...
               ) AS TD_DADOS_ETAPAS

FROM ECM_WF_PROC    ECM_WF_PROC_ETAPAS
...
               )    TD_DADOS_ETAPAS

我很好奇你为什么使用横向连接,而简单的内部连接似乎就足够了:

SELECT ECM_WF_PROC.ROWID,
       ECM_WF_PROC.IDWF_PROC, 
       ECM_WF_PROC.PROCESSO, 
       TD_DADOS_ETAPAS.SITUACAO, 
       TD_DADOS_ETAPAS.DATAINICIAL, 
       TD_DADOS_ETAPAS.DATAFINAL, 
       TD_DADOS_ETAPAS.DATAPREVISTA
FROM ECM_WF_PROC ECM_WF_PROC_ETAPAS JOIN
     FROM ECM_WF_PROC_ETAPAS TD_DADOS_ETAPAS
     ON TD_DADOS_ETAPAS.IDEMPRESA = ECM_WF_PROC.IDEMPRESA AND
        TD_DADOS_ETAPAS.IDWF_PROC = ECM_WF_PROC.IDWF_PROC
WHERE ECM_WF_PROC.PROCESSO = '177920';

正如其他两个答案所指出的,ROWIDAS 都是问题。横向连接 应该 工作,但是当一个简单的 INNER JOIN 就足够时使用它似乎很尴尬。