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.
>
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??? |