2010-12-16 2 views
0

나는 cobol 프로그램을 작성하여 PS 파일을 읽고 PS 파일에 설정된 플래그를 기반으로 DB2 테이블을 업데이트합니다. 파일의 필드 중 하나가 cobol 프로그램에서 소수 필드로 선언됩니다. 그러나 테이블의 해당 필드를 업데이트하려고하면 오류가 표시됩니다. 테이블에서 동일한 필드를 선언해야하며 필드의 업데이트 문을 어떻게 작성해야합니까?10 진수 필드가있는 파일에서 테이블을 업데이트하는 방법은 무엇입니까?

필드 이름은 소수점이있는 급여입니다.

+1

오류입니다 ...? DB2의 컬럼은 ...입니까? 그리고 cobol의 사진은 ...? –

답변

0

십진수 필드 유형은 DB2와 호환되지 않는 형식으로 값을 보유하므로 새 값을 데이터베이스에 릴리스하기 전에 변환해야합니다 (레코드에 대한 쓰기 또는 갱신 권한이있는 경우). PIC 9 (6) V.99 필드 또는 그와 유사한 필드로 이동 한 다음 DB2 레코드를 갱신해야 할 수도 있습니다. COBOL은 조작을위한 다른 데이터 표현을 사용하는 프로그래밍 언어이며 데이터베이스는 레코드에 데이터를 저장하는 용도로 사용되며 더 적은 형식을 사용할 수 있습니다.

1

에 대한 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. 
관련 문제