powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Хранимая процедура по увеличению стипендии
13 сообщений из 13, страница 1 из 1
Хранимая процедура по увеличению стипендии
    #39237820
MMichaelM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте , нужно увеличить стипендию в два раза тем студентам которые имеют средний бал выше за 4.7 . Оценки находятся в отдельной таблице Uspesh , с полем ocinka, а само поле стипендии находится в таблице Students
Вот что я писал:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
create or alter procedure STIPFORSTUDENTS
returns (
STIPENDIA decimal(15,2),
AVG_OCINKA decimal(15,2))
as
begin

for select stip, avg(uspish.ocinka) from students inner join uspish
on students.snom = uspish.snom group by stip into :stipendia, :avg_ocinka
do
begin
if(avg_ocinka >= 4.7) then
update students set stip = stip*2 where stip = :stipendia;

suspend;
end

end^


но оно не видит avg чтобы увеличить стипендию, подскажите в чем проблема и как исправить? Спасибо!
...
Рейтинг: 0 / 0
Хранимая процедура по увеличению стипендии
    #39237826
Граур Станислав
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если выполнить
Код: sql
1.
2.
3.
4.
select stip, avg(uspish.ocinka) 
from students inner join uspish
on students.snom = uspish.snom 
group by stip



будут ли средние значения выше 4,8 ?
И еще, судя по запросу, ты поднимаешь стипендию не студентам, а стипендиям.
...
Рейтинг: 0 / 0
Хранимая процедура по увеличению стипендии
    #39237905
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MMichaelM,

никогда не делай FOR SELECT + UPDATE + SUSPEND. Это вообще хреновый вариант. В итоге ты обновишь столько записей сколько отфетчит клиент, а не все. Ну и сами запросы какие-то левые.
...
Рейтинг: 0 / 0
Хранимая процедура по увеличению стипендии
    #39237922
MMichaelM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Граур СтаниславЕсли выполнить
Код: sql
1.
2.
3.
4.
select stip, avg(uspish.ocinka) 
from students inner join uspish
on students.snom = uspish.snom 
group by stip



будут ли средние значения выше 4,8 ?
И еще, судя по запросу, ты поднимаешь стипендию не студентам, а стипендиям.
прошу прощения, не понял с " ты поднимаешь стипендию не студентам, а стипендиям", а как тогда правильней будет?
...
Рейтинг: 0 / 0
Хранимая процедура по увеличению стипендии
    #39237928
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MMichaelM,

во первых мы тут не видим твою схему БД. Прислал хотя бы DDL таблиц. Что-то мне кажется что тут сама схема не верная.
...
Рейтинг: 0 / 0
Хранимая процедура по увеличению стипендии
    #39237956
MMichaelM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов ДенисMMichaelM,

во первых мы тут не видим твою схему БД. Прислал хотя бы DDL таблиц. Что-то мне кажется что тут сама схема не верная.
DDL для Students:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
/******************************************************************************/
/*** Generated by IBExpert 17.02.2005 8:45:38 ***/
/******************************************************************************/

/******************************************************************************/
/*** Following SET SQL DIALECT is just for the Database Comparer ***/
/******************************************************************************/
SET SQL DIALECT 3;

/******************************************************************************/
/*** Tables ***/
/******************************************************************************/

CREATE TABLE STUDENTS (
SNOM INTEGER NOT NULL,
SFAM VARCHAR(24),
SIMA VARCHAR(24),
SOTCH VARCHAR(24),
STIP DECIMAL(15,2),
GRUP VARCHAR(10),
FORM VARCHAR(10),
FOTO BLOB SUB_TYPE 0 SEGMENT SIZE 2048,
NSTIP COMPUTED BY (STIP*2)
);

/******************************************************************************/
/*** Check constraints ***/
/******************************************************************************/

ALTER TABLE STUDENTS ADD check( FORM in('державна' , 'платна') );

/******************************************************************************/
/*** Primary keys ***/
/******************************************************************************/

ALTER TABLE STUDENTS ADD CONSTRAINT PK_STUDENTS PRIMARY KEY (SNOM);

/******************************************************************************/
/*** Triggers ***/
/******************************************************************************/

SET TERM ^ ;

/******************************************************************************/
/*** Triggers for tables ***/
/******************************************************************************/

/* Trigger: "DELETE" */
CREATE OR ALTER TRIGGER "DELETE" FOR STUDENTS
ACTIVE BEFORE DELETE POSITION 0
AS
begin
delete from uspish where snom = old.snom;
end
^

SET TERM ; ^

