Я новичок в 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’)
я хотел оптимизировать мой оператор if. извините за путаницу ГДЕ В это просто пример
Оператор IN
работает в PL/SQL, вы пробовали?
Оптимизатор, скорее всего, перепишет запрос, так что ваш 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’))
Ваш синтаксис
WHERE IN
уже достаточно оптимизирован. Что плохого в том, чтобы использовать это?