容易忽视的oracle函数问题--数据类型
来源:互联网 发布:万能刻录机软件下载 编辑:程序博客网 时间:2024/06/10 00:12
最近始终被数据库问题困扰,出于项目应用原因,定义了一些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行呢等问题。
- 容易忽视的oracle函数问题--数据类型
- PHP中容易被忽视的数据类型问题
- 在Oracle中建表时容易忽视的一个小问题
- 一个容易忽视的Oracle安全问题
- 一个容易忽视的Oracle安全问题
- 一个容易忽视的Oracle安全问题
- 一个容易忽视的Oracle安全问题
- java 学习中容易忽视的问题!!
- java 学习中容易忽视的问题!!
- java 学习中容易忽视的问题!!
- 一个容易忽视的存储过程问题
- 问题的本身往往容易被忽视
- calendar设置月份容易忽视的问题
- 黑马程序员-容易忽视的问题
- 容易被忽视的一些PHP问题
- 你容易忽视的编程问题
- Fragment使用容易忽视的问题
- STM32串口DMA容易忽视的问题
- .net中加密和解密
- JBPM,ACTIVITI工作流平台3
- WF从入门到精通(第十二章):策略和规则
- 软件基础开发平台之JBPM,ACTIVITI工作流平台开发4--童亚斋
- html表格标记
- 容易忽视的oracle函数问题--数据类型
- 搜索小技巧[转自小木虫]
- 面向连接和无连接协议
- vb2005+水晶报表10.2+MSSQL 二进制图片保存及显示
- oracle 表空间建议
- 各大IT公司笔试汇总
- Linux下二进制文件的查看和编辑
- Redhat官方内核源码下载
- 由JSESSIONID谈cookie与SESSION的区别和联系