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 :

ORACLE Lancer un script pl-sql dans un script shell


Sujet :

SQL Oracle

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 19
    Points : 17
    Points
    17
    Par défaut ORACLE Lancer un script pl-sql dans un script shell
    Bonjour,

    J'ai écrit un petit script pl-sql avec un bloc DECLARE ..END; et notamment un curseur que je parcoure puis effectue quelque petit traitement. Ce script est stocké dans un fichier MonScript.sql
    Quand je l'exécute sous slqplus (@monScript) que j'exécute sous xp ou j'ai nstallé un client ORACLE, ça marche parfaitement.
    Maintenant je veux l'automatiser en l'éxécutant à partir d'un script shell UNIX
    Sous le répertoire AppliUnix de mon serveur UNix, j'ai :
    -déposer mon fichier monScript.sql
    - écrit un script shell monShell.ksh avec,entre autre, l'instruction
    sqlplus -s $MONIDENT/$MONMDP <<endplus >>FICTRACE>&1
    @$ficSQL
    exit
    endplus

    Et la ça ne marche pas mais je n'ai pas de message d'erreur.

    En tout cas, ça marche si dans mon fichier sql j'ai des instruction SQl simple style select count(*)..... ou bien create table etc....

    Donc je pense qu'il faut faire autrement avec un fichier qui contient un bloc pl-sql

    Est ce possible sans passer par une procédure stockée ?

    Merci à tous

  2. #2
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    Le script est-il lancé en interactif ou avec la commande at ou via le cron (dans ce cas là, vérifier si le système ne vous pas envoyé de mail) ? Quel est le contenu de la variable ficSQL ? Il faut qu'elle contienne le bon chemin du script.

    Exemple sur Solaris:

    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
    >echo $TEST
    test.sql
    >cat test.sql
    --
    -- test.sql
    --
    set echo on
    set serveroutput on
    
    begin
    dbms_output.put_line('OK');
    end;
    /
    show errors
    >cat test.ksh
    sqlplus / <<endplus >>test.log 2>&1
    @$TEST
    exit
    endplus

    Remarquez qu'il faut penser aussi à rediriger stderr (2) en plus de stdout (dans mon cas mon compte Unix est un compte Oracle externally identified => je n'ai besoin de donner ni d'identifiant ni de mot de passe).

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 19
    Points : 17
    Points
    17
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Quel est le contenu de la variable ficSQL ?
    C'est le nom de mon scrip SQL : les chemins sont bons, pas de problème
    mais mon script SQl contient en fait du PL-SQl avec Curseur, requête dynamique en fait un truc un peu compliqué mais qui fonctionne quand je le lance direct sous sqlplus.
    Je me demande donc si faudrait pas autre chose ds mon scrip shell pr lancer
    un script avec du PL-SQL.
    Le pb c'est que je maitrise pas trop le shell (habitude d'utiliser des outils maisons qui fait tout) et de srucroit je débute en ORACLE.

  4. #4
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    Si la requête fonctionne en SQL mais ne fonctionne pas en PL/SQL, c'est peut-être parce que le privilège nécessaire est donné par un rôle: or les rôles sont activés en SQL mais désactivés en PL/SQL. Dans ce cas là vous devriez avoir un message d'erreur comme ORA-01031. Est-ce le cas ? Sans aucun message d'erreur, c'est vraiment difficile de résoudre un problème ...

    Essayez d'abord d'exécuter le code PL/SQL sans le script Unix: est-ce qu'il marche ? Est-ce qu'il y a un message d'erreur Oracle ? Si oui, lequel ?

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 19
    Points : 17
    Points
    17
    Par défaut
    Non je n'ai pas de messages erreur dans mon fichier trace.
    j'ai l'impression que tout se passe bien sauf que ça dure pas longtemps et que mes messages DBMS dans mon PL ne s'affiche pas .
    Mais bon faut que je fasse d'autres tests.
    Je me demande si mon script pl-sql, je ne devrais pas le mettre en proc stockée?

  6. #6
    Membre confirmé Avatar de miloux32
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    545
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 545
    Points : 565
    Points
    565
    Par défaut
    Citation Envoyé par solange44
    Non je n'ai pas de messages erreur dans mon fichier trace.
    j'ai l'impression que tout se passe bien sauf que ça dure pas longtemps et que mes messages DBMS dans mon PL ne s'affiche pas .
    Mais bon faut que je fasse d'autres tests.
    Je me demande si mon script pl-sql, je ne devrais pas le mettre en proc stockée?
    Non ce n'est pas necessaire ....

    Dans ton script tu as bien activé la sortie de log et parametré ton spool ?

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

Discussions similaires

  1. Lancer un script pl/sql dans sql*plus
    Par samsan dans le forum PL/SQL
    Réponses: 9
    Dernier message: 16/10/2012, 11h36
  2. Lancer une requête SQL dans un script UNIX
    Par wissem.ba dans le forum Linux
    Réponses: 8
    Dernier message: 25/03/2010, 08h10
  3. Lancer une requête SQL dans un script UNIX
    Par wissem.ba dans le forum Requêtes
    Réponses: 8
    Dernier message: 22/03/2010, 11h56
  4. Réponses: 2
    Dernier message: 16/01/2006, 15h07
  5. [MySQL] Problème de requêtes SQL dans un script
    Par Nefret dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 08/09/2005, 15h08

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