Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » PostgreSQL »

Funcion que crea una tabla temporal

Estas en el tema de Funcion que crea una tabla temporal en el foro de PostgreSQL en Foros del Web. Hola, yo tengo un problema un tanto raro necesito hacer una funcion que cree una tabla temporal, pero me sale un error: ERROR: cannot open ...
  #1 (permalink)  
Antiguo 07/12/2007, 10:15
 
Fecha de Ingreso: diciembre-2007
Mensajes: 9
Antigüedad: 16 años, 4 meses
Puntos: 0
Exclamación Funcion que crea una tabla temporal

Hola, yo tengo un problema un tanto raro
necesito hacer una funcion que cree una tabla temporal, pero me sale un error:
ERROR: cannot open SELECT INTO query as cursor
CONTEXT: PL/pgSQL function "compmarca" line 23 at open
La consulta esta bien, porque cuando la hago a parte, si me crea la tabla y la llena, algo tiene que ver con la llamada al cursor. si pueden ayudarme les agradecería muchisimo

CREATE OR REPLACE FUNCTION "reportes"."compmarca" (varchar, varchar, varchar, varchar) RETURNS SETOF boolean AS
$body$
declare
categoria alias for $1;
campana alias for $2;
fechaini alias for $3;
fechafin alias for $4;
cursor1 refcursor;
consulta varchar;

begin
consulta:='CREATE TEMP TABLE compxmarca as
select comp.* from (
select * from reportes.compxmarca('''||categoria||''','''||campa na||''',''tv'','''||fechaini||''','''||fechafin||' '')
union
select * from reportes.compxmarca('''||categoria||''','''||campa na||''',''rd'','''||fechaini||''','''||fechafin||' '')
union
select * from reportes.compxmarca('''||categoria||''','''||campa na||''',''pr'','''||fechaini||''','''||fechafin||' '')
union
select * from reportes.compxmarca('''||categoria||''','''||campa na||''',''rv'','''||fechaini||''','''||fechafin||' '')
union
select * from reportes.compxmarca('''||categoria||''','''||campa na||''',''su'','''||fechaini||''','''||fechafin||' '')
) as comp;';

open cursor1 for execute consulta;
close cursor1;
end;
$body$
LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;
  #2 (permalink)  
Antiguo 10/12/2007, 02:45
 
Fecha de Ingreso: marzo-2007
Mensajes: 6
Antigüedad: 17 años, 1 mes
Puntos: 0
Re: Funcion que crea una tabla temporal

Hola, yo uso postgre 8.3 y no tengo prob con tablas temporales.

ejem:

sql := 'create local temp table temp_cptcalc as select * from '||$1||'.cptcalc where gc_id='''||$2||''' and perio_codigo=''0'' ';
execute sql;
drop table temp_cptcalc;
  #3 (permalink)  
Antiguo 10/12/2007, 03:39
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 2 meses
Puntos: 13
Re: Funcion que crea una tabla temporal

yoMax utiliza EXECUTE 'CREATE TEMP TABLE .....'; para crear tablas temporales.

Ahora que miro mejor tu codigo... el fallo está claro, estas pidiendo que habra un cursor de un create table!!!!!

open cursor1 for execute consulta;
close cursor1;
para que haces esto???

utiliza solo execute consulta;

Un saludo

EDITADO:
Porque utilizas RETURNS SETOF boolean, el SETOF sobra.
Y no tienes RETURN dentro de la funcion....
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:45.