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

Oracle Discussion :

Suppression des USERS


Sujet :

Oracle

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien automatisme
    Inscrit en
    Décembre 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Technicien automatisme
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2014
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Suppression des USERS
    Bonjour à tous,

    Voila je débute dans l'administration d'une base de donnée, alors j'aurais besoin de votre aide.
    Le problème que je me pose est le suivant :

    Je cherche un moyen "d'automatiser" la suppression des USERS. Je m'explique chez un client quand je supprime la base pour en réinjecter une "neuve" les USERS de l'ancienne base reste présents (Logique vue que je ne fais pas l'opération de suppression). Alors pourquoi ne pas faire un script pour les supprimer Je possède énormément de client différents qui on tous une base différente et je ne peux pas me permettre de faire du cas par cas, l'idée serait donc de lancer un script standard qui peux importe le client supprimer tout les USERS.

    Alors j'ai une petite idée sur la question mais je ne sais pas comment coder cela, et je ne sais même pas si c'est une solution "jouable" :

    Dans ma BDD, une table "OPERATEUR" à été crée et tous mes USERS font partie de cette table, donc je me suis dis pourquoi ne pas faire un SELECT COUNT afin de connaitre le nombre d'opérateur présent (Pour connaitre le nombre de USERS que je devrai supprimer) puis à l'aide de cette valeur stocker dans une variable tout les opérateur
    Puis enfin réutiliser cette variable pour supprimer mes USERS :

    DROP USER "Ma_Variable" CASCADE;

    Alors bon bon bon, c'est bien compliqué mon histoire.. En C, j'aurai su faire mais j'avoue qu'en Sql avec le problème de réutiliser la valeur de mon count, avec le problème de stocker tout mes opérateur dans une variable et enfin de réutiliser ma variable pour supprimer mes users....

    Ma solution est-elle possible ? Si oui peut-on m’orienter sur le code... ?
    Sinon existe-t-il une solution pour supprimer mes USERS ?

    Merci d'avance,
    Cordialement.

  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
    Pour du DDL il faut utiliser du execute immediate
    Execute immediate permet d'exécuter une chaine de caractère en code SQL.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    FOR r IN (SELECT utilisateur FROM OPERATEUR)
    LOOP
     EXECUTE IMMEDIATE 'DROP USER '|| r.utilisateur ||' CASCADE';
    END LOOP;
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien automatisme
    Inscrit en
    Décembre 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Technicien automatisme
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2014
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Déjà merci pour cette réponse, comment traiter une chaîne de caractère c'est exactement ça que j'attendais.
    Le seul problème qu'il me reste, c'est comment la boucle for sait qu'elle arrive à la fin ? Comment sait-on combien il y a de ligne à traiter ?...
    Enfin je ne comprend pas forcement en fait.. Désolé

    Merci d'avance,
    Cordialement.

  4. #4
    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
    La boucle FOR gère toute seule l'ouverture et la fermeture du curseur.
    Comment sait-elle combien de ligne elle a à traiter.. Elle ne le sait pas, elle fetche chaque ligne du SELECT et pour chaque ligne va exécuter le code qu'il y a entre le LOOP et le END LOOP
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien automatisme
    Inscrit en
    Décembre 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Technicien automatisme
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2014
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Ah d'accord merci,
    Mais maintenant si je souhaite corser le problème en supprimant tout les users présent dans la table sauf 1 (Exemple : "TOTO")
    Puis-je faire un truc comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    FOR r IN (SELECT utilisateur FROM OPERATEUR Where utilisateur != TOTO)
    LOOP
     EXECUTE IMMEDIATE 'DROP USER '|| r.utilisateur ||' CASCADE';
    END LOOP
    Ou alors tout simplement impossible... ?
    Encore merci d'avance,
    Cordialement

  6. #6
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 460
    Points : 8 074
    Points
    8 074
    Par défaut
    Dans le principe, tout à fait !
    Le SELECT, à l'aide du WHERE approprié, ramène toutes les lignes souhaitées, et celles-ci sont traitées dans la boucle.

    Assurez-vous d'abord, en exécutant séparément le SELECT, que celui-ci est bien correct (ce qui n'est pas le cas dans votre code).
    Consultant / formateur Oracle indépendant
    Certifié OCP 12c, 11g, 10g ; sécurité 11g

    Ma dernière formation Oracle 19c publiée sur Linkedin : https://fr.linkedin.com/learning/oracle-19c-l-administration

Discussions similaires

  1. algo de suppression des contour ouvert
    Par amine008 dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 08/05/2005, 21h02
  2. Réponses: 3
    Dernier message: 31/01/2005, 23h18
  3. [Lisp] Suppression des parenthèses dans une liste
    Par bourdaillet dans le forum Lisp
    Réponses: 3
    Dernier message: 19/12/2004, 21h02
  4. [Tomcat] Suppression des espaces
    Par bluefox_du_974 dans le forum Tomcat et TomEE
    Réponses: 5
    Dernier message: 16/12/2004, 21h54
  5. Réponses: 3
    Dernier message: 12/06/2002, 21h15

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