본문 바로가기
공부방/DataBase

PL/SQL PLS-00103 오류 해결 방법

by SmartCow 2025. 3. 14.

테이블에 트리거를 연결하다가 발생된 오류.
오류는 저렇게 표출되었지만 정작 난 변수 선언 바로 전에 오타를 내서 발생된거라 의미없긴하지만
이왕 난 오류니 찾아봄

 



1. 오류 원인

PL/SQL에서 변수를 선언할 때 올바른 문법을 사용하지 않으면 PLS-00103: 심볼 "VARCHAR2"를 만났습니다 오류가 발생

2. 잘못된 코드 예제

DECLARE
    name VARCHAR2 := 'John'; -- 잘못된 선언
BEGIN
    DBMS_OUTPUT.PUT_LINE(name);
END;
    

3. 해결 방법



(1) VARCHAR2의 크기 지정

PL/SQL에서 VARCHAR2를 사용할 때는 반드시 크기를 지정

DECLARE
    name VARCHAR2(50) := 'John'; -- 크기 지정 필수
BEGIN
    DBMS_OUTPUT.PUT_LINE(name);
END;
    

(2) := 연산자 사용 시 주의

변수를 선언할 때 초기값을 := 연산자로 할당할 수 있지만, 크기 없이 사용할 수 없다.

잘못된 예제

DECLARE
    name VARCHAR2 := 'John'; -- 크기 지정이 없음
BEGIN
    DBMS_OUTPUT.PUT_LINE(name);
END;
    

올바른 예제

DECLARE
    name VARCHAR2(50);
BEGIN
    name := 'John'; -- BEGIN 블록에서 할당
    DBMS_OUTPUT.PUT_LINE(name);
END;
    

(3) PL/SQL 블록 내에서 사용 여부 확인

변수 선언을 PL/SQL 블록 밖에서 하거나, 특정 문법 구조에서 잘못 사용하면 오류가 발생할 수 있다.

잘못된 예제

SELECT name INTO v_name FROM employees; -- 선언 없이 사용 (오류 발생)
    

해결 방법

DECLARE
    v_name VARCHAR2(100);
BEGIN
    SELECT name INTO v_name FROM employees WHERE employee_id = 101;
    DBMS_OUTPUT.PUT_LINE(v_name);
END;
    

4. 종합 정리

원인 잘못된 코드 해결 방법
크기 지정 없음 name VARCHAR2 := 'John'; name VARCHAR2(50) := 'John';
:= 연산자 사용 위치 오류 name VARCHAR2 := 'John'; DECLARE name VARCHAR2(50); BEGIN name := 'John'; END;
PL/SQL 블록 외부에서 사용 SELECT name INTO v_name FROM employees; DECLARE v_name VARCHAR2(100); BEGIN SELECT name INTO v_name FROM employees; END;

최종 해결 코드 예제

DECLARE
    name VARCHAR2(50) := 'John';
BEGIN
    DBMS_OUTPUT.PUT_LINE(name);
END;