Sentencias SELECT en tiempo de ejecución

Juanra
30 de Agosto del 2005
Alguien sabría decirme como puedo construir una sentencia SELECT en tiempo de ejecución.
Tengo un formulario en el cual relleno una serie de campos para realizar una búsqueda en una base de datos, pero si alguno de los campos no es rellenado me gustaria que este no apareciera en la sentencia SELECT. Para ello tengo que ir construyendo la sentencia select en tiempo de ejecución pero no sé como hacerlo.
Alguien me puede ayudar?

otsoc
30 de Agosto del 2005
Te propongo un ejemplo:
Supongamos que los campos del formulario son:
campo_form_1 y campo_form2
y los de la tabla son
campo_tab1 y campo_tab2
En el ejemplo que te propongo el select muestra campo_tab1 si han introducido algo en campo_form1
y mustra campo_tab2 si han introducido algo en campo_form2.
SELECT
DECODE(campo_form1, NULL, NULL, campo_tabla1)
, DECODE(campo_form2, NULL, NULL, campo_tabla2)
FROM
nombre_tabla
Lo que hace el decode es que si el valor del campo_form es nulo nos devuelva nulo y en caso contrario nos devuelva campo_taba.

Saludos...

yo
30 de Agosto del 2005
A lo mejor puedes hacerlo con la función nvl

NVL(exp1,exp2) devuelve exp2 si exp1 es null si no exp1.


Juanra
30 de Agosto del 2005
No sé como podría utilizar esa función para solucionar mi problema.
Lo que realmente me interesaria saber es: ¿ Como puedo crear una sentencia SELECT dinámicamene (dentro de una cadena de texto por ejemplo) y luego ejecutarla? ¿Existe alguna función que le pases una cadena y te la ejecute como si de una sentencia PL/SQL se tratase?
Gracias de todas formas por contestarme tan rápidamente.

trazom
30 de Agosto del 2005
En PL/SQL tenes la opcion de utilizar REF cursors para ejecutar consultas dinamicas.
Mas o menos seria asi:

DECLARE
TYPE cr_dyn is REF CURSOR;
v_cr_dyn cr_dyn
BEGIN
OPEN cr_dyn FOR
'SELECT * from emp';
. . .


jc3000
30 de Agosto del 2005
FORMS_DDL('SENTENCIA')