运行 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';
正如其他两个答案所指出的,ROWID
和 AS
都是问题。横向连接 应该 工作,但是当一个简单的 INNER JOIN
就足够时使用它似乎很尴尬。
我正在尝试在 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';
正如其他两个答案所指出的,ROWID
和 AS
都是问题。横向连接 应该 工作,但是当一个简单的 INNER JOIN
就足够时使用它似乎很尴尬。