sql >> データベース >  >> RDS >> Oracle

TO_CHARを使用したOracleでの数値フォーマット

    NUMBER を使用するのではなく、データに適したスケールと精度の数値データ型を使用するようにしてください スケールと精度なし。ドル/ユーロ/ポンドなどを保管する場合。次に、 Gross World Product 2014年には$100,000,000,000,000のオーダーでした。これ以上の取引を行わない場合、通貨の列は次のようになります。

    NUMBER(17,2)
    

    それよりも大きい値を取得した場合は、データの健全性チェックを実行し、世界の国内総生産よりも大きい量が理にかなっているかどうかを検討する必要があります。たとえば、円やジンバブエドルなどの値を保存する場合は、スケールを適切に調整します。

    パッケージ内のサブタイプを次のように定義することもできます。

    CREATE PACKAGE currencies_pkg IS
      SUBTYPE currency_type IS NUMBER(17,2);
    
      FUNCTION formatCurrency(
        amount IN CURRENCY_TYPE
      ) RETURN VARCHAR2;
    END;
    /
    

    そして、それをフォーマットするためのコードは次のようになります。

    CREATE PACKAGE BODY currencies_pkg IS
      FUNCTION formatCurrency(
        amount IN CURRENCY_TYPE
      ) RETURN VARCHAR2
      IS
      BEGIN
        RETURN TO_CHAR( currency_value, 'FM999999999999990D00' );
      END;
    END;
    /
    

    次に、ストアドプロシージャ/パッケージでそのサブタイプを参照する場合、例外が発生しない限り、通貨データ型の最大サイズを超えることはできません。値を表示するためのフォーマットモデルは1つの場所で定義するだけでよく、入力は通貨サブタイプに制限されるため、フォーマット関数は課せられたスケール/精度を超えることはなく、 s。

    CREATE PROCEDURE your_procedure(
      in_value1 IN ACCOUNTS_TABLE.ACCOUNT_BALANCE%TYPE,
      in_value2 IN ACCOUNTS_TABLE.ACCOUNT_BALANCE%TYPE
    )
    IS
      v_value CURRENCIES_PKG.CURRENCY_TYPE;
    BEGIN
      -- Do something
      v_value := in_value1 + in_value2;
      -- Output formatted value
      DBMS_OUTPUT.PUT_LINE( CURRENCIES_PKG.formatCurrency( v_value ) );
    END;
    /
    


    1. MySQLトランザクションでのレイテンシの処理

    2. 自分や友達の投稿から結果を得る

    3. MySqlのEFコア`update-database`が`__EFMigrationsHistory'が存在しないために失敗します`

    4. postgresql戻り値がnullの場合は0を返します