oracle按区间测算数值,oracle – PL / SQL函数值的区间精度

通常,指定函数时,返回数据类型的比例/精度/大小未定义.

例如,您说FUNCTION show_price RETURN NUMBER或FUNCTION show_name RETURN VARCHAR2.

您不能拥有FUNCTION show_price RETURN NUMBER(10,2)或FUNCTION show_name RETURN VARCHAR2(20),并且函数返回值不受限制. This is documented functionality.

现在,如果我将9999小时(约400天)推入以下,我会得到一个精度误差(ORA-01873).限制是因为the default days precision is 2

DECLARE

v_int INTERVAL DAY (4) TO SECOND(0);

FUNCTION hhmm_to_interval return INTERVAL DAY TO SECOND IS

v_hhmm INTERVAL DAY (4) TO SECOND(0);

BEGIN

v_hhmm := to_dsinterval('PT9999H');

RETURN v_hhmm;

--

END hhmm_to_interval;

BEGIN

v_int := hhmm_to_interval;

end;

/

并且它不允许将精度直接指定为函数返回的数据类型的一部分.

DECLARE

v_int INTERVAL DAY (4) TO SECOND(0);

FUNCTION hhmm_to_interval return INTERVAL DAY (4) TO SECOND IS

v_hhmm INTERVAL DAY (4) TO SECOND(0);

BEGIN

v_hhmm := to_dsinterval('PT9999H');

RETURN v_hhmm;

--

END hhmm_to_interval;

BEGIN

v_int := hhmm_to_interval;

end;

/

我可以使用SUBTYPE

DECLARE

subtype t_int is INTERVAL DAY (4) TO SECOND(0);

v_int INTERVAL DAY (4) TO SECOND(0);

FUNCTION hhmm_to_interval return t_int IS

v_hhmm INTERVAL DAY (4) TO SECOND(0);

BEGIN

v_hhmm := to_dsinterval('PT9999H');

RETURN v_hhmm;

--

END hhmm_to_interval;

BEGIN

v_int := hhmm_to_interval;

end;

/

子类型方法的任何缺点?

任何替代方案(例如某些地方可以改变默认精度)?

使用10gR2.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值