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 :
et mon programme COBOL (avant précompilation avec le précompilateur DB2) est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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));
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
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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.
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
Partager