これは、2 つの数値フィールドを定義する単純なプロシージャです。1 つは Number、もう 1 つは Decimal ですが、両方を別のプロシージャに渡すと、Decimal フィールドは 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 が 10 進数のデフォルトである 38,0 になり、IAMOUNT が NUMBER (15,7 なし) になることがわかりますが、パラメーターは渡されたフィールドのサイズを継承していると思いました。 .