易截截图软件、单文件、免安装、纯绿色、仅160KB

容易忽视的oracle函数问题 数据类型

最近始终被数据库问题困扰,出于项目应用原因,定义了一些oracle自定义函数(User Defined function),用于在实际查询SQL语句中调用,目的是为了简化SQL语句的复杂度。实际使用中发现,这些函数会出现一个莫名奇妙的问题,先上实例:
CREATE OR REPLACE FUNCTION "GETSINGLEUSER" --返回第一个字符串
(sStr in nvarchar2)
return nvarchar2
 as
sReturn nvarchar2(50);
begin
if instr(sStr,',') > 0 then
sReturn := SUBSTR(sStr,1,instr(sStr,',') - 1);
else
sReturn := sStr;
end if;
return sReturn;
exception
when others then
return 'error';
end;
这是其中一个函数,功能很简单就是取,分隔的多个串集中的第一个元素返回,但是在实际SQL语句中使用中发现,如果查询返回行数超过100行,100行后的记录中函数没有执行结果(可排除传入参数问题)。见图
应用函数GETSINGLEUSER 进行查询某表某列数据时,100行后的记录明明是有值的,而且在函数体中如果出现异常也会有返回值error,但是实际效果就像100行的记录没有执行过一样。为什么呢?其实这个问题到现在我也没有完全搞明白。只是自己反复测试实验后,感觉与数据类型有一定关系,我的函数入口参数声明类型为:nvarchar2,而实际查询中引用列的定义如下图,是char类型:
所以在函数调用处就采取了将参数强制转换为入口类型:
 
结果问题消失,本文只能说明该问题的解决方法,但却不能完全说明成因,以及类似为什么是100行呢等问题。


相关文档:

Jsp 连接 mySQL、Oracle 数据库备忘

Jsp 连接 mySQL、Oracle 数据库备忘
2009-12-15 16:47
Jsp 环境目前最流行的是 Tomcat5.0。Tomcat5.0 自己包含一个 Web 服务器,如果是测试,就没必要把 Tomcat 与 IIS 或 Apache 集成起来。在 Tomcat 自带的 Web 服务器下可以进行 Jsp 测试。
    安装 Tomcat5.0 前需要安装 JDK(如果是 Windows server ......

oracle exp/imp 字符集

使用ultraedit32打开导出的dmp文件,文件内容以十六进制显示数据,其中第二、三字节的数据记录的是此文件的字符集。
例如:
03 54
将其转换为10进制,值为852,使用命令
select nls_charset_name(852) from dual
得到结果
ZHS16GBK
当前使用winXP简体中文操作系统,Oracle客户端默认字符集为GBK。
创建数据库,设定 ......

彻底卸载ORACLE(WINXP)

用oracle的卸载程序并不能完全卸载干净。如之前的命名的oracle sid 不能再使用。会提示sid存在。下面是在winxp下完全卸载oracle的方法。
1、开始->设置->控制面板->管理工具->服务  
     停止所有Oracle服务。  
2、开始->程序->Oracle  -  OraHome81->Oracle   ......

oracle建多个dblink

用tg4mssql链接oracle.
过程不在描述,google很多。
问题:
1、mssql express的时候,失败
将server用转义字符写出,成功。
HS_FDS_CONNECT_INFO="SERVER=SHAM0415\\SQLEXPRESS;DATABASE=GMT_KJ"
2、建多个的时候,不能解析。 tnsping 命令总不通过。
找了很多,同一个帖子,转了无数次。。
唉。。中国的 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号