SQL CREATE VIEW错误

时间:2014-12-31 09:10:08

标签: sql oracle

我只是想知道为什么我的View无效(ORA-00905:缺少关键字)。 谢谢你的帮助

CREATE OR REPLACE VIEW Tickets_RAFAL
AS
SELECT t.ticket_id,
 t.subject,
 t.descr description,
 t.assigned_to,
 t.created_on,
 t.created_by,
 t.closed_on,
 td.number_of_details
FROM tickets t join (select ticket_id,count(ticket_id) number_of_details FROM Ticket_Details 
GROUP  BY ticket_id) as td
on t.ticket_id=td.ticket_id

2 个答案:

答案 0 :(得分:2)

Oracle不支持将AS用于(派生)表别名。你需要删除它:

.....
FROM tickets t 
   join (select ticket_id,count(ticket_id) number_of_details 
         FROM Ticket_Details 
         GROUP BY ticket_id
   ) td --< no AS here
   on t.ticket_id=td.ticket_id

答案 1 :(得分:0)

如果您使用SQL*Plus,则很容易找到并修复错误。理想情况下,我希望ORA-00933: SQL command not properly ended而不是ORA-00905: missing keyword

例如,

SQL> SELECT COUNT(*) FROM emp e,
  2    (SELECT * FROM emp
  3    ) as "A" WHERE e.empno = A.empno
  4  /
  ) as "A" WHERE e.empno = A.empno
    *
ERROR at line 3:
ORA-00933: SQL command not properly ended


SQL>

由于使用关键字 AS 的别名语法不正确,错误堆栈清楚地显示错误位于第3行。

您修改后的创建视图将是 -

CREATE OR REPLACE VIEW Tickets_RAFAL
AS
  SELECT t.ticket_id,
    t.subject,
    t.descr description,
    t.assigned_to,
    t.created_on,
    t.created_by,
    t.closed_on,
    td.number_of_details
  FROM tickets t
  JOIN
    (SELECT ticket_id,
      COUNT(ticket_id) number_of_details
    FROM Ticket_Details
    GROUP BY ticket_id
    ) td
  ON t.ticket_id=td.ticket_id
/