【问题标题】:Oracle Forms 6i Comparing FieldsOracle Forms 6i 比较字段
【发布时间】:2013-05-09 03:35:09
【问题描述】:

我有一个包含两个字段的表单,每个字段都是 Char 128 类型,我试图比较这些字段的内容。但是,我没有进行适当的比较。当两个字段具有相同的数据时,仍然表示两个字段不匹配。

Begin

IF(LTRIM(RTRIM(:field1)) = LTRIM(RTRIM(:field2)))THEN
 Show_Message('Fields Match');
ELSE
 Show_Message('Fields DO NOT Match');
END IF;

End;

【问题讨论】:

  • 如果将内容添加到消息中,会是什么样子? `Show_Message('Fields Match')` 之后的分号是可选的,不是吗?
  • 我要试一试,然后告诉你哦,我忘了分号
  • 在 if 语句之前给出来自 :field1 和 :field2 的消息。如果字段为空,则此比较将不起作用
  • 问题是字段为空,所以 oracle 表单无法比较空字段
  • 它可以比较空变量,这将导致 NULL 但是对于字段或表单项,它似乎不同

标签: oracle plsql oracleforms


【解决方案1】:

问题如前所述,在 Oracle 中 NULL 不等于 NULL。在 Oracle 中,与 NULL 的比较总是错误的。您可以使用 NVL 解决此问题,但在这种情况下,我更愿意使用 IS NULL,如下所示:

Begin

  IF (LTRIM(RTRIM(:field1)) = LTRIM(RTRIM(:field2))) 
  OR (:field1 IS NULL AND :field2 IS NULL) THEN
   Show_Message('Fields Match');

  ELSE
   Show_Message('Fields DO NOT Match');

  END IF;

End;

【讨论】:

    【解决方案2】:

    如果表单字段为 NULL,则相等比较将不起作用。您可以使用 nvl 函数来替换 NULLs

    Begin
    
    IF(LTRIM(RTRIM(nvl(:field1,'*@#')) = LTRIM(RTRIM(nvl(:field2,'*@#'))))THEN
     Show_Message('Fields Match');
    ELSE
     Show_Message('Fields DO NOT Match');
    END IF;
    
    End;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-31
      • 2012-02-21
      • 1970-01-01
      • 1970-01-01
      • 2013-01-13
      相关资源
      最近更新 更多