테이블에 트리거를 연결하다가 발생된 오류.
오류는 저렇게 표출되었지만 정작 난 변수 선언 바로 전에 오타를 내서 발생된거라 의미없긴하지만
이왕 난 오류니 찾아봄
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;
'공부방 > DataBase' 카테고리의 다른 글
[Oracle] DB링크를 통한 원격 테이블 조회 방법 (0) | 2025.02.01 |
---|---|
[Oracle] 데이터베이스에서 문자열 뒤에서 자르기(RIGHT) (0) | 2025.01.09 |
[MariaDB] ADD COLUMN 사용법 (0) | 2025.01.03 |
Subquery returns more than 1 row (0) | 2024.12.19 |
FETCH FIRST ROW (3) | 2024.07.06 |