proc관련 질문입니다..

김훈 0 2,292 2006.04.27 16:03
아래와 같이 proc를 만들어서 실행하면 첫번째로우가 계속반복됩니다..
패치하고 인서트하고 리턴된값이 1인것을 보고
EXEC SQL COMMIT WORK;
을 하면 패치가 이상동작으로 하는것 같은데..
EXEC SQL COMMIT WORK; 을 작업처리가 끝나고서 실행하면 이런문제가 발생 안하는것을
확인하였습니다..

왜 이런 현상이 발생하는지 납득이 안갑니다..
이러한 현상에 대한 경험이 있으신분 안계십니까..?


#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>

void sqlerror();    /* handles unrecoverable errors */

int now_date();

/* SQLCA 를 선언한다 */
EXEC SQL INCLUDE SQLCA;

int main(int argc, char **argv)
{
       


    /* 선언부 */
    EXEC SQL BEGIN DECLARE SECTION;
        int cnt = 0;
        char username[40] = "xxx";
                char assoicatedb[40] = "xxx";
                char nowdt[9];
                char enterprise_code[11];
                char sdt[9];
                char edt[9];
                char plant_id[5];
                char commgb[2];
                char tax_cd[2];
                int supply_amt = 0;
                int  vat_amt  = 0;
               
    EXEC SQL END DECLARE SECTION;

   
    /* DB 연결 */
    EXEC SQL CONNECT :username;

    /* 에러 처리 */
    if (sqlca.sqlcode < 0)
    {
            printf("%s\n", sqlca.sqlerrm.sqlerrmc);
            EXEC SQL ROLLBACK WORK RELEASE;
            exit(0);
    }
   
    printf("시작시간 : ===>  ");
        now_date();


    /* 상품쿼리 */
      EXEC SQL  select to_char(sysdate,'yyyymmdd')
                    into :nowdt
                    from dual;
                     
               
              /* 쿼리 결과에 대한 에러처리 */
    if (sqlca.sqlcode < 0)
    {
            printf("%s\n", sqlca.sqlerrm.sqlerrmc);
            EXEC SQL ROLLBACK WORK RELEASE;
            exit(0);
    }


    printf("Now Date : %s \n", nowdt);
   
        if (strcmp(nowdt,"20060427") == 0) {
              printf("20060427 일입니다.\n");
               
                EXEC SQL DECLARE bill_cursor CURSOR FOR
                SELECT V.ENTERPRISE_CODE,to_char(add_months(sysdate,0),'yyyymm')||'01' SDT,to_char(add_months(sysdate,0),'yyyymm')||'15' EDT, V.PLANT_ID,V.COMMGB,V.TAX_CD,V.SUPPLY_AMT,TRUNC(DECODE(V.TAX_CD,'1',V.SUPPLY_AMT*0.1,0)) VAT_AMT
                                FROM(
                                        SELECT /*+ ORDERED USE_NL(A B)*/ A.ENTERPRISE_CODE,SUBSTR(B.PF_ID,1,4) PLANT_ID,COMMGB,DECODE(B.TAX_CD,'X','1',B.TAX_CD) TAX_CD, SUM(DECODE(B.TAX_CD,'X',B.SALE_PRICE, B.SETTLE_COST)* B.QTY) SUPPLY_AMT
                                        FROM ESCM_ENTERPRISE A, TRV_LOG_SETTLE B
                                        WHERE B.REV_DATE >= to_char(add_months(sysdate,0),'yyyymm')||'01'
                                        AND B.REV_DATE <= to_char(add_months(sysdate,0),'yyyymm')||'15'
                                        AND A.ENTERPRISE_CODE = B.ENTERPRISE_CODE
                                        AND A.Z_SUPPLY_CONTR ='HC17'
                                        GROUP BY A.ENTERPRISE_CODE,SUBSTR(B.PF_ID,1,4),COMMGB,DECODE(TAX_CD,'X','1',TAX_CD)
                                )V
                                WHERE 1=1
                                AND V.SUPPLY_AMT <> 0;

        EXEC SQL OPEN bill_cursor;

        EXEC SQL WHENEVER NOT FOUND DO break;
       
                for ( ; ;) {

                       

                EXEC SQL FETCH bill_cursor INTO :enterprise_code, :sdt,:edt,:plant_id,:commgb,:tax_cd,:supply_amt,:vat_amt;

                               

               
                printf("\t%s \t%s \t%s \t%s \t%s \t%s \t%i \t%i\n", enterprise_code, sdt,edt,plant_id,commgb,tax_cd,supply_amt,vat_amt);

                                EXEC SQL INSERT INTO test(enterprise_code, sdt,edt,plant_id,commgb,tax_cd,supply_amt,vat_amt)
                                values(:enterprise_code, :sdt,:edt,:plant_id,:commgb,:tax_cd,:supply_amt,:vat_amt);

                                       
                                        printf("sqlca.sqlerrd[2] :==> %d\n",sqlca.sqlerrd[2]);
                                       
                                        if (sqlca.sqlerrd[2] == 1){
                                                                         
                EXEC SQL COMMIT WORK;
                                                                printf("입력성공했습니다..\n");
                                                                               
                                     

                                                                                } else {
                                                                                  printf("입력실패하였습니다..\n");
                                                                                 
                                                                                   
                                                                                }
                                                                                 
                                }
           
     
       
        EXEC SQL CLOSE bill_cursor;

       

     

        }
    else {printf("20060427 일 아닙니다..\n");

        }

 

    /* DB 연결 종료 */
    EXEC SQL COMMIT WORK RELEASE;

        return 0;
   

}

