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 :

[8i][PL/SQL] EXECUTE IMMEDIATE


Sujet :

SQL Oracle

  1. #21
    Membre régulier Avatar de Bahan
    Inscrit en
    Avril 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Avril 2006
    Messages : 147
    Points : 88
    Points
    88
    Par défaut
    Hum, ok cela répond à ma question.

    Une autre complètement différente : comment faire pour lancer une fonction dans une fenetre de commande plsql ? ^_^

    J'ai beau faire, comme à la base c'est une fonction contenue dans un package, pour la tester et afficher des choses avec DBMS_OUTPUT, c'est mission impossible .

    A la base en fait, j'ai un fichier .sql qui est un paquetage. Dans ce paquetage, j'ai toutes mes fonctions, dont celle qui m'intéresse.

    Pour créer le paquetage sur ma base : start monChemin\MonPaquetage.sql

    Après pour afficher quelque chose, c'est une autre histoire

    Bahan
    Bats-toi de toutes tes forces tant que tu es en vie, et n'abandonne que quand tu es mort

  2. #22
    Membre régulier Avatar de Bahan
    Inscrit en
    Avril 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Avril 2006
    Messages : 147
    Points : 88
    Points
    88
    Par défaut
    Bon je m'avoue vaincu là , je laisse tomber plusieurs choses qui me semblent vraiment trop chaudes :
    - mettre la requête dans une variable, car dès que l'on a une variable de type date dans la requête ça fout une bonne m...
    - utiliser EXECUTE IMMEDIATE puisque je ne stocke plus les requêtes

    Bahan, pas facile le PLSQL quand même...
    Bats-toi de toutes tes forces tant que tu es en vie, et n'abandonne que quand tu es mort

  3. #23
    Membre régulier Avatar de Bahan
    Inscrit en
    Avril 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Avril 2006
    Messages : 147
    Points : 88
    Points
    88
    Par défaut
    Yaaah

    Ayez ça marche! ^_^ L'erreur, comme bien souvent venait de moi au niveau de ma variable de type VARCHAR2 où je merdais pas mal avec les '.

    Merci beaucoup.

    Problème résolu!

    Bahan
    Bats-toi de toutes tes forces tant que tu es en vie, et n'abandonne que quand tu es mort

  4. #24
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Points : 1 294
    Points
    1 294
    Par défaut
    Citation Envoyé par Bahan
    Voila ce que cela a donné :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    vRequete := 'UPDATE MaTable
                    SET 
                        MonChamp1 = '||vMaVariable1||'
                        , MonChamp2 = TO_DATE('''||TO_CHAR(vMaVariable2)||''', ''DD/MM/YYYY HH24:MI:SS'')
                    WHERE gnagnagna ';
    A priori, cela fonctionne.

    [...]


    Ca me fait penser à une anecdote que j'ai vécu au resto dans la semaine du passage à l'euro. Au moment de payer la note, au lieu de me rendre directement la monaie en faisant la différence entre mon billet (en euro) et le prix du repas (en euro), le patron a converti son prix du repas en francs, puis la valeur de mon billet en francs, a calculé la différence en francs puis a refait la conversion inverse en euro de la monaie qu'il devait me rendre....

    Lorsqu'on veux mettre une variable date dans un champ date ce qui est somme toute logique, pourquoi faire 2 conversions ? il existe les variables BIND pour ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      vRequete := 'UPDATE MaTable
                    SET 
                        MonChamp1 = :1
                        , MonChamp2 = :2
                    WHERE gnagnagna ';
    
       EXECUTE IMMEDIATE vRequete using vMaVariable1,vMaVariable2;

  5. #25
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    c'est quoi l'intérêt du SQL dynamique dans cet exemple ?

  6. #26
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Points : 1 294
    Points
    1 294
    Par défaut
    Citation Envoyé par Fred_D
    c'est quoi l'intérêt du SQL dynamique dans cet exemple ?
    +1 c'est vrai ça....

    y'aurait pas eu noyage dans postillon de mouche là ??

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [Oracle 9iR2][PL/SQL] EXECUTE IMMEDIATE USING
    Par mainecoon dans le forum Oracle
    Réponses: 4
    Dernier message: 08/02/2007, 19h08
  2. SQl loader et execute immediate
    Par salim_kwada dans le forum SQL*Loader
    Réponses: 2
    Dernier message: 31/08/2006, 13h30
  3. [PL/SQL] EXECUTE IMMEDIATE et INSERT et RETURNING
    Par swirtel dans le forum Oracle
    Réponses: 2
    Dernier message: 18/04/2006, 09h25
  4. [PL/SQL] Execute immediate
    Par BiM dans le forum Langage SQL
    Réponses: 7
    Dernier message: 10/08/2005, 11h13
  5. [pl/sql] execute immediate
    Par Nadine dans le forum Oracle
    Réponses: 16
    Dernier message: 23/02/2005, 17h37

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