Re: Procedure en postgres

From: Eliana Gutierrez <egp1962(at)yahoo(dot)com(dot)au>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Procedure en postgres
Date: 2006-11-06 02:05:49
Message-ID: 20061106020549.54382.qmail@web53203.mail.yahoo.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

hola, los tipos de datos estan correctos, tengo duda eso si con los timestamp. sabe alguien si hay alguna restriccion.

Saludos

Linder Poclaba <linder(dot)poclaba(at)gmail(dot)com> wrote:

El día 5/11/06, Eliana Gutierrez <egp1962(at)yahoo(dot)com(dot)au> escribió: hola gracias por tu dato, lo estoy probando con la funcion
CREATE OR REPLACE FUNCTION otherfuncion()
RETURNS SETOF record AS
$BODY$
DECLARE registro RECORD;
BEGIN
FOR registro IN
SELECT
processes."PT_DLL_ID",
processes."PT_P_ID",
processes."PT_CONTEXT",
processes."PT_CURRENT_STEP",
processes."PT_TIMER_IN",
processes."PT_TIMER_OUT",
processes."PT_PRIORITY",
processes."PT_STATUS",
processes."PT_CHAMELEON_ID",
dllregistry."DLLT_DLL_LOCATION",
processregistry."PR_LOCATIONT_ORI"
FROM processes JOIN dllregistry ON processes."PT_DLL_ID" = dllregistry."DLLT_DLL_ID"
JOIN processregistry ON processes."PT_P_ID" = processregistry."PR_P_ID"
AND processes."PT_DLL_ID" = processregistry."PR_DLL_ID"
WHERE "PT_STATUS" = 0
ORDER BY processes."PT_DLL_ID", processes."PT_P_ID", processes."PT_CONTEXT" LOOP
RETURN NEXT registro;
END LOOP;
RETURN;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;

lo ejecuto con esta sentence

SELECT * from otherfuncion() AS (pt_dll_id int4,pt_p_id varchar,pt_context int4,pt_current_step int4,pt_timer_in timestamp, pt_timer_out timestamp,pt_priority int2,pt_status int2,pt_chameleon int4,dllt_dll_location varchar,pr_location_ori char);

pero me da el sgte error al ejecutarlo:

ERROR: wrong record type supplied in RETURN NEXT
CONTEXT: PL/pgSQL function "otherfuncion" line 21 at return next
Hola Eliana ese error sale porque cuando llamas a la función y colocas tus campos uno o mas tipos de datos no son los correctos de los que tendrías que recibir, por ejm: talvez el int2 sea int4, revisa bien esa parte.

Manda los mensajes a la lista por si alguien lo lee primero te responderán más rápido.

Saludos

Linder Poclaba <linder(dot)poclaba(at)gmail(dot)com> wrote:

2006/11/5, Eliana Gutierrez < egp1962(at)yahoo(dot)com(dot)au>: Estoy usando este procedure

CREATE FUNCTION myfun(OUT mycursor refcursor) AS
$BODY$begin
OPEN mycursor FOR
SELECT
processes."PT_DLL_ID" AS pt_dll_id,
processes."PT_P_ID" AS pt_p_id,
processes."PT_CONTEXT" AS pt_context,
processes."PT_CURRENT_STEP" AS pt_current_step,
processes."PT_TIMER_IN" AS pt_timer_in,
processes."PT_TIMER_OUT" AS pt_timer_out,
processes."PT_PRIORITY" AS pt_priority,
processes."PT_STATUS" AS pt_status,
processes."PT_CHAMELEON_ID" AS pt_chameleon,
dllregistry."DLLT_DLL_LOCATION" AS dllt_dll_location,
processregistry."PR_LOCATIONT_ORI" AS pr_location_ori
FROM processes JOIN dllregistry ON processes."PT_DLL_ID" = dllregistry."DLLT_DLL_ID"
JOIN processregistry ON processes."PT_P_ID" = processregistry."PR_P_ID"
AND processes."PT_DLL_ID" = processregistry."PR_DLL_ID"
WHERE "PT_STATUS" = 0
ORDER BY pt_dll_id, pt_p_id, pt_context
LIMIT 1;
CLOSE mycursor;
END;$BODY$
LANGUAGE 'plpgsql' VOLATILE;

nose que estoy haciendo mal que al ejecutarlo por pgadmin con la sentence
SELECT myfun(); me retorna
Row myfun(refcursor)
1 "<unnamed portal 5>"

Agracederia si alguien puede ayudarme pls.
Hola eliana, necesariamente necesitas usar cursores?, por lo que leí tu anterior pregunta solo quieres tuplas con sus columnas, y lo podrias hacer algo así:

CREATE OR REPLACE FUNCTION nombre_funcion() RETURNS SETOF RECORD AS '
DECLARE registro RECORD;
BEGIN
FOR registro IN _aqui_tu_consulta LOOP
RETURN NEXT registro;
END LOOP;
RETURN;
END;
'LANGUAGE 'plpgsql';

y para llamarlo simplemente:

SELECT * FROM nombre_funcion() AS (campo tipo, campo tipo, campo tipo, ....);

Saludos.

Eliana

Send instant messages to your online friends http://au.messenger.yahoo.com

--
Linder Poclaba Lázaro.
Desarrollador Key Optimal Solutions - KEYOS.
Usa Software Libre y obtiene tú libertad.
Send instant messages to your online friends http://au.messenger.yahoo.com

--
Linder Poclaba Lázaro.
Desarrollador Key Optimal Solutions - KEYOS.
Usa Software Libre y obtiene tú libertad.

Send instant messages to your online friends http://au.messenger.yahoo.com

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Eliana Gutierrez 2006-11-06 02:16:48 Fwd: RE: Procedure en postgres
Previous Message Alvaro Herrera 2006-11-06 01:58:40 Re: Procedure en postgres