Á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. <[email protected]> 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. <[email protected]>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 <[email protected]> >>> >>> 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/482e80323a35a54498b8b70ff2b879800465b3c...@azsmsx504.amr.corp.intel.com >>>> >>>> -- >>>> Álvaro Herrera <[email protected]> >>>> The PostgreSQL Company - Command Prompt, Inc. >>>> PostgreSQL Replication, Consulting, Custom Development, 24x7 support >>>> >>> >>> >> >
