• Viernes 8 de Noviembre de 2024, 21:40

Autor Tema:  Ayuda Con Creacion De Usuarios  (Leído 2267 veces)

javier3

  • Miembro activo
  • **
  • Mensajes: 55
    • Ver Perfil
Ayuda Con Creacion De Usuarios
« en: Jueves 6 de Julio de 2006, 00:21 »
0
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
Javier Bermúdez Tito

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Ayuda Con Creacion De Usuarios
« Respuesta #1 en: Jueves 6 de Julio de 2006, 17:31 »
0
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-->
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io