| ||||
Respuesta: Problemas para desarrollar una funcion Comparte lo que has hecho hasta el momento. pon la función y en que parte te falla... así será mas facil para alguien ayudarte. Un saludo.
__________________ Without data, You are another person with an opinion. W. Edwads Deming |
| ||||
Respuesta: Problemas para desarrollar una funcion bueno he intentado con esto. CREATE OR REPLACE FUNCTION "public"."actualizar" (hora bigint) RETURNS boolean AS $body$ DECLARE hora ALIAS FOR $1; BEGIN UPDATE tipocomponente SET tipocomponente."Precio" = tipocomponente."Precio" + 20 WHERE tipocomponente."Maximo_horas_uso" >= hora; END; $body$ LANGUAGE 'plpgsql' pero no me funciona, ni siquiera me actualiza los registros esta sería la primera parte después bueno vendría una segunda que es devolver los nombre de los usuarios |
| ||||
Respuesta: Problemas para desarrollar una funcion No te falta el return? añade a la función return true; Otra cosa que podrías mirar, es encerrar entre parentesis SET tipocomponente."Precio" = (tipocomponente."Precio" + 20) Y no estoy seguro si es necesario el ; despues de LANGUAGE 'plpgsql'; Yo lo pongo a todas mis funciones. Todos los campos, están encerrados entre comillas? el campo Maximo_horas_uso es un bigint? o es tipo time? recuerda que le estas pasando un bigint como parametro de entrada. Cita: Cuando se refiere al parametro $1, es por que no se sabe el nombre del campo que viene en la función, en este caso, esta sentencia es innecesaria. Tendría validez si la función estuviera declarada así:hora ALIAS FOR $1; CREATE OR REPLACE FUNCTION "public"."actualizar" (bigint) RETURNS boolean AS En este caso, estas declarando una variable que ya existe y viene como parámetro. Prueba todo esto y nos cuentas. Un saludo.
__________________ Without data, You are another person with an opinion. W. Edwads Deming Última edición por huesos52; 03/06/2009 a las 07:16 |
| ||||
Respuesta: Problemas para desarrollar una funcion mira arregle lo que me dices ahora lo tengo así: CREATE OR REPLACE FUNCTION "public"."actualizar" (hora bigint) RETURNS boolean AS $body$ DECLARE BEGIN UPDATE tipocomponente SET tipocomponente."Precio" = (tipocomponente."Precio" + 20) WHERE tipocomponente."Maximo_horas_uso" >= hora; END; $body$ LANGUAGE 'plpgsql' y me da el siguiente error cuando la ejecuto ERROR: no existe la columna «tipocomponente» en la relación «tipocomponente» at character 27 QUERY: UPDATE tipocomponente SET tipocomponente."Precio" = (tipocomponente."Precio" + 20) WHERE tipocomponente."Maximo_horas_uso" >= $1 CONTEXT: PL/pgSQL function "actualizar" line 4 at SQL statement |
| ||||
Respuesta: Problemas para desarrollar una funcion Cita: Si creas la función logueado en la base de datos, no es necesario anteceder el nombre de la base de datos en el llamado a las tablas ni campos. Ademas, cuando llamas a precio (supongo que es una columna) lo llamas como bd.campo... a que tabla pertenecería precios?? debería ser bd.tabla.campo... pero como te digo, esto no es necesario si estas conectado a la base de datos al momento de ejecutar la función.ERROR: no existe la columna «tipocomponente» en la relación «tipocomponente» at character 27 Prueba y nos cuentas. Un saludo.
__________________ Without data, You are another person with an opinion. W. Edwads Deming |
| ||||
Respuesta: Problemas para desarrollar una funcion mira probe de esta forma CREATE OR REPLACE FUNCTION "public"."actualizar" (hora bigint) RETURNS boolean AS $body$ DECLARE BEGIN UPDATE tipocomponente SET Precio = (Precio + 20) WHERE Maximo_horas_uso >= hora; END; $body$ LANGUAGE 'plpgsql' y mira lo que me da ERROR: no existe la columna «precio» at character 37 QUERY: UPDATE tipocomponente SET Precio = (Precio + 20) WHERE Maximo_horas_uso >= $1 CONTEXT: PL/pgSQL function "actualizar" line 4 at SQL statement |
| ||||
Respuesta: Problemas para desarrollar una funcion haz un \d tipocomponente Para ver que campos tiene tu tabla. El error dice que ese campo no existe. Poco a poco, vamos solucionando esto.
__________________ Without data, You are another person with an opinion. W. Edwads Deming |
| ||||
Respuesta: Problemas para desarrollar una funcion esta es mi tabla tipocomponente CREATE TABLE "public"."tipocomponente" ( "ComponenteCod" CHAR(12) DEFAULT ''::bpchar NOT NULL, "ComponenteDscrip" VARCHAR(50) DEFAULT ''::character varying NOT NULL, "Maximo_horas_uso" BIGINT, "Precio" NUMERIC, "FabricanteCod" CHAR(10) DEFAULT ''::bpchar NOT NULL, CONSTRAINT "tipocomponente_pkey" PRIMARY KEY("ComponenteCod"), CONSTRAINT "tipocomponente_fk" FOREIGN KEY ("FabricanteCod") REFERENCES "public"."fabricante"("FabricanteCod") ON DELETE NO ACTION ON UPDATE NO ACTION NOT DEFERRABLE ) WITHOUT OIDS; |
| ||||
Respuesta: Problemas para desarrollar una funcion Tu problema debe estar en como nombras las funciones y la llamada a campos. Nunca he sido amigo de utilizar comillas en mis tablas, asi que ahí debe estar el problema. Probé el codigo y me ha funcionado.
Código sql:
Ver original Efectivamente, me actualiza el precio de los que tienen 12 y 15 horas sumandoles 20. Un saludo
__________________ Without data, You are another person with an opinion. W. Edwads Deming |
| ||||
Respuesta: Problemas para desarrollar una funcion Amigo al final dimos con el problema solo le agregué las comillas a Precio y a Maximo_horas_uso y wuala funcionó aqui dejo la respuesta por si a alguien algún día le pasa lo mismo muchas gracias huesos52; pero ahora viene la otra parte como puedo retornar el resultado de la unión de los campos afectados con otra tabla que se relaciona con esta y tiene el nombre de los fabricantes y los paises de los mismos CREATE OR REPLACE FUNCTION "public"."actualizar" (hora bigint) RETURNS boolean AS $body$ DECLARE BEGIN UPDATE tipocomponente SET "Precio" = ("Precio" + 20) WHERE "Maximo_horas_uso" >= hora; return true; END; $body$ LANGUAGE 'plpgsql' Última edición por Osay; 03/06/2009 a las 16:17 Razón: Agregar unas cosas |