Oracle 19C Procedure에서 Where 조건에 In 값을 넘겨야 하는데,
문자열을 만들어서 넘기니 원하는 결과 값이 나오지 않았다.
알고 보니, 받는 부분에서 처리를 해줘야 된다는 것을 알았다.
이럴 경우, 어떻게 처리해야 되는지 알아보도록 하자.
■ Where 조건에 In 값 넘기는 방법
1. 아래의 Procedure를 만들었다고 가정했을 때, In에 넘길 파라미터 값을 바로 사용하지 않고 아래와 같이 변경하면 된다.
CREATE OR REPLACE PROCEDURE TEST -- TEST라는 프로시저 생성
(
PARAM IN VARCHAR2,
RESULT OUT SYS_REFCURSOR
) AS
PROCNAME VARCHAR2(100);
BEGIN
PROCNAME := $$plsql_unit;
OPEN RESULT FOR
SELECT *
FROM TEST_TABLE A -- TEST_TABLE은 사용자의 TABLE에 맞게 변경
-- WHERE A.CLASS IN (PARAM); 처음에 이렇게 만들었는데, 원하는 결과 값이 나오지 않아 아래와 같이 변경하였다.
WHERE A.CLASS IN (SELECT REGEXP_SUBSTR(PARAM, '[^,]+', 1, LEVEL)
FROM DUAL
CONNECT BY REGEXP_SUBSTR(PARAM, '[^,]+', 1, LEVEL) IS NOT NULL);
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('ERROR MESSAGE: ' || PROCNAME || ' - ' || SQLERRM);
END TEST;
2. PARAM에 넘길 값은 '11', '22' 이런 식으로 넘기는 것이 아니라 11, 22로 넘기면 원하는 결과 값을 받을 수 있다.
- 싱글쿼터(') 값은 프로시저 안에서 처리하고 있다.
■ 결론
1. PARAM이라는 파라미터는 하나의 문자열로 취급하므로, '11', '22'를 넘기더라도 '11, 22'로 인식하기 때문에 올바른 값이 나오지 않는다.
'Database > Oracle' 카테고리의 다른 글
ORA-12560 Listener 재 시작으로도 안될 때 확인하는 방법 (0) | 2024.07.27 |
---|---|
Oracle 설치 후 Port 변경하는 방법 (0) | 2024.07.07 |
PL/SQL Developer 유용한 기능 (Version 12.0.5.1828) (0) | 2024.07.07 |
C# ORA-01017 오류 간단 해결 (0) | 2024.07.06 |
ORA-01034, ORA-27101, ORA-12560 재 시작 말고 pfile 파라미터로 해결 (0) | 2024.03.20 |