各位好:
我在程序中现在有这样的一个逻辑
exec sql1 --> result
if(result == null)
exec sql2 --> result
if(result == null)
exec sql3 --> result
if(result == null)
exec sql4 --> result
return result
......程序中这样实现,但是发现数据库交互的次数太多,效率问题立马凸现出来,能不能把上面的逻辑用sql语句实现,或者有什么好的建议和方法,请教大家.谢谢.
我在程序中现在有这样的一个逻辑
exec sql1 --> result
if(result == null)
exec sql2 --> result
if(result == null)
exec sql3 --> result
if(result == null)
exec sql4 --> result
return result
......程序中这样实现,但是发现数据库交互的次数太多,效率问题立马凸现出来,能不能把上面的逻辑用sql语句实现,或者有什么好的建议和方法,请教大家.谢谢.
解决方案 »
- 存储过程语法。。
- 急!oracle客户端连接不上服务器问题,ora-12560
- ORACLE中如何根据条件拆分一个字符串字段为2个数值字段?
- Oracle数据库中怎么插入Date格式的数据
- ORA-00907: 缺失右括号
- cent os 6.3上安装oralce11gr2遇到问题请大家帮帮忙
- 再来一个问题 ,请高手.
- 序列(号)不存在????
- ORACLE 8.1.6 目录服务访问怎么配置???
- 为什么我的oracle8 安装到Windows2000 AdvancedServer(d盘)数据库总是出现不能发现SID错误?而且……
- oracle 如何通过表达式导出特定的表
- 在官方网站下载oracle11g有什么限制?
as
v_count number;
begin
select count(1) into v_count from ..... ;--sql1
if v_count>0 then
open p_cur for (select ..... from ... where ...);--sql1
return;
end if;
select count(1) into v_count from ...;--sql2
if v_count>0 then
open p_cur for (select ..... from ... where ...);--sql2
return;
end if;
...end proc;
也可以将上面的过程改成一个函数,一次判断所有的条件
create or replace function func return number
as
v_count number;
begin
select count(1) into v_count from ..... ;--sql1
if v_count>0 then return 1; --返回结果1
end if;
select count(1) into v_count from ...;--sql2
if v_count>0 then
return 2; --返回2
end if;
...end func;
然后再通过返回的值由前端确定运行哪一个sql
比如上面的函数返回结果1,运行sql1。返回2,运行sql2..
之后怎么处理就跟先前的一样
proc = con.prepareCall(strSql);
proc.execute();
ResultSet rs = (ResultSet)proc.getObject(1);
是这样获取结果的吗?
谢谢.
先用存在性判断逻辑,要执行那一条sql,7楼的代码就是为了这个目的。根据返回的结果去调用相应的sql。比如这个函数返回结果为1,则执行sql1,不会出现结果集为空的情况。如果返回结果为2,直接执行第二条sql。
这个函数可以优化下,只判断存在性应该会更快一点
create or replace function func return number
as
v_count number;
begin
select nvl(max(1),0) into v_count from dual where exists(
select 1 from a where .......) ;--sql1
if v_count>0 then return 1; --返回结果1
end if;
select nvl(max(1),0) into v_count from dual where exists(
select 1 from b where .......) ;--sql2
if v_count>0 then
return 2; --返回2
end if;
...end func;执行一次select func from dual;来取得应该运行哪条sql的判断,再执行相关sql
函数可以加几个传参来传入条件
pl/sql程序块就是为了减少你说的交互而用的