에 대한 PICTURE/USAGE 절을 입력 파일 레코드와 DB/2 열 정의에 게시하는 것이 훨씬 도움이됩니다.
그러나 데이터 변환 문제와 비슷합니다. 체크 아웃 할 사항은 다음과 같습니다
입력 파일 레코드 PIC 9(5).99
같은 영상/USAGE 뭔가를 가지고있다. 핵심 포인트 은 선언에 명시적인 소수점이 있다는 것입니다. 텍스트 편집기 (예 : ISPF 편집기)로 입력 파일을 보면 과 같은 번호가 12345.67
과 같이 표시됩니다. 이 숫자는 표시 형식입니다. 그것들을 텍스트로 생각하십시오.
DB/2 열 정의. DB/2의 십진수는 일반적으로 DECIMAL(7,2)
과 같이 선언됩니다. 이 방법으로 선언 된 숫자는 DB/2에 의해 팩 십진수 형식으로 저장됩니다. 아마 입력 파일에 존재하는
표시 형식 번호는, 포장 진수 숫자 (사과와 오렌지)와 호환되지 않습니다.
이 점은 다음과 같은 작은 COBOL 프로그램을 고려 설명하기 :
IDENTIFICATION DIVISION.
PROGRAM-ID. EXAMPLE.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 A PIC 9(6).99.
01 B PIC 9(6)V99 PACKED-DECIMAL.
PROCEDURE DIVISION.
MOVE 123456.78 TO A
DISPLAY 'A=' A
MOVE A TO B
ADD 1 TO B
DISPLAY 'B=' B
MOVE B TO A
DISPLAY 'A=' A
GOBACK.
변수 A
는 노골적인 소수 포인트, 표시 형식입니다. 당신이 할 수있는 일은 입니다. ADD 1 TO A
같은 것을 시도하면 이 컴파일 오류가 발생합니다.
트릭은 표시 형식의 숫자를 DB/2 (예 : Packed Decimal)와 호환되는 것으로 얻는 것입니다. COBOL MOVE 동사가이 작업을 수행합니다. DB/2에서 사용하는 것과 호환되는 데이터 형식 으로 새 변수를 선언하십시오. 위의 변수 B
은 그러한 변수입니다. 디스플레이 서식이 지정된 변수를 Packed Decimal 변수로 이동하십시오 (예 : MOVE A TO B
). COBOL 런타임은이 변환을 수행합니다.
B
에 뭔가를 추가 할 수 있습니다. 디스플레이 B
(woops 소수점이 사라짐 - 이유를 설명해 드리겠습니다.)그런 다음 디스플레이 형식으로 다시 이동하십시오. 이봐, 소수점 이 다시 나타납니다.
DB/2는 변환없이 호스트 변수를 사용합니다. 해당 호스트 변수에 데이터 형식이 올바르지 않으면 오류가 발생합니다.
당신은 아마 같은 것을 수행해야합니다
Read Record
MOVE record display data (eg. `A`) to a DB/2 compatible field (eg. `B`)
EXEC SQL
INSERT INTO table (
...
SALARY,
...)
VALUES (
...
:B,
...)
END-EXEC.
오류입니다 ...? DB2의 컬럼은 ...입니까? 그리고 cobol의 사진은 ...? –