Précédent   Forum des professionnels en informatique > Bases de données > Oracle > Administration
Administration Forum d'entraide sur l'administration du serveur Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/01/2008, 16h11   #1
Invité régulier
 
Inscription : août 2006
Messages : 31
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 31
Points : 9
Points : 9
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 :
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
Scrouik est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2008, 13h51   #2
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 453
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 453
Points : 4 215
Points : 4 215
Ajoute un DMBS_OUTPUT avant le execute immediate et donne le résultat.
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2008, 11h19   #3
Invité régulier
 
Inscription : août 2006
Messages : 31
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 31
Points : 9
Points : 9
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
Scrouik est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2008, 14h27   #4
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
de la chaine de caractère envoyée à EXECUTE IMMEDIATE évidemment
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2008, 17h12   #5
Invité régulier
 
Inscription : août 2006
Messages : 31
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 31
Points : 9
Points : 9
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
Scrouik est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h52.


 
 
 
 
Partenaires

Hébergement Web