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;
/
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数据库中创建自定义函数POWER.GETRL的SQL代码。该函数接收两个参数,用于执行表达式运算并返回浮点结果,同时对可能出现的异常进行了处理,若运算出错会根据条件抛出错误或返回空值。
3万+

被折叠的 条评论
为什么被折叠?



