Même en enlevant le ; j'ai toujours la même erreur
Même en enlevant le ; j'ai toujours la même erreur
Je pense que c'est bon mais je vous confirme ça dans un instant je pense que ça pas été bien compilé
En fait ça marche quand je l'exécute comme ça en dur mais si je la met dans une procédure j'ai une erreur
Erreur(5,7): PLS-00103: Symbole "INTO" rencontré à la place d'un des symboles suivants : constant exception <identificateur> <identificateur entre guillemets> table LONG_ double ref char time timestamp interval date binary national character nchar
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
45 CREATE OR REPLACE PROCEDURE EXPORT IS MERGE INTO PPP_UPP D USING (SELECT PER_NAM,PER_FNA,UPP_LOG,UPP_PWD,UPP_STA,UPP_INM,UPP_END, UPP_MEL,UPP_IPA,UPP_SST,UPP_PSS,TIT_KEY,CIV_KEY,AUD_KEY, UPP_PPW,UPP_DPW,UPP_TIC,UPP_SUD,UPP_INN,CPS_KEY,MAU_KEY, UPP_WWI,UPP_EXT,UPP_UPD,UPP_SGN,UPP_DAD,UPP_DAF,UPP_AMS FROM PPP_MAIN_TRANSFERT) S ON (D.UPP_NAM = S.PER_NAM AND D.UPP_FNA = S.PER_FNA AND D.UPP_LOG = S.UPP_LOG) WHEN MATCHED THEN UPDATE SET D.UPP_PWD = S.UPP_PWD, D.UPP_DAD = S.UPP_DAD, D.UPP_DAF = S.UPP_DAF, D.UPP_SGN = S.UPP_SGN, D.UPP_STA = S.UPP_STA, D.UPP_INM = S.UPP_INM, D.UPP_END = S.UPP_END, D.UPP_MEL = S.UPP_MEL, D.UPP_IPA = S.UPP_IPA, D.UPP_SST = S.UPP_SST, D.UPP_PSS = S.UPP_PSS, D.TIT_KEY = S.TIT_KEY, D.CIV_KEY = S.CIV_KEY, D.AUD_KEY = S.AUD_KEY, D.UPP_PPW = S.UPP_PPW, D.UPP_DPW = S.UPP_DPW, D.UPP_TIC = S.UPP_TIC, D.UPP_SUD = S.UPP_SUD, D.UPP_INN = S.UPP_INN, D.CPS_KEY = S.CPS_KEY, D.MAU_KEY = S.MAU_KEY, D.UPP_WWI = S.UPP_WWI, D.UPP_EXT = S.UPP_EXT, D.UPP_UPD = S.UPP_UPD, D.UPP_AMS = S.UPP_AMS WHEN NOT MATCHED THEN INSERT ( UPP_NAM, UPP_FNA, UPP_LOG, UPP_PWD, UPP_STA, UPP_INM, UPP_END, UPP_MEL, UPP_IPA, UPP_SST, UPP_PSS, TIT_KEY, CIV_KEY, AUD_KEY, UPP_PPW, UPP_DPW, UPP_TIC, UPP_SUD, UPP_INN, CPS_KEY, MAU_KEY, UPP_WWI, UPP_EXT, UPP_UPD, UPP_SGN, UPP_DAD, UPP_DAF, UPP_AMS ) VALUES ( S.PER_NAM, S.PER_FNA, S.UPP_LOG, S.UPP_PWD, S.UPP_STA, S.UPP_INM, S.UPP_END, S.UPP_MEL, S.UPP_IPA, S.UPP_SST, S.UPP_PSS, S.TIT_KEY, S.CIV_KEY, S.AUD_KEY, S.UPP_PPW, S.UPP_DPW, S.UPP_TIC, S.UPP_SUD, S.UPP_INN, S.CPS_KEY, S.MAU_KEY, S.UPP_WWI, S.UPP_EXT, S.UPP_UPD, S.UPP_SGN, S.UPP_DAD, S.UPP_DAF, S.UPP_AMS ); COMMIT; END;
Il manque un BEGIN dans le code
un PLSQL
c'est
voir la doc officielle gratuite
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 BEGIN instruction ; END;
http://download.oracle.com/docs/cd/B...htm#SQLRF01309
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Creating a Procedure: Example The following statement creates the procedure remove_emp in the schema hr. The PL/SQL is shown in italics: CREATE PROCEDURE remove_emp (employee_id NUMBER) AS tot_emps NUMBER; BEGIN DELETE FROM employees WHERE employees.employee_id = remove_emp.employee_id; tot_emps := tot_emps - 1; END; /
Je pense que je ne mérite pas qu'on m'aide à cause de mon manque d'attention il faudrait que je sois plus confiant plus concentré et moins stressé et il faudrait que je fasse des recherches plus approfondies avant de poser mes questions.
Sinon merci à tous ! Vous êtes super !![]()
Encore moi mais cette fois j'ai une question plus intelligente. Tout fonctionne correctement mais en cas d'erreur sur l'insertion ou la mise à jour d'une ligne, le programme plante. Est-il possible de catcher l'erreur et de forcer l'insertion des autres lignes surtout que j'utilise la fonctione MERGE ?
Re voici le code :
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
45
46
47 create or replace PROCEDURE EXPORT IS BEGIN MERGE INTO PPP_UPP D USING (SELECT PER_NAM,PER_FNA,UPP_LOG,UPP_PWD,UPP_STA,UPP_INM,UPP_END, UPP_MEL,UPP_IPA,UPP_SST,UPP_PSS,TIT_KEY,CIV_KEY,AUD_KEY, UPP_PPW,UPP_DPW,UPP_TIC,UPP_SUD,UPP_INN,CPS_KEY,MAU_KEY, UPP_WWI,UPP_EXT,UPP_UPD,UPP_SGN,UPP_DAD,UPP_DAF,UPP_AMS FROM PPP_MAIN_TRANSFERT) S ON (D.UPP_NAM = S.PER_NAM AND D.UPP_FNA = S.PER_FNA AND D.UPP_LOG = S.UPP_LOG) WHEN MATCHED THEN UPDATE SET D.UPP_PWD = S.UPP_PWD, D.UPP_DAD = S.UPP_DAD, D.UPP_DAF = S.UPP_DAF, D.UPP_SGN = S.UPP_SGN, D.UPP_STA = S.UPP_STA, D.UPP_INM = S.UPP_INM, D.UPP_END = S.UPP_END, D.UPP_MEL = S.UPP_MEL, D.UPP_IPA = S.UPP_IPA, D.UPP_SST = S.UPP_SST, D.UPP_PSS = S.UPP_PSS, D.TIT_KEY = S.TIT_KEY, D.CIV_KEY = S.CIV_KEY, D.AUD_KEY = S.AUD_KEY, D.UPP_PPW = S.UPP_PPW, D.UPP_DPW = S.UPP_DPW, D.UPP_TIC = S.UPP_TIC, D.UPP_SUD = S.UPP_SUD, D.UPP_INN = S.UPP_INN, D.CPS_KEY = S.CPS_KEY, D.MAU_KEY = S.MAU_KEY, D.UPP_WWI = S.UPP_WWI, D.UPP_EXT = S.UPP_EXT, D.UPP_UPD = S.UPP_UPD, D.UPP_AMS = S.UPP_AMS WHEN NOT MATCHED THEN INSERT ( UPP_NAM, UPP_FNA, UPP_LOG, UPP_PWD, UPP_STA, UPP_INM, UPP_END, UPP_MEL, UPP_IPA, UPP_SST, UPP_PSS, TIT_KEY, CIV_KEY, AUD_KEY, UPP_PPW, UPP_DPW, UPP_TIC, UPP_SUD, UPP_INN, CPS_KEY, MAU_KEY, UPP_WWI, UPP_EXT, UPP_UPD, UPP_SGN, UPP_DAD, UPP_DAF, UPP_AMS ) VALUES ( S.PER_NAM, S.PER_FNA, S.UPP_LOG, S.UPP_PWD, S.UPP_STA, S.UPP_INM, S.UPP_END, S.UPP_MEL, S.UPP_IPA, S.UPP_SST, S.UPP_PSS, S.TIT_KEY, S.CIV_KEY, S.AUD_KEY, S.UPP_PPW, S.UPP_DPW, S.UPP_TIC, S.UPP_SUD, S.UPP_INN, S.CPS_KEY, S.MAU_KEY, S.UPP_WWI, S.UPP_EXT, S.UPP_UPD, S.UPP_SGN, S.UPP_DAD, S.UPP_DAF, S.UPP_AMS ); COMMIT; END;
L'idéal c'est d'éviter l'erreur
Quelle est l'erreur en question ? Parce que si MERGE ne peut pas faire l'insertion, il y a peu de chance qu'INSERT y arrive![]()
Pendant que le forum était en maintenance j'ai trouvé la solution. Je me suis servi de ce lien http://www.developpez.net/forums/d47...algre-erreure/
La voici :
1- tout d'abord créer une table gérant les erreurs oracle (spcécifique à oracle)
ensuite le code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 CREATE TABLE "ERRLOG" (ORA_ERR_NUMBER$ NUMBER, ORA_ERR_MESG$ VARCHAR2(2000), ORA_ERR_ROWID$ ROWID, ORA_ERR_OPTYP$ VARCHAR2(2), ORA_ERR_TAG$ VARCHAR2(2000) );
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70 create or replace PROCEDURE EXPORT AS BEGIN DECLARE ERROR_VAR INTEGER; MY_SELECT VARCHAR(4000); BEGIN MY_SELECT := 'TRUNCATE TABLE ERRLOG'; EXECUTE IMMEDIATE(MY_SELECT); MERGE INTO table_destination D USING (SELECT PER_NAM,PER_FNA,UPP_LOG,UPP_PWD,UPP_STA,UPP_INM,UPP_END, UPP_MEL,UPP_IPA,UPP_SST,UPP_PSS,TIT_KEY,CIV_KEY,AUD_KEY, UPP_PPW,UPP_DPW,UPP_TIC,UPP_SUD,UPP_INN,CPS_KEY,MAU_KEY, UPP_WWI,UPP_EXT,UPP_UPD,UPP_SGN,UPP_DAD,UPP_DAF,UPP_AMS FROM table_cible) S ON (D.UPP_NAM = S.PER_NAM AND D.UPP_FNA = S.PER_FNA AND D.UPP_LOG = S.UPP_LOG) WHEN MATCHED THEN UPDATE SET D.UPP_PWD = S.UPP_PWD, D.UPP_DAD = S.UPP_DAD, D.UPP_DAF = S.UPP_DAF, D.UPP_SGN = S.UPP_SGN, D.UPP_STA = S.UPP_STA, D.UPP_INM = S.UPP_INM, D.UPP_END = S.UPP_END, D.UPP_MEL = S.UPP_MEL, D.UPP_IPA = S.UPP_IPA, D.UPP_SST = S.UPP_SST, D.UPP_PSS = S.UPP_PSS, D.TIT_KEY = S.TIT_KEY, D.CIV_KEY = S.CIV_KEY, D.AUD_KEY = S.AUD_KEY, D.UPP_PPW = S.UPP_PPW, D.UPP_DPW = S.UPP_DPW, D.UPP_TIC = S.UPP_TIC, D.UPP_SUD = S.UPP_SUD, D.UPP_INN = S.UPP_INN, D.CPS_KEY = S.CPS_KEY, D.MAU_KEY = S.MAU_KEY, D.UPP_WWI = S.UPP_WWI, D.UPP_EXT = S.UPP_EXT, D.UPP_UPD = S.UPP_UPD, D.UPP_AMS = S.UPP_AMS WHEN NOT MATCHED THEN INSERT ( UPP_NAM, UPP_FNA, UPP_LOG, UPP_PWD, UPP_STA, UPP_INM, UPP_END, UPP_MEL, UPP_IPA, UPP_SST, UPP_PSS, TIT_KEY, CIV_KEY, AUD_KEY, UPP_PPW, UPP_DPW, UPP_TIC, UPP_SUD, UPP_INN, CPS_KEY, MAU_KEY, UPP_WWI, UPP_EXT, UPP_UPD, UPP_SGN, UPP_DAD, UPP_DAF, UPP_AMS ) VALUES ( S.PER_NAM, S.PER_FNA, S.UPP_LOG, S.UPP_PWD, S.UPP_STA, S.UPP_INM, S.UPP_END, S.UPP_MEL, S.UPP_IPA, S.UPP_SST, S.UPP_PSS, S.TIT_KEY, S.CIV_KEY, S.AUD_KEY, S.UPP_PPW, S.UPP_DPW, S.UPP_TIC, S.UPP_SUD, S.UPP_INN, S.CPS_KEY, S.MAU_KEY, S.UPP_WWI, S.UPP_EXT, S.UPP_UPD, S.UPP_SGN, S.UPP_DAD, S.UPP_DAF, S.UPP_AMS ) LOG ERRORS INTO PPP_ERRLOG_TRANSFERT ('table_destination_MERGE_INSERT') REJECT LIMIT UNLIMITED; --permet de poursuivre malgré une erreure -- on teste si on a rencontré une erreure durant le merge MY_SELECT := 'SELECT COUNT(ORA_ERR_NUMBER$) FROM ERRLOG'; EXECUTE IMMEDIATE(MY_SELECT) INTO ERROR_VAR; DBMS_OUTPUT.PUT_LINE(ERROR_VAR); IF ERROR_VAR = 0 Then DBMS_OUTPUT.PUT_LINE('Aucune erreure'); else DBMS_OUTPUT.PUT_LINE('Erreure trouvée'); end IF; END; COMMIT; END;
Je termine moins con que ce matin et merci à tous![]()
En cas d'erreur j'aimerai pouvoir trouver la ou les lignes qui créent l'erreur ???
les lignes ne sont pas ordonnées dans une table. Il faut que tu stockes l'identifiant de ta ligne.
Félicitations en tout cas, on voit que tu fais des efforts et que c'est payant![]()
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager