Retroceder   Foros del Web > Programación para sitios web > Bases de Datos > PostgreSQL

Respuesta
 
Herramientas Desplegado
Antiguo 03-jul-2008, 08:42   #1 (permalink)
Shadd ha deshabilitado el karma
 
Fecha de Ingreso: julio-2008
Mensajes: 1
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
Shadd está desconectado   Responder Citando
Antiguo 04-jul-2008, 02:34   #2 (permalink)
seyko ha deshabilitado el karma
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.056
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 ) || '';
...
seyko está desconectado   Responder Citando
Antiguo 04-jul-2008, 02:39   #3 (permalink)
seyko ha deshabilitado el karma
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.056
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
seyko está desconectado   Responder Citando
Antiguo 04-jul-2008, 02:46   #4 (permalink)
seyko ha deshabilitado el karma
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.056
Respuesta: Funciones postgres

ten en cuenta también, si encriptaste la contraseña del usuario al crearlo!
seyko está desconectado   Responder Citando
Respuesta

No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 23:49.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93