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

Oracle Discussion :

Script SQL avec des EXIT SQL.SQLCODE


Sujet :

Oracle

  1. #1
    Membre du Club
    Inscrit en
    Décembre 2003
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 66
    Points : 43
    Points
    43
    Par défaut Script SQL avec des EXIT SQL.SQLCODE
    Salut,
    Voilà mon problème. J'ai fait un script SQL suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SET SERVEROUT ON
    SPOOL L:\spool.out
    WHENEVER OSERROR EXIT FAILURE
    WHENEVER SQLERROR EXIT SQL.SQLCODE
    VARIABLE l_status NUMBER
    EXECUTE :l_status := 1
    EXECUTE :l_status := sys.diutil.bool_to_int(mon_pack.ma_fonct(2))
    PRINT :l_status
    EXIT :l_status;
    Ce que je veux faire c'est remplacer le SQL.SQLCODE et le FAILURE par un entier à moi (3 et 4 par exemple) du style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    WHENEVER OSERROR EXIT 3
    WHENEVER SQLERROR EXIT 4
    Mais j'aimerais tout de même afficher le SQL.SQLCODE dans le SPOOL à l'aide du print. Comme le exit est fait immédiatement, je n'ai pas le temps de faire de print.
    Y'a t'il un moyen de faire des goto avec des label en SQL ? genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    WHENEVER SQLERROR GOTO printError
    ....
    printError
    VARIABLE sqlerror NUMBER
    EXECUTE :sqlerror := SQL.SQLCODE
    PRINT :sqlerror
    EXIT 4;
    ou avez-vous une autre soluce a mon pb ?
    Merci pour votre précieuse aide.

    Delphine.

  2. #2
    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
    le mieux c'est de laisser la function gérer l'erreur qu'elle rencontre et le code SQL qui lui ne fait que s'arrêter si la fonction a planté

  3. #3
    Membre du Club
    Inscrit en
    Décembre 2003
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 66
    Points : 43
    Points
    43
    Par défaut
    Mais en faite, c'est pour afficher l'erreur SQLCODE justement dans le cas ou la fonction PL/SQL ne gère pas toute les erreurs.
    Et mon script SQL doit retourner
    * 0 ou 1 (retour de la fonction PL/SQL via le dbutil.bool_to_int)
    * 3 pour FAILURE
    * et 4 si c'est une erreur SQL (mais là on me demande d'afficher qd meme le code sql dans le spool, cad le SQLCODE).

    ... ?

  4. #4
    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
    Dans la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    EXCEPTION
    WHEN OTHERS THEN
       DBMS_OUTPUT.PUT_LINE(SQLERRM);
       RETURN 4;
    END;
    Dans le SQL avant lancement de la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SET SERVEROUTPUT ON SIZE 1000000

  5. #5
    Membre du Club
    Inscrit en
    Décembre 2003
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 66
    Points : 43
    Points
    43
    Par défaut
    Désolé, mais je peux pas...
    J'y avais penser, mais je peux pas modifer la fonction PL/SQL comme tu me l'a suggérer...J'ai juste le droit de faire un script SQL

    On peut pas faire des <<label>> dans du code SQL ?

    Merci qd même

  6. #6
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2003
    Messages : 412
    Points : 1 326
    Points
    1 326
    Par défaut
    C 'est pas grave dans ton script tu te fais un bloc PL/SQL anonyme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    BEGIN
    --ton appel de procédure;
    EXCEPTION 
    WHEN OTHERS THEN 
       DBMS_OUTPUT.PUT_LINE(SQLERRM); 
       RETURN 4; 
    END;
    /
    Y a toujours moyen de contourner un probleme avec Oracle

  7. #7
    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
    Citation Envoyé par helyos
    Y a toujours moyen de contourner un probleme avec Oracle
    farpaitement... je n'aurais pas dis mieux

  8. #8
    Membre du Club
    Inscrit en
    Décembre 2003
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 66
    Points : 43
    Points
    43
    Par défaut
    Pardon de vous embêter avec ça encore.
    Mais mon fichier doit être exécuter immédiatement (il ne doit pas être pré-compiler), du coup on m'a dit de ne pas mettre de code PL/SQL, mais que du SQL.
    Alors c'est bon si je met des clause EXCEPTION ?

    je sais que le PL/SQL permet de gérer des traitements qui utilisent les instructions SQL dans un langage procédural et les blocs ou procédures PL/SQL sont compilés et exécutés par le moteur PL/SQL.Donc si je fais une procédure PL/SQL anonyme dans mon script SQL il faut que je le compiler contrairement a un fichier SQL pure qui pourra être exécuter de suite.
    C'est bon ou j'ai pas bien compris ?

  9. #9
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2003
    Messages : 412
    Points : 1 326
    Points
    1 326
    Par défaut
    euh non


    si tu fais un script qui contient

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    set serveroutput on
    begin
    dbms_output.put_line ('Hello World');
    end;
    /
    Et que tu le lances comme ca
    Il sera alors automatiquement compilé et executé directement donc je pense pas que ca te pose probleme

  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
    Citation Envoyé par menjikoff
    Mais mon fichier doit être exécuter immédiatement (il ne doit pas être pré-compiler), du coup on m'a dit de ne pas mettre de code PL/SQL, mais que du SQL.
    mais comment peut-on demander un truc pareil... y'en a vraiment qui comprennent rien

    T'as qu'à leur répondre que c'est pas faisable autrement

  11. #11
    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
    Citation Envoyé par menjikoff
    Donc si je fais une procédure PL/SQL anonyme dans mon script SQL il faut que je le compiler contrairement a un fichier SQL pure qui pourra être exécuter de suite.
    non non, seuls les procédures, functions et packages STOCKES doivent être compilé

  12. #12
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2003
    Messages : 412
    Points : 1 326
    Points
    1 326
    Par défaut
    Avec ce que je t'ai donné pas besoin de pré compilation

  13. #13
    Membre du Club
    Inscrit en
    Décembre 2003
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 66
    Points : 43
    Points
    43
    Par défaut
    Merci beaucoup !!!!
    Vais faire comme ça.

    Merfi merfi !

  14. #14
    Membre du Club
    Inscrit en
    Décembre 2003
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 66
    Points : 43
    Points
    43
    Par défaut
    Ca morche po :
    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
     
    SET SERVEROUT ON
    SPOOL <mon_SPOOL>
    WHENEVER OSERROR EXIT 3
    VARIABLE l_status NUMBER
    EXECUTE :l_status := 1
    BEGIN		
    :l_status := sys.diutil.bool_to_int(mpack.mafonct());
    EXCEPTION 
    	WHEN OTHERS THEN 
       	DBMS_OUTPUT.PUT_LINE('SQLCODE=' || SQLCODE); 
       	:l_status := 4;
    END;
    /
    PRINT :l_status
    EXIT :l_status;
    Quand par exemple j'ecris un mauvais non de fonction ou des mauvais parametre dans l'appel PL/SQL, ca sort en code 1 quand meme. Ca passe jamais dans l'exception pour y mettre un 4!
    ouinnnn
    c normal ?
    T_T

    La je bloque...

  15. #15
    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
    teste l_status alors au lieu de faire une exception

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

Discussions similaires

  1. Faire des requetes SQL avec Zend
    Par leroidje dans le forum Zend_Db
    Réponses: 14
    Dernier message: 13/05/2012, 01h57
  2. Sql avec des dates
    Par meddy dans le forum Langage SQL
    Réponses: 4
    Dernier message: 12/04/2007, 16h55
  3. [XSLT] Générer des fichier SQL avec un XSD
    Par NoiBe dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 18/01/2007, 10h39
  4. requete SQL avec des Parametres
    Par devlopassion dans le forum C++Builder
    Réponses: 7
    Dernier message: 18/11/2006, 11h52
  5. [SQL] Pb avec des requêtes SQL passer en GET
    Par resterzen dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 19/10/2006, 15h37

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