Re: Crear Una FUNTION usando ROW_NUMBER

From: Hellmuth Vargas <hivs77(at)gmail(dot)com>
To: yeli <yeliarias(at)gmail(dot)com>, "pgsql-general(at)postgresql(dot)org" <pgsql-general(at)postgresql(dot)org>
Subject: Re: Crear Una FUNTION usando ROW_NUMBER
Date: 2018-02-20 21:28:46
Message-ID: CAN3Qy4pfoHtaiqB1R7wPAkuMqbTOr9kD7savWSdHqY2gq4gNgA@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Hola Yeli

Respondo entre lineas

El 20 de febrero de 2018, 12:26, yeli<yeliarias(at)gmail(dot)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.

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message PT 2018-02-20 21:36:54 Re: query performance
Previous Message Stephen Frost 2018-02-20 17:50:35 Re: Performance issues during backup