我在Oracle SQL中有一个触发器。
CREATE OR REPLACE TRIGGER test
BEFORE INSERT ON SomeTable
FOR EACH ROW
DECLARE str1 VARCHAR(30);
str2 VARCHAR(30);
BEGIN
-- some code
IF ( str1 <> str 2 ) THEN
DBMS_OUTPUT.PUT_LINE( ' if ' );
ELSE
DBMS_OUTPUT.PUT_LINE( ' else ' );
END IF;
END;
现在,这总是转到else语句,即使字符串肯定不相等。我尝试使用!=而不是&lt;&gt;结果相同。但是,如果我只是使用
,它的工作方式相反IF ( str1 = str2 ) THEN ... ELSE ... END If;
那么测试两个不相等的字符串的正确方法是什么(在Oracle中)?
答案 0 :(得分:5)
您能告诉我们使用的实际值吗? 上述行为的原因可能是其中一个值为null?
如果str1和str2可能有空值,那么你的if应该是......
IF (str1 is null and str2 is null) then
<statments depending on whether you want to treat nulls as equal>
else if (
(str1 is null and str2 is not null) or
(str2 is null and str1 is not null) or
(str1 <> str2)) then
<statements when str1 and str2 are not equal>
else
<statements when str1 and str2 are equal?
end if;
答案 1 :(得分:0)
这应该确定一个字符串是否存在于另一个字符串中:
IF instr(str1,str2)<>0 THEN
答案 2 :(得分:0)
有时候否定平等条件会更容易。例如。如果不相等(val1,val2);
function equals(
val1 varchar2,
val2 varchar2
) return boolean is
begin
if val1 is null then
return val2 is null;
elsif val2 is null then
return false;
end if;
return val1 = val2;
end;
在您的代码中,您将拥有:
BEGIN
-- some code
IF NOT equals(str1, str2) THEN
DBMS_OUTPUT.PUT_LINE( ' if ' );
ELSE
DBMS_OUTPUT.PUT_LINE( ' else ' );
END IF;
END;