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 :

FORALL + SQL Dynamique


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 7
    Par défaut FORALL + SQL Dynamique
    Est il possible d'associer un FORALL avec du sql dynamique par exemple j'aimerais faire ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    PROCEDURE DeleteInTableForAll(
    	pvNomTable	IN	VARCHAR2,
            ptId		     IN	   tTiD)
    IS
    ...
    BEGIN
    vStmt:='DELETE '|| pvNomTable || ' WHERE  ftEdelId = :1';
    FORALL i IN 1 .. ptId.COUNT  
    	EXECUTE IMMEDIATE vStmt USING ptId(i);
    END
    Petite précision j'utilise une base Oracle 8i.

    A priori j'ai une erreur de compilation lorsque je le fais. Est ce un probleme de version d'Oracle? Si oui n'y a t il pas un moyen de contourner cela?

    Merci d'avance pour vos réponses.

  2. #2
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    Avec FORALL, l'ordre SQL ne peut être que INSERT, UPDATE ou DELETE.

    Lorsqu'il y a production de message d'erreur, merci d'éviter le jeu : devinez laquelle et sur quelle ligne !

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mars 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 7
    Par défaut
    Citation Envoyé par SheikYerbouti Voir le message
    Avec FORALL, l'ordre SQL ne peut être que INSERT, UPDATE ou DELETE.

    Lorsqu'il y a production de message d'erreur, merci d'éviter le jeu : devinez laquelle et sur quelle ligne !
    Justement, SheikYerbouti, sur ce lien (très bon résumé en l'occurrence):
    http://sheikyerbouti.developpez.com/execute_immediate/

    Tu mets cet exemple:
    FORALL i IN T_Id.first..T_Id.last
    EXECUTE IMMEDIATE 'UPDATE emp SET sal = sal * 1.1 WHERE empno = :1 RETURNING ename INTO :2'
    USING T_Id(i) RETURNING BULK COLLECT INTO T_Nom;

    Que j'ai essayé de reproduire mais cela ne compile, alors je me suis dit que cela vient de la version Oracle(8i)?
    ET j'aurais voulu trouvé une solution pour éviter d'écrire 36 fois la requete FORALL pour chaque table que je dois deleter !!!

    Peut etre en avez vous une?

  4. #4
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    Désolé, je n'avais pas vu le DELETE dans votre exemple.
    Il est possible que cette syntaxe ne fonctionne pas en 8i. En tous cas, elle fonctionne parfaitement en 9.2.0

  5. #5
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    je note également que c'est la 2ème fois que vous dites : "cela ne compile pas..."
    J'imagine qu'il faudra payer pour avoir le message d'erreur...

  6. #6
    Nouveau membre du Club
    Inscrit en
    Mars 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 7
    Par défaut
    Non non pas besoin de payer, voici l'erreur:

    Errors for PACKAGE BODY EDPK_PURGE_PRIVACY_ORC:

    LINE/COL ERROR
    -------- -----------------------------------------------------------------
    157/4 PLS-00103: Encountered the symbol "EXECUTE" when expecting one of
    the following:
    . ( * @ % & - + / at mod rem select update <an exponent (**)>
    delete insert ||
    C'est quand même dommage que cela ne soit pas possible!

    Je crois que je suis bon à écrire 36 fois le même code pour toute mes tables . A moins qu'il existe une solution miracle ...

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    Citation Envoyé par SheikYerbouti Voir le message
    J'imagine qu'il faudra payer pour avoir le message d'erreur...
    je crains que ce soit pareil pour espérer le voir utiliser les balises CODE et QUOTE

    Il ne manquerait pas le LOOP dans son code ?

  8. #8
    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
    Citation Envoyé par isisiry Voir le message
    Est il possible d'associer un FORALL avec du sql dynamique par exemple j'aimerais faire ceci...
    Petite précision j'utilise une base Oracle 8i.
    ...
    Cette option n'est pas disponible en Oracle 8i, elle a été introduite en version 9.

Discussions similaires

  1. Prob SQL dynamique
    Par anthony8 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 30/09/2004, 09h53
  2. Appel de function en SQL Dynamique
    Par dkd dans le forum Oracle
    Réponses: 22
    Dernier message: 28/09/2004, 18h01
  3. SQL dynamique : pb de syntaxe
    Par Pasiphae dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 23/08/2004, 16h50
  4. SQL dynamique
    Par Etienne1 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 16/08/2004, 10h18
  5. SQL Dynamique - Materialized view
    Par Simeans2004 dans le forum SQL
    Réponses: 15
    Dernier message: 10/06/2004, 17h56

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