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 :

Unix - ksh qui appelle un sql dans une boucle


Sujet :

SQL Oracle

  1. #1
    Membre du Club
    Profil pro
    None
    Inscrit en
    Avril 2012
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : None

    Informations forums :
    Inscription : Avril 2012
    Messages : 53
    Points : 59
    Points
    59
    Par défaut Unix - ksh qui appelle un sql dans une boucle
    Bonjour,

    Je suis coincé sur un problème depuis deux jours, si quelqu'un peut m'aider ça sera très sympa, je vous explique un peu ce que je veux faire

    J'ai un fichier txt qui contient des codes (10000,100001,100002...)
    Je veux mettre à jour une table selon ces codes, le script en question se trouve dans un fichier .sql qui est appelé par un ksh.
    Mon sql est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    spool &2;
    update TABLE1
    set LADATE=sysdate,
    ID=3,
    ROUTAGE=null
    where LECODE=&1;
    COMMIT ;
    spool off;
    exit;
    La partie ksh qui traite mon sql est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    while read code
    do
    	echo $code
    	sqlplus $USER_BD/$PASS_BD@$BD @scrpt.sql $code $TEMP 
    done < $FICHIER_DES_CODES
    Mon problème est que la commande sqlplus est à l'intérieur de la boucle, je veux la mettre à l’extérieur, comme ça je fais une seule connexion à la base, j'exécute mes updates et je me déconnecte, j'ai essayé de mettre le sqlplus avant le while, mais je ne sais pas comment appeler le fichier sql après, avec un @scrpt.sql il ne le trouve pas, et le terminal reste coincé sur SQL>

    Je vous remercie d'avance

  2. #2
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Utilisez une table externe pour accéder au fichier des codes et transformer votre script sql en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    UPDATE TABLE1
    SET LADATE=sysdate,
    ID=3,
    ROUTAGE=NULL
    WHERE LECODE In (Select code from table_externe)
    Puis dans le script ksh exécutez ce script sql.

  3. #3
    Membre du Club
    Profil pro
    None
    Inscrit en
    Avril 2012
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : None

    Informations forums :
    Inscription : Avril 2012
    Messages : 53
    Points : 59
    Points
    59
    Par défaut
    Bonjour,

    C'est la première fois que j'entends parler des tables externes, j'ai essayé un petit quelque chose, mais j'ai encore besoin d'aide.

    Mon script sql ressemble à ça maintenant :

    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
     
    create or replace directory dossier_temp as '/tmp';
    grant read,write on directory dossier_temp to Marou;
    create table table_externe_code
    (CODE VARCHAR2(64))
    ORGANIZATION EXTERNAL
    (type oracle_loader
    default directory dossier_temp
    access parameters
    (records delimited by newline
    badfile 'charge_code.bad'
    logfile 'charge_code.log'
    (code)
    )
    location ('codes.txt')
    )
    reject limit unlimited
    ;
     
    update TABLE1
    set LADATE=sysdate,
    ID=3,
    ROUTAGE=null
    where CODE in (select code from table_externe_code);
    commit ;
    drop table table_externe_code; 
    exit;
    Mon problème est que je n'ai pas les droits de créer des dossiers via sql, et je ne peux pas en avoir.
    J'ai essayé de mettre le chemin d'un dossier existant à la place du nom de dossier dans le 'default' mais ça n'a pas marché, est ce qu'il y a une manière de contourner ça svp ??

    En vous remerciant d'avance

Discussions similaires

  1. [MySQL] Problème de SQL dans une boucle
    Par Bozomobile dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 01/11/2008, 20h17
  2. [SQL] Boucle SQL dans une boucle for
    Par architecte dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 14/08/2007, 11h47
  3. appel de boutons dans une boucle
    Par Ludo_360 dans le forum Delphi
    Réponses: 3
    Dernier message: 02/05/2007, 16h41
  4. [MySQL] Requetes SQL dans une boucle PHP
    Par Siteac dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 12/11/2006, 14h35
  5. Appel de procedure dans une boucle
    Par fusion_sadam dans le forum Access
    Réponses: 8
    Dernier message: 11/07/2006, 12h14

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