Re: Castear desde un record type a los indices de un array

From: Andrés P(dot)P(dot) <solopostgres(at)gmail(dot)com>
To: pgsql-es-ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Castear desde un record type a los indices de un array
Date: 2010-07-31 01:38:36
Message-ID: AANLkTin=WxgNc5q17LNTRMsCmDKjC40NKBc=oxLJMJjp@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Álvaro...

.... efectivamente faltaba un array() para castear la operación... y no
tratara de intepretar el string que le armaba.... el bloque del UPDATE quedó
finalmente así:

======================================================
....
loop
update test_catalog.test_table
set
test_minute_trans[v_record.trans_minute_pos:v_record.trans_minute_pos][2:2]
= *array[v_record.tot_trans]
*where bla bla...
end loop
....
======================================================

..también sirve *array[v_record.tot_trans]::integer[] ....*existe alguna
diferencia??..

En fin.. ya encontré la solución, por si algún alma bondadosa hubiese
intentado ayudarme.

Gracias Álvaro por los tips..

Saludos
Andrés

El 30 de julio de 2010 20:26, Andrés P.P. <solopostgres(at)gmail(dot)com> escribió:

>
> Hola
>
> Ya no me arroja el error original...después del último cambio, pero aparece
> otro:
>
> =============================================================
> Último cambio:
> ...
> loop
> update test_catalog.test_table
> set
> test_minute_trans[v_record.trans_minute_pos:v_record.trans_minute_pos][2:2]
> = '{'||v_record.tot_trans||'}'::integer[]
> where mas bla bla....
> ....
>
> y AHORA el error es:
>
> testdb=# select * from test_catalog.fun_test_calc();
> ERROR: array value must start with "{" or dimension information
> LINE 1: ...test_table set test_minute_trans[ $1 : $2 ][2:2] = '{'|| $3
> ||'}'::integ...
>
>
> ^
> QUERY: update test_catalog.test_table set test_minute_trans[ $1 : $2
> ][2:2] = '{'|| $3 ||'}'::integer[] where CONTEXT: PL/pgSQL function
> "fun_test_calc" line 27 at SQL statement
>
> (por si no llega bien identado...el ^ lo apunta al segundo '}' )
> =============================================================
>
> Parece obvio el error, pero no he podido solucionarlo..
>
> Alguna sugerencia.??
>
> Saludos
> Andrés
>
>
>
>> El 30 de julio de 2010 19:13, Andrés P.P. <solopostgres(at)gmail(dot)com>escribió:
>>
>>
>>> Gracias Álvaro
>>>
>>> Lo estuve mirando, pero creo que no se aplica a mi problema.... Sin
>>> embargo, seguí insistiendo con probar distintas formas en el UPDATE que es
>>> donde se presenta el problema y descubrí que el problema NO ESTA en los
>>> índices que uso en el SET... sino en el valor que asigno osea,
>>> v_record.tot_trans
>>>
>>> Lo que tenía y que devuelve el error que les comenté:
>>>
>>> loop
>>> update test_catalog.test_table
>>> set test_minute_trans[v_record.trans_minute:v_record.trans_minute][2:2] =
>>> '{'||v_record.tot_trans||'}'
>>> where mas bla bla ....
>>> end loop
>>>
>>> una de las pruebas tontas que hice para estar seguro de la sintaxis fue
>>> modificar ese Update por:
>>>
>>> loop
>>> update test_catalog.test_table
>>> set
>>> test_minute_trans[v_record.trans_minute_pos:v_record.trans_minute_pos][2:2]
>>> = '{7}'
>>> where mas bla bla...
>>> end loop
>>>
>>> Y Funciono!.. osea en cuanto a no arrojar error... por lo tanto ahora
>>> debo centrarme en como castear v_record.tot_trans (tot_trans es el
>>> resultado de un SUM y al ser númerico asumí que no debería arrojarme ese
>>> error... o el hecho de ir dentro de un record lo cambia de tipo??? )..
>>>
>>> Gracias
>>> Andrés
>>> Osea.. al parecer no le gusta el tipo de dato que tiene
>>> "v_record.trans_minute" como para usarlo de índice para ubicar un elemento
>>> del arreglo... ese dato es el que aparentemente debo castear pero no se
>>> como..
>>>
>>> Saludos
>>> Andres.
>>>
>>>
>>>
>>>
>>>
>>> 2010/7/30 Alvaro Herrera <alvherre(at)commandprompt(dot)com>
>>>
>>> Excerpts from Andrés P.P.'s message of vie jul 30 18:17:35 -0400 2010:
>>>>
>>>> > ....,
>>>> > ....,
>>>> > test_minute_trans integer[][]
>>>> > ) without oids;
>>>> > osea, un atributo de tipo Array de dos dimensiones..... ese atributo
>>>> > contiene pares (minuto, transacciones) ..60 pares en total..
>>>>
>>>> Quizas esto te ayude
>>>>
>>>> http://archives.postgresql.org/message-id/482E80323A35A54498B8B70FF2B879800465B3CF95@azsmsx504.amr.corp.intel.com
>>>>
>>>> --
>>>> Álvaro Herrera <alvherre(at)commandprompt(dot)com>
>>>> The PostgreSQL Company - Command Prompt, Inc.
>>>> PostgreSQL Replication, Consulting, Custom Development, 24x7 support
>>>>
>>>
>>>
>>
>

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Antonio Jesús Gómez Núñez 2010-08-02 09:11:19 Problemas con el espacio de disco al ejecutar una consulta
Previous Message Andrés P.P. 2010-07-31 00:36:16 Original: Castear desde un record al update de un array ..Ahora: sintaxis..