저장프로시저 out 파라미터 질문. 0 2 2,225

by 허정 [2012.05.25 11:59:07]


안녕하세요^^ 간단한 질문 하나 할게요..

retVal을 out 파라미터로 문자열을 받고싶은데

 이렇게 하니 문자열을 받을 때

문자열 버퍼가 너무작습니다 라고 나오네요..

문자열 받아서 return 해주고 싶은데 어떻게 해야하나요?

null일때는 null을 반환해주고싶습니다 ㅎㅎ

CREATE OR REPLACE PROCEDURE GPSDB.SelectInfoReturn 
(
    latitude in number,
    longitude in number,
    retVal out varchar2
)
IS
    res varchar2(100);
BEGIN
    select information into res from GpsWaySave where
    PointX >= ( latitude -0.00003 ) and PointX <= ( latitude + 0.00003 ) and
    PointY >= ( longitude - 0.00003 ) and PointY <= ( longitude + 0.00003 );
    IF res = null
    THEN
        retVal := null;
    ELSE
        retVal := res;
    END IF;
END SelectInfoReturn;
/
by 마농 [2012.05.25 13:30:21]

Select Into 구문에서 데이터가 없을때는 에러가 나므로
조건절(If)로 체크하는게 아니라 예외절(Exception)에서 체크해야 합니다.
그런데 조건절이 범위검색이네요?
Select Into 구문은 데이터가 없을때도 에러가 나지만 많을때도 에러납니다.
오직 한건의 자료조회시에만 사용하는 방법입니다.


버퍼 부족에러는 이와는 상관 없는 얘기로...
아마도 100 으로 잡힌 크기가 부족한듯.


by 제로 [2012.05.25 13:41:17]

res varchar2(100); 변수의 데이터 길이가 Select ~ INTO 한 값의 크기보다 작기 때문입니다.
따라서, 데이터 타입을 테이블컬럼의 데이터 타입으로 맞춰서 프로그래밍 하는것이 보다 효율적입니다.

즉 아래와 같이 변경 하시면 될것 같습니다.
res varchar2(100);   --->   res GpsWaySave.information%TYPE;

참고로 if문 null 비교시
IF res = null then 구문 보다는 IF (res IS NULL) THEN 으로 사용하세요~

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입