From: | yeli <yeliarias(at)gmail(dot)com> |
---|---|
To: | pgsql-es-ayuda(at)lists(dot)postgresql(dot)org |
Subject: | Crear Una trigger usando ROW_NUMBER |
Date: | 2018-02-21 14:25:47 |
Message-ID: | CAKtHnCtKYx5KHe7NvZ9a1n0xrn_MPfB0Ehyy9RmOrBsj7YUBtg@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
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.
From | Date | Subject | |
---|---|---|---|
Next Message | Gerardo Herzig | 2018-02-21 14:50:55 | Re: Crear Una trigger usando ROW_NUMBER |
Previous Message | Anthony Sotolongo | 2018-02-21 00:08:37 | Re: Cual es la unidad de medida para saber si un query es lento? |