SQL - более простая функция, чем декодирование - PullRequest
1 голос
/ 02 марта 2011

Я работаю с процедурой pl / sql. У меня есть инициализированная переменная myvar, и я хочу проверить ее значение: если она не содержит «Z», я хочу, чтобы она содержала «P».

В настоящее время я делаю это так:

myvar := decode(myvar,'Z','Z','P');

Мне просто было интересно, есть ли более простой способ сделать это. Я имею в виду, что декодирование уже простое, но я чувствую, что странно указывать содержимое переменной, когда она уже есть!

Если бы такая функция существовала, она бы выглядела так:

Function myfunction(a In Varchar2, b In Varchar2, c In Varchar2) 
Return Varchar2 
Is               
Begin
      if a <> b
      then
           return c;
      end if;
      return a;
End myfunction; 

Любая помощь будет оценена!

Ответы [ 4 ]

11 голосов
/ 02 марта 2011

Нет встроенной функции, которая делает именно то, что вы хотите.

Вы можете использовать CASE вместо DECODE:

CASE myvar WHEN 'Z' THEN 'Z' ELSE 'P' END

Это не делает его короче!

2 голосов
/ 02 марта 2011

Поместите эту функцию в раздел объявлений программы и используйте ее!

1 голос
/ 03 марта 2011

Я согласен, что лучший вариант - использовать CASE выражение:

CASE myvar WHEN 'Z' THEN 'Z' ELSE 'P' END

Еще один подход, если вы довольны DECODE , - выполнить этот запрос:

SELECT decode(myvar,'Z','Z','P') 
  INTO myvar
  FROM DUAL;
0 голосов
/ 09 апреля 2012

Чтобы ответить на ваш первоначальный вопрос о том, существует ли более простой способ, есть также следующее:

if myvar <> 'Z' then 
  myvar := 'P'
end if;
...