powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / создание триггер в субд mysql
14 сообщений из 14, страница 1 из 1
создание триггер в субд mysql
    #39133218
ArtemkaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Помогите пожалуйста разобраться
При создании триггера появляется предупреждение (скриншот представлен ниже), но он создаётся.
Триггер работает на вычислении разности суммы, если сумма больше заданного поля из другой таблицы на заданный процент, то действие обновления отменяется...
Вот код триггера:
Код: 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
создание триггер в субд mysql
    #39133236
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArtemkaK
Код: sql
1.
set sum = (select `price` ...)

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

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



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

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

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

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

Вы в триггере AFTER UPDATE делаете UPDATE этой же таблице. Т.е. если бы это работало, то выполнялось бы вечно.
...
Рейтинг: 0 / 0
создание триггер в субд mysql
    #39133290
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А нахрена ты связываешь ВСЮ таблицу transaction с таблицей price, когда надо выполнять связывание только по значению из вставляемой записи?
...
Рейтинг: 0 / 0
создание триггер в субд mysql
    #39133332
ArtemkaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
создание триггер в субд mysql
    #39133341
ArtemkaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaА нахрена ты связываешь ВСЮ таблицу transaction с таблицей price, когда надо выполнять связывание только по значению из вставляемой записи?

К сожалению опыта мало. Начинаю учить mysql, знания плохие. Как смог представить, так и сделал.
...
Рейтинг: 0 / 0
создание триггер в субд mysql
    #39133344
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
создание триггер в субд mysql
    #39133360
ArtemkaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina, нужно именно триггером. Ели бы надо было сделать процедурой, то сделал бы.
...
Рейтинг: 0 / 0
создание триггер в субд mysql
    #39133589
ArtemkaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
создание триггер в субд mysql
    #39133656
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArtemkaKнужно именно триггеромБудьте любезны, обоснуйте.
...
Рейтинг: 0 / 0
создание триггер в субд mysql
    #39133778
ArtemkaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaArtemkaKнужно именно триггеромБудьте любезны, обоснуйте.
по заданию нужно что бы был хотя бы один триггер. Поэтому решил сделать триггер с этой функцией.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / создание триггер в субд mysql
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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