create table TB1
(
  ID   NUMBER(10) not null,
  CODE NCHAR(20),
  NAME VARCHAR2(100)
);insert into TB1 (
  select rownum as id, substr(col,1,10) as code, col as name from tb0 --随便找个表tb0和字段col就行
  where rownum<=500
);create or replace function format(code in varchar2)
return varchar2 deterministic
as
begin
return replace(code,'-','');
end;
/
select rownum,code,format(code) as code0 from TB1 where rownum<=300;
看看第100条后面的记录,字段code0是否正常

解决方案 »

  1.   

    我也觉得是oracle的bug
    不过没装10g和11g,没测试过最不可思议的是,我9i测试中不管什么where语句
    都正好100个正常的导致的后果就是自定义函数索引查询不到数据
      

  2.   

    可能是nchar转换varchar出了异常但不知道replace和translate是如何实现的
      

  3.   

    装了oracle 10和11的,也麻烦帮我测测!
      

  4.   

    deterministic的性能好处是如果使用相同的输入调用函数两次,Oracle可以记住第一个调用的结果因此避免在第二次执行时再次调用。但是该功能直到10g Release 2才被真正实施。