这是一个简单的过程,它定义了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),但我认为参数继承了字段的大小传递给它。
答案 0 :(得分:0)
使用其中一种简单数据类型(VARCHAR2,NUMBER等)的过程和函数参数没有大小或精度,并始终采用基础数据类型(VARCHAR2或NUMBER)的最大大小/精度。