PostgreSQL - Funcion general de Postgres

 
Vista:

Funcion general de Postgres

Publicado por Ricardo Mancilla (4 intervenciones) el 16/06/2011 01:50:22
Hola amigos de LWP

En esta ocasion consulto para lo siguiente: he realizado una funcion general para los eventos insert, update y delete de Postgres, en la cual solicito el campo "autonumerico" de la tabla, el nombre de la tabla, los campos, los valores a ingresar o modificar y el tipo de operacion(add=Insert, del=Delete o edit=Update), la funcion corre muy bien la primera vez, pero si le envio una segunda solicitud me arroja el siguiente error (cabe aclarar que el error lo arroja cuando hago los insert, pues es alli donde hace la consulta del max() )...

"Fatal error in query ERROR: type of "reg_fun.maximo" does not match that when preparing the plan CONTEXTO: PL/pgSQL function "funmtto" line 10 at if"

* reg_fun es una variable tipo record que tengo en la funcion, donde almaceno el resultado de un select que hago para obtener el mayor valor (maximo) de un campo especifico (algo asi como un autonumerico o autoincrement)

* funmtto es el nombre de la funcion en Postgres

* Una pregunta mas, se puede en Postgres re-declarar una variable???, como???

envio la funcion y agradezco de antemano la ayuda que me puedan brindar...

Luis Ricardo Mancilla...

-- .............................................................FUNCION funmtto................................................

CREATE OR REPLACE FUNCTION funmtto(idmitabla character varying, mitabla character varying, campos character varying, valores character varying, operacion character varying)
RETURNS character varying AS
$BODY$declare
sqlstring varchar;
mensaje varchar;
reg_fun record;
consecutivo bigint;
begin
IF operacion='add' THEN
sqlstring := 'SELECT max(' || idmitabla || ') as maximo FROM ' || mitabla;
execute sqlstring into reg_fun;
if reg_fun.maximo is null then
consecutivo := 1;
else
consecutivo := reg_fun.maximo + 1;
end if;
sqlstring := 'INSERT INTO ' || mitabla || '(' || campos || ') VALUES(''' || consecutivo || ''',' || valores || ')';
execute sqlstring;
mensaje := '1~Ok';
ELSEIF operacion='edit' THEN
sqlstring := 'UPDATE ' || mitabla || ' set ' || campos || ' WHERE ' || valores;
execute sqlstring;
mensaje := '1~Ok';
ELSEIF operacion='del' THEN
sqlstring := 'DELETE FROM ' || mitabla || ' WHERE ' || valores;
execute sqlstring;
mensaje := '1~Ok';
END IF;
return mensaje;
end;$BODY$
LANGUAGE 'plpgsql' VOLATILE;
ALTER FUNCTION funmtto(idmitabla character varying, mitabla character varying, campos character varying, valores character varying, operacion character varying) OWNER TO root;
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Funcion general de Postgres

Publicado por Ricardo Mancill (4 intervenciones) el 16/06/2011 14:30:39
Amigos ya encontre el problema, la funcion esta perfecta, el error era otro.... de todos modos gracias....

Colombia es Pasion....... Mecha BRS.....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar