db2在使用自定义函数时加atomic就报错?

create function isDate_2
(
v_date varchar(10) --参数,yyyy-mm-dd
)returns int
language sql
begin atomic
--变量定义
declare Date_t date;
--异常处理
declare exit handler for sqlexception
begin
return -1;
end;
set Date_t=date(trim(v_date));
return 0;
end;

错误如下:
[IBM][CLI Driver][DB2/NT] SQL0104N 在 "ns int language sql " 后面找到异常标记 "begin atomic "。预期标记可能包括:"<psm_begin_function_compou"。 LINE NUMBER=10. SQLSTATE=42601
---------------------------------------------------
我把atomic去掉,就可以编译成功。不知道为什么?加就是不行呢?atomic在过程中干嘛的我知道,在函数中atomic是什么作用呢?我这个过程的atomic是不是和这里的异常处理冲突了吗?为啥???

第1个回答  2013-10-12
你这个完全是按照存储过程的方式写函数,函数体应该就一个begin,end语句块吧,函数不需要处理异常,只需要对传入参数做相应分析处理,然后给个返回值就行了。别人调用的时候如果传入参数不正确的,会自动报错的,而且我觉得你这个函数写的没什么任何意义。追问

存在即是道理。听说过没有,自己不懂就不要乱说。还有这是测试函数,需要有意义嘛!估计你测试是啥你也不懂。。。。

追答

好吧,我手贱了,我不应该回答你的问题。

第2个回答  2013-10-12
atomic是将该部分程序块指定为一个整体,其中任何一个语句失败,则整个程序块都相当于没做,包括包含在atomic块内的已经执行成功的语句也相当于没做,有点类似于transaction。

这个 atomic 一般是使用在 触发器上面的。

而你的是 自定义 函数。 不更新任何数据的, 加 atomic 没有意义啊!追问

我这里用的异常在里面,我把异常去掉用atomic就可以。这说明这个atomic用不用其实没有影响。我的函数里应该是和异常有什么冲突才对,我想知道为啥冲突,其中原理是什么?或者其他原因。

感谢你的回答,可是没有解决我的困扰啊。

本回答被提问者采纳