Computer >> 컴퓨터 >  >> 프로그램 작성 >> MySQL

BIND 없이 프로그램에서 SQL 이외의 변경을 했을 때의 실행 결과는?

<시간/>

문제: COBOL-DB2 프로그램이 PIC X(5)에서 PIC X(8)로 변수 길이를 늘리도록 변경되었습니다. 그러나 프로그램의 SQL에는 변경 사항이 없습니다. 프로그램의 계획/패키지가 이러한 변경 사항에 대해 바인딩되지 않은 경우 결과는 어떻게 됩니까?

해결책

PIC X(5)에서 PIC X(8)로의 가변 길이 변경은 DB2 변경이 아니며 프로그램의 SQL문에 필요한 수정 사항이 없습니다. 그러나 여전히 계획/패키지를 바인딩해야 합니다. 그렇지 않으면 "THE PRECOMPILER-GENERATED TIMESTAMP x IN THE LOAD MODULE IS DIFFERENT FROM THE BIND TIMESTAMP y BUILT FROM THE DBRM z"라는 SQL 오류 코드 -818이 표시됩니다.

다음은 이 SQL 오류의 원인입니다. - COBOL-DB2 프로그램을 실행할 때마다 로드 모듈과 패키지/DBRM의 타임스탬프를 비교합니다. 프로그램에서 변수의 길이가 변경되고(그리고 SQL 변경 사항이 없음) 컴파일되면 로드 모듈은 새로 생성된 타임스탬프를 가지며 다른 한편으로 BIND가 수행되지 않으면 패키지/DBRM에는 이전 타임스탬프가 있습니다. 이 프로그램이 실행되면 이 프로그램을 호출하는 JCL 단계가 SQL 오류 코드 -818과 함께 실패합니다.

SQL문이 미래에 변경되지 않는 COBOL-DB2 프로그램이 있는 경우 LEVEL 옵션을 사용하여 이 프로그램을 사전 컴파일할 수 있습니다. 다음은 LEVEL 옵션을 사용하는 BIND 단계의 샘플입니다.

예시

//BIND EXEC PGM=IKJEFT01
//STEPLIB DD DSN=DIS.TEST.LOADLIB,DISP=SHR
//SYSOUT DD SYSOUT=*
//SYSTSIN DD *
DSN SYSTEM(TB3)
BIND PLAN(PLANA) -
PKLIST(PACKA) -
LEVEL -
ACQUIRE(ALLOCATE) -
ISOLATION (RS)
/*