Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Хранимая процедура по увеличению стипендии / 13 сообщений из 13, страница 1 из 1
18.05.2016, 03:11
    #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
18.05.2016, 05:30
    #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
18.05.2016, 09:30
    #39237905
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимая процедура по увеличению стипендии
MMichaelM,

никогда не делай FOR SELECT + UPDATE + SUSPEND. Это вообще хреновый вариант. В итоге ты обновишь столько записей сколько отфетчит клиент, а не все. Ну и сами запросы какие-то левые.
...
Рейтинг: 0 / 0
18.05.2016, 09:44
    #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
18.05.2016, 09:47
    #39237928
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимая процедура по увеличению стипендии
MMichaelM,

во первых мы тут не видим твою схему БД. Прислал хотя бы DDL таблиц. Что-то мне кажется что тут сама схема не верная.
...
Рейтинг: 0 / 0
18.05.2016, 10:06
    #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
18.05.2016, 10:21
    #39237974
MMichaelM
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимая процедура по увеличению стипендии
Симонов ДенисMMichaelM,

никогда не делай FOR SELECT + UPDATE + SUSPEND. Это вообще хреновый вариант. В итоге ты обновишь столько записей сколько отфетчит клиент, а не все. Ну и сами запросы какие-то левые.
в поле ocinka у меня есть только один селовек с 5 ему и должны поднять
...
Рейтинг: 0 / 0
18.05.2016, 10:42
    #39237998
m7m
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
14.06.2016, 16:16
    #39255853
joker 79
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимая процедура по увеличению стипендии
m7m,

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

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

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

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

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


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


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