Oracle SQL - строка не равна - PullRequest
       3

Oracle SQL - строка не равна

0 голосов
/ 06 ноября 2011

У меня есть триггер в 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, даже когда строки определенно не равны. Я пытался использовать! = Вместо <> с тем же результатом. Тем не менее, это работает, наоборот, если я просто использую

IF ( str1 = str2 ) THEN ... ELSE ... END If;

Итак, как правильно проверить, что две строки не равны друг другу (в Oracle)?

Ответы [ 3 ]

5 голосов
/ 06 ноября 2011

Можете ли вы показать нам фактические используемые значения? Возможно, причина такого поведения заключается в том, что одно из значений равно нулю?

Если для 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;
0 голосов
/ 31 декабря 2013

Иногда легче отрицать условие равенства.Например, если не равно (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;
0 голосов
/ 06 ноября 2013

Это должно определить, существует ли одна символьная строка внутри другой символьной строки:

IF instr(str1,str2)<>0 THEN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...