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

Administration Oracle Discussion :

Execute immediate et rename de table


Sujet :

Administration Oracle

  1. #1
    Membre à l'essai
    Inscrit en
    Août 2006
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 31
    Points : 16
    Points
    16
    Par défaut Execute immediate et rename de table
    Bonjour,

    J'ai un problème avec la fonction execute immediate.

    Sans vouloir trop entrer dans les détails, j'ai créé une procédure qui stock dans une table(tmp_part) un ensemble de requête SQL à exécuter.
    J'ouvre un curseur sur la table ou sont sauvegardées toutes les requêtes, puis je les exécutes une par une :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
      REQ := 'SELECT REQSQL FROM TMP_PART';
      OPEN CCRS FOR REQ; -- EXECUTE LA REQUETE
      LOOP
        FETCH CCRS INTO REQSQL; -- BASCULE LES DONNÉES DE LA REQUETE DANS LES VALEURS DÉCLARÉS
        EXIT WHEN CCRS%NOTFOUND;
        EXECUTE IMMEDIATE REQSQL;
        COMMIT;
      END LOOP;
    Une de ces requêtes est "rename matable to manouvelletable" (stocké dans REQSQL voir code ci-dessus)
    Il n'y a aucun crash sur le Execute immediate de REQSQL contenant le rename, mais en fait la table n'est absolument pas renommé. Du coup les requêtes suivante crash.
    N'est-il pas possible de faire un rename via execute immediate ? Si non, ai-je une alternative a cette fonction ?

    Merci

    Edit : hop hop hop vite vite avant de me faire gronder !! Ma version d'oracle : Oracle 9.2.0.1

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

    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
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Ajoute un DMBS_OUTPUT avant le execute immediate et donne le résultat.

  3. #3
    Membre à l'essai
    Inscrit en
    Août 2006
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 31
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par McM Voir le message
    Ajoute un DMBS_OUTPUT avant le execute immediate et donne le résultat.
    DBMS_OUTPUT de quoi ? juste comme ca ? avant le EXECUTE IMMEDIATE

  4. #4
    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
    de la chaine de caractère envoyée à EXECUTE IMMEDIATE évidemment

  5. #5
    Membre à l'essai
    Inscrit en
    Août 2006
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 31
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par orafrance Voir le message
    de la chaine de caractère envoyée à EXECUTE IMMEDIATE évidemment
    haa !! ok ! ben heu => rename matable TO old_matable

    J'en suis sur car j'utilisais justement un

    DBMS_OUTPUT.PUT_LINE(SubStr(REQSQL,0,255));

    que je n'ai pas mis dans le code de mon premier post pour pas alourdir.

    Mais en fait j'ai trouvé la raison du problème :
    Il me manquait des droits sur le user utilisé. Ce qui est un peu bizarre car les droits m'autorisaient la destruction d'une table (DROP TABLE), mais pas de renommer (RENAME) ni de créer une nouvelle table (CREATE).


    Merci

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 14/01/2009, 10h44
  2. Execute immediate truncate table
    Par Milo59000 dans le forum SQL
    Réponses: 5
    Dernier message: 08/09/2008, 17h43
  3. execute immediate + DROP TABLE
    Par greg75 dans le forum SQL
    Réponses: 8
    Dernier message: 18/09/2007, 16h29
  4. execute immediate + create table
    Par olivanto dans le forum SQL
    Réponses: 7
    Dernier message: 03/05/2007, 15h41
  5. Creation de table via execute immediate.
    Par Vince7-7 dans le forum Oracle
    Réponses: 3
    Dernier message: 15/01/2007, 16h04

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