Quieres crear un correlativo por cent????? Y que rownumber sea un campo en tu tabla??
El 21 feb. 2018 9:51 a. m., "Gerardo Herzig" <gerardo.her...@ayres.io> escribió: > > > El 21 de febrero de 2018, 11:25, yeli <yeliar...@gmail.com> escribió: > >> Buen día, estoy intento crear un código único concatenado tomando datos >> de la función ROW_NUMBER debería hacer lo siguiente: >> >> Tengo una base de datos postgresql que contiene datos geográficos para >> ser visualizados en un software GIS. >> >> Básicamente 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(serial) >> >> Ccentpob >> >> (Primary Key) >> >> Nombre >> >> (Character) >> >> cod_cent >> >> (Fk_Key) >> >> sim_cent >> >> (Fk_Key) >> >> row_number >> >> (Integer) >> >> 1 >> >> >> La Guaira >> >> 24 >> >> VAR >> >> >> 2 >> >> >> Maiquetía >> >> 24 >> >> VAR >> >> >> 3 >> >> >> Cabudare >> >> 13 >> >> LAR >> >> >> 4 >> >> >> Barquisimeto >> >> 13 >> >> LAR >> >> >> 5 >> >> >> Maracay >> >> 05 >> >> ARA >> >> >> 6 >> >> >> Palo Negro >> >> 05 >> >> ARA >> >> >> >> >> Utilizando una consulta con la función ROW_NUMBER, logro numerar de cada >> Centro Poblado en función a la entidad federal que pertenecen: >> >> SELECT Id,ccentpob,nombre,cod_cent,sim_cent, ROW_NUMBER ( ) OVER >> (PARTITION BY cent) >> >> la cual me permite, llevar una secuencia de los datos en función a sus >> diferentes entidades federales centros poblados. Por lo que esta consulta >> queda así: >> >> >> id(serial) >> >> Ccentpob >> >> (Primary Key) >> >> Nombre >> >> (Character) >> >> cod_cent >> >> (Fk_Key) >> >> sim_cent >> >> (Fk_Key) >> >> row_number >> >> (Integer) >> >> 1 >> >> >> La Guaira >> >> 24 >> >> VAR >> >> 1 >> >> 2 >> >> >> Maiquetía >> >> 24 >> >> VAR >> >> 2 >> >> 3 >> >> >> Cabudare >> >> 13 >> >> LAR >> >> 1 >> >> 4 >> >> >> Barquisimeto >> >> 13 >> >> LAR >> >> 2 >> >> 5 >> >> >> Los Crepusculos >> >> 13 >> >> LAR >> >> 3 >> >> 6 >> >> >> Palo Negro >> >> 05 >> >> ARA >> >> 1 >> >> >> >> Hasta aquí todo funciona perfecto. Al probar esto como una consulta >> intento ponerlo en un función que permita utilizar 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 función que utilizo es la siguiente: >> >> >> CREATE TRIGGER row_number BEFORE INSERT >> >> ON nombres_geograficos.ba_2202_100101_n_vargas_centros_poblados >> >> FOR EACH ROW EXECUTE PROCEDURE nombres_geograficos.row_number(); >> >> >> 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) >> >> FROM nombres_geograficos.ba_2202_100101_n_vargas_centros_poblados); >> >> END IF; >> >> RETURN NEW; >> >> END' >> >> language PLPGSQL; >> >> >> Compilo todo y no me da error, pero cuando intento usar el Qgis 2.18 me >> da un error… y no me almacena el dato. Dice que el dato no esta almacenado, >> estoy consiente que el ROW_NUMBER es un dato temporal, sea parte de la >> tabla para así poder ejecutar mi trigger con éxito. >> >> Alguien tiene alguna sugerencia. >> >> Se lo agradecería de verdad. >> >> >> >> >> >> > > Si entendi bien, en el trigger necesitas asignar new.row_number a algo: > > IF NEW.cent IS NOT NULL THEN > > row_number := (SELECT ROW_NUMBER ( ) OVER (PARTITION BY cent) > > FROM nombres_geograficos.ba_2202_100101_n_vargas_centros_poblados); > > new.row_number = row_number; > > END IF; > > > > O algo asi......usar row_number como variable, nombre de campo, y siendo > que es ya una funcion en postgres, resulta bastante confuso y no creo que > se la mejor idea usarlo asi. > > HTH > -- > -- > Gerardo Herzig > Principal Consultant at Ayres Data Team > root at Via Postgres Argentina >