문제

아래의 "sh.prom"인 AS / 400의 DB2 테이블 인 "SH.PROM"에 대한 테이블 / 파일 레이아웃은 우리 시스템 전체에서 월간 항목을 렌더링 할 책임이 있습니다. 일반적인 테이블 레이아웃에 익숙하지 않은 사람은 일반적으로 3 개의 열이 있는지 알아야합니다. F00001, K00001 및 F00002. 때로는 4 번째가 우리 (K00002)에 나타납니다. 우리 시스템에서 F00002는 일반적으로 이름, 위치, 길이 및 데이터 유형을 제공 한 여러 개의 서브 필드를 보유하고 있습니다. Notes 컬럼의 '툭툭'은 EBCDIC 문자에서 0으로 나오거나 '간격이 "데이터 관점에서 중요하지 않지만 여전히 제대로 여전히 있어야합니다.

        Field   Pos.  Len.  Name      Type     Notes
        ---------------------------------------------
        F00001    1     2   MACT      Alpha    Activity Code, Always 1 or 9 (active/inactive)
        K00001    1    20   MITEM     Alpha    Item Number
        K00001   21     2   MP        Alpha    Unknown title, Always 'P'
        K00001   23     2   MPITCL    Alpha    Unknown title, Always 'P' or 'I'
        F00002    1     8   MSTDAT    Integer  Promotion Start Date, MMDDYY0F
        F00002    9     8   MEXDAT    Integer  Promotion End Date, MMDDYY0F
        F00002   17     8   MLIST     Decimal  Amount to be subtracted from original price
        F00002   25     8   MRETAL    Decimal  Fluff, 0000000f
        F00002   33     8   MCOST     Decimal  Fluff, 0000000f
        F00002   41    10   MQTY      Decimal  Fluff, 000000000f
        F00002   51     6   MPCHNG    Integer  Fluff, 00000f
        F00002   57    12   MNPEFT    Alpha    Fluff, 404040404040
        F00002   69     8   MNSTDT    Integer  Fluff, 0000000f
        F00002   77     8   MNEXDT    Integer  Fluff, 0000000f
        F00002   85     8   MNLST     Decimal  Fluff, 0000000f
        F00002   93     8   MPNRTL    Integer  Fluff, 0000000f
        F00002  101     8   MNCOST    Decimal  Fluff, 0000000f
        F00002  109     8   ZZ14      Alpha    Fluff, 40404040
        F00002  117     8   MALPHA    Alpha    Fluff, 40404040
        F00002  125   170   ZZ64      Alpha    Fluff, 40404040404040...
.

프로모션 시작 / 종료 날짜를 삽입하는 문제가 있습니다.

열 F00002에 데이터를 문자열로 삽입하면 자동으로 EBCDIC 숫자로 변환됩니다.

    INSERT INTO "SH.PROM" (F00001,K00001,F00002) VALUES ('1','0000620311PP','0201140F0228140F...')
.

(*** F00002의 삽입 데이터의 후행 도트는 위의 파일 / 테이블 레이아웃이 나머지를 따릅니다.)

및 f00002 정수로서 시도하기위한 정수로서 :

    INSERT INTO "SH.PROM" (F00001,K00001,F00002) VALUES ('1','0000620311PP',0201140...)
.

컬럼은 왼쪽 패딩 된 0을 생략하고이를 EBCDIC 문자로 다시 변환합니다.

여기에 기존 F00002 필드의 예는 물론 두 가지 유용한 squirrelshots :) (일명 SQL 다람쥐 스크린 샷) 첫 번째 두 번째 :

  08  01  13  0f  01  31  14  0f  00  00  38  0f  00  00  00  0f  00  00  00  0f  00  00  06  80  0f  00  00  0f  f0  f0  f0  f0  f0  f0  00  00  00  0f  00  00  00  0f  00  00  00  0f  00  00  00  0f  00  00  00  0f  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  
.

데이터가 제대로 저장되도록이 F00002 필드를 어떻게 삽입합니까?

도움이 되었습니까?

해결책

올바른 솔루션은 데이터 설명 사양 (DDS) .

레거시 프로그램은 외부에서 설명한 파일에 액세스하는 데 문제가 없습니다.

외부에서 설명되면 필드에 정상적으로 액세스하고 데이터베이스 핸들 유형 변환을 수행 할 수 있습니다.

여기를 시작하는 샘플이 있습니다.프로그램 소스에서 실제 입력 사양이 없으면 숫자 필드의 소수 자릿수로 추측했습니다.

A          R PROM
A            MACT           2A
A            MITEM         20A
A            MP             2A
A            MPITCL         2A
A            MSTDAT         8S 0
A            MEXDAT         8S 0
A            MLIST          8S 2
A            MRETAL         8S 2
A            MCOST          8S 2
A            MQTY          10S 0
A            MPCHNG         6S 0
A            MNPEFT        12A
A            MNSTDT         8S 0
A            MNEXDT         8S 0
A            MNLST          8S 2
A            MPNRTL         8S 2
A            MNCOST         8S 2
A            ZZ14           8A
A            MALPHA         8A
A            ZZ64         170A
A          K MITEM
A          K MP
A          K MPITCL
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top