PostgreSQL - Consulta dinámica postgreSQL

 
Vista:

Consulta dinámica postgreSQL

Publicado por Juan (1 intervención) el 12/07/2018 10:46:38
Hola,

Cómo se definiría una consulta dinámica en postgreSQL.
Es decir, para que el usuario pueda definir en cada ejecución el valor.

Sería el equivalente a

1
2
3
SELECT *
FROM pepe
WHERE campo = '&dimeelvalor'

en ORACLE
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Consulta dinámica postgreSQL

Publicado por YYanes (20 intervenciones) el 13/07/2018 20:31:28
Hola amigo:

Para eso lo que necesitas es definir un procedimiento almacenado (o Función), es decir: son procedimientos que contienen una consulta (o una sentencia) y a la que se le pueden pasar tantos parámetros como se desee. Por ejemplo:
1
2
3
4
5
6
7
8
9
//-----------------
CREATE OR REPLACE FUNCTION MiFuncion(param_a integer, param_b float8, param_c character varying)
  RETURNS void AS
$BODY$
	insert into MiTablaXY (Col_a, Col_b, Col_c)
	values ($1, $2, $3);
$BODY$
LANGUAGE sql VOLATILE;
//-----------------
Ahora bien, ¿qué significa el código anterior?
- En la primera línea hemos definido una Función que se llama "MiFuncion" y a la cual se le pasarán 4 parámetros (en ese orden estricto) y cuyos tipos de datos son: entero, float, y String respectivamente.

- "RETURNS void" significa que no devolverá nada (en este caso lo que haremos es ejecutar una sentencia para insertar datos)

- Luego viene el "BODY", dentro del cual pones la sentencia:
1
insert into MiTablaXY (Col_a, Col_b, Col_c)  values ($1, $2, $3);
en donde los elementos $1, $2 y $3 hacen referencia a los parámetros 1, 2 y 3 respectivamente (de ahí la importancia del orden estricto a la hora de definir la Función).

FINALMENTE:
- Se ejecuta en tu base de datos el código completo de la definición de la Función para que quede (valga la redundancia) definida en tu base de datos.
- Luego, cada vez que la quieras ejecutar lo haces a través de un Select, por ejemplo:
1
Select   MiFuncion(12, 456, 'aaa');
//----------------------

Advertencia:

la definición de las funciones varían según lo que devuelvan. Este ejemplo no devuelve nada, por eso dice "RETURNS void", pero bien podría devolver un valor específico (como un entero, o un String), o incluso puede devolver una tabla completa (como resultado de una consulta).

Investiga sobre el tema "Procedimientos almacenados" ó "Funciones en Postgres".

Un GigaSaludo!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar