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

댓글