Oracle存储过程 - 如何将类型NUMBER与整数进行比较?

时间:2015-05-28 23:06:08

标签: sql if-statement stored-procedures oracle11g

我有以下存储过程。传入的参数FLAG_只允许接受null,0或1.但条件检查(FLAG_!= 0 OR FLAG_!= 1)不起作用。我想这是因为FLAG_的类型是NUMBER,其中包括float。有没有办法将NUMBER与INT进行比较?

create or replace PROCEDURE "ADD_RMV_FLAG"
(
  TEXT OUT VARCHAR2 
, FLAG_ IN NUMBER -- empty, 0 and 1 only values accepted.
) AS

BEGIN
-- input pramameters checking
IF FLAG_ is not null
THEN
   IF (FLAG_ is not null AND (FLAG_ != 0 OR FLAG_ != 1))
   THEN
     raise_application_error(-20001, 'ERROR: only empty, 0 or 1 is accepted   
     for FLAG. Passed in ' || FLAG_);
   END IF;
 END IF;
END ADD_RMV_FLAE

1 个答案:

答案 0 :(得分:1)

这个表达式:

IF (FLAG_ is not null AND (FLAG_ != 0 OR FLAG_ != 1))

将始终评估为TRUE。如果flag为0,则表示“false或true”。如果flag是3.1415926535。 。 。 ,那么你得到“真实或真实”。

您想要AND,或者更好:NOT IN

IF (FLAG_ is not null AND FLAG_ NOT IN (0, 1))