БД Oracle не объявлена ​​«ПРАВО» - PullRequest
0 голосов
/ 05 ноября 2018

я ожидал получить ls_fr, ls_to, который обновляется с использованием оператора if.

Но в сообщении об исключении запроса указано Not declared RIGHT. Я думал RIGHT это встроенная функция. Как я могу решить это или объявить RIGHT функцию?

declare
ls_today VARCHAR2(15);
ls_time VARCHAR2(15);
ls_bef_day VARCHAR2(15);
ls_next_day VARCHAR2(15);
ls_fr VARCHAR2(15);
ls_to VARCHAR2(15);
begin
ls_today := '20181105';
ls_time := '20181105175612';
ls_bef_day := '20181104';
ls_next_day := '20181106';
If RIGHT(ls_time, 6) >= '000000' and RIGHT(ls_time, 6) <= '055959' Then 
ls_fr := ls_bef_day;
ls_to := ls_today;
Else
ls_fr := ls_today;
ls_to := ls_next_day;
End If;
select ls_fr, ls_to INTO ls_fr, ls_to FROM DUAL;
end;

1 Ответ

0 голосов
/ 05 ноября 2018

Простейшим будет использование SUBSTR вместо RIGHT с отрицательной позицией (поскольку в оракуле нет RIGHT):

If SUBSTR(ls_time, -6) >= '000000' and SUBSTR(ls_time, -6) <= '055959' Then

Отрицательная позиция с SUBSTR означает, что позиция задается в соответствии с концом строки. И если вы опустите параметр длины, как указано выше, подстрока берется до конца строки. Следовательно, SUBSTR(..., -pos) эквивалентно RIGHT(..., pos).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...