powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Update одним запросом по условию
10 сообщений из 10, страница 1 из 1
Update одним запросом по условию
    #40098227
Romanov-krd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можете проверить правильно ли я решаю эту задачу? Если нет то в чем ошибка

Задача: Повысить оклад на 10% всем работникам отдела ОРСУВК без в/о и на 20% всем работникам предприятия, закончившим ВУЗ в текущем году (одним запросом UP-DATE).

Таблицы
Таблица TEMPLOYEE (работники) содержит поля:
dfobj (идентификационный номер работника),
dffio (фио работника),
dfdepartment(идентификационный номер отдела),
dfsalary (оклад работника),
dfemp_date (дата приема на работу)

Таблица TDEPARTMENT (отделы) содержит поля:
dfobj (идентификационный номер отдела),
dfname(название отдела)

Таблица TUNIVERSITY (ВУЗы) содержит поля:
dfobj (идентификационный номер ВУЗа),
dfname(название ВУЗа),
dfcity(идентификационный номер населенного пункта, в котором находится ВУЗ)

Таблица TCITY (населенные пункты) содержит поля:
dfobj (идентификационный номер населенного пункта),
dfname(название населенного пункта)

Таблица TEDUCATION содержит поля:
dfemployee (идентификационный номер работника),
dfuniversity(идентификационный номер ВУЗа),
dfgrad_date (дата окончания ВУЗа)

В эту таблицу вносятся данные только по закончившим ВУЗы работникам.


Решение
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
Update Temployee
Inner join Tdepartment on Temployee.dfdepartment=Tdepartment.dfobj
Left join Teducation on Temployee.dfobj=Teducation.dfemployee
Set dfsalary =case 
when Teducation.dfemployee is null 
then Templee.salary+(Temployee.salary*0.1)
When YEAR(Teducation.dfgrand_date)=2021
Then temployee.salary+(temployee.salary*0.2)
Where tdepartment.dfname=”ОРСУВК”
...
Рейтинг: 0 / 0
Update одним запросом по условию
    #40098235
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Romanov-krd
Можете проверить правильно ли я решаю эту задачу? Если нет то в чем ошибка



Окончил учебу не в текущем году

ps
case
...
end
.....
stax
...
Рейтинг: 0 / 0
Update одним запросом по условию
    #40098240
PuM256
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Romanov-krd,

А вы вообще свой запрос запустить пробовали?
...
Рейтинг: 0 / 0
Update одним запросом по условию
    #40098257
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Romanov-krd

Решение


задачка точно про оракл?

в оракля update чутку по другому выглядит

update () set ... where ...

и конечно же выборка (вью) должна быть updatable


ps
кавычки одинарные

.....
stax
...
Рейтинг: 0 / 0
Update одним запросом по условию
    #40098291
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Romanov-krd
Решение
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Update (Temployee
        Inner join 
        Tdepartment 
           on (Temployee.dfdepartment = Tdepartment.dfobj)
        Left join 
        Teducation 
           on (Temployee.dfobj = Teducation.dfemployee))
Set dfsalary = case when Teducation.dfemployee is null 
                       then Templee.salary + (Temployee.salary * 0.1)
                    When YEAR(Teducation.dfgrand_date) = 2021
                       Then temployee.salary + (temployee.salary * 0.2)
               END
Where tdepartment.dfname = 'ОРСУВК';


Разумное форматирование кода никто не отменял.
Не пренебрегайте им, чтобы сократить кол-во ошибок.

И скобки не забывайте после UPDATE.
И кавычки должны быть одинарные.
...
Рейтинг: 0 / 0
Update одним запросом по условию
    #40098293
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax
и конечно же выборка (вью) должна быть updatable

Да.
Называется Key Preserved view
...
Рейтинг: 0 / 0
Update одним запросом по условию
    #40098307
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL*Plus,

допилить

1) Окончил учебу НЕ в текущем году

2) убрать/поменять алиасы

.....
stax
...
Рейтинг: 0 / 0
Update одним запросом по условию
    #40098319
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL*Plus
Stax
и конечно же выборка (вью) должна быть updatable

Да.
Называется Key Preserved view


имхо
трудно обеспечить не переписывая селект

.....
stax
...
Рейтинг: 0 / 0
Update одним запросом по условию
    #40098322
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax
SQL*Plus
пропущено...

Да.
Называется Key Preserved view


имхо
трудно обеспечить не переписывая селект

Если у таблицы Temployee есть Primary Key, это будет обеспечено.
...
Рейтинг: 0 / 0
Update одним запросом по условию
    #40098333
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL*Plus
Stax
пропущено...


имхо
трудно обеспечить не переписывая селект

Если у таблицы Temployee есть Primary Key, это будет обеспечено.


имхо,
Primary Key для Temployee маловато будет

.....
stax
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Update одним запросом по условию
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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