0 / 0 / 0
Регистрация: 24.11.2014
Сообщений: 47
|
||||||
1 | ||||||
Триггер для подсчёта стоимости всего заказа07.05.2015, 21:00. Показов 3245. Ответов 27
Метки нет (Все метки)
подскажите пожалуйста нужно написать триггер для подсчёта стоимости всего заказа, которая состоит из данных которые берутся из трёх таблиц и в поле четвертой таблицы должны посчитаться
вот как делаю, но не работает:
0
|
07.05.2015, 21:00 | |
Ответы с готовыми решениями:
27
Триггер для подсчета общей стоимости заказа Триггер на сумму заказа Я наверное схожу с ума: всего лишь INSTEAD OF-триггер Описать метод для подсчёта стоимости заказа |
Модератор
4217 / 3058 / 583
Регистрация: 21.01.2011
Сообщений: 13,205
|
|
08.05.2015, 09:45 | 2 |
0
|
0 / 0 / 0
Регистрация: 24.11.2014
Сообщений: 47
|
|
08.05.2015, 09:48 [ТС] | 3 |
что именно объяснить?
0
|
Модератор
4217 / 3058 / 583
Регистрация: 21.01.2011
Сообщений: 13,205
|
|
08.05.2015, 09:53 | 4 |
Что такое "не работает"? Выдает какую-то ошибку при компиляции, выдает ошибку в runtime или ошибок нет, но и нужного результата нет? Любое сообщение об ошибке предоставляет инфу для поиска этой самой ошибки.
0
|
0 / 0 / 0
Регистрация: 24.11.2014
Сообщений: 47
|
|
08.05.2015, 10:17 [ТС] | 5 |
да выдаёт ошибку:
PLS-00357: Table,View Or Sequence reference 'ZAKAZ_USLUGI.KOL_VO_ZAKAZ' not allowed in this context
0
|
Модератор
4217 / 3058 / 583
Регистрация: 21.01.2011
Сообщений: 13,205
|
|
08.05.2015, 10:22 | 6 |
Вполне логично. С какой стати ты напрямую, без SELECT-а обращаешься к полю таблицы?
PS Кстати, обрати внимание. При простом просмотре текста эту фишку можно и пропустить. А сообщение сразу тыкает в нужное место.
0
|
0 / 0 / 0
Регистрация: 24.11.2014
Сообщений: 47
|
|
08.05.2015, 10:50 [ТС] | 7 |
что вы хотите этим сказать, что я должен вместо zakaz_uslugi.kol_vo_zakaz написать запрос?
0
|
Модератор
4217 / 3058 / 583
Регистрация: 21.01.2011
Сообщений: 13,205
|
|
08.05.2015, 11:00 | 8 |
Запрос к этой таблице у тебя уже есть, просто надо это поле вытащить в еще одну переменную.
Немного теории. Так исторически сложилось, что в Oracle есть 2 машины (engine): SQL и PL/SQL. Если в тексте PL/SQL встречается SQL-запрос, то происходит переключение на SQL engine и идет обращение к объектам БД. В частности, Oracle формирует доп. запросы к словарю (т.н. рекурсивный SQL), чтобы определить, есть ли такая таблица (которая упоминается в запросе). Если SQL-запроса нет, то работает PL/SQL engine, которая ищет все упоминаемые имена внутри блока PL/SQL. Обрати внимание, что Oracle тебе сказал неопределенно, что это за объект (view, table or sequence). Это именно потому, что он не лез в словарь, чтобы понять, что это такое, а высказал предположение, исходя из контекста. Другими словами: пока нет SQL-запроса, работа идет с переменными, как в любом другом языке программирования. Если ты хочешь обратиться к таблицам, то обязательно нужен SQL-запрос.
0
|
0 / 0 / 0
Регистрация: 24.11.2014
Сообщений: 47
|
|
08.05.2015, 11:05 [ТС] | 9 |
теория это конечно хорошо, ноя недавно начал разбираться с этими вещами, вы бы не могли подсказать, как это выглядело бы на практике? вот как я понял вас:
Кликните здесь для просмотра всего текста
select kol_vo_zakaz into kol_vo from zakaz_uslugi; :new.price_zakaz:=price_uslug*kol_vo+price_fotosessiya; end;
0
|
Модератор
4217 / 3058 / 583
Регистрация: 21.01.2011
Сообщений: 13,205
|
|||||||||||
08.05.2015, 11:13 | 10 | ||||||||||
В приведенном тобой SELECT-е отсутствует WHERE, поэтому в общем случае будет несколько строк и ошибка too_many_rows.
У тебя есть такой запрос
Если таки находится, то
0
|
0 / 0 / 0
Регистрация: 24.11.2014
Сообщений: 47
|
|
08.05.2015, 11:19 [ТС] | 11 |
поэтому я и выложил картинку с частью бд, для которой нужно написать триггер, и написал где и что находиться и что в итоге должно получится
0
|
Модератор
4217 / 3058 / 583
Регистрация: 21.01.2011
Сообщений: 13,205
|
|
08.05.2015, 11:42 | 12 |
Я, честно говоря, не знаю, чем может помочь эта картинка. Обычно приводят DDL таблиц, а возможно и тестовые данные. А что касаемо того, находится ли kol_vo_zakaz в выбранной строке или нет, то это гораздо быстрее тебе просто посмотреть с пом. запроса, чем выяснять на форуме, где под рукой нет твоей БД.
0
|
0 / 0 / 0
Регистрация: 24.11.2014
Сообщений: 47
|
|
08.05.2015, 11:48 [ТС] | 13 |
все три значения сумма товара, сумма услуги и количество услуг находятся все трёх разных таблицах.
с суммой товара все просто мы ее вытаскиваем из таблицы товар и не паримся, а вот чтобы вытащить сумму услуги*количество услуг, здесь сложнее, вот что мне нужно реализовать. так как вытаскивая сумму услуги*количество мы узнаем сколько было затрачено денег на выбранную услугу, так как услуг может быть заказано разное количество
0
|
0 / 0 / 0
Регистрация: 24.11.2014
Сообщений: 47
|
|
08.05.2015, 12:31 [ТС] | 14 |
подскажите что значит,если в бд данных после добавления новой записи выводиться в поле черточка, вместо значения, на это поле написан триггер. это при работе с oracle
0
|
105 / 49 / 26
Регистрация: 01.09.2014
Сообщений: 140
|
|
08.05.2015, 12:58 | 15 |
Может хотя бы ddl таблиц покажешь, какой инсерт делал, какой тригер, какой результат селекта после добавления строки ?...
0
|
0 / 0 / 0
Регистрация: 24.11.2014
Сообщений: 47
|
|
08.05.2015, 13:04 [ТС] | 16 |
вот триггер
Кликните здесь для просмотра всего текста
create or replace trigger price_common before insert or update of price_zakaz on zakaz for each row declare price_tovar tovar.price%type; price_uslug uslugi.price%type; begin select price into price_tovar from tovar where tovar.id_tovar=:new.id_tovar; select sum(price*kol_vo_zakaz) into price_uslug from uslugi inner join zakaz_uslugi on uslugi.id_uslugi=zakaz_uslugi.id_uslugi WHERE zakaz_uslugi.id_zakaz=:new.id_zakaz; :new.price_zakaz:=price_uslug+price_tovar; end; таблицы внизу на картинке. а вот что вывелось после insert тоже на картинке
0
|
3 / 3 / 1
Регистрация: 04.05.2015
Сообщений: 23
|
|
08.05.2015, 13:14 | 17 |
если был бы DDL таблиц то написал скрипт, а так в общем цена услуг в заказе
SELECT sum(z.kol_uslug*(select u1.price from uslugi u1 where u1.id_uslugi=z.id_uslugi)) FROM zakaz_uslugi z where z.id_zakaz=:id_zakaz;
0
|
0 / 0 / 0
Регистрация: 24.11.2014
Сообщений: 47
|
|||||||||||||||||||||
08.05.2015, 13:34 [ТС] | 18 | ||||||||||||||||||||
вот ddl всех таблиц:
таблица товар
0
|
3 / 3 / 1
Регистрация: 04.05.2015
Сообщений: 23
|
|
08.05.2015, 13:41 | 19 |
для чего price_uslugi в zakaz_uslugi если в uslugi есть price?
0
|
0 / 0 / 0
Регистрация: 24.11.2014
Сообщений: 47
|
|
08.05.2015, 13:57 [ТС] | 20 |
это поле, которое предназначалось для другого но щас оно не нужно, забыл удалить
0
|
08.05.2015, 13:57 | |
08.05.2015, 13:57 | |
Помогаю со студенческими работами здесь
20
Поле для подсчета стоимости заказа с учетом цены, скидки и комиссии Создать триггер для занесения стоимости каждого проданного билета во временную таблицу Калькулятор подсчёта стоимости игры Калькулятор подсчёта стоимости продуктов. Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |