插入经过验证的(有限)值

问题描述 投票:0回答:1

我认为这是相当微不足道的,但我迷失了方向..

SQL、Oracle 11 - 一个简单的语句:

   INSERT INTO NEW_TABLE (A, B, NEW_LENGTH)
      SELECT
         A, B, OLD_LENGTH
      FROM
         OLD_TABLE

在“old_length”中,我的值从“-100到100”,但在“new_length”中,值限制在“-50到50”。一个简单的“插入”会给出错误“值对于列来说太大”,所以我必须仅使用允许的值。太大的值应替换为 null。

有没有简单的方法可以实现?我尝试使用 NVL2 和 DECODE,但只出现一些语法错误。

提前感谢您的建议!

oracle11g sql-insert
1个回答
0
投票

您可以使用 case 表达式:

   INSERT INTO NEW_TABLE (A, B, NEW_LENGTH)
      SELECT
         A, B,
            CASE WHEN OLD_LENGTH >= -50 AND OLD_LENGTH <= 50 THEN OLD_LENGTH END
      FROM
         OLD_TABLE

如果您没有指定自己的 `ELSE 值,则 case 表达式具有隐式

ELSE NULL
,但为了完整性,您可能更愿意包含该值。

© www.soinside.com 2019 - 2024. All rights reserved.