SoloCodigo

Bases de Datos => Otras Bases de Datos => PostgreSQL => Mensaje iniciado por: javier3 en Jueves 6 de Julio de 2006, 00:21

Título: Ayuda Con Creacion De Usuarios
Publicado por: javier3 en Jueves 6 de Julio de 2006, 00:21
hola con todos no se si alguien me puede ayudar porque me sale error, creo que es por el formato del nombre del usuario que le paso como parametro, alguien ayudeme porfavor Gracias


create or replace function fu_cambia_clave(pc_user varchar(5), pc_clave varchar(10)) returns varchar as
$body$
begin
        ALTER USER pc_user ENCRYPTED PASSWORD pc_clave NOCREATEDB NOCREATEUSER;
        return 'ok';
end;
$body$
language 'plpgsql';


select fu_cambia_clave('00122', 'nuevaclave')

Resultado :

ERROR:  syntax error at or near "$1" at character 13
QUERY:  ALTER USER  $1  ENCRYPTED PASSWORD  $2  NOCREATEDB NOCREATEUSER
CONTEXT:  PL/pgSQL function "fu_cambia_clave" line 2 at SQL statement
Título: Re: Ayuda Con Creacion De Usuarios
Publicado por: JuanK en Jueves 6 de Julio de 2006, 17:31
Esta mal en varios aspectos.

1- No puedes usar sentencias DCL directamente dentro de un bloque PL/SQL
2- Dado el punto 1, esto implica que debes es crear una cadena con el comando que necesitas, por lo cual:

<!--sql--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>SQL </td></tr><tr><td id='CODE'><!--sql1-->ALTER USER pc_user ENCRYPTED PASSWORD pc_clave NOCREATEDB NOCREATEUSER; <!--sql2--></td></tr></table><div class='postcolor'><!--sql3-->
esta mal ya quie deberias crear una variable varchar y a esta asignarle el ersultado de concatenar la cadena anterior mas o menos  asi ( no se postgres, se oracle):
<!--sql--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>SQL </td></tr><tr><td id='CODE'><!--sql1-->'ALTER USER '|| pc_user||' ENCRYPTED PASSWORD '||pc_clave||' NOCREATEDB NOCREATEUSER'; <!--sql2--></td></tr></table><div class='postcolor'><!--sql3-->
3- Debes averiguar como ejecutas sentencias dinamicas en PostgreSQL para de esta manera enviarla cadena creada a ejecucion, para el caso de oracle seria:

<!--sql--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>SQL </td></tr><tr><td id='CODE'><!--sql1-->EXECUTE IMMEDIATE cadenaInstruccion; <!--sql2--></td></tr></table><div class='postcolor'><!--sql3-->