Re: Tabla como parametro de funcion

From: Manuel <JMGONBAR(at)terra(dot)es>
To: "pgsql-es-ayuda(at)postgresql(dot)org" <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Tabla como parametro de funcion
Date: 2004-06-08 17:03:55
Message-ID: opr9acctrkwz0it0@bilbo
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Yo intente hacer lo mismo pero no se puede de forma directa.
Hay que construir la consulta como una cadena y ejecutarla
Te mando un ejemplo

DECLARE
vprefijo ALIAS FOR $1; -- prefijo de tabla
vnumero ALIAS FOR $2; -- numero de la cuenta
vnombre ALIAS FOR $3; -- nombre de la cuenta
voperativa ALIAS FOR $4; -- operativa o auxiliar
vdevolver INTEGER;
vreg RECORD;
BEGIN
vdevolver:=0;
IF vnumero ~ '^[1-7][0-9]{0,7}$' AND length(vnombre)<=100 THEN
FOR vreg IN EXECUTE 'SELECT count(*) AS numero FROM cnt00_' ||
vprefijo || 'cuentas WHERE numero=' || vnumero
LOOP
IF vreg.numero=0 THEN
IF voperativa THEN
EXECUTE 'INSERT INTO cnt00_' || vprefijo || 'cuentas
(numero,nombre,operativa) VALUES (''' || vnumero || ''',''' || vnombre ||
''',true)';
ELSE
EXECUTE 'INSERT INTO cnt00_' || vprefijo || 'cuentas
(numero,nombre,operativa) VALUES (''' || vnumero || ''',''' || vnombre ||
''',false)';
END IF;
vdevolver:=1;
END IF;
END LOOP;
END IF;
return vdevolver;
END;

Así es como lo hago yo. No se si habrá otra forma.

> HOLA.
>
> La idea es la siguiente:
>
> Quiero pasar como parámetro a una función ppgsql el nombre de una
> tabla, para luego dentro de la función hacer SELECT, o cualquier otra
> operación.
>
>
> EJEMPLO:
>
> CREATE OR REPLACE FUNCTION myfuncion(Text) RETURNS SETOF Mytype AS '
> DECLARE
> My_Tabla ALIAS FOR $1;
> My_Registro RECORD;
> BEGIN
> FOR My_Registro IN SELECT * FROM My_Tabla LOOP
> .....
> .....
> .....
> RETURN NEXT My_Registro
> END LOOP;
> RETURN NEXT My_Registro;
> END;
> ' LANGUAGE 'plpgsql';
>
> El tema es que cuando ejecuto mi función haciendo
>
> SELECT * FROM myfuncion('clientes');
>
> Me marca ERROR: missing ".." at end of SQL expression y no me reconoce
> My_Tabla, es decir, postgres en el fondo no hace una sustitución de
> my_tabla por el valor del parámetro que le paso (clientes).
>
> Necesito una cuerda para salir a flote.
>

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Estéfano Castillo 2004-06-08 17:18:04 Re: Tabla como parametro de funcion
Previous Message Luis Mix 2004-06-08 15:29:43 Formulario HTML-->PHP-->Postgres que estoy haciendo mal???