HIGH-VALUE (COBOL) and DB2
Hello tout le monde,
Je travaille sur une platform windows XP avec une base de données DB/2 and je rencontre un problème lorsque j'essaye d'insérer (à travers un programme COBOL) a champ qui contient la valeur COBOL "HIGH-VALUE".
Voici mon problème illustré avec ce petit example :
Ma table est crée avec :
Code:
1 2 3 4 5 6 7
|
CREATE TABLE PERS (
RID INTEGER NOT NULL,
"LAST_NAME" VARCHAR(30),
"FIRST_NAME" VARCHAR(20),
"AGE" NUMERIC(3,0),
CONSTRAINT PERS_PK PRIMARY KEY (RID)); |
et mon programme COBOL (avant précompilation avec le précompilateur DB2) est :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| IDENTIFICATION DIVISION.
PROGRAM-ID. INSER.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
DATA DIVISION.
WORKING-STORAGE SECTION.
EXEC SQL INCLUDE SQLCA END-EXEC.
EXEC SQL BEGIN DECLARE SECTION END-EXEC.
01 WORK-VARS.
05 HOST-RID PIC S9(9) COMP-5.
05 HOST-LAST-NAME PIC X(30).
05 HOST-FIRST-NAME PIC X(20).
05 HOST-AGE PIC S9(4) COMP-5.
EXEC SQL END DECLARE SECTION END-EXEC.
EXEC SQL WHENEVER NOT FOUND CONTINUE END-EXEC.
EXEC SQL WHENEVER SQLERROR CONTINUE END-EXEC.
EXEC SQL WHENEVER SQLWARNING CONTINUE END-EXEC.
PROCEDURE DIVISION.
EXEC SQL
CONNECT TO sample user db2admin using ******
END-EXEC.
MOVE 1 TO HOST-RID.
MOVE HIGH-VALUES TO HOST-LAST-NAME.
MOVE "Jean" TO HOST-FIRST-NAME.
MOVE 33 TO HOST-AGE.
EXEC SQL
****************************************
INSERT INTO PERS
(
"RID", "LAST_NAME", "FIRST_NAME","AGE"
)
VALUES
(
:HOST-RID, :HOST-LAST-NAME, :HOST-FIRST-NAME, :HOST-AGE
)
END-EXEC.
IF NOT SQLCODE = 0 THEN
DISPLAY "ERROR : SQLCODE " SQLCODE UPON CONSOLE
ELSE
EXEC SQL COMMIT END-EXEC
END-IF.
STOP RUN. |
L'erreur retournée est -302 :THE VALUE OF INPUT VARIABLE OR PARAMETER NUMBER position-number IS INVALID OR TOO LARGE FOR THE TARGET COLUMN OR THE TARGET VALUE
Mais si je remplaceMOVE HIGH-VALUES TO HOST-LAST-NAME. par MOVE "Dupond" TO HOST-LAST-NAME. ou même MOVE HIGH-VALUE TO HOST-LAST-NAME(1:15).
l'insertion se passe correctement. Ce qui me fait donc arrivé à la conclusion que DB/2 interprète un COBOL PIC X(30) contenant des HIGH-VALUE comme un VARCHAR(60). Est-Quelqu'un sait-il pourquoi ? Est-il possible de changer cela ? Bref... toute information concernant cette transformation étrange est la bienvenue !
Merci d'avance pour vos réponses.
Bien à vous,
Yan302