Hola a todos. Tengo un campo en una tabla que en este momento almacena datos
de tipo NUMERIC.
Debería modificarlos masivamente a todos los registros que ya tengo
almacenados. Esta modificación consiste en colocar una serie arrancando
desde el nro 100 en adelante pero ordenados segun un criterio...
Es decir en el primer registro de la tabla debería ir el 100, en el segundo
el 101 y así sucesivamente...
Hasta el momento lo hacía externamente haciendo una rutina en vb.net y los
modificaba cambiando los parametros.
Quería saber si pudiera crear una VISTA dentro de la tabla en cuestión para
que al ejecutarla, automáticamente haga estos cambios... y cómo tendría que
arrancar a diseñar esta VISTA... cómo sería el código...
Desde ya muchas gracias

Marcelo

Search Discussions

  • Marcos Ortiz at Apr 29, 2011 at 3:07 pm

    El 4/29/2011 10:12 AM, Marcelo Robin escribió:
    Hola a todos. Tengo un campo en una tabla que en este momento almacena
    datos de tipo NUMERIC.
    Debería modificarlos masivamente a todos los registros que ya tengo
    almacenados. Esta modificación consiste en colocar una serie
    arrancando desde el nro 100 en adelante pero ordenados segun un
    criterio...
    Es decir en el primer registro de la tabla debería ir el 100, en el
    segundo el 101 y así sucesivamente...
    Hasta el momento lo hacía externamente haciendo una rutina en vb.net
    <http://vb.net> y los modificaba cambiando los parametros.
    Quería saber si pudiera crear una VISTA dentro de la tabla en cuestión
    para que al ejecutarla, automáticamente haga estos cambios... y cómo
    tendría que arrancar a diseñar esta VISTA... cómo sería el código...
    Desde ya muchas gracias

    Marcelo
    Mi consejo es que hagas una función que te haga eso, no una vista.
    Las vistas no son usadas para ello, mas bien se usan para encapsular los
    detalles de la estructura de tus tablas y para ejecutar consultas que
    generalmente ejecutas en tu base de datos.

    El código como tal depende de tu aplicación, pero es más o menos es
    igual. Acá te dejo un ejemplo de una función que usé para modificar dos
    registros en una tabla

    CREATE OR REPLACE FUNCTION modificar_letra_tbreport() RETURNS VOID AS
    $$
    DECLARE
    -- Declaracion de las variables a usar
    v_row record;
    v_template text;
    v_xmlreport text;
    v_local text;
    v_local2 text;
    BEGIN
    SET search_path = 'mod_recuperaciones';
    -- Obtencion de todos los reportes

    FOR v_row IN SELECT * FROM tbreport
    LOOP
    -- Obtencion de las variables a modificar
    v_template := v_row.template;
    v_xmlreport := v_row.xmlreport;
    -- Reemplazo de arial por DejaVu Sans
    v_local := regexp_replace(v_template,'arial','DejaVu Sans');
    v_local2 := regexp_replace(v_xmlreport,'arial','DejaVu Sans');
    -- Actualizacion de las filas
    UPDATE tbreport
    SET template = v_local,
    xmlreport = v_local2
    WHERE idreport = v_row.idreport;
    END LOOP;
    END
    $$
    LANGUAGE plpgsql;

    Podrías seguir la lógica y adaptarla a tus necesidades.
    Saludos

    --
    Marcos Luís Ortíz Valmaseda
    Software Engineer
    Linux User # 418229
  • Lazaro Rubén García Martinez at May 2, 2011 at 1:59 pm
    Mira eso que deseas hacer, lo puedes hacer mediante un procedimiento almacenado, acá te dejo un ejemplo sencillo donde creo una tabla con una clave primaria de tipo numeric, y después le asigno un id a partir de una secuencia como deseas, espero que te sea de utilidad.

    --Creación de la tabla

    CREATE TABLE public.a (
    id numeric(18,2),
    fecha date,
    primary key (id)
    ) ;

    --Creación de la secuencia

    CREATE SEQUENCE public.seq_id
    START 100
    INCREMENT 1
    MINVALUE 100
    MAXVALUE 9223372036854775807
    CACHE 1;

    --Procedimiento almacenado

    CREATE FUNCTION public."Function02"()
    RETURNS integer AS
    $$
    DECLARE

    estado public.a.id%TYPE;

    begin

    FOR estado IN SELECT public.a.id from public.a
    Loop
    UPDATE public.a SET id = nextval('seq_id') WHERE public.a.id = estado;
    END Loop;

    RETURN 1;



    end
    $$
    LANGUAGE 'plpgsql'
    VOLATILE
    CALLED ON NULL INPUT
    SECURITY INVOKER
    COST 100;

    Saludos.




    ________________________________________
    De: pgsql-es-ayuda-owner@postgresql.org [pgsql-es-ayuda-owner@postgresql.org] En nombre de Marcelo Robin [marcelorobin@gmail.com]
    Enviado el: viernes, 29 de abril de 2011 9:42
    Para: pgsql-es-ayuda@postgresql.org
    Asunto: [pgsql-es-ayuda] MODIFICAR MASIVAMENTE UN CAMPO

    Hola a todos. Tengo un campo en una tabla que en este momento almacena datos de tipo NUMERIC.
    Debería modificarlos masivamente a todos los registros que ya tengo almacenados. Esta modificación consiste en colocar una serie arrancando desde el nro 100 en adelante pero ordenados segun un criterio...
    Es decir en el primer registro de la tabla debería ir el 100, en el segundo el 101 y así sucesivamente...
    Hasta el momento lo hacía externamente haciendo una rutina en vb.net<http://vb.net> y los modificaba cambiando los parametros.
    Quería saber si pudiera crear una VISTA dentro de la tabla en cuestión para que al ejecutarla, automáticamente haga estos cambios... y cómo tendría que arrancar a diseñar esta VISTA... cómo sería el código...
    Desde ya muchas gracias

    Marcelo

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
grouppgsql-es-ayuda @
categoriespostgresql
postedApr 29, '11 at 2:12p
activeMay 2, '11 at 1:59p
posts3
users3
websitepostgresql.org.es
irc#postgresql

People

Translate

site design / logo © 2022 Grokbase