Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Проблема в задаче PL/SQL. Процедуры / 3 сообщений из 3, страница 1 из 1
17.03.2021, 21:07
    #40054723
Проблема в задаче PL/SQL. Процедуры
Здравствуйте! Задача такая: Создайте процедуру, которая будет генерировать записи для таблицы расписания тренировок с датами до 4 недель с указанной даты начала, 3 раза в неделю (понедельник, среда, пятница или вторник, четверг, суббота). Если тренировка уже существует на дату для этого пользователя, не вставляйте запись.

Код без проблем работает если переданная параметром дата ровно пн, ср, пт.
Некорректно работает когда дата ровно вт чт сб.
То есть не заходит в IF:

Код: plsql
1.
2.
3.
IF TO_CHAR(v_dateadd, 'DAY') = 'СУББОТА' THEN
            v_dateadd := v_dateadd + 1;
        END IF; 



Подскажите что не так?
Заранее спасибо!)

Вот мой код:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
CREATE OR REPLACE PROCEDURE schedule_tr
(p_training_id IN NUMBER,
 p_username IN VARCHAR2,
 p_training_date IN DATE) IS
 
rec schedule%ROWTYPE;
v_dateadd schedule.training_date%TYPE := p_training_date;
cnt NUMBER := 0;
BEGIN 
SELECT *
INTO rec
FROM schedule
WHERE training_id = p_training_id 
AND training_date = p_training_date;

IF rec.username = p_username  THEN
    DBMS_OUTPUT.PUT_LINE('The schedule for this user already exists on this date!');
ELSIF rec.username != p_username THEN 
    DBMS_OUTPUT.PUT_LINE('This ID is already in use!');
ELSE 
    LOOP
        IF TO_CHAR(v_dateadd, 'DAY') = 'ВОСКРЕСЕНЬЕ' THEN
            v_dateadd := v_dateadd + 1;
        END IF;
        
        INSERT INTO schedule(training_id,username, training_date)
            VALUES(p_training_id, p_username, v_dateadd);
            
        IF TO_CHAR(v_dateadd, 'DAY') = 'СУББОТА' THEN
            v_dateadd := v_dateadd + 1;
        END IF;
        
        v_dateadd := v_dateadd + 2;
        cnt := cnt + 1;
        EXIT WHEN cnt = 12;
    END LOOP;
END IF;

EXCEPTION WHEN NO_DATA_FOUND THEN
    LOOP
        IF TO_CHAR(v_dateadd, 'DAY') = 'ВОСКРЕСЕНЬЕ' THEN
            v_dateadd := v_dateadd + 1;
        END IF;
        
        INSERT INTO schedule(training_id,username, training_date)
            VALUES(p_training_id, p_username, v_dateadd);
            
        IF TO_CHAR(v_dateadd, 'DAY') = 'СУББОТА' THEN
            v_dateadd := v_dateadd + 1;
        END IF;
        
        v_dateadd := v_dateadd + 2;
        cnt := cnt + 1;
        EXIT WHEN cnt = 12;
    END LOOP;
END schedule_tr;



Output в первом случае:[img=]

Output во втором случае: [img=]

Модератор: Пользуйтесь тегом SRC для кода
...
Рейтинг: 0 / 0
17.03.2021, 21:29
    #40054725
Проблема в задаче PL/SQL. Процедуры
Output в первом случае :

Output во втором случае:
...
Рейтинг: 0 / 0
17.03.2021, 22:02
    #40054726
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема в задаче PL/SQL. Процедуры
Абылайханн
F TO_CHAR(v_dateadd, 'DAY') = 'СУББОТА' THEN
NLS-зависимый говнокод.
RTFM/STFF Format model iw
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Проблема в задаче PL/SQL. Процедуры / 3 сообщений из 3, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]