Crear Una trigger usando ROW_NUMBER

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.

Responses

Browse pgsql-es-ayuda by date

  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?