[개발] 프로그램 지식

[ERROR] Oracle MyBatis ORA-06550 해결 방법

  • -
반응형

 

[Oracle - MyBatis] ORA-06550 및 PLS-00103 에러 해결 방법

Oracle 데이터베이스와 MyBatis를 사용하여 프로시저를 호출하는 과정에서 발생할 수 있는 에러 중 하나가 ORA-06550PLS-00103입니다. 특히 XML에서 CALL 프로시저를 호출할 때, 파라미터 구분 오류로 인해 이 에러가 발생할 수 있습니다. 이번 포스팅에서는 에러의 원인과 해결 방법을 알아보겠습니다.

 

 

 

 

 

 

 

 

 

1️⃣ 에러 메시지

발생하는 에러 메시지 예시:


ORA-06550: 라인 n, 열 m: PLS-00103: "심볼"을(를) 만났습니다.
    

이 에러는 주로 SQL 문법 오류 또는 파라미터 구분 오류로 인해 발생합니다. MyBatis XML 파일에서 작성된 SQL 구문이 올바르지 않을 때도 나타날 수 있습니다.

 

 

 

 

 

 

 

 

2️⃣ 에러 원인

  • 파라미터 구분자(콤마 ,) 문제: 마지막 파라미터 뒤에 잘못된 콤마가 추가되어 SQL 문법 오류가 발생.
  • 파라미터 개수 불일치: 프로시저에 정의된 파라미터의 개수와 실제 호출 시 전달하는 파라미터의 개수가 다를 경우.
  • 잘못된 SQL 구문 작성: MyBatis XML에서 CALL 구문에 문법 오류가 있는 경우.

 

 

 

 

 

 

 

 

 

3️⃣ 해결 방법

다음 단계에 따라 문제를 해결하세요.

Step 1. MyBatis XML에서 파라미터 확인

MyBatis XML 파일에서 작성된 프로시저 호출 구문을 확인합니다. 아래는 잘못된 예제입니다:



    {CALL my_procedure(
        #{param1},
        #{param2},
        #{param3}, 
    )}

    

문제: 마지막 파라미터 #{param3} 뒤에 콤마(,)가 추가되어 있습니다.

 

 

 

 

 

Step 2. 콤마 제거

마지막 파라미터 뒤의 콤마를 제거하여 올바르게 작성합니다:



    {CALL my_procedure(
        #{param1},
        #{param2},
        #{param3} 
    )}

    

 

 

 

 

 

Step 3. 파라미터 개수 및 순서 확인

프로시저에 정의된 파라미터와 호출 시 전달하는 파라미터의 개수와 순서를 정확히 확인합니다. 예를 들어, 아래와 같은 프로시저가 있다고 가정합니다:


CREATE OR REPLACE PROCEDURE my_procedure(
    param1 IN VARCHAR2,
    param2 IN NUMBER,
    param3 OUT VARCHAR2
) AS
BEGIN
    -- 프로시저 로직
END;
    

param1, param2, param3가 올바르게 전달되었는지 확인합니다.

 

 

 

 

 

 

 

 

 

 

 

4️⃣ 실전 예제

아래는 MyBatis에서 Oracle 프로시저를 호출하는 올바른 예제입니다:



    {CALL my_procedure(
        #{param1, jdbcType=VARCHAR},
        #{param2, jdbcType=INTEGER},
        #{param3, mode=OUT, jdbcType=VARCHAR}
    )}

    
  • param1: 입력 파라미터로 문자열(VARCHAR2)을 전달.
  • param2: 입력 파라미터로 정수(NUMBER)를 전달.
  • param3: 출력 파라미터로 문자열(VARCHAR2)을 반환.

 

 

 

 

 

 

 

 

 

5️⃣ 추가 팁

  • SQL Developer 또는 PL/SQL에서 직접 테스트: MyBatis 호출 전, SQL Developer에서 직접 프로시저를 호출하여 오류를 디버깅합니다.
    
    BEGIN
        my_procedure('value1', 123, :outputParam);
    END;
                
  • MyBatis 로그 확인: MyBatis의 SQL 로그를 활성화하여 실행된 SQL 구문을 확인하고, 프로시저 호출 구문의 문법 오류를 추적합니다.
  • 데이터 타입 확인: XML 파일에서 설정한 jdbcType이 Oracle 데이터베이스의 실제 데이터 타입과 일치하는지 확인합니다.

 

 

 

 

 

 

 

 

 

 

결론

ORA-06550PLS-00103 에러는 주로 파라미터 구분 오류 또는 문법 오류로 인해 발생합니다. 위 해결 방법을 따라 MyBatis XML에서 프로시저 호출 구문을 수정하면 문제를 해결할 수 있습니다. 올바른 호출 방식을 적용하여 효율적인 데이터베이스 작업을 수행하세요! 😊

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.