有一个数据库是oracle 9.2.0.1,现在遇到这样一个问题:先创建个函数如下:
CREATE OR REPLACE FUNCTION Test_Func
(
        v_useraname in nvarchar2
       )
       return nvarchar2
       is
       v_Result nvarchar2(50);
begin
 
  v_Result := v_useraname ||' welcome!';  return v_Result;
end ;
/执行如下Sql:select b.itemid,
  Test_Func(itemid) 
from 
(
select * from (
    select '001' as itemid from dual
    union select '002' as itemid from dual
    union select '003' as itemid from dual
    ) order by itemid desc
) b得到结果却是如下:
1 003 003 welcome!
2 002 welcome!
3 001 welcome!而在其他oracle库上,得到的结果都是:
1 003 003 welcome!
2 002 002 welcome!
3 001 001 welcome!
 是不是数据库有什么问题,哪里有设置呢?哪位能帮我一下

解决方案 »

  1.   

    咦?不会吧
    结果不对的那个数据库,你别用工具执行,你就用SQL*PLUS连接上,执行一下看看
      

  2.   

    这边多个数据库都试过了,只有那一个库有问题。用SQL*PLUS执行结果也是一样
      

  3.   

    重新生成一下存储过程。
    不行就用PL/SQL Developer调试吧。
      

  4.   

    谢谢二楼兄弟,这边也用10g、11g的试过,结果也是正确的。这边新装一个oracle9i,结果也是正确的。真的奇怪了。在那台机器上,如果将测试函数修改一下,改为varchar2类型:CREATE OR REPLACE FUNCTION Test_Func
    (
       v_useraname in varchar2
       )
       return varchar2
       is
       v_Result varchar2(50);
    begin
      
      v_Result := v_useraname ||' welcome!';   return v_Result;
    end ;
    /再执行,就正确了。 什么原因呢?
      

  5.   

    调试发现,只是第一个item为003的传入参数了,其他几个参数没有传递进去
      

  6.   

    也许是字符集引起的。
    看一下成功与失败这两个数据的national character 设置是否有区别。
    如果是不在同一个客户端测试,看看NLS_LANG 是否一致。
    nls_langauge是否一样。
      

  7.   

    经过测试,在oracle自带的SQL*Plus中和 toad 中,都是那个“错误”结果。但在PL/Sql Develop中,结果是正确的。虽然问题解决了,但不知道啥原因
      

  8.   


    检查了字符集,没有什么问题,多谢你的提醒1 NLS_LANGUAGE SIMPLIFIED CHINESE
    2 NLS_TERRITORY CHINA
    3 NLS_CURRENCY ¥
    4 NLS_ISO_CURRENCY CHINA
    5 NLS_NUMERIC_CHARACTERS .,
    6 NLS_CALENDAR GREGORIAN
    7 NLS_DATE_FORMAT DD-MON-RR
    8 NLS_DATE_LANGUAGE SIMPLIFIED CHINESE
    9 NLS_CHARACTERSET ZHS16GBK
    10 NLS_SORT BINARY
    11 NLS_TIME_FORMAT HH.MI.SSXFF AM
    12 NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM
    13 NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR
    14 NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR
    15 NLS_DUAL_CURRENCY ¥
    16 NLS_NCHAR_CHARACTERSET AL16UTF16
    17 NLS_COMP BINARY
    18 NLS_LENGTH_SEMANTICS BYTE
    19 NLS_NCHAR_CONV_EXCP FALSE