【问题标题】:how to validate integer datatype in oracle procedure如何在 oracle 过程中验证整数数据类型
【发布时间】:2015-02-27 23:02:33
【问题描述】:

我在 Oracle 过程中有一个整数数据类型的参数,它将参数中提到的行数生成到表中。

我想用它的数据类型验证参数。这意味着,如果参数值为 5.0,那么它会创建 5 行,如果值为 5.2,那么它会产生错误。如何创建此逻辑?

【问题讨论】:

  • 如果参数被定义为一个整数,则在过程中没有任何需要验证的东西——过程中总是有一个整数。如果调用者传入不同的数据类型,则该数据将被隐式转换为整数,否则您会收到错误(取决于传入的内容)。我想,每个调用者都可以在调用过程之前进行检查。但是,通常情况下,如果您正在调用一个采用整数的过程,调用者将传入一个整数,此时我们将返回平方 1——数据类型本身不能具有非整数值。
  • @JustinCave 他是对的,INTEGER 没有按预期工作。看我的例子。

标签: oracle validation types integer procedure


【解决方案1】:

奇怪的是,PL/SQL 不强制使用INTEGER 参数。如果将 5.2 传递给 INTEGER 参数,我希望 Oracle 隐式转换数据或抛出错误。看起来您需要添加自己的验证:

create or replace procedure test_procedure(a integer) is
begin
    if a is not null and a <> trunc(a) then
        raise_application_error(-20000, 'Parameter must be an integer');
    end if;
end;
/

--Works
begin
    test_procedure(5.0);
end;
/

--Fails with "ORA-20000: Parameter must be an integer".
begin
    test_procedure(5.2);
end;
/

【讨论】:

  • The documentation says: "如果子类型具有数字基类型,则实际参数继承子类型的范围,但不继承精度或小数位数。"它通过INTEGER 示例帮助证明了这一点。所以这是预期的行为,虽然不直观。
猜你喜欢
  • 2020-01-21
  • 1970-01-01
  • 1970-01-01
  • 2012-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-30
  • 1970-01-01
相关资源
最近更新 更多