Oracle 存储过程 - 如何将 NUMBER 类型与整数进行比较?
Oracle Stored Procedure - How to compare type NUMBER with intergers?
我有以下存储过程。传入的参数 FLAG_ 只允许接受 null、0 或 1。但条件检查(FLAG_ != 0 OR FLAG_ != 1)不起作用。我猜这是因为 FLAG_ 的类型是包含浮点数的 NUMBER。有没有办法将 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
这个表达式:
IF (FLAG_ is not null AND (FLAG_ != 0 OR FLAG_ != 1))
将始终评估为 TRUE。如果标志为 0,则得到 "false OR true"。如果标志是 3.1415926535 。 . . , 然后你得到 "true or true".
你想要 AND
,或者更好:NOT IN
:
IF (FLAG_ is not null AND FLAG_ NOT IN (0, 1))
我有以下存储过程。传入的参数 FLAG_ 只允许接受 null、0 或 1。但条件检查(FLAG_ != 0 OR FLAG_ != 1)不起作用。我猜这是因为 FLAG_ 的类型是包含浮点数的 NUMBER。有没有办法将 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
这个表达式:
IF (FLAG_ is not null AND (FLAG_ != 0 OR FLAG_ != 1))
将始终评估为 TRUE。如果标志为 0,则得到 "false OR true"。如果标志是 3.1415926535 。 . . , 然后你得到 "true or true".
你想要 AND
,或者更好:NOT IN
:
IF (FLAG_ is not null AND FLAG_ NOT IN (0, 1))