ORA-00900: SQL 문이 부적합합니다. SELECT에서 발생할 때
다음과 같이 띄어쓰기를 누락하여 select 할 때에 발생할 수 있어요!
SELECTEMPNO FROM EMP;
SQL 문장을 확인하여 정상적으로 조회할 수 있도록 처리해 주세요.
SELECT EMPNO FROM EMP;
14 개의 행이 선택되었습니다.
ORA-00900: SQL 문이 부적합합니다. 프로시저에서 발생할 때
ORA-00900 오류가 프로시저 생성 시 발생한다면, 오라클 프로시저 생성문에 적합하지 않은 명령문을 설정하였을 때입니다.
다음의 프로시저 생성 문장은 ORA-00900: invalid SQL statement 오류가 발생하는데요, 무엇이 문제인지 살펴보도록 하겠습니다.
CREATE OR REPLACE PROCEDURE PROCEDURE_NAME
BEGIN
DBMS_OUTPUT.PUT_LINE ('my name is BEOMSANG');
END;
Error at line 4
ORA-00900: invalid SQL statement
Cause: The statement is not recognized as a valid SQL statement. This error can occur if the Procedural Option is not installed and a SQL statement is issued that requires this option (for example, a CREATE PROCEDURE statement). You can determine if the Procedural Option is installed by starting SQL*Plus. If the PL/SQL banner is not displayed, then the option is not installed.
Action: Correct the syntax or install the Procedural Option.
오라클 프로시저 생성 시 필수 문장을 살펴보도록 합시다.
- CREATE
- PROCEDURE
- PLSQL PROCEDURE SOURCE
=> PROCEDURE NAME
=> IS, AS
=> body 또는 call spec 또는 EXTERNAL
오라클 프로시저라는 객체를 생성하는 문장이므로 CREATE 및 PROCEDURE는 필수입니다. 그리고 보통 후속하여 프로시저 이름을 설정하고 변수 선언 부분에서 IS 또는 AS가 선행하여야 합니다.
다음은 IS(AS)를 추가하여 정상적으로 프로시저를 수정하여 처리한 결과입니다. 이렇게 한 글자 차이로 오류가 발생하는 경우도 있으니, 기본적인 문법은 알고 계시는 게 도움이 많이 될 것입니다.
CREATE OR REPLACE PROCEDURE PROCEDURE_NAME
IS
BEGIN
DBMS_OUTPUT.PUT_LINE ('my name is BEOMSANG');
END;
Procedure created.
다음은 명령어를 잘못 실행하였을 때 오류가 발생하는 예제입니다. 프로시저를 실행할 때에, 서브프로그램 블록을 누락하거나 EXEC 명령어를 누락하였을 때를 예제로 보여드리겠습니다.
--ORA-00900: invalid SQL statement
PACKAGE_NAME.PROCEDURE_NAME ('BEOMSANG');
SP2-0734: unknown command beginning "PACKAGE_NA..." - rest of line ignored.
[Error] Syntax check (1: 0): ERROR line 2, col 1, ending_line 2, ending_col 12, Found 'PACKAGE_NAME', Expecting: ( end of input SELECT -or- BEGIN DECLARE FUNCTION PACKAGE PROCEDURE TYPE -or- << ALTER ANALYZE ASSOCIATE AUDIT Block_Comment CALL COMMENT COMMIT CREATE Dash_Comment DELETE DISASSOCIATE DROP EXPLAIN FLASHBACK FROM GRANT INSERT LOCK MERGE NOAUDIT ORDER PURGE RENAME REVOKE ROLLBACK SAVEPOINT SET TRUNCATE UPDATE WHERE WITH