Skip site navigation (1) Skip section navigation (2)

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 (view raw or flat)
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.

pgsql-es-ayuda by date

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

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group