Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Triger

3.9K
02 ноября 2004 года
generalm
28 / / 20.10.2004
ребя хелп



в одной из таблиц у нас есть поля
----------------- здесь храняться значения
код_результат
код_человека
код_трассы
результат
---------------- а здесь основная таблица
код_человека
общий результат

а теперь как сделать вызов не понятно...

тоесть для каждой трассы есть результат,
мне нужно все результаты проссуммировать и записать новое значение в общий результат
вот я тут скриптик написал, может если кто-нибуль умеет обращаться (и искать конкретные) поля, и перезаписывать значения, немного скрипт подредактирует? или хоть объяснит, пожалуйста.

вот код:

/* получаем в поле сумма очков(Т_персонал) сумму очков который получил этот пилот*/
DECLARE
[
KOL INTEGER - - количество очков заработанных гонщиком
UMNOJITEL INTEGER - - коэффицент множитель через сколько фишек повторяется
CUREL INTEGER - - текущий элемент
]
BEGIN
UMNOJITEL INTEGER := 20;
FOR i IN (код_человека-1)*UMNOJITEL..(код_человека)*UMNOJITEL LOOP
KOL=KOL+т_результат(i).результат_очки;
END LOOP;
UPDATE (Сумма_очков(j)):=KOL;

END;
368
03 ноября 2004 года
rostyslav
629 / / 13.07.2004
Trigger вообще-то вызывается сервером.

Что ты написал, то может быть сохраненной процедурой, если ее нужно вызывать.

Можно вопрос решить и с SQL.

TABLE_A
----------------- здесь храняться значения
KOD_RES код_результат
KOD_CS код_человека
KOD_TR код_трассы
RES результат

TABLE_B
---------------- а здесь основная таблица
KOD_CS код_человека
TTL_RES общий результат

тогда

UPDATE table_b
SET ttl_res =
(SELECT SUM(res) FROM table_a WHERE kod_cs=table_b.kod_cs)
10
03 ноября 2004 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by generalm
в одной из таблиц у нас есть поля
----------------- здесь храняться значения
код_результат
код_человека
код_трассы
результат
---------------- а здесь основная таблица
код_человека
общий результат


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

Так правильнее будет и с точки зрения реляционной модели.

3.9K
04 ноября 2004 года
generalm
28 / / 20.10.2004
Цитата:
Originally posted by rostyslav
Trigger вообще-то вызывается сервером.

Что ты написал, то может быть сохраненной процедурой, если ее нужно вызывать.

Можно вопрос решить и с SQL.

TABLE_A
----------------- здесь храняться значения
KOD_RES код_результат
KOD_CS код_человека
KOD_TR код_трассы
RES результат

TABLE_B
---------------- а здесь основная таблица
KOD_CS код_человека
TTL_RES общий результат

тогда

UPDATE table_b
SET ttl_res =
(SELECT SUM(res) FROM table_a WHERE kod_cs=table_b.kod_cs)



спасибо, но мне нужно создать именно тригер
вот что я сделал :

CREATE OR REPLACE TRIGGER ochki
BEFORE INSERT ON м_персонал
FOR EACH ROW
DECLARE cur INTEGER;
BEGIN
UPDATE м_персонал
SET сумма_очков=(SELECT SUM(результат_очки) FROM т_результат
where код_людей=м_персонал.код_людей);
END ochki;
в принципе работает правдо он не обрабатывает последнее поле таблицы куда я пишу... ине это не ясно... думаю это загадка природы

------------
м_персонал(главная)
------------
Код_сезона
Код_команды
Сумма_очков
Колво_очков
код_людей
-------------
Т_Результат(ассоц)
-----------------
Код_Результат(p)
Код_Людей(o)
Код_Сезона(o)
Код_Трассы(o)
Результат_Очки
Код_Команды(o)

колво_очков это сумма очков двух пилотов этой команды... я в принципе написал ниже приведу код, но он ругается на мой синтаксис

If код_команды=1 THEN
UPDATE м_персонал
SET колво_очков=(SELECT SUM(сумма_очков) FROM м_персонал
where код команды=1);
END IF;

здесь я для теста делаю 1 команду...

а вообще в сишке примерно бы выглядело так
for (int i=1; i<=10; i++)
{
if (текущее поле.код_команды=i){
{изменение поля:UPDATE м_персонал
SET колво_очков=(SELECT SUM
(сумма_очков)FROM м_персонал
where код команды=i);
}
}
но как это здесь организовать? как можно узнать какое поле он щас обрабатывает с тем чтобы получить код команды и взять сумму очков тока тех пилотов которые относяться к этой команде.

надеюсь вопрос понятен

}

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог