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 :

requete sql incluse dans ksh


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de crashtib
    Homme Profil pro
    Support technico-fonctionnel
    Inscrit en
    Avril 2009
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Support technico-fonctionnel
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 221
    Par défaut requete sql incluse dans ksh
    bonsoir,

    je cherche à savoir quelle requête exacte ce code ksh envoie-t-il à un serveur Oracle. Je ne comprends pas le rôles des multiples pipes inclus ainsi que les ; partout. D'ailleurs, un autre truc que je trouve fou, c'est que l'ordre est donné hyper simplement, sans ordre de connect ou quoi que ce soit, et qu'apparament ce code marche.

    merci de vos réponses

    PS : je suis très débutant en ksh (et en sql aussi d'ailleurs)

    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
     1.   f_select()
       2.   {
       3.   sqlplus -s $USER_GRE/$PWD_GRE@$SID_GRE << FIN
       4.   set pages 0
       5.   set line 400
       6.   set ver off
       7.   set head off
       8.   set feed off
       9.   select MSISDN ||';'||
      10.    '' ||';'||
      11.    ''||';'||
      12.    '60' || OC.IDETEC ||';'||
      13.    1 ||';'||
      14.    'Non' ||';'||
      15.    'GRE' ||';'||
      16.    IDEETA ||';'||
      17.    IDETYPPOR ||';'||
      18.    HLRVIR ||';'||
      19.    '' ||';'||
      20.    OPR.idetec ||';'||
      21.    OPA.idetec ||';'||
      22.    OPD.idetec
      23.   from DE_TRAPOR gre
      24.   left outer join RF_OPECOM OPR on gre.OPRCOM = OPR.ideope
      25.   left outer join RF_OPECOM OPA on gre.OPACOM = OPA.ideope
      26.   left outer join RF_OPECOM OPD on gre.OPDCOM = OPD.ideope;
      27.   from de_trapor TP,
      28.    rf_opecom OC
      29.   where OC.IDEOPE = TP.OPRCOM;
      30.   FIN
      31.   }

  2. #2
    McM
    McM est déconnecté
    Expert confirmé

    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
    Billets dans le blog
    4
    Par défaut
    Et ça c'est pas de la connexion ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $USER_GRE/$PWD_GRE@$SID_GRE


    <<FIN ... FIN Permet de "créer" dynamiquement un fichier sql à exécuter par sqlplus.

    La requête exacte lancée est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT MSISDN ||';'||  '' ||';'||  ''||';'||
        '60' || OC.IDETEC ||';'||  1 ||';'||  'Non' ||';'||
       'GRE' ||';'||  IDEETA ||';'||  IDETYPPOR ||';'||
       HLRVIR ||';'||   '' ||';'||   OPR.idetec ||';'||
      OPA.idetec ||';'||  OPD.idetec
    FROM DE_TRAPOR gre
      LEFT OUTER JOIN RF_OPECOM OPR ON gre.OPRCOM = OPR.ideope
      LEFT OUTER JOIN RF_OPECOM OPA ON gre.OPACOM = OPA.ideope
      LEFT OUTER JOIN RF_OPECOM OPD ON gre.OPDCOM = OPD.ideope;
    Par contre, ce code devrait sortir en erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    FROM de_trapor TP, rf_opecom OC
    WHERE OC.IDEOPE = TP.OPRCOM;

  3. #3
    Membre éprouvé
    Inscrit en
    Février 2009
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 127
    Par défaut
    Salut,

    En fait il s'agit d'une simple requête avec un peu de mise en forme.
    Les || permettent de concaténer les champs avec les ;.

    En gros en résultat, tu as chaque ligne de la forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MSISDN;;60OC.IDETEC;1;Non;GRE; IDEETA; IDETYPPOR; HLRVIR;;OPR.idetec;OPA.idetec;OPD.idetec
    La connexopn se fait grâce à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sqlplus -s $USER_GRE/$PWD_GRE@$SID_GRE
    En gros, tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sqlplus -s $USER_GRE/$PWD_GRE@$SID_GRE <<FIN
    ce qui signifie que tant que FIN n'est pas atteint alors il s'agit de la requête sql.
    A la fin de la requête tu trouves FIN.

  4. #4
    Membre confirmé Avatar de crashtib
    Homme Profil pro
    Support technico-fonctionnel
    Inscrit en
    Avril 2009
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Support technico-fonctionnel
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 221
    Par défaut
    ok, mais au risque de passer pour une tanche, je ne comprends pas pourquoi on inclut des ; dans des requêtes sql. pour moi c'est des virgules. enfin c'est comme ça qu'on m'a appris... c'est parce que c'est oracle qu'on met des ; ?

  5. #5
    Membre éprouvé
    Inscrit en
    Février 2009
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 127
    Par défaut
    Non lorsque tu fais un select sur plusieurs champs ce sont bien des , qu'il faut mettre.
    Mais dans ton cas ce sont des ; qui servent uniquement pour l'affichage.

    En faisant,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select col1 ||';'|| col2 from table
    cela signifie que tu affiches les résultats de la colonne 1 concaténée à la colonne 2 avec comme séparateur un ;


    En revanche, comme l'a précisé McM dans ta requête tu as un ; en plein milieu.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
       ...
      23.   FROM DE_TRAPOR gre
      24.   LEFT OUTER JOIN RF_OPECOM OPR ON gre.OPRCOM = OPR.ideope
      25.   LEFT OUTER JOIN RF_OPECOM OPA ON gre.OPACOM = OPA.ideope
      26.   LEFT OUTER JOIN RF_OPECOM OPD ON gre.OPDCOM = OPD.ideope;
      ...

  6. #6
    Membre confirmé Avatar de crashtib
    Homme Profil pro
    Support technico-fonctionnel
    Inscrit en
    Avril 2009
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Support technico-fonctionnel
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 221
    Par défaut
    ok merci,

    je ne comprends toujours pas pourquoi on veut inclure des ; dans une requete. Ces ; vont-il être envoyés au serveur? ou servent-ils juste pour l'affichage?

    le pire c'est que je sais que tu vas me répondre que la réponse à cette question a déjà été donnée. le truc c'est que je ne comprends pas, désolé

    fin bref je m'embrouille. En fait je dois porter ce code en C, et je ne comprends pas quelle requete exacte je dois envoyer pour avoir le meme résultat. Est-ce

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT MSISDN, OC.IDETEC, IDEETA,  IDETYPPOR , HLRVIR , OPR.idetec, OPA.idetec, OPD.idetec
    FROM DE_TRAPOR gre
      LEFT OUTER JOIN RF_OPECOM OPR ON gre.OPRCOM = OPR.ideope
      LEFT OUTER JOIN RF_OPECOM OPA ON gre.OPACOM = OPA.ideope
      LEFT OUTER JOIN RF_OPECOM OPD ON gre.OPDCOM = OPD.ideope;
    ?

  7. #7
    McM
    McM est déconnecté
    Expert confirmé

    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
    Billets dans le blog
    4
    Par défaut
    Les ; c'est pour avoir toutes les données concaténées en une seule colonne, sous forme de texte, avec ce séparateur là ( ; ).
    En règle générale, les exports CSV sont faits comme ça.

    Donnée1;Donnée2;Donnée3.

    Sur le pourquoi .. ben faut voir l'utilisation du résultat. Et ça y'a que toi qui peut le savoir.


    Si tu fais un spool avec les 15 colonnes, Oracle va tailler les colonnes comme ceci :
    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
    SQL> select dept, commune, postal, cod_commune
      2  from wmc_stg where rownum < 4;
     
    DE COMMUNE                                                      POSTAL
    -- ------------------------------------------------------------ ----------
    COD_COMMUN
    ----------
    01 L ABERGEMENT CLEMENCIAT                                      01400
    01001
     
    01 AMAREINS                                                     01090
    01003
     
    01 AMBERIEU EN BUGEY                                            01500
    01004
     
     
    SQL>
    La même requête avec des séparateurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SQL> select dept ||';'|| commune ||';'|| postal ||';'|| cod_commune
      2  from wmc_stg where rownum < 4;
     
    DEPT||';'||COMMUNE||';'||POSTAL||';'||COD_COMMUNE
    --------------------------------------------------------------------------------
    01;L ABERGEMENT CLEMENCIAT;01400;01001
    01;AMAREINS;01090;01003
    01;AMBERIEU EN BUGEY;01500;01004
     
    SQL>
    Est ce que c'est plus clair ?

Discussions similaires

  1. [Requete SQL] Hierarchie dans une meme table
    Par jowsuket dans le forum Langage SQL
    Réponses: 4
    Dernier message: 21/08/2009, 21h11
  2. requete sql selection dans deux tables
    Par dede64 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 17/03/2008, 14h50
  3. Réponses: 13
    Dernier message: 11/01/2007, 15h39
  4. requete SQL multichamps/dans une liste de valeur
    Par maxidoove dans le forum Langage SQL
    Réponses: 2
    Dernier message: 28/07/2006, 15h48
  5. Comment executer une requete sql delete dans une jsp ?
    Par DarkWark dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 24/05/2006, 16h59

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