Форум программистов, компьютерный форум, киберфорум
Oracle
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 10.03.2020
Сообщений: 44

PL/SQL 00103 Ошибка в кейсе при обновлении таблицы

03.03.2023, 17:13. Показов 532. Ответов 3

Студворк — интернет-сервис помощи студентам
Кратко о задаче - создать матрицу (таблицу) в виде календаря, где слева предметы - справа дни недели, и в этих днях недели указаны числа - сколько часов идет эта дисциплина в этот день.
Пример: математика в Пн - 2ч и в Вт - 1ч, в матрице будет так 2 - 1 - null - null - null

У меня через кейс идет проход по уже имеющейся таблице с расписанием и по дням недели записывается предмет и часы
Если предмет уже есть, то обновляет строку в которой указан это предмет в указанный день

Но где-то все еще есть косяки, т.к. код не проходит
Ошибку и код прилагаю

Oracle 11 SQL
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
DROP TABLE timesheet_matrix;
CREATE TABLE timesheet_matrix (
  disname VARCHAR2(50) NOT NULL,
  mon VARCHAR2(100),
  tue VARCHAR2(100),
  wedn VARCHAR2(100),
  thur VARCHAR2(100),
  fri VARCHAR2(100)
);
 
TRUNCATE TABLE timesheet_matrix;
 
CREATE OR REPLACE PACKAGE matrixPack
AS
  PROCEDURE crTable;
END matrixPack;
/
 
CREATE OR REPLACE PACKAGE BODY matrixPack
AS
  PROCEDURE crTable
  IS
  rep_name VARCHAR2(50);
  BEGIN  
  FOR rec IN (SELECT disname, dayW, hoursW FROM timesheet)
  LOOP
    SELECT disname INTO rep_name FROM timesheet_matrix WHERE disname = rec.disname;
    CASE rec.dayW
      WHEN 'Monday' THEN
        IF (rep_name <> NULL) THEN 
            UPDATE timesheet_matrix
            SET disname = rec.disname, 
                mon = rec.hoursW
            WHERE disname = rec.disname;
        ELSE
            INSERT INTO timesheet_matrix(disname, mon, tue, wedn, thur, fri)
            VALUES (rec.disname, rec.hoursW, NULL, NULL, NULL, NULL);    
      WHEN 'Tuesday' THEN
        IF (rep_name <> NULL) THEN
            UPDATE timesheet_matrix
            SET disname = rec.disname, 
                tue = rec.hoursW
            WHERE disname = rec.disname;
        ELSE 
            INSERT INTO timesheet_matrix(disname, mon, tue, wedn, thur, fri)
            VALUES (rec.disname, NULL, rec.hoursW, NULL, NULL, NULL);
      WHEN 'Wednesday' THEN
        IF (rep_name <> NULL) THEN
            UPDATE timesheet_matrix
            SET disname = rec.disname, 
                wedn = rec.hoursW
            WHERE disname = rec.disname;
        ELSE 
            INSERT INTO timesheet_matrix(disname, mon, tue, wedn, thur, fri)
            VALUES (rec.disname, NULL, NULL, rec.hoursW, NULL, NULL);
      WHEN 'Thursday' THEN
        IF (rep_name <> NULL) THEN
            UPDATE timesheet_matrix
            SET disname = rec.disname, 
                thur = rec.hoursW
            WHERE disname = rec.disname;
        ELSE 
            INSERT INTO timesheet_matrix(disname, mon, tue, wedn, thur, fri)
            VALUES (rec.disname, NULL, NULL, NULL, rec.hoursW, NULL);
      WHEN 'Friday' THEN
        IF (rep_name <> NULL) THEN 
            UPDATE timesheet_matrix
            SET disname = rec.disname, 
                fri = rec.hoursW
            WHERE disname = rec.disname;
        ELSE 
            INSERT INTO timesheet_matrix(disname, mon, tue, wedn, thur, fri)
            VALUES (rec.disname, NULL, NULL, NULL, NULL, rec.hoursW);     
    END CASE;
  END LOOP;
  END crTable;
END matrixPack;
/
 
BEGIN
  matrixPack.crTable;
END;
/
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.03.2023, 17:13
Ответы с готовыми решениями:

Создание функций и процедур в PL/SQL ошибка PLS-00103
Стоит задача вывести из таблицы с заказами номер заказа и сумму в формате &quot;N рублей, M копеек&quot; Здесь я по сути просто для рублей...

Ошибка при обновлении таблицы БД
Добрый вечер. Подскажите пожалуйста в чем проблема. Вношу новую запись в таблицу пытаюсь обновить и вылезает ошибка &quot;Concurrency...

Ошибка при обновлении таблицы dbf !!!
Привет всем ! Написао прогу, которая выбирает данные с SQL-сервера и пишет их в две таблицы dbf. на моём компе, где стоит VB 6.0 всё...

3
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5972 / 3734 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
03.03.2023, 17:57
АПЕКС!!!111одинодин

Цитата Сообщение от Greggriny Посмотреть сообщение
CASE rec.dayW
Вот ошибка. И я бы case переписал на старые добрые if'ы.

Добавлено через 1 минуту
sqldeveloper бы подсветил строку с ошибкой…
1
0 / 0 / 0
Регистрация: 10.03.2020
Сообщений: 44
03.03.2023, 18:10  [ТС]
А с чем именно ошибка? Вроде по синтаксису все должно работать, а dayW это колонка из той таблицы с расписанием
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5972 / 3734 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
03.03.2023, 18:13
И не один if не закрыт, ага.

Добавлено через 48 секунд
Code
1
2
3
4
5
6
7
8
9
10
11
12
IF condition_1 THEN
  statements_1
ELSIF condition_2 THEN
  statements_2
[ ELSIF condition_3 THEN
    statements_3
]
...
[ ELSE
    else_statements
]
END IF;
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.03.2023, 18:13
Помогаю со студенческими работами здесь

Ошибка при обновлении таблицы JTable
Есть функция reloadTable: public void reloadTable() { tModel = new TableModel(); table.setModel(tModel); ...

Ошибка при обновлении таблицы ora-01427
Доброго времени суток. Есть SQL-запрос: UPDATE SV_STAT a SET (a.STATIA, a.PRIM, a.CHAST, a.PYNKT) = ( SELECT kv2.STATIA,...

Ошибка при попытке обновлении данных таблицы Access
Есть большая таблица с данными по приборам. Она загружается в датагрид. Но при попытке сохранения изменений из датагрида через метод...

ОШИБКА в строке 38: PLS-00103: обнаружен символ «конец файла» при ожидании одного из следующих событий:
Oracle Database 10g Express Edition CREATE OR REPLACE PACKAGE BODY swim IS PROCEDURE add_rows is BEGIN SAVEPOINT p1; ...

Ошибка при создании SQL таблицы
CREATE TABLE Gruppi( Gruppa VARCHAR(7) PRIMARY KEY, Facultet VARCHAR(20), forma_obucheniya CHAR, kyrs NUMBER(1), ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru