도와주세요 ㅠㅠ 0 5 4,763

by 하수 [2009.10.30 09:11:39]


프로시져를 만들었는데요 ㅠㅠ

선후행을 체크할려고

CREATE OR REPLACE PROCEDURE UFNGDBA.ddd
IS
    v_state   CHAR;
    V_STATE2 char;

     BEGIN

      SELECT state
      INTO v_state2
      FROM TEST
     WHERE SID = 100;
    
    WHILE V_STATE2 <> '8' LOOP
        BEGIN
            SELECT state
      INTO v_state
      FROM TEST
     WHERE SID = 100;
    
            IF v_state = '8'
            THEN
                UPDATE TEST
                SET state = '9',
                    in_dt = to_char(sysdate, 'yyyymmdd')
                WHERE  SID = 101;

                DELETE FROM test1;

                UPDATE TEST
                SET state = '8',
                    out_dt = to_char(sysdate, 'yyyymmdd')
                WHERE  SID = 101;

                COMMIT;
            ELSE
                UPDATE TEST
                SET state = '1',
                    out_dt = to_char(sysdate, 'yyyymmdd')
                WHERE  SID = 101;

                COMMIT;

                BEGIN
                    dbms_lock.sleep(5);
                END;
            END IF;

            COMMIT;
        END;
    END LOOP;

END ddd;
/

------------------------------------------------요런식인데 무한루프가 돌고있나봅니다.

프로시저가 수정도 안되고 삭제도 안되고...휴...테스트 해볼길이없네요 ㅠㅠ

도와주이소 ㅠ 고수님덜

프로시져 죽이는방법점 ㅠㅠ

by 마농 [2009.10.30 09:18:14]
프로시져를 실핼시킨 창을 강제 종료시키세요.

by 하수 [2009.10.30 09:36:08]
프로시져 실행시킨 창을 다끄고 리붓해도 .

어디선가 돌고잇는거같아요

만약에 업데이트값을 바꾸면 자동으로 프로시저에 트리거가 걸리듯 값이 바껴버리는걸 보면 계속 내부에서 무한루프를 타고잇는듯해요

by 마농 [2009.10.30 09:51:22]
[ 업데이트값을 바꾸면 자동으로 프로시저에 트리거가 걸리듯 값이 바껴버리는걸 보면 ]
이게 뭔말인가요?

by 하수 [2009.10.30 10:04:51]
음 만약에 제갈 돌린 프로시저가 TEST 테이블에 A컬럼에 100번키가 8이면 101번키에 9를찍고 슬립하고 A컬럼에 100번키가 9이면 101번키에 8을 찍고 나오는로직이라면 TEST테이블에 A컬럼을 8 에서 9로 업데이트를 해가면서보면 1001번키값이 바뀌더라고요 돌리던 프로시저는 다 강제종료햇는데 토드상에서

혹시 내부적으로 도는 유닉스에 PID같은 걸 오라클세션에서도 킬이가능한지요. ㅜ

by 마농 [2009.10.30 10:13:25]
오라클에서도 세션킬이 가능합니다만..님께서 얘기하시는 상황은 잘 이해가 가질 않네요.
http://www.gurubee.net/lecture/1156
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입