Как оптимизировать оператор pl sql if с несколькими условиями ИЛИ

Я новичок в pl sql. Не могли бы вы сообщить мне, как я могу оптимизировать приведенный ниже оператор if?

IF (inSeries=‘90’) OR (inSeries=‘91’) OR (inSeries=‘92’) OR (inSeries=‘93’) OR (inSeries=‘94’) THEN

как в sql мы можем использовать

WHERE inSeries IN (‘90’,’91’,’92’,’93’,’94’)

Ваш синтаксис WHERE IN уже достаточно оптимизирован. Что плохого в том, чтобы использовать это?

Tim Biegeleisen 09.04.2019 06:46

я хотел оптимизировать мой оператор if. извините за путаницу ГДЕ В это просто пример

Vinda 09.04.2019 06:48

Оператор IN работает в PL/SQL, вы пробовали?

Kaushik Nayak 09.04.2019 06:56
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
3
674
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Оптимизатор, скорее всего, перепишет запрос, так что ваш IN все равно станет OR. Сравните строку 3 в запросе и самую последнюю строку:

SQL> select job
  2  from emp
  3  where deptno in (10, 20, 30, 40);

JOB
---------
CLERK
SALESMAN
<snip>

14 rows selected.


Execution Plan
----------------------------------------------------------
Plan hash value: 3956160932

--------------------------------------------------------------------------
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |    14 |   154 |     3   (0)| 00:00:01 |
|*  1 |  TABLE ACCESS FULL| EMP  |    14 |   154 |     3   (0)| 00:00:01 |
--------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - filter("DEPTNO"=10 OR "DEPTNO"=20 OR "DEPTNO"=30 OR "DEPTNO"=40)

SQL>
Ответ принят как подходящий

В PLSQL также условие IN работает как условие IF.

declare
inSeries varchar2(2) := '90';
begin
if inseries in ('90','91','92','93','94')
then
dbms_output.put_line(inseries ||':this is within series');
else
dbms_output.put_line(inseries ||':this is out of series');
end if;
end;

-- output
90:this is within series
80:this is out of series

но есть и другой способ, зависящий от бизнес-логики, как я вижу из вашего вопроса, что в последовательном приращении вы можете напрямую использовать комбинацию больше и меньше...

Вы можете использовать сам SQL-запрос вместе с ключевым словом EXISTS.

IF EXISTS (SELECT * FROM <table_name> WHERE inSeries IN (‘90’,’91’,’92’,’93’,’94’))

Другие вопросы по теме