El 19 de junio de 2009 07:51, Reynier Pérez Mira<rper...@uci.cu> escribió: > Reynier Pérez Mira wrote: >> >> Julio Cesar Rodriguez Dominguez wrote: >>> >>> 1.- Las cadenas van encerradas en comillas simples, no doble comillas >>> 2.- el operador == no existe >>> 3.- Si lanzas una excepción, se aborta el proceso de la función. >> >> He ajustado la función y ahora queda así: > > Aquí está el DDL > > CREATE OR REPLACE FUNCTION "public"."RealizarPrestamo" ("ID_Material" > integer, id_prestamo integer, "Tipo" char, "Horario" char, > "Nombre_Solicitante" char, "Solapin_Solicitante" char, > "Datos_Material_Prestado" char, "Tipo_Material_Solicitado" char, "Fecha" > char) RETURNS record AS > $body$ > DECLARE myvar record; > BEGIN > SELECT "Material"."estado_del_prestamo" INTO myvar FROM "Material" WHERE > "Material"."ID_Material" = $1; > RETURN myvar; > IF (myvar.estado_del_prestamo = 'no_prestado') THEN > INSERT INTO "Material Prestamo" VALUES($1,$2); > INSERT INTO "Prestamo" VALUES($2,$3,$4,$5,$6,$7,$8,$9,$10); > UPDATE "Material" SET "Material".estado_del_prestamo = "prestado"; > END IF; > END > $body$ > LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER; > > Notas: > 1. Si pongo comillas simples, por ejemplo: > SELECT 'Material'.'estado_del_prestamo' INTO myvar FROM 'Material' .... > SELECT ´Material´.´estado_del_prestamo´ INTO myvar FROM ´Material´ .... > > Me devuelve un error (ya lo puse en el correo anterior) y no me deja > ejecutar la función. > > 2. Cuando ejecuto la función (tal y como está arriba) la salida del editor > es la siguiente: > > Query OK (0.06 sec) > Return Value: (no_prestado) > > pero por alguna razón no entra a la condicional. > > ¿Alguna idea de por que no inserta ni actualiza los datos en las tablas? >
ese return antes del if, no debe ir ahí, ya que al llegar a ese punto la función termina. Pasalo hasta abajo despues del end if. -- TIP 7: no olvides aumentar la configuración del "free space map"