Oracle - Sentencia SELECT en tiempo de ejecución

 
Vista:

Sentencia SELECT en tiempo de ejecución

Publicado por Juanra (2 intervenciones) el 21/04/2005 13:39:29
Hola, estoy desarrollando una aplicación con Oracle Forms Builder y me gustaria saber como puedo crear sentencias SELECT de forma dinámica.

Paso a explicaros mi problema con mas detalle:

Tengo un procedimiento almacenado que recibe como parámetro una cadena (VARCHAR2). Lo que quiero hacer (simplemente) es ejecutar la sentencia que contiene esa cadena de texto desde el procedimiento.
Este seria un posible valor de la cadena: 'SELECT COUNT(*)
INTO NUMREG FROM MUNICIPIO WHERE PROVINCIA = 02'
NUMREG es una variable numérica que tengo declarada en el procedimiento.

Conozco otros lenguajes como por ejemplo PHP en el que las sentencias SQL la puedes ir creando en una cadena de texto según te vayan haciendo falta y posteriormente con una función la ejecutas, pero no he encontrado nada parecido en Oracle. ¿ Alguien me podría ayudar u orientarme de como lo puedo solucionar?
Gracias de antemano.

Un saludo
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

RE:Sentencia SELECT en tiempo de ejecución

Publicado por Leonardo (93 intervenciones) el 21/04/2005 16:02:53
declare
instruccion VARCHAR2(2000);
begin
instruccion := 'drop table tmp_numreg';
Forms_DDL(instruccion);
instruccion := 'create table tmp_numreg(num_reg number)';
Forms_DDL(instruccion);
IF NOT Form_Success THEN
Message ('No se puedo ejecutar la instruccion');
raise form_trigger_failure;
end if;
instruccion := 'insert into table tmp_numreg(num_reg)';
instruccion := instruccion||' SELECT COUNT(*) FROM MUNICIPIO '
instruccion := instruccion||' WHERE PROVINCIA = '''
instruccion := instruccion||tu_provincia||'''';
Forms_DDL(instruccion);
IF NOT Form_Success THEN
Message ('No se puedo ejecutar la instruccion');
raise form_trigger_failure;
ELSE
begin
select num_reg into numreg from tmp_numreg;
end;
message(':) Eureka '||numreg);
END IF;

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