1

これは、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 なし) になることがわかりますが、パラメーターは渡されたフィールドのサイズを継承していると思いました。 .

4

1 に答える 1

0

単純なデータ型 (VARCHAR2、NUMBER など) のいずれかを持つプロシージャおよび関数のパラメーターには、サイズや精度がなく、常に基になるデータ型 (VARCHAR2 または NUMBER) の最大サイズ/精度が使用されます。

于 2013-09-12T04:35:04.273 に答える