Comments

번호 제목 글쓴이 날짜 조회
132 네이티브 크로스 플랫폼인 citirne으로 개발한 쇼핑몰 app 소스 공개합니다. 씨트린 2012.08.01 6014
131 강좌 내용의 이미지가 깨지네요. ^^ 댓글+1 심원보 2007.12.07 3237
130 (IE7)'창 닫으시겠습니까' 메시지 없애는 방법 댓글+3 이종철 2007.03.21 4900
129 [정보] IE Dev Toolbar 쓰기 댓글+1 김철민 2006.12.05 6116
128 oracle create 스크립트 추출....... 댓글+4 김철민 2006.11.22 14940
127 ㅠㅜ .... 지나친 게으름과 시차적응 댓글+4 김철민 2006.11.17 3853
126 [Tip]알면 힘이되는 Prototype.js 김철민 2006.11.09 4623
125 [Tip] 오라클 페이징 아주 간단한 팁입니다. 댓글+1 김철민 2006.11.07 4348
124 간단히 만들고 있는 게시판 ERD 와 일부 QUERY 김철민 2006.11.06 3471
123 REST 관련된 내용입니다. 이전 회사분이 적어놓으셨는데 허락없이 올립니다. 댓글+2 김철민 2006.11.02 1922
122 Window 에서 Unix 명령어 쓰기 댓글+3 김철민 2006.10.29 1932
121 SmartSQL*Plus 무료 오라클 관리툴 김기웅 2006.07.06 4227
120 PDF 프린트제한 풀기... 이종철 2006.06.05 1918
119 xp 팁 모음.... 정용길 2006.05.17 2260
118 XLST를 이용한 XML 출력 권홍재 2006.05.07 2555
117 특수키 모음 이종철 2006.05.03 1946
116 xp 최적화 방법 댓글+2 이종철 2006.05.02 2447
열람중 proc관련 질문입니다.. 김훈 2006.04.27 2293
114 ㅜ_ㅜ 여기는 검색이 없네요.. 댓글+1 으헥! 2005.12.26 2094
113 FTP로 Windows 2003 Server에서 Unix Server로 파일 보내기 방법 갈켜주세요 댓글+1 박정길 2005.12.15 2274
112 정말 좋은 사이트네요~ 댓글+2 천국의문 2005.11.28 2215
111 [CVS]로컬 소스를 처음 등록하기(Import) 이종철 2005.11.22 2288
110 Eclipse에서 디버깅 하기 이종철 2005.11.22 1872
109 ADO.NET을 이용한...(VB.NET) 이종철 2005.11.22 1664
108 날짜 쿼리-두 달 사이의 달 가져오기 이종철 2005.11.21 1665
107 [Hint]10g에서 유효하지 않는 힌트...... 이종철 2005.11.21 1678
106 [Hint]조인 방법 변경(HASH_SJ) 이종철 2005.11.21 1715
105 엑셀 파일 읽기(JSP) 댓글+2 이종철 2005.11.18 2070
104 [JUnit]TestCase 클래스 이종철 2005.11.15 1679
103 [ANT]JAR 테스크 소개 이종철 2005.11.12 1655
102 [Hint]조인 방법 변경(HASH_AJ) 이종철 2005.11.12 1816
101 pro-c 프로그램을 pc에서 사용하는 방법을 설명해주세요 2005.11.11 1704
100 [Hint]조인 방법 변경(LEADING) 이종철 2005.11.09 1769
99 [Hint]조인 방법 변경(DRIVING_SITE) 이종철 2005.11.08 1690
98 안녕하세요? 댓글+1 최세희 2005.11.07 2443
97 [힌트]강좌가 갱신 되었습니다.. 이종철 2005.11.06 1799
96 JUnit 강좌가 시작되었습니다!! 이종철 2005.11.06 1784
95 VB.NET 강좌 갱신 이종철 2005.11.05 1699
94 [Hint]조인 방법 변경(USE_NL) 이종철 2005.11.02 1730
93 Oracle Tip 갱신...[내용무] 이종철 2005.11.02 1631
92 Eclipse와 Ant 사용하기 이종철 2005.10.31 1639
91 자바 강좌 갱신! 이종철 2005.10.30 2293
90 안녕하세요. 댓글+1 최유선 2005.10.26 1859
89 그룹핑된 테이블outer join(10g) 이종철 2005.10.26 1915
88 [힌트]STAR_TRANSFORMATION에 관해... 이종철 2005.10.26 1911
87 예전에 가입했지만 첨으로 인사드려요.. 댓글+7 안형철 2005.10.04 1703
86 가입인사드립니다. 댓글+1 이석태 2005.09.20 1734
85 가입인사~~~~ 댓글+1 서동완 2005.09.12 1657
84 가입 했습니다. 댓글+1 김무중 2005.09.12 1704
83 가입했습니당.. *^^* 댓글+1 오은영 2005.09.12 2248