Re: Crear Una FUNTION usando ROW_NUMBER

From: yeli <yeliarias(at)gmail(dot)com>
To: Hellmuth Vargas <hivs77(at)gmail(dot)com>
Cc: "pgsql-general(at)postgresql(dot)org" <pgsql-general(at)postgresql(dot)org>
Subject: Re: Crear Una FUNTION usando ROW_NUMBER
Date: 2018-02-20 22:18:05
Message-ID: CAKtHnCtBSu9Leo9MvNp_ELJ=G9Q=2AwhdPQh7gLyEgASWBd1tg@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Buen dia, ya corregui la primera parte, me fije después que envié el correo
y lo
Los datos en la tabla vargas, no necesariamente son solo de vargas, tenia
la intención de hacer que, como estos datos son datos de producción la
intención era que todo los datos que pertenecieran a la mismo Huso
estuviesen en la misma tabla estos son datos pertenecientes a un sistema de
información Geográfica.
Pero siento que me estoy dando cabezazos y como que es mejor separa los
datos por estados y así se hace mas fácil crear los condigo únicos que
identificarían los nombres geográfico o topónimos.
Entiendo que ROW_NUMBER es una función pero en mi tabla tengo una columna
que se llama row_number y lo que quería era que el dato expresado en la
función fuese tomado por la variable, así podía concatenar las columnas que
necesitaba y crear los código ccentpob, que debería ser únicos. ya que eso
le daría una identidad al topónimo. y no tenia que hacer 25 tablas para las
25 entidades federales que componen el País. Podía trabajarlas por bloque
en funcion a que todos los datos del Huso 18 juntos sin importar la entidad
federal, y mediante vista separa las entidades federales, menos tablas y
creo que mas efectivo. Ya que los usuario solo pueden tener acceso a los
datos mediante los servicios WFS y los editores son los únicos que pueden
manipular los datos.
Ese es mi interés de que todos los datos estén juntos. por esta razón me
parecí que la usar ROW_NUMBER podía controlar mejor esto.
De nuevo si surge una idea para mejorar esta locura que intento lo
agradezco.

El 20 de febrero de 2018, 17:28, Hellmuth Vargas<hivs77(at)gmail(dot)com> escribió:

> 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

Browse pgsql-general by date

  From Date Subject
Next Message Demitri Muna 2018-02-21 00:11:49 Getting a primitive numeric value from "DatumGetNumeric"?
Previous Message PT 2018-02-20 21:36:54 Re: query performance