Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour 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 07/12/2007, 10h54   #1
Nouveau Membre du Club
 
Inscription : octobre 2004
Messages : 126
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 126
Points : 30
Points : 30
Par défaut Récupérer les noms des vues sous Oracle

Bonjour à tous.

Je ne trouve pas comment récupérer le nom de chaque vue associé à un tablespace particulier.

Le but de la manip est de supprimer toutes les vues or je crois savoir qu'aucune fonction ne permet de le faire. On peut seulement supprimer une vue si on connait son nom.

Or je souhaite que mon script puisse supprimer toutes les vues sans que je sois obligé d'écrire en dur le noms de chaque vue dans mon script...

PS: Je débute en sql & sgbd, donc pardonnez si je suis pas toujours clair.

Merci
Remedy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2007, 11h09   #2
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
les vues ne sont pas associées à des tablespaces mais à des schémas
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2007, 12h00   #3
Nouveau Membre du Club
 
Inscription : octobre 2004
Messages : 126
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 126
Points : 30
Points : 30


Ok merci pour l'info

J'ai trouvé des choses concernant INFORMATION_SCHEMA.
J'ai même trouvé une requête qui ressemble à ça:

Code :
SELECT table_name AS Name FROM              INFORMATION_SCHEMA.TABLES
Helas la réponse d'Oracle est Table ou vue inexistante...
Remedy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2007, 12h03   #4
Nouveau Membre du Club
 
Inscription : octobre 2004
Messages : 126
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 126
Points : 30
Points : 30
Bon j'ai trouvé comment récupérer la liste des vues pour un OWNER en particulier:

Code :
SELECT view_name FROM sys.all_views WHERE owner LIKE 'GRC%';

Comment à partir de cette liste supprimer chacune des view grace à la fonction DROP VIEW?
Remedy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2007, 12h35   #5
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 213
Points : 4 213
en pl/sql, un curseur puis un execute immediate
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2007, 14h22   #6
Nouveau Membre du Club
 
Inscription : octobre 2004
Messages : 126
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 126
Points : 30
Points : 30
Quelquechose comme ça ne fonctionne pas

Code :
1
2
3
4
5
6
7
8
9
10
11
DECLARE CURSOR c1 IS SELECT view_name FROM sys.all_views WHERE owner LIKE 'GRC_%';
 
BEGIN
 
OPEN c1;
FETCH c1 INTO name;
WHILE c1%FOUND LOOP
DROP VIEW name;
END LOOP;
 
END
Remedy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2007, 14h34   #7
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
Citation:
Envoyé par McM Voir le message
en pl/sql, un curseur puis un execute immediate
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2007, 14h41   #8
Nouveau Membre du Club
 
Inscription : octobre 2004
Messages : 126
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 126
Points : 30
Points : 30
Ah pardon je n'avais pas vu


Bon pour un kéké comme moi en SQL, il faut être plus explicite

En gros, on declare un curseur avec un SELECT.

Ensuite on ouvre ce curseur


Puis on FETCH (ce qui a pour effet de lire la valeur suivante dans le curseur)
Ensuite je fais mon DROP

Je mets enfin ma condition de sortie de la boucle.

Mais à quel moment doit intervenir l'EXECUTE IMMEDIATE?

De plus, dois je mettre EXECUTE IMMEDIATE c1 ?

Pardon mais j'ai vraiment jamais utilisé SQL de façon :/

Merci par avance
Remedy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2007, 14h46   #9
Membre éclairé
 
Inscription : novembre 2002
Messages : 533
Détails du profil
Informations forums :
Inscription : novembre 2002
Messages : 533
Points : 359
Points : 359
tu peux également faire cela rien qu'avec du SQL

exemple :

Code :
1
2
3
4
5
6
spool c:\MyExample.sql;
SELECT 'DROP VIEW '||view_name FROM sys.all_views WHERE owner LIKE 'GRC%';
 
spool off
 
@c:\MyExample.sql;
__________________
PpPool
PpPool est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2007, 14h48   #10
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
Tout simplement :

Code :
1
2
3
4
5
6
BEGIN 
FOR mes_vues IN (SELECT owner,view_name FROM sys.all_views WHERE owner LIKE 'GRC_%') LOOP
  EXECUTE IMMEDIATE 'DROP VIEW ' || mes_vues.owner || '.' || mes_vues.view_name;
END LOOP;
END;
/
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2007, 18h22   #11
Nouveau Membre du Club
 
Inscription : octobre 2004
Messages : 126
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 126
Points : 30
Points : 30
Trop cool, les deux façons de faire fonctionnent sans problème.

Merci à vous!
Remedy 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 16h29.


 
 
 
 
Partenaires

Hébergement Web