drop table formula; create table formula(formula_condition varchar2(4000), return_value varchar2(4000)); insert into formula values('X1 > X2','0.5'); insert into formula values('X1 > X2 AND X1 > X3','1.5'); commit; set serveroutput on size 1000000 declare cursor c1 is select 10 X1, 5 X2, 7 X3 from dual; r1 c1%rowtype; type rec_formula is record ( formula_condition formula.FORMULA_CONDITION%type, return_value formula.RETURN_VALUE%type ); type t1 is table of rec_formula index by binary_integer; a1 t1; sqlstr varchar2(4000); flag number; begin select formula_condition, return_value bulk collect into a1 from formula; open c1; loop fetch c1 into r1; exit when c1%notfound; for k in 1..a1.count loop dbms_output.put_line('R1.X1 : '||R1.X1); dbms_output.put_line('R1.X2 : '||R1.X2); dbms_output.put_line('R1.X3 : '||R1.X3); sqlstr := 'begin if '||replace(a1(k).formula_condition,'X','R1.X')||' then :flag := 0; else :flag := 1; end if; end;'; dbms_output.put_line(sqlstr); execute immediate sqlstr using out flag; if flag = 0 then dbms_output.put_line('Passed'); else dbms_output.put_line('Failed'); end if; end loop; end loop; close c1; end;