我是PL / SQL的新手,我的存储过程已经存在问题。它编译,但一个IF语句永远不会按需运行。
IF SUBSTR(p_phone_number, 5, 1) <> '2' OR SUBSTR(p_phone_number, 5, 1) <> '6' THEN
RAISE ex_phone_number_non_lv_custom2;
END IF;
调用程序时,p_phone_number
为'+37122222222'
,类型为VARCHAR2(12)
。我使用了SUBSTR(p_phone_number, 5, 1)
的服务器输出,它是预期的2,但是这个IF语句仍然引发了我的异常。为什么会这样?
答案 0 :(得分:5)
你想要not in
。 。 。但更好的是,使用IF SUBSTR(p_phone_number, 5, 1) NOT IN ('2', '6') THEN
RAISE ex_phone_number_non_lv_custom2;
END IF;
:
{{1}}
答案 1 :(得分:3)
您正在使用OR,您应该使用AND。
IF SUBSTR(p_phone_number, 5, 1) <> '2' AND SUBSTR(p_phone_number, 5, 1) <> '6' THEN
RAISE ex_phone_number_non_lv_custom2;
使用OR时,它将始终抛出异常,因为其中一个条件始终为真。