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 :

Erreur ORA-00933 shell linux


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 916
    Par défaut Erreur ORA-00933 shell linux
    bonjour à tous,
    J'utilise le shell linux(bash) pour faire des traitements sur une base Oracle.
    J'ai un problème avec une fonction qui exécute une requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    tranche_mini(){
      minim=`sqlplus -s $ORA_DBA@XE   << -EOF
      set pause off heading off feed off pagesize 0;
      select max(montant_cumul) from tstt where montant_cumul < $wdec order by montant_cumul desc;
      exit;
      EOF`
      echo $minim
    }
    J'ai l'erreur suivante :
    "ORA-00933 : SQL command not properly endmontant_cumul<120"
    En fait si je remplace wdec par sa valeur ça fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    tranche_mini(){
      minim=`sqlplus -s $ORA_DBA@XE   << -EOF
      set pause off heading off feed off pagesize 0;
      select max(montant_cumul) from tstt where montant_cumul < 120 order by montant_cumul desc;
      exit;
      EOF`
      echo $minim
    }
    En principe ce genre de message est pour des requetes mal écrites, j'ai testé ma requete en "direct" elle fonctionne également, donc là je vois pas le problème. Est ce lié au shell linux car j'avais écris ce code sous du shell Unix et il fonctionne .
    Si quelqu'un peut m'aider Merçi
    A +

  2. #2
    Expert confirmé 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
    Par défaut
    Il y a très probablement un (mauvais) caractère qui traine derrière la valeur 120 à cause de la variable wdec.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 916
    Par défaut réponse à mnitu
    Citation Envoyé par mnitu Voir le message
    Il y a très probablement un (mauvais) caractère qui traine derrière la valeur 120 à cause de la variable wdec.
    *************************************************
    Merçi pour votre réponse.
    Non je ne vois vraiment pas ce qui pourrait "trainer" c'est une histoire de fou !
    Surtout quand j'affiche la valeur de wdec ça fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
       echo "val de wdec ="  
      echo $wdec
    donc il connait bien wdec mais dans la requête il l'a connait aussi puisque l'affichage de l'erreur m'affiche sa valeur(120) mais je pense que le fait d'utiliser $wdec dans une requete dans du shell linux doit ou pose un problème en tout cas c'est trés embétant et je trouve pas de solution !
    Si vous avez des exemples de fonctions écrites dans du shell linux faisant tourner des requetes comme la mienne (avec variable) merçi de me les communiquer.
    MErçi encore

  4. #4
    Membre éprouvé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2011
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Décembre 2011
    Messages : 52
    Par défaut
    Bonjour,

    Je pense qu'il faut que tu protèges ton $ en mettant un \

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select max(montant_cumul) from tstt where montant_cumul < \$wdec order by montant_cumul desc;
    Non en fait c'est peut être pas ça le problème :
    Essayez ceci :
    Décaler complétement à gauche le EOF
    et/ou mettre exactement le même tag : EOF et non -EOF
    Vérifier qu'il n'y a aucun ctrl-M (script provenant d'un windows)
    Je pencherai surtout sur ça ===>>> Vérifier que l’interpréteur /bin/bash est bien mis en ligne 1.

    en kshell tout passe correctement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #!/usr/bin/ksh
    wdec=$1
    minim=`sqlplus -s ***/***@***   << -EOF
    set pause off heading off feed off pagesize 0;
    select date_version from version_reg where rownum = $wdec ;
    exit;
      EOF`
    echo $minim
    exit
     
    oracle:11.2.0.3:/home/oracle]./test1.sh 1
    22-APR-13
    En bash aussi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #!/bin/bash
    wdec=$1
      minim=`sqlplus -s sysman/******   << EOF
      set pause off heading off feed off pagesize 0;
      select sysdate from dual where rownum = $wdec ;
      exit;
    EOF`
    echo $minim
    exit
     
    [oracle]:/home/oracle>./test1.sh 1
    31-MAY-13
    Franck.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 916
    Par défaut réponse à funoracle
    Merci pour ta réponse. Non en fait ce qui se passe c'est quand j'utilise une fonction pour définir une variable ça marche pas et quand j'initialise cette variable sans fonction ça marche.
    Je m'explique :
    Cette fonction renvoie la valeur de wdec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    decile(){
      dec=`sqlplus -s $ORA_DBA@XE   << -EOF
      set pause off heading off feed off pagesize 0;
      select round(MONTANT_CUMUL / 10)  from tstt where MONTANT_CUMUL=(select max(MONTANT_CUMUL) from tstt);
      exit;
      EOF`
      echo $dec
    }
    Quand j'affecte cette fonction à wdec :
    Il me renvoit bien sa valeur soit içi "120"
    mais quand j'utilise la valeur de wdec dans une autre fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    tranche_mini(){
      minim=`sqlplus -s $ORA_DBA@XE   << -EOF
      set pause off heading off feed off pagesize 0;
      select max(montant_cumul) from tstt where montant_cumul < $wdec order by montant_cumul desc;
      exit;
      EOF`
      echo $minim
    }
    là j'ai l'erreur ORA-00933 SQL command not properly ended
    par contre si je l’initialise :
    là ça marche .
    Je ne vois pas comment procéder pour régler ce problème ! Surtout que ça marche sous Unix. Autre chose voici l’entête de mon fichier .sh
    Voilà si t'as des idées merci encore.
    A +

  6. #6
    Expert confirmé 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
    Par défaut
    Essayez avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    decile(){
    dec=`sqlplus -s $ORA_DBA@XE   << -EOF | tr -d '\012'
    ...

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

Discussions similaires

  1. SHELL Linux (gestion erreur)
    Par poupy dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 01/07/2014, 07h42
  2. Delete erreur ORA-00933
    Par jycollet dans le forum SQL
    Réponses: 2
    Dernier message: 20/01/2012, 19h16
  3. erreur select ORA-00933
    Par Hanoni dans le forum Général Java
    Réponses: 1
    Dernier message: 09/09/2009, 15h31
  4. Erreur ORA-00933 en verifiant la connection avec la base de données
    Par bey1986 dans le forum Connexions aux bases de données
    Réponses: 5
    Dernier message: 20/05/2009, 05h10
  5. Requête delete: Erreur ORA-00933
    Par loukili81 dans le forum Oracle
    Réponses: 13
    Dernier message: 09/08/2007, 20h04

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