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 04:15:55
Message-ID: 20061106041555.89870.qmail@web53202.mail.yahoo.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

La funcion de alvaro :

CREATE OR REPLACE FUNCTION myfuncion3()
RETURNS SETOF record AS
$BODY$
SELECT
processes."PT_DLL_ID",
processes."PT_P_ID"
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 processes."PT_STATUS" = 0
ORDER BY processes."PT_DLL_ID", processes."PT_P_ID", processes."PT_CONTEXT";
$BODY$
LANGUAGE 'sql' VOLATILE;

devuelve n row (en este ej 3) con un solo string separando las columns por comas

1,"(0,000.000.000.000)"
2,"(0,000.000.000.000)"
3,"(0,000.000.000.000)"

para este ej. necesito que me devuelva
row col1 col2
1 0 "000.000.000.000"
2 0 "000.000.000.000"
3 0 "000.000.000.000"

tu funcion:
CREATE OR REPLACE FUNCTION myfuncion2()
RETURNS SETOF record AS
$BODY$
DECLARE result record;
BEGIN
FOR result IN
SELECT processes."PT_DLL_ID", processes."PT_P_ID"
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 processes."PT_STATUS" = 0
ORDER BY processes."PT_DLL_ID", processes."PT_P_ID", processes."PT_CONTEXT" LOOP
return next result;
END LOOP;
RETURN;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;

la ejecuto con SELECT * from myfuncion2() AS (pt_dll_id int4,pt_p_id varchar);
y me da
ERROR: wrong record type supplied in RETURN NEXT
CONTEXT: PL/pgSQL function "myfuncion2" line 12 at return next

Ya chequie los tipos de datos y son los mismos que los de la tabla.

Que estare haciendo mal? No tengo mucha experiencia en postgres

Agradesco la ayuda!!!

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ó: Si pero esto me devuelve solo 1 string co el record, yo necesito las columnas por separadas
Pues la función de Alvaro devuelve exactamente lo mismo que la función que yo te dije, ahora dices que devuelve un string?, por lo que veo devuelve tuplas.

a que te refieres con columnas separadas?.

Saludos.

Alvaro Herrera <alvherre(at)commandprompt(dot)com> wrote: Linder Poclaba escribió:
> 2006/11/5, Eliana Gutierrez :

> 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';

Realmente esto se puede hacer mucho mas simple:

create or replace function nombre_function() returns setof record as '
select los, campos, de, la, consulta
from la_tabla join la_otra_tabla on (blah blah)
where ...
' language sql;

No hay necesidad de invocar PL/pgSQL para algo tan simple.

--
Alvaro Herrera http://www.CommandPrompt.com/
PostgreSQL Replication, Consulting, Custom Development, 24x7 support

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

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Eliana Gutierrez 2006-11-06 04:38:21 Fetch dentro de funciones
Previous Message Eliana Gutierrez 2006-11-06 03:38:25 Procedure en postgres