Vous n'êtes pas identifié(e).

#1 21/03/2011 11:26:54

bob45
Membre

Création utilisateur à partir d'une fonction (avec curseur)

Bonjour à tous,
J'aimerai créer les utilisateurs SQL à partir d'éléments présents dans une table.

Voici la fonction :

create or replace function compte() returns void as $$
DECLARE
   nom_curseur CURSOR FOR SELECT nom FROM client ;
   login char(10) ;
begin
     OPEN nom_curseur ;
     FETCH nom_curseur INTO login ;
     WHILE FOUND LOOP
          RAISE NOTICE '%', login ;          -> affiche correctement le nom des utilisateurs
          CREATE USER login ;                  -> génère l'erreur 'QUERY: CREATE USER $1'
          FETCH nom_curseur INTO login ;
     END LOOP ;
     CLOSE nom_curseur ;
end;
$$ language plpgsql ;

Est-il possible de créer un utilisateur de cette façon ?

Merci par avance.

Hors ligne

#2 21/03/2011 11:43:39

Marc Cousin
Membre

Re : Création utilisateur à partir d'une fonction (avec curseur)

On ne peut pas utiliser de variable pour autre chose que des colonnes de données. Donc dans un ordre SQL comme CREATE USER, login n'est pas considéré comme une variable, mais comme le nom de l'utilisateur.

On peut s'en sortir avec une requête dynamique :

create or replace function compte() returns void as $$
DECLARE
   nom_curseur CURSOR FOR SELECT nom FROM client ;
   login char(10) ;
begin
     OPEN nom_curseur ;
     FETCH nom_curseur INTO login ;
     WHILE FOUND LOOP
          RAISE NOTICE '%', login ;
          EXECUTE 'CREATE USER ' || quote_ident(login) ;
          FETCH nom_curseur INTO login ;
     END LOOP ;
     CLOSE nom_curseur ;
end;
$$ language plpgsql ;

Marc.

Hors ligne

#3 21/03/2011 12:06:37

bob45
Membre

Re : Création utilisateur à partir d'une fonction (avec curseur)

en effet, merci.

Hors ligne

Pied de page des forums