【问题标题】:Check if a varchar is a number in Oracle forms检查 varchar 是否是 Oracle 表单中的数字
【发布时间】:2012-10-23 12:25:43
【问题描述】:

如何检查 varchar 是否为数字或是否包含 Oracle 表单中的任何特殊字符。

我尝试使用下面的代码,但它给了我逻辑错误

declare
    v_valid varchar2(15);
begin
    v_valid := :HEADERS.REFERENCE ;
If NOT v_valid IN ('0','1','2','3','4','5','6','7','8','9') then
        message('Characters or Special Symbols are not allowed here');
end if; 
end;

【问题讨论】:

标签: oracle oracle10g oracleforms


【解决方案1】:

我能够解决它。这是代码

declare
    v_valid varchar2(15);
begin
    v_valid := :HEADERS.REFERENCE ;
If v_valid NOT Between '0' AND '9' then
        message('Characters or Special Symbols are not allowed here');
end if; 
end;

【讨论】:

  • 这样你会遇到很多问题。注意'2A' IS INDEED BETWEEN '0' and '9'
  • 只有在字符串中只有一位数字时才能正常工作。最好的方法是尝试将其转换为数字并捕获错误。
  • 这是基于之前的 cmets 的完全不可接受的解决方案,请标记 Roger 的答案正确。
【解决方案2】:

尝试将其转换为数字并捕获异常。

    vVarchar varchar2(15) := '15';
    nNumber number;
    BEGIN
        nNumber := to_number(vVarchar);         
        message('Success!!');
    EXCEPTION WHEN VALUE_ERROR THEN
        message('Characters or Special Symbols are not allowed here');
    END;

这实际上是你正在做的事情 使用If v_valid NOT Between '0' AND '9' then 你会遇到很多这样的输入问题:'2aas', '9&%$'

考虑将:HEADERS.REFERENCE 更改为对象属性中的数字,应该更容易。

【讨论】:

  • 这是(几乎)我应该这样做的方式,但我不建议您使用 WHEN OTHERS。而是使用您尝试将数字转换为字符串时获得的 oracle 异常的编号。如果我没记错的话应该是 6502。
  • @PeterÅkerlund 相应地编辑,让我知道这是否正确,或者我应该输入EXCEPTION WHEN 6502?这里面的oracle代码我不知道怎么用,一直用这个词。
  • 您可以将 VALUE_ERROR 替换为数字,但我认为没有必要。你的方式是更好的编码实践。
猜你喜欢
  • 2011-06-03
  • 2011-07-02
  • 1970-01-01
  • 2022-08-17
  • 2021-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多