Crear Una FUNTION usando ROW_NUMBER

From: yeli <yeliarias(at)gmail(dot)com>
To: pgsql-general(at)postgresql(dot)org
Subject: Crear Una FUNTION usando ROW_NUMBER
Date: 2018-02-20 17:26:56
Message-ID: CAKtHnCsN4o4O4RqYvNyeeMmg7yCY9UmmQJWSfR1bnbeaRS2PxA@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

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();

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;

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.

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Abhra Kar 2018-02-20 17:27:08 Re: stored procedure call is not working with "select procedure()" option
Previous Message Alban Hertroys 2018-02-20 17:15:37 Re: stored procedure call is not working with "select procedure()" option