IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Oracle Discussion :

Problème de syntaxe pour fichier SQL


Sujet :

SQL Oracle

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2005
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 11
    Points : 7
    Points
    7
    Par défaut Problème de syntaxe pour fichier SQL
    Bonjour les gens !

    J'ai un petit soucis avec la tentative de création d'un fichier ".SQL", que j'éxecute grâce à un fichier ".SH" avec Telnet.

    Voici en gros mon 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
     
    spool test.log
     
    truncate table ... ;
    commit;
     
    select 'Before Insert' , to_char(sysdate,'DD/MM/YYYY HH24:MI:SS')  from dual ;
     
    DECLARE 
    err_code varchar(200); 
    err_msg varchar(200);
    BEGIN
     
    insert into TABLE1 (arg1, arg2) 
    select to_char(sysdate,'YYYYMMDD'), to_char(sysdate,'HH24MISS')  from dual
    commit;
     
    Select 'After Insert' , to_char(sysdate,'DD/MM/YYYY HH24:MI:SS')  from dual ;
     
    EXCEPTION
      WHEN OTHERS THEN 
    		 BEGIN
    		 err_code := SQLCODE;
    	             err_msg := substr(SQLERRM, 1, 200);
    	             INSERT INTO ZERREURS  (nom, err_code, err_msg) values    ('TABLE1', err_code, substr( err_msg, 1, 200)); 
    	             commit;
                              END;
     
    END;
    /
     
    spool off ;
     
    exit
    Selon où je place le "DECLARE..BEGIN", je n'ai pas les mêmes résultats affichés dans Telnet, par rapport déjà à l'affichage des After Insert, et Before Insert (Ici, Seul Before Insert est affiché).

    J'utilise ce "Declare...Begin" pour la capture d'exceptions (que je n'arrive donc pas à faire)

    Chilvouplaich, help me !!!

    Merci d'avance!
    V.

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Utilisez des dbms_output dans le bloc begin end pour afficher des messages (et sous SQLPlus faîtes set serveroutput on) mais surtout par pitié, APPRENEZ à respecter les règles du forum...
    Modérateur des forums Oracle et Langage SQL
    Forum SQL : je n'interviens PAS plus de 4 fois dans une discussion car si c'est nécessaire cela prouve généralement que vous n'avez pas respecté : les règles du forum

  3. #3
    Futur Membre du Club
    Inscrit en
    Avril 2005
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Le but n'est pas d'afficher les messages, ça marchait déjà avant de mettre le "declare begin" et l'exception !!!! C'est pour cela que je voudrais savoir où placer ce begin, afin qu'il ne fasse plus bugger mon code, et que je puisse capturer des erreurs possibles ?!

  4. #4
    Membre régulier Avatar de links
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 113
    Points : 95
    Points
    95
    Par défaut
    si tu n'as que le "before insert" qui s'affiche c'est que le "after insert" pose problème, mais ça tu le sais déjà; maintenant si tu n'arrives pas a récupérer le code d'erreur, c'est a mon avis parce que tu as donné le même nom de colone de ta table à tes variables. remplace tes variables err_code et err_msg par v_err_code et v_err_msg respectivement.

  5. #5
    Futur Membre du Club
    Inscrit en
    Avril 2005
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Salut,

    En fait, le code marche trèes bien entre le Begin et l'Exception :

    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
     
    spool test.log
     
    truncate table ... ;
    commit;
     
    select 'Before Insert' , to_char(sysdate,'DD/MM/YYYY HH24:MI:SS')  from dual ;
     
    insert into TABLE1 (arg1, arg2) 
    select to_char(sysdate,'YYYYMMDD'), to_char(sysdate,'HH24MISS')  from dual
    commit;
     
    Select 'After Insert' , to_char(sysdate,'DD/MM/YYYY HH24:MI:SS')  from dual ;
     
    spool off ;
     
    exit
    Après avoir testé le code précédent seul (qui est donc bon), j'ai inséré le Begin et l'Exception, pour tenter de capturer les erreurs. Mais c là que se produisent les bugs (du After par exemple).

    Niveau capture d'erreur, ça marche aussi (en testant avec une boucle while entre le Begin et l'Exception)
    Mais avec l'insertion de cette capture d''exception avec mon code précédent, ça ne marche plus !!

    Comprends po !!!

  6. #6
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    en PL/SQL on faire SELECT ... INTO

  7. #7
    Futur Membre du Club
    Inscrit en
    Avril 2005
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Bah en fait, ca marchait très bien ce code, avant l'insertion du Begin Exception ... avec ou sans Into

  8. #8
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    Evidemment en SQL ça marche mais en PL/SQL il faut INTO... et BEGIN/END c'est pour encadrer du code PL/SQL

  9. #9
    Futur Membre du Club
    Inscrit en
    Avril 2005
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Niark Niark !

    Je dois être en SQL alors, vu que ça marche sans INTO

    Bref, ne nous éloignons pas de mon problème principal :
    Où placer LE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    DECLARE 
    err_code varchar(200); 
    err_msg varchar(200);
    BEGIN
    ET LE :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    EXCEPTION
      WHEN OTHERS THEN 
    		 BEGIN
    		 err_code := SQLCODE;
    	             err_msg := substr(SQLERRM, 1, 200);
    	             INSERT INTO ZERREURS  (nom, err_code, err_msg) values    ('TABLE1', err_code, substr( err_msg, 1, 200)); 
    	             commit;
                              END;
     
    END;
    /
    POUR que ça marche nickel !!?? moi j'y arrive po ! il doit manquer quelque chose???

  10. #10
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    Si tu veux caser ces lignes alors CE QUI EST ENTRE LES DEUX DOIT ETRE CODE EN PL/SQL ! Donc pas de spool et pas de SELECT sans INTO : http://sheikyerbouti.developpez.com/pl_sql/

    je ne sais plus comment le dire, vraiment c'est pénible

  11. #11
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Essaie :
    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
    spool test.log
     
    truncate table ... ;
    commit;
     
    select 'Before Insert' , to_char(sysdate,'DD/MM/YYYY HH24:MI:SS')  from dual ;
     
    DECLARE 
    err_code varchar(200); 
    err_msg varchar(200);
    BEGIN
     
    insert into TABLE1 (arg1, arg2) 
    select to_char(sysdate,'YYYYMMDD'), to_char(sysdate,'HH24MISS')  from dual
    commit;
     
    EXCEPTION
      WHEN OTHERS THEN 
    		 BEGIN
    		 err_code := SQLCODE;
    	             err_msg := substr(SQLERRM, 1, 200);
    	             INSERT INTO ZERREURS  (nom, err_code, err_msg) values    ('TABLE1', err_code, substr( err_msg, 1, 200)); 
    	             commit;
                              END;
     
    END;
    /
     
    Select 'After Insert' , to_char(sysdate,'DD/MM/YYYY HH24:MI:SS')  from dual ;
     
     
     
    spool off ;
     
    exit
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  12. #12
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    sachant que le COMMIT après TRUNCATE est inutile et que tout en SQL avec juste un SET TIMING ON ferait l'affaire

  13. #13
    Futur Membre du Club
    Inscrit en
    Avril 2005
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Bah je viens de tester le code que tu m'as donné, PlaineR, et ça marche (si je ne me trompe pas!!!).

    Je suis vraiment une taupe en PL/SQL blabla

    Eh bien merci de votre aide, tout ça tout ça, je suis si ému, ça marche enfin

    A plouss.
    V.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2007] Problème de syntaxe pour une formule SQL en VBA
    Par franckimmo dans le forum IHM
    Réponses: 4
    Dernier message: 12/02/2010, 10h54
  2. [VBA-Excel] Problème de syntaxe pour lien hypertexte
    Par matt8-5 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 04/01/2007, 11h23
  3. Problème de syntaxe pour concaténer des variables
    Par renaud26 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 05/09/2006, 09h44
  4. [MySQL] Problème récupération variable pour requête SQL !!
    Par mLk92 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 01/06/2006, 16h08
  5. Problème de syntaxe pour Firefox
    Par daladim dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 24/09/2005, 16h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo