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

Linux Discussion :

[shell][débutante]problème d'execution requete avec sqlplus


Sujet :

Linux

  1. #1
    Membre averti
    Inscrit en
    Juin 2003
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 55
    Par défaut [shell][débutante]problème d'execution requete avec sqlplus
    Bonjour,

    je dois dans mon script shell executer une requete de sélection particulière, qui doit me générer les requetes 'alter table' pour activer toutes les contraintes de ma base : voici la requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select 'alter table '||table_name||'  enable constraint '||constraint_name||';' from dba_constraints where owner = upper('MA_BASE');
    Je sais que cette requete fonctionne très bien car je l'ai déja executé "à la main" (sans le script shell).

    Mon problème se situe donc lorsque j'essaie d'intégrer cette requete dans mon script. voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    requete="select 'alter table '||table_name||'  enable constraint '||constraint_name||';' from dba_constraints where owner = upper('MA_BASE');"
    echo $requete
    resultReq=`sqlplus -silent << Fin
    ${USER}/${PSWD}
    $requete
    Fin`
    echo $resultReq
    quand j'essaie d'executer ce script, voila le résultat qu'il m'affiche dans ma console :
    select 'alter table '||table_name||' enable constraint '||constraint_name||';' from dba_constraints where owner = upper('MA_BASE');

    select 'alter table '||table_name||' enable constraint '||constraint_name||';' from dba_constraints where owner = upper('MA_BASE') rep1 rep2 file1 file2 ERROR at line 1: ORA-00942: table or view does not exist
    rep1 rep2 file1 file2 correspondent aux repertoires et fichiers présents dans mon dossier d'execution de mon script shell.

    Lorsqu'à la place de ma requete "select 'alter table..." je lui mets une simple requete de selection "select * from une_table" tout s'execute normalement. Je suppose donc que mon problème provient des caractères sépciaux de ma requete "|", mais je n'ai aucune idée de comment gérer ce problème. Sauriez comment je dois m'y prendre ?

    Merci d'avance pour votre aide

  2. #2
    Membre éprouvé Avatar de alexrtz
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2003
    Messages
    639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2003
    Messages : 639
    Par défaut
    Citation Envoyé par nounou
    Je suppose donc que mon problème provient des caractères sépciaux de ma requete "|", mais je n'ai aucune idée de comment gérer ce problème. Sauriez comment je dois m'y prendre ?
    Tu peux essayer de mettre des \ devant chaque |.

  3. #3
    Membre averti
    Inscrit en
    Juin 2003
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 55
    Par défaut
    J'avais déja essayé, mais ça ne marche pas....

    SQL> select 'alter table '\|\|table_name\|\|' enable constraint '\|\|constraint_name\|\|';' from dba_constraints where owner = upper('MA_BASE')
    *
    ERROR at line 1:
    ORA-00911: invalid character
    Si vous avez d'autres idées, je suis preneuse car là, je sèche un peu et je ne vois pas du tout comment régler ce problème.
    Merci d'avance

  4. #4
    Membre éprouvé Avatar de alexrtz
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2003
    Messages
    639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2003
    Messages : 639
    Par défaut
    Je viens de voir un autre truc : tu as des guillemets simples comme délimiteurs de chaîne et comme délimiteurs pour des expressions internes.

  5. #5
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Par défaut
    Citation Envoyé par nounou
    J'avais déja essayé, mais ça ne marche pas....



    Si vous avez d'autres idées, je suis preneuse car là, je sèche un peu et je ne vois pas du tout comment régler ce problème.
    Merci d'avance
    si ca marche pas deja dans sql plus inutile de tanter quelque chose que ce sot d'autre...

    faut faire les choses dans l'ordre quand meme...

  6. #6
    Membre averti
    Inscrit en
    Juin 2003
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 55
    Par défaut
    Citation Envoyé par frp31
    si ca marche pas deja dans sql plus inutile de tanter quelque chose que ce sot d'autre...

    faut faire les choses dans l'ordre quand meme...
    Citation Envoyé par nounou
    Je sais que cette requete fonctionne très bien car je l'ai déja executé "à la main" (sans le script shell).
    --> c'est à dire directement dans sqlplus. J'ai donc bien fait les choses dans l'ordre ^^ (par contre j'ai pas forcément était super clair)

    Ce qui ne marche pas, c'est quand j'essaie de despecialiser les "|" de ma requete dans mon script shell (d'après le conseil de rurouni alex) --> ça plante, il aime pas les " \ " !!!

  7. #7
    Membre averti
    Inscrit en
    Juin 2003
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 55
    Par défaut
    Citation Envoyé par rurouni alex
    Je viens de voir un autre truc : tu as des guillemets simples comme délimiteurs de chaîne et comme délimiteurs pour des expressions internes.
    oui, c'est vrai, tu penses que ça peut poser un problème ? que dois je faire ?

    Merci

  8. #8
    Membre éprouvé Avatar de alexrtz
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2003
    Messages
    639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2003
    Messages : 639
    Par défaut
    Citation Envoyé par nounou
    oui, c'est vrai, tu penses que ça peut poser un problème ?
    Yaisse.

    Citation Envoyé par nounou
    que dois je faire ?
    Echapper les guillemets simples internes avec des antislashs

  9. #9
    Membre averti
    Inscrit en
    Juin 2003
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 55
    Par défaut
    l'ajout d'anti-slash sur les simples guillements me regénère la meme erreur : "invalid caracter".

    Par contre, après quelques recherches, je reviens sur ma première hypothèse, je ne pense pas que l'erreur vienne d'un problème de caractère spécial. En effet, si j'enlève l'option "-silent" de ma commande sqlplus dans mon script shell, l'affichage de l'erreur est différente (je n'ai plus l'affichage de la liste des fichiers et repertoires present dans le dossier d'execution de mon script shell)

    mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    requete="select 'alter table '||table_name||'  enable constraint '||constraint_name||';' from DBA_CONSTRAINTS where owner = upper('MA_BASE') ; "
    echo $requete
    resultReq=`sqlplus << Fin
    ${USER}/${PSWD}
    $requete
    Fin`
     
    echo "resultat : $resultReq"
    l'erreur affichée :
    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
    select 'alter table '||table_name||' enable constraint '||constraint_name||';' from DBA_CONSTRAINTS where owner = upper('MA_BASE') ;
    resultat :
    SQL*Plus: Release 9.2.0.5.0 - Production on Ma Jul 10 11:56:12 2007
     
    Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.
     
    Enter user-name:
    Connected to:
    Oracle9i Enterprise Edition Release 9.2.0.5.0 - Production
    With the Partitioning option
    JServer Release 9.2.0.5.0 - Production
     
    SQL> SQL> select 'alter table '||table_name||'  enable constraint '||constraint_name||';' from DBA_CONSTRAINTS where owner = upper('MA_BASE)
                                                                                                                             *
    ERROR at line 1:
    ORA-00942: table or view does not exist
     
     
    SQL> Disconnected from Oracle9i Enterprise Edition Release 9.2.0.5.0 - Production
    With the Partitioning option
    JServer Release 9.2.0.5.0 - Production
    Donc à priori, la seule erreur que j'ai, c'est qu'il ne reconnait pas ma vue "DBA_CONSTRAINTS" et donc, il n'y aurait aucun soucis de caractères spéciaux

    J'ai donc fait plusieurs tests, en changeant ma requete de sélection, pour lui signaler que la base dont provient la vue est "SYS" (j'ai à chaque fois testé la requete directement sous sqlplus, et à chaque fois elle fonctionne bien). Mais j'ai toujours cette même erreur "table or view does not exist", lorsque je l'execute à partir de mon script shell

    Les requetes testées :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select 'alter table '||DBA_CONSTRAINTS.table_name||'  enable constraint '||DBA_CONSTRAINTS.constraint_name||';' from SYS.DBA_CONSTRAINTS where DBA_CONSTRAINTS.owner = upper('MA_BASE') ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select 'alter table '||SYS.DBA_CONSTRAINTS.table_name||'  enable constraint '||SYS.DBA_CONSTRAINTS.constraint_name||';' from SYS.DBA_CONSTRAINTS where SYS.DBA_CONSTRAINTS.owner = upper('MA_BASE) ;
    Voilà... Je ne sais plus trop quoi tester maintenant. Si vous avez des idées, je suis preneuse.

    Merci d'avance

  10. #10
    Membre éprouvé Avatar de alexrtz
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2003
    Messages
    639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2003
    Messages : 639
    Par défaut
    Je sèche un peu là...

    Un truc que tu peux faire et de mettre un copier-coller ici d'une seesions sqlplus en ligne de commande (login et requête).

    T'as peut-être dans ton script un saut de ligne en trop ou un qui manque (ouais, je sais, c'est + que hasardeux, mais bon...).

    Sinon tu peux essayer de mettre, dans ton script, la sélection de la base avant la requête (l'équivalent du use nom_bsae de MySQL).

  11. #11
    Membre averti
    Inscrit en
    Juin 2003
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 55
    Par défaut
    Bien, au final, c'était pas grand chose... une étourderie de ma part ^^

    Les variables ${USER} et ${PSWD} que j'utilise dans mon script ne sont pas les bonnes. Elles me permettent d'acceder à ma base "MA_BASE" mais pas à la base "SYS"

    Lorsque je me connectais à sqlplus directement à partir de ma console, j'utilisais les bonnes variables de connexion et c'est donc pour ça que tout marchait dans ce cas précis !

    Désolée de vous avoir embetté pour cette étourderie de ma part....

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

Discussions similaires

  1. Problème de login administrateur avec sqlplus
    Par tedinho123 dans le forum Oracle
    Réponses: 5
    Dernier message: 10/07/2014, 11h00
  2. Problème de tri requete avec 2 jointures
    Par p_m_g dans le forum Requêtes
    Réponses: 3
    Dernier message: 10/05/2010, 14h57
  3. Réponses: 4
    Dernier message: 05/07/2007, 11h07
  4. [débutante]Problème combobox et requete sql
    Par lilo415 dans le forum Bases de données
    Réponses: 13
    Dernier message: 03/04/2007, 11h11
  5. Problème sur une requete avec champ date
    Par islande dans le forum Access
    Réponses: 2
    Dernier message: 21/09/2006, 19h39

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