为什么Oracle程序之间的传递字段会丢失大小?

时间:2013-09-11 07:35:26

标签: sql oracle numbers decimal procedures

这是一个简单的过程,它定义了2个数字字段,1为数字,另一个为十进制,但当我将两者都传递给另一个过程时,十进制字段被舍入为0 dp,即

IAMOUNT以9875.4321结束,但IUNITS最终以123

结束
CREATE OR REPLACE PROCEDURE apex_public_user.badbdcall2
AS
  iamount NUMBER(15, 7);
  iunits  DECIMAL(15, 7);
  BEGIN
    iamount := 9875.4321;
    iunits := 123.567;

    BEGIN
      BADBDCALL2CALLME(
         IAMOUNT => iamount,
         IUNITS => iunits
      );
    END;
  END;

接收SQL:

CREATE OR REPLACE PROCEDURE badbdcall2callme(iamount IN OUT DECIMAL,
                                             iunits  IN OUT DECIMAL)
AS
  in_ds1 bde1000ds%ROWTYPE;
  BEGIN
    in_ds1.iamount := iamount;
    in_ds1.iunits := iunits;
  END;

如果我调试代码,我可以看到IUNITS变为38,0这是小数的默认值,IAMOUNT变为NUMBER(超出15,7),但我认为参数继承了字段的大小传递给它。

1 个答案:

答案 0 :(得分:0)

使用其中一种简单数据类型(VARCHAR2,NUMBER等)的过程和函数参数没有大小或精度,并始终采用基础数据类型(VARCHAR2或NUMBER)的最大大小/精度。