database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 41031 게시물 읽기
No. 41031
프로시져 문의드립니다.
작성자
땡구리
작성일
2015-12-14 09:23
조회수
9,398

 

아래와 같이 프로시저를 만들어서 사용하고 있습니다.

 

GATHERINFOLOG는 하루에 약 40~50만건정도 데이터가 저장되며

KeyID로 Point 지점을 경유한 순서를 조회한 후 해당 결과를 DB에 Insert 하는데

시간이 너무 오래 걸려 입력 시간을 00~06, 07~12, 13-18, 19~23시로 나눠서

프로시져를 돌리고 있습니다.

그런데 프로시져가 시간대별로 잘 처리하다가 한순간 멈춰 버리고 아무 동작도 안 하는 상태가 발생하는데

이유를 몰라서 문의를 드립니다.

 

 

 

 

CREATE OR REPLACE PROCEDURE PROC_POINTTRIP (v_RecvSTime IN  VARCHAR2, v_RecvEDTime In VARCHAR2, v_SeqNo In Number)

IS

 

    v_Analysis    DATE;

    v_KeyID       VARCHAR2(50);

    v_Step        VARCHAR2(4);

    v_ST_Time     DATE; 

    v_ST_Point    VARCHAR2(50); 

    v_ED_Time     DATE; 

    v_ED_Point    VARCHAR2(50); 

    v_Path_Point  VARCHAR2(512);

     

    CURSOR VEHICLE_TRIP

    IS

        SELECT TO_DATE(SUBSTR(v_RecvSTime, 1, 8), 'YYYYMMDD') ANALYSIS_DATE, KeyID, STEP, 

               MAX(DECODE(RN, 1, RCVTIME, '')) ST_TIME, MAX(DECODE(RN, 1, PointID, '')) ST_PointID,

               MAX(DECODE(RN, STEPCNT, RCVTIME, '')) ED_TIME, MAX(DECODE(RN, STEPCNT, PointID, '')) ED_PointID,

               SUBSTR (XMLAGG (XMLELEMENT (A, ',' || PointID) ORDER BY RCVTIME).EXTRACT ('//text()'), 2) PATH_Point 

        FROM

           (SELECT KeyID, PointID, STEP, RCVTIME, 

                   COUNT(*) OVER(PARTITION BY KeyID, STEP) STEPCNT,

                   ROW_NUMBER() OVER(PARTITION BY KeyID, STEP ORDER BY RCVTIME) RN

            FROM

               (SELECT KeyID, PointID, RCVTIME, 

                       SUM(FLAG) OVER(PARTITION BY KeyID ORDER BY RCVTIME) STEP

                FROM       

                   (SELECT KeyID, PointID, RCVTIME,

                           CASE WHEN LAG(RCVTIME) OVER(PARTITION BY KeyID ORDER BY RCVTIME) > RCVTIME -1/24/60 * 30

                                THEN 0 ELSE 1 END FLAG

                    FROM            

                       (SELECT KeyID, PointID, TO_DATE(RCVTIME, 'YYYYMMDDHH24MISS') RCVTIME

                        FROM  GATHERINFOLOG A

                        WHERE RCVTIME BETWEEN v_RecvSTime || '0000' AND v_RecvEDTime || '5959'

                        )

                   ))           

            )         

        WHERE STEPCNT > 4

        GROUP BY KeyID, STEP

        ORDER BY KeyID, STEP;

    

        

    BEGIN

        OPEN    VEHICLE_TRIP;

        DBMS_OUTPUT.PUT_LINE('==============================================');

        

        LOOP

            FETCH VEHICLE_TRIP INTO v_Analysis, v_KeyID, v_Step, v_ST_Time, v_ST_Point, v_ED_Time, v_ED_Point, v_Path_Point;

            EXIT WHEN VEHICLE_TRIP%NOTFOUND;

            

            INSERT INTO ITS_VEHICLETRIP_TEMP

                (ANALYSIS_DATE, KeyID, SEQNO, STEP, ST_TIME, ST_PointID, ED_TIME, ED_PointID, PATH_PointID) 

            VALUES 

                (v_Analysis, v_KeyID, v_SeqNo, v_Step, v_ST_Time, v_ST_Point, v_ED_Time, v_ED_Point, v_Path_Point);       

            

            --DBMS_OUTPUT.PUT_LINE(v_KeyID || ', ' || v_Step || ', ' || v_Path_Point);

            commit;

            

        END LOOP;

        --DBMS_OUTPUT.PUT_LINE('Record Cnt = ' || VEHICLE_TRIP%ROWCOUNT);    

   

        CLOSE   VEHICLE_TRIP;

    END;

 

 

이 글에 대한 댓글이 총 2건 있습니다.

INSERT 대상테이블의 키가 뭔가요?

4개 프로세스가 동시작업할 때 키값 중복으로 데드락이 발생될 수도 있습니다.

마농(manon94)님이 2015-12-14 11:42에 작성한 댓글입니다.

 마농님 먼저 읽어주셔서 고맙습니다.

테이블 키는 ANALYSIS_DATE, KeyID, SEQNO, STEP 로 잡혀 있습니다.

그리고 동시에 작업하는게 아니라 00~06시 데이터 처리 후 07~12시 데이터 처리 이런식으로

순차적으로 처리를 하고 있습니다.

그런데 테이블에 데이터 인서트 작업이 이뤄진 후 프로시져가 마무리 안된 상태로 멈춰 버리고

다음 작업이 이뤄지지가 않습니다.

 

땡구리님이 2015-12-14 20:55에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
41034COMMIT 명령 후 멈춤현상
크리리리
2015-12-18
8510
41033달력에 사용할 쿼리 질문입니다. [1]
정준민
2015-12-16
8913
41032테이블스페이스 관련 질문입니다 ㅠㅠ 도와주세요~ [1]
지용이
2015-12-15
8779
41031프로시져 문의드립니다. [2]
땡구리
2015-12-14
9398
41030오라클! 어떻게 관리 해야 합니까?? [1]
지용이
2015-12-11
8648
41026ORACLE 10g - > MS-SQL 2008 Server Dblink 연결시 문제
황금팔뚝
2015-12-10
10683
41025oracle 통째로 이관?
슈퍼유져
2015-12-09
8560
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.019초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다