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 :

Probleme sur du PL/SQL lancé via un Sh sous linux


Sujet :

SQL Oracle

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2018
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Probleme sur du PL/SQL lancé via un Sh sous linux
    Bonjour
    j'ai un shell qui lance un script SQL qui a sont tout execute une procédure stockée.
    ce sql peut lancer la proc stock avec des paramètres différents en fonction de paramètres passés dans le shell.

    voici le code du script.sql, j'ai un probleme car je passe les paramètres nécessaire pour rentrer dans le premieres IF
    mais j'ai un message qui demande quand même la valeur du parametre 8 qui pourtant se trouve dans le ELSE
    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
    SET ECHO OFF
    SET TIMING OFF
    SET TERM ON
    SET VERIFY OFF
     
    whenever sqlerror exit 1
    whenever oserror exit 2
     
    begin 
     
    	if '&&1' = 'DISTRIB' then 
    		P_MODIF_CONFIG(p_action => '&&2',p_table => '&&3',p_parametre => '&&4',p_oldvaleur => '&&5',p_newvaleur => '&&6',p_appsrc => '&&7' );
    	else
    		P_MODIF_CONFIG(p_action => '&&2',p_table => '&&3',p_parametre => '&&4',p_oldvaleur => '&&5',p_newvaleur => '&&6',p_frequence => '&&7',p_stream => '&&8');
    	end if;
     
    end;
    /
    exit 0;
    Message retourné a l'exec du shell :
    Enter value for 8: c
    en renseignant ça fonctionne mais comme ce shell est pour une équipe de support il faut que j'ai le moins de probleme possible au lancement de ce shell.

    Une idée avant que je fasse ma méthode simple mais moche qui va consister a séparer mon SQL en 2 scripts distinct ?

    Merci d'avance pour votre aide

    Cdt
    Yannick

  2. #2
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mai 2012
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mai 2012
    Messages : 127
    Points : 339
    Points
    339
    Par défaut
    Bonjour,

    Vos variables de substitution sont préfixées avec && , ce qui force à renseigner une nouvelle valeur. Si vous voulez utiliser les valeurs passées en paramètres sans les redéfinir, il faut préfixer avec un seul &.

  3. #3
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    En ce qui concerne le problème, c'est tout à fait normal puisque la variable 8 n'a pas été renseignée quand on est passé dans le IF.
    Quand on passe dans le ELSE, les 7 premières variables ne sont pas demandées UNIQUEMENT si on est passé dans le IF auparavant; MAIS tu seras forcément prompté pour la variable 8.
    Si on passe direct dans le ELSE, sans apsser par le IF, on sera prompté pour les 8 variables et... plus jamais, ni pour le IF ni pour le ELSE, puisque elles sont stockées en mémoire grâce au &&.

    Sinon la variable &&7 ne correspond pas au même champ dans le IF et le ELSE, c'est normal?

    Citation Envoyé par Baldrick Voir le message
    Bonjour,

    Vos variables de substitution sont préfixées avec && , ce qui force à renseigner une nouvelle valeur. Si vous voulez utiliser les valeurs passées en paramètres sans les redéfinir, il faut préfixer avec un seul &.

    Désolé mais je pense que c'est l'inverse qui est vrai.

    Voici les résultats de mes tests.

    &&var1 : Oracle regarde si la variable var1 existe en mémoire.
    • Si non : Oracle fait un prompt la première fois pour saisir la variable et la stocke en mémoire
    • Si oui : Oracle récupère en mémoire la valeur de la variable

    &var1 : Oracle regarde si la variable var1 existe en mémoire.
    • Si non : Oracle fait un prompt la première fois pour saisir la variable et NE LA STOCKE PAS en mémoire
    • Si oui : Oracle récupère en mémoire la valeur de la variable

    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
    Cas où var1 n’est jamais stocké en mémoire.
    SQL> undefine var1
    SQL> undefine var2
    SQL> SELECT &VAR1 FROM BIC_CODE WHERE ROWNUM < &VAR2;
    Enter value for var1: BIC_NAME
    Enter value for var2: 2
    OLD   1: SELECT &VAR1 FROM BIC_CODE WHERE ROWNUM < &VAR2
    NEW   1: SELECT BIC_NAME FROM BIC_CODE WHERE ROWNUM < 2
    BIC_NAME
    -----------------------------------
    TELENOR BANKA AD
    1 rows selected.
     
    	On est encore prompté pour les deux variables car aucune n’a été mise en mémoire.
    SQL> SELECT &VAR1 FROM BIC_CODE WHERE ROWNUM < &VAR2;
    Enter value for var1: BIC_NAME
    Enter value for var2: 2
    OLD   1: SELECT &VAR1 FROM BIC_CODE WHERE ROWNUM < &VAR2
    NEW   1: SELECT BIC_NAME FROM BIC_CODE WHERE ROWNUM < 2
     
    BIC_NAME
    -----------------------------------
    TELENOR BANKA AD
     
    Cas où var1est stocké en mémoire avec &&.
    SQL> undefine var1
    SQL> undefine var2
    SQL> SELECT &&VAR1 FROM BIC_CODE WHERE ROWNUM < &VAR2;
    Enter value for var1: BIC_NAME
    Enter value for var2: 2
    OLD   1: SELECT &&VAR1 FROM BIC_CODE WHERE ROWNUM < &VAR2
    NEW   1: SELECT BIC_NAME FROM BIC_CODE WHERE ROWNUM < 2
    BIC_NAME
    -----------------------------------
    TELENOR BANKA AD
     
    On n’est plus prompté pour var1 car l’exécution précédente avec &&var1 a stocké le résultat en mémoire.
    SQL> SELECT &&VAR1 FROM BIC_CODE WHERE ROWNUM < &VAR2;
    Enter value for var2: 3
    OLD   1: SELECT &&VAR1 FROM BIC_CODE WHERE ROWNUM < &VAR2
    NEW   1: SELECT BIC_NAME FROM BIC_CODE WHERE ROWNUM < 3
     
    BIC_NAME
    -----------------------------------
    TELENOR BANKA AD
    ALMUZAINI EXCHANGE COMPANY KSC (CLO
     
    Cas où var1a été stocké en mémoire avec && et où on utilise &.
    Même si on met un seul &, Oracle va voir en mémoire si le contenu de la variable var1 a été stocké précédemment (avec l’utilisation de &&var1). Si la variable a été stockée, le user n’est pas prompté même si on a &var1 au lieu de &&var1.
    SQL> SELECT &VAR1 FROM BIC_CODE WHERE ROWNUM < &VAR2;
    Enter value for var2: 2 
    OLD   1: SELECT &VAR1 FROM BIC_CODE WHERE ROWNUM < &VAR2
    NEW   1: SELECT BIC_NAME FROM BIC_CODE WHERE ROWNUM < 2
    BIC_NAME
    -----------------------------------
    TELENOR BANKA AD
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  4. #4
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Je ne pense pas qu'il soit possible d'exécuter un sql sans qu'il te demande tous les paramètres &
    Tu peux faire la lecture des paramètres dans le script bash, et d'appeler 2 .sql suivant le premier
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2018
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Sinon la variable &&7 ne correspond pas au même champ dans le IF et le ELSE, c'est normal?


    Salut oui c'est normal ... la proc met a jour des tables différentes
    et du coup certains des parametres sont defaultés.
    et le shell a travers des menus de choix renseigne des variables différentes.

    Enfin j'en déduis que je vais juste appeler un script différent pour chacun de mes appels de proc et mon problème sera résolu.

    Merci bcp pour vos réponses.

    Cdt
    Yannick

Discussions similaires

  1. Réponses: 6
    Dernier message: 17/09/2009, 16h13
  2. ORACLE même SQL lancé via BDE ou ODA = DataSet différent
    Par ShaiLeTroll dans le forum Bases de données
    Réponses: 3
    Dernier message: 23/01/2008, 16h24
  3. [PL/SQL][10g] Probleme sur la clause WHERE
    Par titilleuse dans le forum SQL
    Réponses: 4
    Dernier message: 13/11/2006, 18h52
  4. [MySQL 4.1] probleme d'accents sur une requete SQL
    Par tatayoyo dans le forum Langage SQL
    Réponses: 4
    Dernier message: 10/11/2005, 16h06
  5. [SQL] probleme sur recherche
    Par Tib781 dans le forum Access
    Réponses: 2
    Dernier message: 19/05/2005, 12h31

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