una procedimientos postgres postgre parametros otra llamar funciones funcion ejemplo ejecutar dentro con como basicas postgresql function-calls

postgresql - parametros - funciones y procedimientos postgres



Cómo llamar a una función, PostgreSQL (5)

La llamada a la función aún debe ser una declaración SQL válida:

SELECT "saveUser"(3, ''asd'',''asd'',''asd'',''asd'',''asd'');

Estoy tratando de usar una función con PostgreSQL para guardar algunos datos. Aquí está el script de creación:

-- Function: "saveUser"(integer, character varying, character varying, character varying, character varying, character varying) -- DROP FUNCTION "saveUser"(integer, character varying, character varying, character varying, character varying, character varying); CREATE OR REPLACE FUNCTION "saveUser"("pUserID" integer, "pName" character varying, "pLastName" character varying, "pUserName" character varying, "pPassword" character varying, "peMail" character varying) RETURNS boolean AS $BODY$ BEGIN SELECT 1 FROM "USERS" WHERE "userID" = $1; IF FOUND THEN UPDATE "USERS" SET "name" = $2, "lastName" = $3, "userName" = $4, "password" = $5, "eMail" = $6 WHERE "userID" = $1; ELSE INSERT INTO "USERS" ("name", "lastName", "userName", "password", "eMail") VALUES ($2, $3, $4, $5, $6); END IF; END;$BODY$ LANGUAGE ''plpgsql'' VOLATILE COST 100; ALTER FUNCTION "saveUser"(integer, character varying, character varying, character varying, character varying, character varying) OWNER TO postgres;

La documentación de PostreSQL indica que para llamar a una función que no devuelve ningún conjunto de resultados, es suficiente escribir solo su nombre y sus propiedades. Así que trato de llamar a la función de esta manera:

"saveUser"(3, ''asd'',''asd'',''asd'',''asd'',''asd'');

Pero me sale el siguiente error:

ERROR: syntax error at or near ""saveUser"" LINE 1: "saveUser"(3, ''asd'',''asd'',''asd'',''asd'',''asd'') ^ ********** Error ********** ERROR: syntax error at or near ""saveUser"" SQL state: 42601 Character: 1

Tengo otras funciones que devuelven un conjunto de resultados. Utilizo SELECT * FROM "fnc"(...) para llamarlos y funciona. ¿Por qué recibo este error?

EDITAR: Estoy utilizando la herramienta de consulta pgAdmin III y tratando de ejecutar las declaraciones SQL allí.


Para Postgresql puede usar PERFORM . PERFORM solo es válido en el lenguaje de procedimientos PL / PgSQL.

DO $$ BEGIN PERFORM "saveUser"(3, ''asd'',''asd'',''asd'',''asd'',''asd''); END $$;

La sugerencia del equipo de postgres:

SUGERENCIA: Si desea descartar los resultados de un SELECT, use PERFORM en su lugar.


Tuve este mismo problema al intentar probar una función muy similar que utiliza una instrucción SELECT para decidir si se debe realizar un INSERT o un UPDATE. Esta función era una re-escritura de un procedimiento almacenado de T-SQL.
Cuando probé la función desde la ventana de consulta, recibí el error "la consulta no tiene destino para los datos de resultados". Finalmente descubrí que debido a que utilicé una instrucción SELECT dentro de la función, no pude probar la función desde la ventana de consulta hasta que asigné los resultados de SELECT a una variable local usando una instrucción INTO. Esto solucionó el problema.

Si la función original en este hilo se cambiara a la siguiente, funcionaría cuando se invocara desde la ventana de consulta,

$BODY$ DECLARE v_temp integer; BEGIN SELECT 1 INTO v_temp FROM "USERS" WHERE "userID" = $1;


declaras que tu función devuelve boolean, pero nunca devuelve nada.


si su función no quiere devolver nada, debe declararlo como "return void" y luego puede llamarlo así "realizar functionName (parámetro ...);"