Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » PostgreSQL »

Funciones postgres

Estas en el tema de Funciones postgres en el foro de PostgreSQL en Foros del Web. buenos dias, estoy tratando de hacer una funcion en postgres que valide si existe un usuario dado el nombre de usuario y contraseña, cuando hago ...
  #1 (permalink)  
Antiguo 03/07/2008, 08:42
 
Fecha de Ingreso: julio-2008
Mensajes: 1
Antigüedad: 12 años, 3 meses
Puntos: 0
Funciones postgres

buenos dias, estoy tratando de hacer una funcion en postgres que valide si existe un usuario dado el nombre de usuario y contraseña, cuando hago la consulta manualmente funciona, pero cuando la ingreso en la función me muestra el siguiente error:

ERROR: syntax error at or near "$1"
LINE 1: SELECT execute $1
^
QUERY: SELECT execute $1
CONTEXT: SQL statement in PL/PgSQL function "f_valida_usuario" near line 5

basicamente lo que estoy haciendo en la funcion es lo siguiente:

CREATE OR REPLACE FUNCTION f_valida_usuario(in text,in text)
RETURNS boolean as $$
DECLARE query TEXT;
result RECORD;
BEGIN
query = 'SELECT count(*) FROM pg_shadow WHERE usename = ' || quote_literal( $1 ) || ' and passwd = ' || quote_literal( $2 ) || '';
result = execute query;
IF result.count = 0 THEN
return false;
ELSE
return true;
END IF;
END;
$$ LANGUAGE 'plpgsql';

¿podrian ayudarme con mi problema?

Muchas gracias
  #2 (permalink)  
Antiguo 04/07/2008, 02:34
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 13 años, 8 meses
Puntos: 13
Respuesta: Funciones postgres

no puedes hacer
result = execute query;
Cuando te muestre $n en un mensaje de error se refiere a un parametro de entrada o una variable declarada dentro de la función, asi veras que el mensaje de error te dice exactamente donde es.
Cita:
ERROR: syntax error at or near "$1"
LINE 1: SELECT execute $1
Ya que count(*) devuelve un entero:
Código:
declare
contador integer;
begin

SELECT count(*) into contador FROM pg_shadow WHERE usename = ' || quote_literal( $1 ) || ' and passwd = ' || quote_literal( $2 ) || '';
...
  #3 (permalink)  
Antiguo 04/07/2008, 02:39
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 13 años, 8 meses
Puntos: 13
Respuesta: Funciones postgres

No entiendo el fin de esta comprobación, si solo comprobases el user todavia tendría sentido, pero la password ¿por qué? ¿para qué? Estos son usuarios de la BD!

Yo cambiaría esa función de plpgsql a sql, usa plpgsql cuando lo que quieras hacer no se pueda con sql.

Código:
CREATE OR REPLACE FUNCTION f_valida_usuario(text,text)
RETURNS boolean as $$
SELECT count(*) != 0 FROM pg_shadow WHERE usename = $1 and passwd = $2;
$$ LANGUAGE 'sql';
a que queda basante más simple?

Salu2
  #4 (permalink)  
Antiguo 04/07/2008, 02:46
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 13 años, 8 meses
Puntos: 13
Respuesta: Funciones postgres

ten en cuenta también, si encriptaste la contraseña del usuario al crearlo!
  #5 (permalink)  
Antiguo 14/11/2008, 08:23
 
Fecha de Ingreso: enero-2005
Mensajes: 47
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Funciones postgres

Hola,

Estoy haciendo una función que valida los usuarios y no entiendo por qué el siguiente procedimiento no devuleve un registro cuando se cumplen las dos condiciones del where

CREATE OR REPLACE FUNCTION prueba4("char", "char")
RETURNS RECORD AS $$
SELECT * FROM usuario WHERE usuario=$1 AND contrasena=$2;
$$ LANGUAGE 'sql' IMMUTABLE;



Saludos
  #6 (permalink)  
Antiguo 17/11/2008, 02:22
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 13 años, 8 meses
Puntos: 13
Respuesta: Funciones postgres

Para preguntas nuevas abre un nuevo hilo.
Cambia los parametros de la función de char a varchar y cuenta si funciona.

Salu2
  #7 (permalink)  
Antiguo 17/11/2008, 06:25
 
Fecha de Ingreso: enero-2005
Mensajes: 47
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Funciones postgres

Si, funcionó, gracias!! ........



Saludos
  #8 (permalink)  
Antiguo 18/11/2008, 04:02
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 13 años, 8 meses
Puntos: 13
Respuesta: Funciones postgres

Vale, te explico porque, si declaras un char si precision, declaras un caracter!
entonces no creo que tengas usuarios cuyo nombre sea una letra y contraseña otra letra

Salu2
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:49.