首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

存储过程/函数中对查询条件的判断处置

2013-04-20 
存储过程/函数中对查询条件的判断处理如图,select * from user 后面根据传入参数是否为空来判断是否要加上

存储过程/函数中对查询条件的判断处理
存储过程/函数中对查询条件的判断处置
如图,select * from user 后面根据传入参数是否为空来判断是否要加上条件,目前我这样写
是不对的,会报错.请教要如何处理比较妥当
图中源代码如下:


CREATE OR REPLACE FUNCTION FUN_GETUSERDATA(userid_array IN VARCHAR2)
  RETURN user_type_array AS
  USER_REC_ARRAY user_type_array := user_type_array();

BEGIN
  BEGIN
    FOR record IN (select * from user u
if(length(userid_array) > 0)
where u.id in (userid_array)
end if;) LOOP
      USER_REC_ARRAY.EXTEND();
      USER_REC_ARRAY(USER_REC_ARRAY.COUNT) := user_type(record.id,
 record.name,
 record.no);
    END LOOP;
  END;
  RETURN DECLARE_REC_ARRAY;
END FUN_GETUSERDATA;

[解决办法]
把if写出来试试
[解决办法]
sql语句里写个if?这样是不行的……没有这样的语法


select * from user u where u.id in (userid_array) or length(userid_array) = 0

可以这样写,但是性能就要受到影响了……

要么写成
if(length(userid_array) > 0) then
FOR record IN (select * from user u
                       where u.id in (userid_array)
                   ) LOOP
         xxx;
       END LOOP;
else
FOR record IN (select * from user u
                   ) LOOP
         xxx;
       END LOOP;
end if;

看起来也不甚好看……

根本原因,可能你用了别的数据库的思路来做oracle,这可能是行不通的。。。

据我猜测,userid_array里面可能含有多个userid?但是你直接把它放进sql语句,就成了绑定的变量了,也就是只当做一个值来处理。。。


热点排行