SQL命令未在多行查询中的select语句上正确终止

时间:2015-10-07 19:59:50

标签: sql oracle

在SQL查询中创建临时表时,我不断收到错误消息,指出我的SELECT命令未正确结束。我正在尝试编写的实际查询列出了库分支ID和该库中“创新者之路”的副本数量。

表BOOK_COPIES具有分别与表LIBRARY_BRANCH和BOOK相关的外键Branch_id和Book_id。标题是BOOK的一个属性。

我写的查询是:

SQL> SELECT Book_id , Branch_id , No_of_copies
2  INTO COPIES_AT_BRANCH
3  FROM BOOK_COPIES , LIBRARY_BRANCH
4  GROUP BY Branch_id
5  SELECT Title , Branch_id , No_of_copies
6  INTO BOOK_NO
7  FROM COPIES_AT_BRANCH , BOOK
8  GROUP BY Book_id
9  SELECT Branch_id , No_of_copies
10 FROM BOOK_NO
11 WHERE Title = 'The Innovator''s Way';

我得到的错误是:

SELECT Title , Branch_id , No_of_copies
*
ERROR at line 5:
ORA-00933: SQL command not properly ended

我对SQL和数据库一般都很陌生,所以我的错误可能非常简单。此外,查询通常可能不正确。

感谢任何帮助,谢谢。

2 个答案:

答案 0 :(得分:3)

您有多个SELECT个查询,但这些查询并非以分号;结尾。试试这个:

SQL> SELECT Book_id , Branch_id , No_of_copies
2  INTO COPIES_AT_BRANCH
3  FROM BOOK_COPIES , LIBRARY_BRANCH
4  GROUP BY Branch_id;
5  SELECT Title , Branch_id , No_of_copies
6  INTO BOOK_NO
7  FROM COPIES_AT_BRANCH , BOOK
8  GROUP BY Book_id;
9  SELECT Branch_id , No_of_copies
10 FROM BOOK_NO
11 WHERE Title = 'The Innovator''s Way';

答案 1 :(得分:1)

除了半冒号问题之外,您会发现由于前两个语句中的INTO子句,您的语句将失败。

在Oracle中,INTO在编写PL / SQL代码时在SQL查询中有效。但根据您的评论,听起来您实际上要做的是根据select语句的结果创建一个表。该语法可能适用于其他数据库,如SQL Server,但它在Oracle中不起作用。

您要使用的语法是:

create table table_name as select ...

此外,您还需要了解如何在FROM子句中加入表格。您不仅使用较旧的语法来执行连接(请查看ANSI JOIN语法),而且您似乎也在执行cross join,这将为您提供2个表的笛卡尔积。这很少是一件好事。你可能想看一下。