ORA-00900: SQL 문이 부적합합니다 해결하기 (ORA-00900: invalid SQL statement)

ORA-00900: SQL 문이 부적합합니다 오류가 프로시저 생성 시 발생한다면, 오라클 프로시저 생성문에 적합하지 않은 명령문을 설정하였을 때입니다.

ORA-00900: SQL 문이 부적합합니다 해결하기

다음의 프로시저 생성 문장은 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
댓글 쓰기
가져가실 때, 출처 표시 부탁드려요! 감사합니다. 💗