利用oracle的动态PL/SQL对简单表达式求值

CREATE OR REPLACE FUNCTION POWER.GETRL(v_charrl in varchar2,v_noerror in char)
RETURN float
IS
 v_rl float;
 v_cursorID integer;
 v_selectStmt varchar2 (2000);
 v_dummy integer;
BEGIN
 begin
  v_cursorID := DBMS_SQL.OPEN_CURSOR;
  v_selectStmt :=
   ' begin
     select (' || v_charrl ||') into :rl from dual;
    end;';
  DBMS_SQL.PARSE(v_cursorID,v_selectStmt,DBMS_SQL.V7);
  DBMS_SQL.BIND_VARIABLE(v_cursorID,':rl',v_rl);
  v_dummy := DBMS_SQL.EXECUTE(v_cursorID);
  DBMS_SQL.VARIABLE_VALUE(v_cursorID,':rl',v_rl);
  DBMS_SQL.CLOSE_CURSOR(v_cursorID);
   return v_rl;
 exception
  WHEN others then
   DBMS_SQL.CLOSE_CURSOR(v_cursorID);
    if nvl(v_noerror,'0') <> '1' then
    RAISE_APPLICATION_ERROR(-20000,'表达式['||v_charrl||']运算错误');
   else
    return null;
   end if;
 end;
END;
/

你可能感兴趣的:(利用oracle的动态PL/SQL对简单表达式求值)