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

PL/SQL Oracle Discussion :

EXECUTE IMMEDIATE avec CREATE puis INSERT


Sujet :

PL/SQL Oracle

  1. #1
    Membre habitué
    Inscrit en
    Septembre 2004
    Messages
    378
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 378
    Points : 130
    Points
    130
    Par défaut EXECUTE IMMEDIATE avec CREATE puis INSERT
    Bonjour,

    Je dois faire un script de migration incluant quelques règles de gestion. Ce script doit recevoir en paramètre les critères d'extraction des données et inclure la création d'une table temporaire de traitement.
    En version allégée, cela donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    BEGIN
    EXECUTE IMMEDIATE 'CREATE TABLE tmp AS SELECT * FROM table WHERE 1=2'
     
    chr_requete := 'INSERT INTO tmp SELECT * FROM table WHERE col1=:1 AND col2=:2';
    EXECUTE IMMEDIATE chr_requete USING param1, param2;
    END;
    /
    Cela marche mais je ne comprends pas pourquoi je dois également encapsuler le INSERT dans un EXECUTE IMMEDIATE.
    Je voulais tracer un COUNT(*) sur la table TMP et ca ne marche pas non plus en direct. Il faut l'encapsuler aussi.
    Quelqu'un peut-il éclairer ma lanterne ?
    Merci

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 786
    Points
    30 786
    Par défaut
    Avant son exécution, la syntaxe de l'intégralité du bloc BEGIN ... END est vérifiée.
    A ce moment là, la table tmp n'est pas créée, elle n'est donc pas connue du SGBD.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre habitué
    Inscrit en
    Septembre 2004
    Messages
    378
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 378
    Points : 130
    Points
    130
    Par défaut
    Ah OK !
    Merci bien.

    Donc j'ai fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    BEGIN
    EXECUTE IMMEDIATE 'CREATE TABLE tmp AS SELECT * FROM table WHERE 1=2'
    END;
    /
    BEGIN
    INSERT INTO tmp SELECT * FROM table WHERE col1=&1 AND col2=&2;
    END;
    /
    Et ca marche.
    Merci

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

Discussions similaires

  1. execute immediate + create table
    Par olivanto dans le forum SQL
    Réponses: 7
    Dernier message: 03/05/2007, 15h41
  2. EXECUTE IMMEDIATE avec fonction
    Par aechevar dans le forum Oracle
    Réponses: 1
    Dernier message: 07/07/2006, 20h05
  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. [oracle 8.1.7] pbm de privilège avec execute immediate
    Par Nounoursonne dans le forum Oracle
    Réponses: 4
    Dernier message: 10/02/2006, 16h45
  5. Réponses: 2
    Dernier message: 05/01/2006, 10h43

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