Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / создание триггер в субд mysql / 14 сообщений из 14, страница 1 из 1
21.12.2015, 15:12:13
    #39133218
ArtemkaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
создание триггер в субд mysql
Помогите пожалуйста разобраться
При создании триггера появляется предупреждение (скриншот представлен ниже), но он создаётся.
Триггер работает на вычислении разности суммы, если сумма больше заданного поля из другой таблицы на заданный процент, то действие обновления отменяется...
Вот код триггера:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE DEFINER = CURRENT_USER TRIGGER `realtor_agency`.`transaction_AFTER_UPDATE` AFTER UPDATE ON `transaction` FOR EACH ROW
BEGIN
declare sum float;
set sum = (select `price` from `objects` inner join `transaction` where
`objects`.`id_object` = `transaction`.`id_object`);
if (`transaction`.`amount_of_the_transaction` > (sum * 1.07)) then
update `transaction` set `transaction`.`amount_of_the_transaction` = 0;
end if;
END



Ошибка: Error Code: 1242. Subquery returns more than 1 row
...
Рейтинг: 0 / 0
21.12.2015, 15:20:10
    #39133236
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
создание триггер в субд mysql
ArtemkaK
Код: sql
1.
set sum = (select `price` ...)

Подзапрос возвращает несколько записей, которые вы пытаетесь запихнуть в одну переменную.
Разберитесь, какая именно из них нужна, и перепишите запрос так, чтобы гарантированно возвращалось не более одной записи.
...
Рейтинг: 0 / 0
21.12.2015, 15:25:19
    #39133245
ArtemkaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
создание триггер в субд mysql
miksoftArtemkaK
Код: sql
1.
set sum = (select `price` ...)

Подзапрос возвращает несколько записей, которые вы пытаетесь запихнуть в одну переменную.
Разберитесь, какая именно из них нужна, и перепишите запрос так, чтобы гарантированно возвращалось не более одной записи.



Нужно значение из другой таблицы
...
Рейтинг: 0 / 0
21.12.2015, 15:28:52
    #39133250
ArtemkaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
создание триггер в субд mysql
miksoftArtemkaK
Код: sql
1.
set sum = (select `price` ...)

Подзапрос возвращает несколько записей, которые вы пытаетесь запихнуть в одну переменную.
Разберитесь, какая именно из них нужна, и перепишите запрос так, чтобы гарантированно возвращалось не более одной записи.

Я хотел достать значение из одной таблицы и умножить его на 1.07, затем сравнить со значением в таблице transaction, и затем выполнить update
...
Рейтинг: 0 / 0
21.12.2015, 15:36:34
    #39133268
ArtemkaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
создание триггер в субд mysql
miksoft,
Ошибку понял но не знаю как её исправить. Как лучше осуществить данный триггер? Подскажите пожалуйста.
...
Рейтинг: 0 / 0
21.12.2015, 15:43:13
    #39133283
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
создание триггер в субд mysql
ArtemkaK,

Опишите толком задачу, в т.ч. зачем этот триггер вообще нужен.

Вы в триггере AFTER UPDATE делаете UPDATE этой же таблице. Т.е. если бы это работало, то выполнялось бы вечно.
...
Рейтинг: 0 / 0
21.12.2015, 15:45:40
    #39133290
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
создание триггер в субд mysql
А нахрена ты связываешь ВСЮ таблицу transaction с таблицей price, когда надо выполнять связывание только по значению из вставляемой записи?
...
Рейтинг: 0 / 0
21.12.2015, 16:03:54
    #39133332
ArtemkaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
создание триггер в субд mysql
miksoft,
У меня имеются связные таблицы базы данных. Две из них это
Код: sql
1.
`transaction`

и
Код: sql
1.
`objects`

. Сначала заполняется
Код: sql
1.
`objects`

, потом
Код: sql
1.
`transaction`

