Hola Yeli Respondo entre lineas
El 20 de febrero de 2018, 12:26, yeli<yeliar...@gmail.com> escribió: > Buen día, estoy intento crear un código concatenada a través de una > función que haga lo siguiente: > > Tengo una base de datos postgresql que esta asociada a un software GIS. > > Basicamente es una tabla donde se guardan datos sobre centros poblados, > estos centros poblados tienen datos que al concatenarlos se intenta crear > códigos únicos. > > Id,ccentpob,nombre,cod_cent,sim_cent. > > Los datos de las tabla son asi: > > 1,’’ , Estado Vargas,24,VAR; > > 2,,’’,Estado Vargas,24,VAR; > > 3,’’;Estado Amazonas,02,AMA; > > 4,’’;Estado Amazonas,02,AMA; > > 5,’’;Estado Amazonas,02,AMA; > > 6,’’;Estado Amazonas,02,AMA; > > 7,’’;Estado Anzoátegui,03,ANZ; > > > Utilizando una sentencia ROW_NUMBER, logro numerar de cada Centro Poblado > en función a la entidad federal que pertenecen: > > SELEC Id,ccentpob,nombre,cod_cent,sim_cent, ROW_NUMBER ( ) OVER > (PARTITION BY cent) el cual me permite, llevar una secuencia de los datos > en función a sus diferentes centros poblados. Por lo que esta consulta > queda asi: > > Id,ccentpob,nombre,cod_cent,sim_cent,row_number > > 1,’’ , Estado Vargas,24,VAR,1; > > 2,,’’,Estado Vargas,24,VAR,2; > > 3,’’;Estado Amazonas,02,AMA,1; > > 4,’’;Estado Amazonas,02,AMA,2; > > 5,’’;Estado Amazonas,02,AMA,3; > > 6,’’;Estado Amazonas,02,AMA,4; > > 7,’’;Estado Anzoátegui,03,ANZ,1; > > Hasta aquí todo funciona perfecto. Al probar esto como una consulta > intento ponerlo en un funcion que permita crear un trigger, que se va a > activar cada que que al insertar un dato desde el SIG, se enumere el dato > siguiendo la secuencia. Lo que me va a permita concatenar los datos para > crear el ccentpob que es el único dato que me falta. > > La funcion que utilizo es la siguiente: > > > CREATE TRIGGER row_number AFTER INSERT > > ON nombres_geograficos.ba_2202_100101_n_vargas_centros_poblados > > FOR EACH ROW EXECUTE PROCEDURE nombres_geograficos.row_number(); > > > Creo que el Trigger debería ser BEFORE no AFTER si se quiere modificar un campo para su inserción. > CREATE OR REPLACE FUNCTION nombres_geograficos.row_number() RETURNS > TRIGGER AS ' > > DECLARE > > row_number numeric; > > BEGIN > > IF NEW.cent IS NOT NULL THEN > > row_number := (SELECT ROW_NUMBER ( ) OVER (PARTITION BY cent) > El row_number es una función, no es una variable que se pueda establecer > FROM nombres_geograficos.ba_2202_100101_n_vargas_centros_poblados); > nombres_geograficos.ba_2202_100101_n_vargas_centros_poblados: la tabla esta particionada? todos los datos de vargas esta en una única tabla? no tenida sentido estar enumerándolos > END IF; > > RETURN NEW; > > END' > > language PLPGSQL; > > > Pero cuando intento usar el SIG que es Qgis 2.18 me da un erro… y no me > almacena el dato. > > Se y estoy consiente que el ROW_NUMBER es un dato temporal, pero necesito > que este dato sea parte de la tabla para así poder ejecutar mi trigger con > éxito. > > Alguien tiene alguna sugerencia. > > Se lo agradecería de verdad. > > -- Cordialmente, Hellmuth I. Vargas S.