powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Проблема в задаче PL/SQL. Процедуры
3 сообщений из 3, страница 1 из 1
Проблема в задаче PL/SQL. Процедуры
    #40054723
Здравствуйте! Задача такая: Создайте процедуру, которая будет генерировать записи для таблицы расписания тренировок с датами до 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
Проблема в задаче PL/SQL. Процедуры
    #40054725
Output в первом случае :

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


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