Deberias cambiar FOR EACH STATAMENT por FOR EACH ROW?
El día 22 de enero de 2009 10:26, SILVANA IOVINO <[email protected]> escribió: > Hola a todos!! necesito si alguno me puede ayudar con un problema que tengo > al momento de crear un trigger que usa una funcion, el script de creacion de > la funcion y del trigger es el siguiente: > > CREATE OR REPLACE FUNCTION > "public"."titulo_busqueda_dinamico_update_modelos" () RETURNS trigger AS > $body$ > DECLARE > contador_titulo integer; > tituloBusqueda varchar; > sNombre varchar; > BEGIN > select nombre into sNombre from modelos where modelos.id_modelo = > new.id_modelo; > > tituloBusqueda:= replace(lower(sNombre), ' ', '-'); > tituloBusqueda:= replace(tituloBusqueda, '¡', '-'); > tituloBusqueda:= replace(tituloBusqueda, '!', '-'); > tituloBusqueda:= replace(tituloBusqueda, '¿', '-'); > tituloBusqueda:= replace(tituloBusqueda, '?', '-'); > tituloBusqueda:= replace(tituloBusqueda, '+', '-'); > tituloBusqueda:= replace(tituloBusqueda, '/', '_'); > tituloBusqueda:= replace(tituloBusqueda, E'\\', '_'); > tituloBusqueda:= replace(tituloBusqueda, 'ñ', 'n'); > tituloBusqueda:= replace(tituloBusqueda, 'ç', 'c'); > > tituloBusqueda:= replace(tituloBusqueda, 'ù', 'u'); > tituloBusqueda:= replace(tituloBusqueda, 'à', 'a'); > tituloBusqueda:= replace(tituloBusqueda, 'è', 'e'); > tituloBusqueda:= replace(tituloBusqueda, 'ì', 'i'); > tituloBusqueda:= replace(tituloBusqueda, 'ò', 'o'); > > tituloBusqueda:= replace(tituloBusqueda, 'ú', 'u'); > tituloBusqueda:= replace(tituloBusqueda, 'á', 'a'); > tituloBusqueda:= replace(tituloBusqueda, 'é', 'e'); > tituloBusqueda:= replace(tituloBusqueda, 'í', 'i'); > tituloBusqueda:= replace(tituloBusqueda, 'ó', 'o'); > > tituloBusqueda:= replace(tituloBusqueda, 'ä', 'a'); > tituloBusqueda:= replace(tituloBusqueda, 'ë', 'e'); > tituloBusqueda:= replace(tituloBusqueda, 'ï', 'i'); > tituloBusqueda:= replace(tituloBusqueda, 'ö', 'o'); > tituloBusqueda:= replace(tituloBusqueda, 'ü', 'u'); > > tituloBusqueda:= replace(tituloBusqueda, 'â', 'a'); > tituloBusqueda:= replace(tituloBusqueda, 'ê', 'e'); > tituloBusqueda:= replace(tituloBusqueda, 'î', 'i'); > tituloBusqueda:= replace(tituloBusqueda, 'ô', 'o'); > tituloBusqueda:= replace(tituloBusqueda, 'û', 'u'); > > > select count(*) INTO contador_titulo from modelos where > modelos.titulo_busqueda = tituloBusqueda; > > IF contador_titulo > 0 THEN > tituloBusqueda := tituloBusqueda || '-' || new.id_modelo; > UPDATE modelos SET titulo_busqueda = tituloBusqueda WHERE > modelos.id_modelo = new.id_modelo; > ELSE > UPDATE modelos SET titulo_busqueda = tituloBusqueda WHERE > modelos.id_modelo = new.id_modelo; > END IF; > > END; > $body$ > LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER; > > CREATE TRIGGER "trigger prueba" AFTER UPDATE > ON "public"."modelos" FOR EACH STATEMENT > EXECUTE PROCEDURE "public"."titulo_busqueda_dinamico_update_modelos"(); > > El error que me tira es cuando intento modificar una tupla de la tabla > modelos, salta el trigger y me muestra el siguiente error: > > ERROR: record "new" is not assigned yet. > DETAIL: the tuple structure of a not-yet-assigned record is indeterminate. > CONTEXT: PL/pgSQL function "titulo_busqueda_dinamico_update_modelos" line 6 > at SQL statement. > La linea 6 de la funcion a que se refiere el error es: select nombre into > sNombre from modelos where modelos.id_modelo = new.id_modelo; > > Espero la ayuda de ustedes. > Silvana > > > ________________________________ > Yahoo! Cocina > Recetas prácticas y comida saludable > Visitá http://ar.mujer.yahoo.com/cocina/ -- TIP 6: ¿Has buscado en los archivos de nuestra lista de correo? http://archives.postgresql.org/pgsql-es-ayuda
