如图,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;
解决方案 »
- Oracle数据文件自动增长频繁导致死锁?
- 数据库的导出问题
- 求助:load()clob字段的读取不出来
- 求Oracle高级复制相关资料(急)
- 通信匹配号码头 SQL效率问题
- 数据库老人请来,PL/SQL中的VARCHAR2和LTRIM问题!
- 如何使用SmartQurey或者OraQuary读取Oracle表内容
- redhat9上直接安装oracle9.204还用打补丁吗? p3006854_9024_LINUX.zip等补丁打上之后一定好用吗?
- 在oracle中如何写一个isnull函数来代替那个nvl函数呢
- plsql登录出错
- 咨询一个存储过程中调用dblink的问题
- Oracle 区间分区+散列分区 执行计划
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语句,就成了绑定的变量了,也就是只当做一个值来处理
对于这种情况要怎么处理呢....求解