Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.05.2009, 19:38   #1
FreshBreeze
Пользователь
 
Аватар для FreshBreeze
 
Регистрация: 04.05.2009
Сообщений: 12
Вопрос Триггеры и хранимые процедуры SQL

Здравствуйте!
Для базы данных информационной системы магазина нужно создать триггер, запрещающий добавление записи о продаже с прошедшей датой. Триггер должен быть связан с таблицей продаж. Мне написали следующий код триггера, но он не работает:

create TRIGGER <trigger name> before update on <table name>
FOR EACH ROW BEGIN
if NEW.date_column<NOW()
THEN
SET NEW.date_column=null;
END IF; END;

Есть ли вообще такая функция NOW()?

Также нужно написать хранимые процедуры, реализующие различные действия, например:
стирание всех записей о продажах с датой, предшествующей указанной; подсчёт суммарной стоимости товаров на складе;
поиск товаров, кол-во которых не превышает 10 единиц;
определение товара, который данный покупатель покупает чаще всего, а также продавца, с которым данный покупатель чаще всего общается;
расчет премии продавца (3% стоимости товара (товар дешевле 1000 у.е.) или 5% стоимости товара (товар дороже 1000 у.е.));
расчет скидки покупателю (1% за каждую 1000 у.е.);
подсчет суммарной стоимости проданных товаров (начиная с указанной даты);


Помогите, пожалуйста, с написанием.
FreshBreeze вне форума Ответить с цитированием
Старый 04.05.2009, 20:23   #2
Ky3Heu,
Пользователь
 
Регистрация: 01.04.2009
Сообщений: 94
По умолчанию

Цитата:
Сообщение от FreshBreeze Посмотреть сообщение
Для базы данных информационной системы магазина нужно создать триггер, запрещающий добавление записи о продаже с прошедшей датой.
Такая тема реально сработает только при доменных политиках, запрещающих менять системную дату. Проще:
Код:
query.sql.add:='Insert into <table> (<список полей>) values (<список значений :DATE>)';
query.params[<индекс параметра>].asDate:=Date;//текущая системная дата
Цитата:
стирание всех записей о продажах с датой, предшествующей указанной;
Код:
delete from <таблица> where <Поле с датой> < :DATE
query.params[<индекс параметра>].asDate:=Date;//текущая системная дата
Цитата:
подсчёт суммарной стоимости товаров на складе;
Точно не помню, но там что-то вроде этого Select * From
Код:
Select * From <таблица> where <имя товара> count ...
но можно организовать цикл и наращивать сумму...
Цитата:
поиск товаров, кол-во которых не превышает 10 единиц;
Код:
Select * From <таблица> where <кол-во товара><10
Цитата:
подсчет суммарной стоимости проданных товаров (начиная с указанной даты);
Код:
Select * From <таблица> where <Поле даты>>=:Date
query.params[<индекс параметра>].asDate:=Date;//текущая системная дата. Вместо DATE можешь воспользоваться DateTimePicker.Date
С остальным просто
Код:
Select * From <таблица> where <условие>
Сделал в цикле подсчеты и вывел, что надо
По ракетам и хоккею - Россияне всех сильней!
Ky3Heu, вне форума Ответить с цитированием
Старый 04.05.2009, 20:57   #3
5naip
Форумчанин
 
Аватар для 5naip
 
Регистрация: 05.10.2007
Сообщений: 536
По умолчанию

Код:
SET NEW.date_column=null;
а вы уверены,что date_column разрешено принимать значения NULL?
rocklistener...
5naip вне форума Ответить с цитированием
Старый 04.05.2009, 22:54   #4
FreshBreeze
Пользователь
 
Аватар для FreshBreeze
 
Регистрация: 04.05.2009
Сообщений: 12
По умолчанию

Цитата:
Сообщение от 5naip Посмотреть сообщение
Код:
SET NEW.date_column=null;
а вы уверены,что date_column разрешено принимать значения NULL?
Я не знаю... Этот код мне написали.
FreshBreeze вне форума Ответить с цитированием
Старый 04.05.2009, 23:01   #5
FreshBreeze
Пользователь
 
Аватар для FreshBreeze
 
Регистрация: 04.05.2009
Сообщений: 12
По умолчанию

Цитата:
Сообщение от Ky3Heu, Посмотреть сообщение
Такая тема реально сработает только при доменных политиках, запрещающих менять системную дату. Проще:
Код:
query.sql.add:='Insert into <table> (<список полей>) values (<список значений :DATE>)';
query.params[<индекс параметра>].asDate:=Date;//текущая системная дата
А что подразумевается под индексом параметра? И в Quiery Analyzer'e можно вставить этот код, или это только синтаксис? Прошу меня понять, я в SQL не очень хорошо разбираюсь
FreshBreeze вне форума Ответить с цитированием
Старый 05.05.2009, 04:44   #6
5naip
Форумчанин
 
Аватар для 5naip
 
Регистрация: 05.10.2007
Сообщений: 536
По умолчанию

я так понял, у вас MS SQL Server. Тогда запускайте Enterprse Manager, и щелкайте по вашей таблице ПКМ. Выбирайте Design Table. Если в появившемся окошке напротив имени столбца в колонке Allow Null будет галочка,то NULL разрешено.
З.Ы. Пишу абсолютно по памяти, и за 16 минут до выезда на работуВозможны неточности.
rocklistener...
5naip вне форума Ответить с цитированием
Старый 10.05.2009, 14:37   #7
FreshBreeze
Пользователь
 
Аватар для FreshBreeze
 
Регистрация: 04.05.2009
Сообщений: 12
По умолчанию

Цитата:
Сообщение от 5naip Посмотреть сообщение
я так понял, у вас MS SQL Server. Тогда запускайте Enterprse Manager, и щелкайте по вашей таблице ПКМ. Выбирайте Design Table. Если в появившемся окошке напротив имени столбца в колонке Allow Null будет галочка,то NULL разрешено.
Да, все верно, именно MS SQL Server. Я знаю, как разрешить NULL, мне просто нужно написать триггер, а будет он запрещать это значение или разрешать - мне неведомо Главное, чтобы не давал делать записи с прошедшей датой
FreshBreeze вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание процедуры на SQL Skyline20000 SQL, базы данных 0 31.03.2009 16:57
Хранимые процедуры... Только_Учусь БД в Delphi 2 17.07.2008 06:06
Блоб поля и хранимые процедуры yulia БД в Delphi 8 07.06.2008 16:42
Сложные SQL запросы или хранимые процедуры! Killer_djon БД в Delphi 17 25.03.2008 12:10