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.
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 |