Bonjour,
J'ai fais une procedure qui lit dans un premier curseur un fichier de travail ou je récupère les infos suivantes: nom de fichier, sa bib et le nom du champ.(ex: Fic1/BIB1/CHAMP1)
Avec ces infos j'exécute une requête pour savoir si dans ce fichier j'ai une valeur EP1 dans le champ (SELECTCOUNT(*) from BIB1/FIC1 WHERE CHAMP1='EP1')
Si COUNT*) >0 alors je mets le nom du fichier correspondant dans une table File3 .
Mais j'ai un pbm dans la déclaration du curseur curcount. A l'exécution, au niveau dej'ai le message "L'instruction préparée WSTMT n'a pas été trouvée" .
Code : Sélectionner tout - Visualiser dans une fenêtre à part OPEN CurCount;
Le code de la procédure
Le pbm est que le curseur change à chaque itération puisque la bib et le fichier change. Et si je mets le déclare dans la boucle du curseur2 à la compile ça passe pas.
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 CREATE OR REPLACE PROCEDURE NLORG() LANGUAGE SQL BEGIN DECLARE SQLSTATE CHAR(5); DECLARE WStmt CHAR(200); DECLARE V_NAME CHAR(10); DECLARE V_LIB CHAR(10); DECLARE V_FILE CHAR(10); DECLARE V_SQL VARCHAR(200); DECLARE V_RESULT VARCHAR(200); DECLARE COTE CHAR(1) DEFAULT ''''; DECLARE CurCount CURSOR FOR wstmt; DECLARE CurFile2 CURSOR FOR SELECT WhLIB, WHFILE, WHFLDI FROM ikspobj_pf.file2; OPEN CurFile2; FETCH_LOOP: LOOP FETCH CurFile2 INTO V_LIB, V_FILE, V_NAME; IF SQLSTATE = '02000' THEN LEAVE FETCH_LOOP; END IF; SET wstmt='SELECT COUNT(*) ' || 'FROM '||V_LIB || '/' || V_FILE || ' WHERE '||V_NAME ||' = ' ||cote||'EP1'||cote; OPEN CurCount; FETCH CurCount INTO V_RESULT; CLOSE CurCount; IF V_RESULT > 0 THEN SET V_SQL = 'INSERT INTO ikspobj_pf.file3 VALUES ('||V_FILE||')'; EXECUTE IMMEDIATE V_SQL; END IF; END LOOP; CLOSE CurFile2; END;
Ensuite s'il y a plus simple , je suis preneur! Une idée escartefigue?
Partager