0

このクエリを sql*plus で実行すると、ORA-00923 (FROM キーワードが予期された場所に見つかりません) エラーが発生します。

SELECT EMPLOYEE_ID, FIRST_NAME||' '||LAST_NAME AS FULLNAME
FROM EMPLOYEES
WHERE (JOB_ID, DEPARTMENT_ID) 
IN (SELECT JOB_ID, DEPARTMENT_ID FROM JOB_HISTORY)
AND DEPARTMENT_ID=80; 

私はSQL開発者でそのクエリを実行し、問題なく動作し、sql * plusで試したときにこのエラーメッセージが表示される理由を推測しました。

4

3 に答える 3

1
SELECT   EMPLOYEE_ID, FIRST_NAME || ' ' || LAST_NAME AS FULLNAME
  FROM   EMPLOYEES
 WHERE   JOB_ID IN (SELECT   JOB_ID
                      FROM   JOB_HISTORY
                     WHERE   DEPARTMENT_ID = 80);

また

SELECT   EMPLOYEE_ID, FIRST_NAME || ' ' || LAST_NAME AS FULLNAME
  FROM   EMPLOYEES
 WHERE   JOB_ID IN (SELECT   JOB_ID FROM JOB_HISTORY) AND DEPARTMENT_ID = 80;

また

SELECT   EMPLOYEE_ID, FIRST_NAME || ' ' || LAST_NAME AS FULLNAME
  FROM   EMPLOYEES E
 WHERE   EXISTS (SELECT   NULL
                   FROM   JOB_HISTORY J
                  WHERE   J.JOB_ID = E.JOB_ID)
         AND DEPARTMENT_ID = 80;
于 2013-10-01T05:51:51.660 に答える
1

クエリは完全に有効であり、sqlplus で正確に実行されます。

14:04:01 (41)HR@sandbox> l
  1  SELECT EMPLOYEE_ID, FIRST_NAME||' '||LAST_NAME AS FULLNAME
  2  FROM EMPLOYEES
  3  WHERE (JOB_ID, DEPARTMENT_ID)
  4  IN (SELECT JOB_ID, DEPARTMENT_ID FROM JOB_HISTORY)
  5* AND DEPARTMENT_ID=80
14:04:05 (41)HR@sandbox> /

34 rows selected.

Elapsed: 00:00:00.01

ORA-00923 が発生するのは、構文エラーがある場合のみです。このような:

14:04:06 (41)HR@sandbox> ed
Wrote file S:\spool\sandbox\BUF_HR_41.sql

  1  SELECT EMPLOYEE_ID, FIRST_NAME||' '||LAST_NAME AS FULLNAME X
  2  FROM EMPLOYEES
  3  WHERE (JOB_ID, DEPARTMENT_ID)
  4  IN (SELECT JOB_ID, DEPARTMENT_ID FROM JOB_HISTORY)
  5* AND DEPARTMENT_ID=80
14:05:17 (41)HR@sandbox> /
SELECT EMPLOYEE_ID, FIRST_NAME||' '||LAST_NAME AS FULLNAME X
                                                           *
ERROR at line 1:
ORA-00923: FROM keyword not found where expected

おそらく、クエリを sqldeveloper から sqlplus にコピーするときに作成したものですか? あなたの投稿には、実際に実行しようとしているクエリがシンボルからシンボルまで正確に含まれていると確信していますか? クエリ テキストとエラー メッセージにもっと注意を払います。通常は、次の例のよう*にエラーをX示します。

于 2013-10-01T06:09:02.613 に答える