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

仮想列式で数値を連結すると、ORA-12899がスローされます:値が列に対して大きすぎます

    あなたの数は制限されていません。 1桁の(正の)数字であなた 連結された長さは3つまでですが、仮想列は任意の数に対して十分な大きさである必要があることを知っています。したがって、暗黙の形式モデルでは最大40桁(有効数字38桁、小数点、および符号)を許可しているように見えます。 @collsparの字句化

    そうは言っても、数値列の制約は仮想列の長さに反映されません-両方の列をNUMBER(1,0)にします まだ81文字を必要とする連結を残します。生成された値の部分文字列を取得するどちらも機能しません 、この場合、ORA-12899: value too large for column "TEXT" (actual: 10, maximum: 40) 。各to_char()のフォーマットモデルを提供する 呼び出し、例えばFM999の )、機能しますが、全長を直接制限するのではなく、アンダースコアの両側の値を制限します。

    列のサイズを制限する場合は、同じデータ型とサイズにキャストできます。これはより明確です。

    text VARCHAR2(10) generated always as 
        (cast(to_char(id)||'_'||to_char(num) as VARCHAR2(10))) VIRTUAL
    



    1. 特定のタグがない投稿を選択してください

    2. 特別な条件でグループ化する方法

    3. MySQLは2つの列を結合し、新しい列に追加します

    4. フィールドをidの値に更新するMySQLトリガー