. Но последняя таблица заполняется
за исключением поля
Код: sql
1.
`amount_of_the_transaction`

, оно заполняется хранимой процедурой. Задача триггера должна быть в том, что бы сравнивать значения
Код: sql
1.
`transaction`.`amount_of_the_transaction`

и
Код: sql
1.
`objects`.`price`

. И если
Код: sql
1.
`transaction`.`amount_of_the_transaction`

больше
Код: sql
1.
`objects`.`price`


в 1.07 раз, то действие хранимой процедуры должно отмениться, т.е. значение
Код: sql
1.
`transaction`.`amount_of_the_transaction`

сново должно стать
Код: sql
1.
null

.

Вот диаграмма БД:
...
Рейтинг: 0 / 0
21.12.2015, 16:06:06
    #39133341
ArtemkaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
создание триггер в субд mysql
AkinaА нахрена ты связываешь ВСЮ таблицу transaction с таблицей price, когда надо выполнять связывание только по значению из вставляемой записи?

К сожалению опыта мало. Начинаю учить mysql, знания плохие. Как смог представить, так и сделал.
...
Рейтинг: 0 / 0
21.12.2015, 16:06:45
    #39133344
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
создание триггер в субд mysql
ArtemkaKпоследняя таблица заполняется
за исключением поля
Код: sql
1.
`amount_of_the_transaction`


, оно заполняется хранимой процедурой. Задача триггера должна быть в том, что бы сравнивать значения
Код: sql
1.
`transaction`.`amount_of_the_transaction`


и
Код: sql
1.
`objects`.`price`


. И если
Код: sql
1.
`transaction`.`amount_of_the_transaction`


больше
Код: sql
1.
`objects`.`price`



в 1.07 раз, то действие хранимой процедуры должно отмениться, т.е. значение
Код: sql
1.
`transaction`.`amount_of_the_transaction`


сново должно стать
Код: sql
1.
null

Во глупость-то... не можешь нормально написАть процедуру? чтобы она выполняла проверку и, если указанное условие выполняется, НЕ вставляла значение в поле...
...
Рейтинг: 0 / 0
21.12.2015, 16:11:18
    #39133360
ArtemkaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
создание триггер в субд mysql
Akina, нужно именно триггером. Ели бы надо было сделать процедурой, то сделал бы.
...
Рейтинг: 0 / 0
21.12.2015, 17:46:46
    #39133589
ArtemkaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
создание триггер в субд mysql
ArtemkaK, Переделал триггер, добавил while:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
CREATE DEFINER=`root`@`localhost` TRIGGER `realtor_agency`.`transaction_AFTER_UPDATE` AFTER UPDATE ON `transaction` FOR EACH ROW
BEGIN

declare i int;
declare j float;
set i = 1, j = (select `objects`.`price` from `realtor_agency`.`objects` 
inner join `realtor_agency`.`transaction` on `transaction`.`id_object` = `objects`.`id_object` where
`transaction`.`id_transaction` = i );
while (i <= (select count(*) from `realtor_agency`.`transaction`)) do
if (`transaction`.`amount_of_the_transaction` > (j * 1.07)) then
update `realtor_agency`.`transaction` set `transaction`.`amount_of_the_transaction` = j;
end if;
set i = i + 1;
end while;

END



Теперь другая ошибка:
Error Code: 1109. Unknown table 'transaction' in field list
...
Рейтинг: 0 / 0
21.12.2015, 18:32:08
    #39133656
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
создание триггер в субд mysql
ArtemkaKнужно именно триггеромБудьте любезны, обоснуйте.
...
Рейтинг: 0 / 0
21.12.2015, 20:43:56
    #39133778
ArtemkaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
создание триггер в субд mysql
AkinaArtemkaKнужно именно триггеромБудьте любезны, обоснуйте.
по заданию нужно что бы был хотя бы один триггер. Поэтому решил сделать триггер с этой функцией.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / создание триггер в субд mysql / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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