Oracle - Condicion dinamica

 
Vista:

Condicion dinamica

Publicado por Dante Lopez (4 intervenciones) el 28/10/2008 12:11:23
Hola a todos, espero puedan ayudarme.

quiero hacer una condicion algo similar :
select count(*) into variable
where <condicion>

pregunta...la condicion puede ser una variable...??

supongamos que en una variable de tipo char yo tengo X := 'usuario='DANTE',
puedo hacer esto ?

select count(*) into variable from tabla
where ?????

aca quiero meter la condicion que tengo en la variable X, claro va a cambiar su valor, algo similar a cambiar el where en un form, pero aca es en pl.
No se si sea una macro..en todo caso como ejecuto o creo las macros...

Mil gracias por su atencion,.
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:Condicion dinamica

Publicado por Rodolfo Reyes (59 intervenciones) el 28/10/2008 16:02:41
Si lo puedes hacer con Execute Immediate, aqui te pongo un ejemplo:

Aqui te dejo el ejemplo de una función a la cual le puedo enviar un string el cual contiene una expresión matematica. El chiste es que arma de forma dinamica un select y devuelve el resultado de este select.


function expr_to_number(expresion in varchar2) return number is

numero number;

begin

--Se manda a ejecutar la expresion matematica formando un query
execute immediate 'select ' || expresion ||' from dual' into numero;

--Se retorna el valor que retorno
RETURN NUMERO;

--En caso que al ejecutar el query de error
EXCEPTION WHEN OTHERS THEN

--Se devuelve el error
raise VALUE_ERROR;
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

RE:Condicion dinamica

Publicado por gracias...pero (4 intervenciones) el 28/10/2008 16:27:11
Hola, mil gracias por tu tiempo, ya lo estoy haciendo..pero al parecer algo hago mal..mira este es el codigo que programe...si lo hago por plsql directo me devuelve tot=2, eso esta bien..claro lo pongo a dedo.pero al ejecutar me devuelve -1. osea que entra por el exception...en que estoy mal...

tengo una tabla spitoperaciones con N registros pero solo 2 con el campo cusualt='EXT00288';

Gracias de nuevo...saludos..Dante Lopez
ah lo ejecuto desde toad para ver los dbms_output....
-------codigo
declare
var_selec varchar2(100);
tot number;
function cuenta(var in varchar2) return number is
numero number;
begin
execute immediate 'select '||var||' from dual ' into numero;
return(numero);
exception
when others then
return -1;
end;

begin
tot:=0;
var_selec:=' select count(1) from spitoperaciones where cusualt=''EXT00288''';
dbms_output.put_line(var_selec);
tot := cuenta(var_selec);
dbms_output.put_line(tot);
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

RE:Condicion dinamica

Publicado por Zenem (1 intervención) el 28/10/2008 22:00:52
Me parece que:
En la funcion "cuenta" la linea:
execute immediate 'select '||var||' from dual ' into numero;
debes cambiarla por:
execute immediate var into numero;
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