/******************************************************************************/
/*** Privileges ***/
/******************************************************************************/
10:02:51	



DDL для Uspish:


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
/******************************************************************************/
/*** Generated by IBExpert 17.02.2005 8:46:54 ***/
/******************************************************************************/

/******************************************************************************/
/*** Following SET SQL DIALECT is just for the Database Comparer ***/
/******************************************************************************/
SET SQL DIALECT 3;

/******************************************************************************/
/*** Tables ***/
/******************************************************************************/

CREATE GENERATOR GEN1;

CREATE TABLE USPISH (
NOM INTEGER NOT NULL,
DATA DATE,
SNOM INTEGER,
PNOM INTEGER,
OCINKA INTEGER
);

/******************************************************************************/
/*** Primary keys ***/
/******************************************************************************/

ALTER TABLE USPISH ADD CONSTRAINT PK_USPISH PRIMARY KEY (NOM);

/******************************************************************************/
/*** Foreign keys ***/
/******************************************************************************/

ALTER TABLE USPISH ADD CONSTRAINT FK_USPISH_1 FOREIGN KEY (SNOM) REFERENCES STUDENTS (SNOM) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE USPISH ADD CONSTRAINT FK_USPISH_2 FOREIGN KEY (PNOM) REFERENCES PREDMET (PNOM) ON DELETE CASCADE ON UPDATE CASCADE;

/******************************************************************************/
/*** Triggers ***/
/******************************************************************************/

SET TERM ^ ;

/******************************************************************************/
/*** Triggers for tables ***/
/******************************************************************************/

/* Trigger: USPISH_BI */
CREATE OR ALTER TRIGGER USPISH_BI FOR USPISH
ACTIVE BEFORE INSERT POSITION 0
as
begin
if(new.Nom is null) then
new.nom = gen_id(gen1 , 1);
end
^

SET TERM ; ^

/******************************************************************************/
/*** Privileges ***/
/******************************************************************************/
...
Рейтинг: 0 / 0
Хранимая процедура по увеличению стипендии
    #39237974
MMichaelM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов ДенисMMichaelM,

никогда не делай FOR SELECT + UPDATE + SUSPEND. Это вообще хреновый вариант. В итоге ты обновишь столько записей сколько отфетчит клиент, а не все. Ну и сами запросы какие-то левые.
в поле ocinka у меня есть только один селовек с 5 ему и должны поднять
...
Рейтинг: 0 / 0
Хранимая процедура по увеличению стипендии
    #39237998
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot MMichaelM]прошу прощения, не понял с " ты поднимаешь стипендию не студентам, а стипендиям", а как тогда правильней будет?/quot]

Ну может быть как-то вот так

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
..............
for select uspish.snom, avg(uspish.ocinka) 
       from students 
       join uspish on students.snom = uspish.snom 
       group by uspish.snom 
     into :snom, :avg_ocinka
do begin
  if(avg_ocinka >= 4.7) then
    update students set stip = stip*2 where snom = :snom;
..............
...
Рейтинг: 0 / 0
Хранимая процедура по увеличению стипендии
    #39255853
joker 79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m7m,

Я чего то не понимаю или зачем в for-е джоинить student-сов?
...
Рейтинг: 0 / 0
Хранимая процедура по увеличению стипендии
    #39255856
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
месяц.
думал.
размышлял.
...
Рейтинг: 0 / 0
Хранимая процедура по увеличению стипендии
    #39255958
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
joker 79m7m,

Я чего то не понимаю или зачем в for-е джоинить student-сов?
наверное незачем
...
Рейтинг: 0 / 0
Хранимая процедура по увеличению стипендии
    #39256099
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящиймесяц.Его же тут не было.
Размышлял о стипендии, меланхолично тыкая кнопку "поиск", и тут - бац! - увидел неровность и родился комментарий.
...
Рейтинг: 0 / 0
Хранимая процедура по увеличению стипендии
    #39263344
AndreyTarasov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MMichaelM,

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

ну допустим стипендия 100 попугаев, повышаем стипендию в следующем семестре в 2 раза при хорошей успеваемости... итого есть вариант получения стипендии скажем 100*2*2*2 :-)

а если нет - то стипендия остается удвоенной? :-)
или сокращаем в 2 раза всем кто не успевает? :-) пока у патологических неуспевальщиков она не опуститься до "1"


ТС - стипендия должна храниться в отдельной таблице, с датой утверждения (т.е. у одного человека может быть несколько записей со значением стипендии в разное время) и возможностью отката до БАЗОВОГО ЗНАЧЕНИЯ
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Хранимая процедура по увеличению стипендии
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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