Almost-Native

오라클 에러 : PLS-00103: Encountered the symbol when expecting one of the following 본문

Java 프로그램 개발, IT

오라클 에러 : PLS-00103: Encountered the symbol when expecting one of the following

2021. 1. 11. 23:03

Oracle PL/SQL 프로그램에서 PLS-00103 에러는 아주 흔하게 만나는 에러입니다.

구문이 틀렸을때 나는 에러로, 뭔가 다른 거를 기대했는데, 이상한걸 만났다는 에러메시지입니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
 
SQL> create or replace function FC_TEST1() return number
  2  is
  3      v_string      varchar2(4000) := '';
  4      v_string_len  number := 0;
  5      v_ret         varchar2(51) := '';
  6  begin
  7      select aa2
  8      into v_string
  9      from TEST1
 10      where aa1 = 1;
 11
 12      v_string_len := length(v_string);
 13
 14      return v_string_len;
 15  end;
 16  /
 
Warning: Function created with compilation errors.
 
Elapsed: 00:00:00.01
SQL> show err
Errors for FUNCTION FC_TEST1:
 
LINE/COL ERROR
-------- -----------------------------------------------------------------
1/19     PLS-00103: Encountered the symbol ")" when expecting one of the
         following:
         <an identifier> <a double-quoted delimited-identifier>
         current delete exists prior
 
 
 
cs

위 함수 생성문은 얼핏보면 틀린게 없는 것처럼 보이지만, 함수 만들때 자주 실수하는 부분입니다.

함수에서 넘겨주는 인자가 없는 경우, C 언어나 Java 에서는 FC_TEST1( ) 처럼 빈괄호( )를 붙여주지만,

PL/SQL 에서는 괄호를 없애야 합니다.

그래서 컴파일러는 기대와는 다르게 느닷없이 심볼 ")" 를 만나서 많이 당황했다는 메시지를 보여주고 있습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
 
SQL> create or replace procedure FC_TEST1
  2  as
  3  begin
  4      v_string      varchar2(4000) := '';
  5      v_string_len  number := 0;
  6      v_ret         varchar2(51) := '';
  7
  8      select aa2
  9      into v_string
 10      from TEST1
 11      where aa1 = 1;
 12
 13      v_string_len := length(v_string);
 14  end;
 15  /
 
Warning: Procedure created with compilation errors.
 
Elapsed: 00:00:00.02
SQL> show err
Errors for PROCEDURE FC_TEST1:
 
LINE/COL ERROR
-------- -----------------------------------------------------------------
4/19     PLS-00103: Encountered the symbol "VARCHAR2" when expecting one
         of the following:
         := . ( @ % ;
         The symbol ":=" was substituted for "VARCHAR2" to continue.
 
4/34     PLS-00103: Encountered the symbol "=" when expecting one of the
         following:
         . ( * % & = - + ; < / > at in is mod remainder not rem
         <an exponent (**)> <> or != or ~= >= <= <> and or like like2
         like4 likec between || multiset member submultiset
 
 
cs

 

위에서는 변수선언이 begin 위쪽에 있어야 하는데, 잘못 위치를 잡으면서 PLS-00103 에러가 여기저기서 발생했습니다.

 

Comments