1

次のコードを実行すると、

select count_ee_cnum.counts + count_eefaculty.counts + count_cs_cnum.counts + count_cs_faculty.counts
from 
    ( select count(Ex.cnum) as counts
    from enrolled Ex
    where Ex.cnum in (
    select distinct Ex.cnum
    from faculty Fx, faculty Fy, class Cx, class Cy, enrolled Ex, enrolled Ey
    where Fx.dept = 'EE' and Fy.dept = 'CS' and Cx.fid = Fx.fid and Cy.fid = Fy.fid and Ex.cnum = Cx.cnum and Ey.cnum = Cy.cnum)) count_ee_cnum,

    (select count(Fx.dept) as counts
    from faculty Fx
    where Fx.dept = 'EE') count_ee_faculty,

    (select count(Ey.cnum) as counts
    from enrolled Ey
    where Ey.cnum in (
    select distinct Ey.cnum
    from faculty Fx, faculty Fy, class Cx, class Cy, enrolled Ex, enrolled Ey
    where Fx.dept = 'EE' and Fy.dept = 'CS' and Cx.fid = Fx.fid and Cy.fid = Fy.fid and Ex.cnum = Cx.cnum and Ey.cnum = Cy.cnum)) count_cs_cnum,

    (select count(Fy.dept) counts
    from faculty Fy
    where Fy.dept = 'CS') count_cs_faculty;

SQLPLUSでエラーが表示されます

where Fy.dept = 'CS') count_cs_faculty
                      *
ERROR at line 3:
ORA-00933: SQL command not properly ended

このエラーを解消するために多くの方法を試しましたが、うまくいかないようです。

4

2 に答える 2

2

現在発生している実際のエラーに純粋に焦点を当てるには、ERROR at line 3強調表示されている行が 23 行目あたりであるため、これはちょっとした問題です。

SQL*Plus は、空白行を文の終わりとして扱います。

SQL文またはスクリプト内の空白行は、コマンドの入力は完了したが、まだ実行したくないことをSQL*Plusに伝えます。

スクリプトの最初の 20 行は無視されています。これらは、(空白行で) 終了するが実行されない 3 つの別個のステートメントと見なされます。最後の 3 行は 4 番目の独立したステートメントであり、セミコロンで終了しているため、実際に実行します。そして、その声明は不完全であることは明らかです。

スクリプトから空白行を削除するか、set sqlblanklines onこのクエリの前にスクリプトに追加することで、SQL*Plus による空白行の処理方法を変更できます。

もちろん、(全体の) クエリが行っていることに関して他の人が提起した問題に対処する必要がありますが、それは別の主題です。

于 2013-09-24T16:59:02.797 に答える