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

createfunctionisDate_2(v_datevarchar(10)--参数,yyyy-mm-dd)returnsintlanguagesqlbeginato... 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是不是和这里的异常处理冲突了吗?为啥???
展开
 我来答
匿名用户
2013-10-12
展开全部
你这个完全是按照存储过程的方式写函数,函数体应该就一个begin,end语句块吧,函数不需要处理异常,只需要对传入参数做相应分析处理,然后给个返回值就行了。别人调用的时候如果传入参数不正确的,会自动报错的,而且我觉得你这个函数写的没什么任何意义。
追问
存在即是道理。听说过没有,自己不懂就不要乱说。还有这是测试函数,需要有意义嘛!估计你测试是啥你也不懂。。。。
追答
好吧,我手贱了,我不应该回答你的问题。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-10-12
展开全部
atomic是将该部分程序块指定为一个整体,其中任何一个语句失败,则整个程序块都相当于没做,包括包含在atomic块内的已经执行成功的语句也相当于没做,有点类似于transaction。

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

而你的是 自定义 函数。 不更新任何数据的, 加 atomic 没有意义啊!
追问
我这里用的异常在里面,我把异常去掉用atomic就可以。这说明这个atomic用不用其实没有影响。我的函数里应该是和异常有什么冲突才对,我想知道为啥冲突,其中原理是什么?或者其他原因。

感谢你的回答,可是没有解决我的困扰啊。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式