프로시저에서 for-loop내부에서 시퀀스.nextval이 적용이 안되는거 같습니다...질문올립니다~~ 0 5 968

by GRIZZ [SQL Query] [2017.06.15 11:18:26]


procedure sq.PNG (17,525Bytes)

 FOR R IN( 
        SELECT * 
          FROM T_EBIZ_SCM_UPLOAD
         WHERE SALE_DT = '20170502'
           AND BRD_CD  = V_PARENT_BRD_CD
           AND OUT_RNDS_ID IS NULL
    )
    LOOP
    
        /* 매장수불ID 채번 */
        IF N_SHOP_RNDS_ID IS NULL OR N_SHOP_RNDS_ID = '' THEN

            BEGIN
                 SELECT R.SALE_DT || SHOP_RANDS_S.NEXTVAL
                 INTO   N_SHOP_RNDS_ID
                 FROM DUAL;
            EXCEPTION
                WHEN OTHERS THEN
                    T_LOG     := '매장 수불 기본 ID 채번시 오류. SQLCODE:'||TO_CHAR(SQLCODE)||' SQLERRM:'||' '||SQLERRM;
                    DBMS_OUTPUT.PUT_LINE(T_LOG);
                    V_OUT_MESSAGE  := T_LOG;
                    RETURN;
             END;

        END IF;
        
        
        BEGIN 
            INSERT INTO T_EBIZ_TMP_DTL
            (
                PRDT_CD
              , COLOR_CD
              , SIZE_CD 
              , SHOP_ID
              , CALCQTY
              , CALCAMT
              , PROC_MONTH

프로시저 내부에서 for loop 를 실행시키고 매장수불ID 채번을 하면

제 생각엔

20170502001

20170502002

20170502003

20170502004 . . ..

 

이렇게 나와야 할거같은데

20170502001

20170502001

20170502001

20170502001 .. . . .

결과값이 이런식으로 나옵니다.

뭐가 잘 못된건지도 잘 모르겠는게 문제입니다....

오전내내 머리 쥐어뜯다가 질문올립니다!!!!

 

첨부파일은 결과값입니다.

by 마농 [2017.06.15 12:47:29]

If 문을 제거하세요.


by 부쉬맨 [2017.06.15 12:52:54]

버그인지모르겠지만

안되더라고요.

저는 저 순번채번하는 로직을 function 형태로 작성해서 호출하니깐 잘되더라고요.

SELECT SEQ_FUNCTION(R.SALE_DT)
                INTO   N_SHOP_RNDS_ID
                FROM DUAL;

SEQ_FUNCTION 내용은

CREATE FUNCTION (DATE VARCHAR2)
BEGIN

SELECT DATE||SHOP_RANDS_S.NEXTVAL
INTO V_DATE
FROM DUAL;

 RETRUN V_DATE
END;

간략하게 펑션은 만들었습니다.

 


by 임상준 [2017.06.15 13:08:33]

첫 시퀀스가 채번 되고 나면 N_SHOP_RNDS_ID 가 널이 아니니까 if 문 안에 채번 로직을 안 타겠죠...


by GRIZZ [2017.06.15 13:51:17]

아......감사합니다. 
아주 근본적인 문제를 파악 못하고 작은것만 보려했네요.

 

 

감사합니다!


by GRIZZ [2017.06.15 13:51:55]

마농님 부쉬맨님! 정말 감사합니다!
아직 모자란게 많아서 놓치는게 많네요.

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