易截截图软件、单文件、免安装、纯绿色、仅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行呢等问题。


相关文档:

小议Oracle外键约束修改行为(一)

Oracle的外键用来限制子表中参考的字段的值,必须在主表中存在。而且在主表的记录发生变化导致外键参考唯一约束值发生了变化时,定义了一系列的动作。 在SQL92标准中定义了几种外键改变后,如何处理子表记录的动作,其中包括:
限制Restrict:这种方式不允许对被参考的记录的键值执行更新或删除的操作;置为空Set to null ......

在linux中使用crontab实现对oracle的定时备份

假设数据库的拥有者为oracle,数据库的用户为scott,其口令为trigger,
Oracle数据库的参数$ORACLE_HOME为/usr/oracle,$ORACLE_SID为oracle1,则实现步骤如下:
1、建立实现备份的shell
在/usr/oracle中用vi命令建立文件backup.sh,其内容为:
ORACLE_HOME=/usr/oracle; <br>export ORACLE_HOME;
ORACLE_SID= ......

MS SQL 2005链接服务器连接远程ORACLE全过程

第一步:下载安装Oracle 10g Release 2 客户端软件,下载连接是:
http://download.oracle.com/otn/nt/oracle10g/10201/10201_database_win32.zip
下载后安装
 
 
 
第二步:下载安装Oracle ODAC,下载连接是:
http://download.oracle.com/otn/other/ole-oo4o/ODAC1020221.exe
 
第三步: 重启MS SQ ......

oracle事务的执行过程

1.客户端连接至oralce:
             首先客户端连接至oracle的监听器,然后监听器分配一个数据库实例(这里的是实例)给客户端,然后客户端以后就直接与这个数据库实例进行连接,直至断开与oracle的连接.
 
2.提交sql:
  (1)客户端用户提交一个sql ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号