El 06/10/2012 11:43, Edwin Quijada escribió:
Hola!
Estoy teniendo problemas con una funcion que desarrolle en 9.1 pero que no me compila en 8.4. La necesito en 8.4 porque esta base de datos esta en un servidor en la nube y ahi es un poco dificil cambiar la base de datos porque yo lo pida, aunque lo quisiera.

La funcion en cuestion es esta

CREATE OR REPLACE FUNCTION public."_Test" (
  out tipo varchar,
  out fecha varchar,
  x integer
)
RETURNS SETOF record AS
$body$
DECLARE
  r record;
BEGIN
  case x
when 1 THEN
return query
         select 'Linea1'::varchar as tipo, '00-00-00'::varchar as fecha
         union all
select 'Quijada'::varchar as tipo,to_char(now()::date,'YYYYMMDD') as fecha;
    when 2 THEN
return query
         select 'Linea1'::varchar as tipo, '00-00-00'::varchar as fecha
         union all
select 'Edwin'::varchar as tipo,to_char(now()::date,'YYYY/MM/DD') as fecha;
    when 3 THEN
return query
         select 'Linea1'::varchar as tipo, '00-00-00'::varchar as fecha
         union all
select 'Alberto'::varchar as tipo,to_char(now()::date,'YYYY-MM-DD') as fecha;
     else
select 'Nada'::varchar as tipo;
  end case;
END;
$body$
LANGUAGE 'plpgsql'
VOLATILE
CALLED ON NULL INPUT
SECURITY INVOKER
COST 100 ROWS 1000;


En 8.4 al compilarla consigo este error :
ERROR:  syntax error at or near "$1"
LINE 1:  select 'Linea1'::varchar as  $1 , '00-00-00'::varchar as  $...
                                      ^
QUERY: select 'Linea1'::varchar as $1 , '00-00-00'::varchar as $2 union all select 'Quijada'::varchar as $1 ,to_char(now()::date,'YYYYMMDD') as $2
CONTEXT:  SQL statement in PL/PgSQL function "_Test" near line 9
(5.453 sec)

Pero en 9.1
Linea1 00-00-00
Edwin  20121005

No creia que hubiese alguna diferencia,al menos en esto, entre estas dos versiones?

Alguien tiene alguna idea ??




<http://www.uci.cu/>
Hola Edwin, lo único que he modificado es que le cambie en nombre a las salidas tipo1 y fecha1, pues hay incompatibilidad con los parámetros y las variables que usas dentro de las funciones que no se pueden llamar iguales, ese error lo he tenido otras veces pero no como te da a ti, es decir cuando tenia un parámetro con un nombre X no podía definir una variable interna con ese nombre.
saludos


CREATE OR REPLACE FUNCTION public."_Test" (
  out tipo varchar,
  out fecha varchar,
  x integer
)
RETURNS SETOF record AS
$body$
DECLARE
  r record;
BEGIN
  case x
  when 1 THEN
    return query
         select 'Linea1'::varchar as tipo1, '00-00-00'::varchar as fecha1
         union all
select 'Quijada'::varchar as tipo1,to_char(now()::date,'YYYYMMDD') as fecha1;

    when 2 THEN
    return query
         select 'Linea1'::varchar as tipo1, '00-00-00'::varchar as fecha1
         union all
select 'Edwin'::varchar as tipo1,to_char(now()::date,'YYYY/MM/DD') as fecha1;

    when 3 THEN
    return query
         select 'Linea1'::varchar as tipo1, '00-00-00'::varchar as fecha1
         union all
select 'Alberto'::varchar as tipo1,to_char(now()::date,'YYYY-MM-DD') as fecha1;

     else
    select 'Nada'::varchar as tipo1;
  end case;
END;
$body$
LANGUAGE 'plpgsql'



10mo. ANIVERSARIO DE LA CREACION DE LA UNIVERSIDAD DE LAS CIENCIAS 
INFORMATICAS...
CONECTADOS AL FUTURO, CONECTADOS A LA REVOLUCION

http://www.uci.cu
http://www.facebook.com/universidad.uci
http://www.flickr.com/photos/universidad_uci

Responder a