Database/Oracle

[Oracle]ORA-00947 : 값의 수가 충분하지 않습니다.

  • -
반응형


요근래 신규 프로그램 개발 건으로 정신없이 시간이 지나간 것 같다. 그래서 포스팅도 많이 못했고..

오늘은 가장 최근에 쿼리를 압축해 함수를 만들면서 오류를 잡았던 과정을 기록하려고 한다.

DB 함수는 많이 만들어본 경험이 없어서 조금 버벅거렸다.


쿼리문을 정리하고 컴파일.



예상했던대로 오류..

아래 오류 내용을 살펴봤다.




ORA-00947 : 값의 수가 충분하지 않습니다.


확인 결과, 해당 오류는 INSERT하고자 하는 컬럼 수와 입력하고자 하는 항목의 수가 다른 경우 발생한다.

현재 함수에서는 SELECT된 결과를 정의된 변수들에게 입력을 해주고 있다. 그리고 해당 변수들을 리턴하는 식.


즉, SELECT된 컬럼이 모두 사용되지 않았기 때문에 문제가 발생한 것이었다.


이해를 쉽게하기 위해 아래 TEST용 함수를 보자. DEPARTMENT라는 테이블에서 특정 사원의 부서 이름을 가져온다.

DEPARTMENT 테이블에서 조회 된 값은 총 5개(C_CD, PER_ID, PER_NM, DEPART_CD, DEPART_NM). 그런데 입력받는 값은 1개(V_DEPART_NM)이다. 

SELECT와 INTO의 값을 동일하게 주면 오류를 해결할 수 있다.


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
CREATE OR REPLACE FUNCTION GET_DEPART_NM
(
  I_C_CD                               VARCHAR2   
, I_PER_ID                             VARCHAR2   
)
RETURN VARCHAR2
IS
  V_DEPART_NM               VARCHAR2(50);
/***********************************************************************
 Author         : LSH
 History        : 2018.06.20
***********************************************************************/
BEGIN                
  
SELECT C_CD, PER_ID, PER_NM, DEPART_CD, DEPART_NM
INTO V_DEPART_NM
FROM DEPARTMENT
WHERE C_CD=I_C_CD
AND PER_ID=I_PER_ID
;
     RETURN V_DEPART_NM;
 
EXCEPTION
    WHEN OTHERS THEN
        DBMS_OUTPUT.PUT_LINE(SQLERRM);
        --RETURN SQLCODE;
        --RAISE;
END GET_DEPART_NM;
cs




쉽게 해결할 수 있었던 오류였다.


피드백은 언제나 환영입니다 :)







반응형
Contents

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

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