Original: Castear desde un record al update de un array ..Ahora: sintaxis..

From: Andrés P(dot)P(dot) <solopostgres(at)gmail(dot)com>
To: pgsql-es-ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Original: Castear desde un record al update de un array ..Ahora: sintaxis..
Date: 2010-07-31 00:36:16
Message-ID: AANLkTinbR46QOns9UoChw-3McctbTCb_Kb2vayEGirzf@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

(perdonen el correo original... por alguna razón llegó cortado...)

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

ABAJO: REFERENCIA MAIL ORIGINAL: (lo del Cast ya está solucionado... eso
creo..)

Hola

Les indico extractos de los objetos asociados a mi consulta.

tabla:

create table test_catalog.test_table (
....,
....,
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..

función: (Para cálculo de transacciones por minuto)

create or replace function test_catalog.fun_test_calc() returns void as $$
declare
v_record record;
begin

for v_record in select bla..bla..
extract ('minute' from test_datetime) as
trans_minute,
sum(test_value) as tot_trans
from test_catalog.tab_test_detalle
group by bla.. bla..
extract ('minute' from test_datetime)
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;
end ; $$ language plpgsql;
La función se crea sin problemas de compilación... pero al momento de
ejecutarla me arroja:

========================================================
testdb=# \i crea_fun.sql
CREATE FUNCTION
testdb=# select * from test_catalog.fun_test_calc();
ERROR: array assignment to "test_minute_trans" requires type integer[] but
expression is of type text
LINE 1: update test_catalog.test_table set test_minute_trans[ $1 : $2 ][2:2]
=...
^
HINT: You will need to rewrite or cast the expression.
QUERY: update test_catalog.test_table set test_minute_trans[ $1 : $2 ][2:2]
= '{'|| $3 ||'}' where ...........
CONTEXT: PL/pgSQL function "fun_test_calc" line 27 at SQL statement

(por si llega mal identado el signo ^ apunta a test_minute_trans)
========================================================

Me podrían ayudar a solucionar este problema.. he intentando castear , usar
to_number pero me reclama errores similares...Talvez estoy usando mal los
intentos de casteo ..

Gracias desde ya
Andrés.

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Andrés P.P. 2010-07-31 01:38:36 Re: Castear desde un record type a los indices de un array
Previous Message Andrés P.P. 2010-07-31 00:26:03 Re: Castear desde un record type a los indices de un array