Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 курсоры в SQL  [new]
smbekzat
Member

Откуда:
Сообщений: 16
Помогите пожалуйста с помощью курсора "зачислить" и "отчислить" студента. То есть имеется заполненная БД со студентами, их оценками, учителями и тд. Надо с помощью курсора удалить студента любого, и снова восстановить.

Сообщение было отредактировано: 31 мар 15, 17:34
31 мар 15, 16:25    [17455280]     Ответить | Цитировать Сообщить модератору
 Re: КУРСОРЫ В SQL  [new]
londinium
Member

Откуда: Киев
Сообщений: 1176
А где таблицы и желаемый результат?
31 мар 15, 16:26    [17455283]     Ответить | Цитировать Сообщить модератору
 Re: КУРСОРЫ В SQL  [new]
smbekzat
Member

Откуда:
Сообщений: 16
londinium,

К сообщению приложен файл. Размер - 37Kb
31 мар 15, 16:32    [17455304]     Ответить | Цитировать Сообщить модератору
 Re: КУРСОРЫ В SQL  [new]
Glory
Member

Откуда:
Сообщений: 104760
smbekzat
. Надо с помощью курсора удалить студента любого, и снова восстановить.

Курсор не может изменять данные.
Вы наверное опять неправильно прочитали задание и перепутали функцию с триггером
31 мар 15, 16:35    [17455317]     Ответить | Цитировать Сообщить модератору
 Re: КУРСОРЫ В SQL  [new]
o-o
Guest
с помощью курсора можно что-то делать массово построчно, но курсор для *точечного* удаления?
это тест из клуба великих извращенцев или проверка на дебилизм

Cursor (databases)
In SQL procedures, a cursor makes it possible to define a result set (a set of data rows) and perform complex logic on a row by row basis.
какое же будет row by row,
если в резалтсете 1 строка?
31 мар 15, 16:39    [17455339]     Ответить | Цитировать Сообщить модератору
 Re: КУРСОРЫ В SQL  [new]
smbekzat
Member

Откуда:
Сообщений: 16
Glory,

кпц у нас преподы. Вот ему только что говорю мол курсоры не изменяют данные, так он такой : АААА. За голову берется и говорит перепутал. Теперь говорит объединить две группы в одну. Из двух групп студентов сделать одну
31 мар 15, 16:40    [17455345]     Ответить | Цитировать Сообщить модератору
 Re: КУРСОРЫ В SQL  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
o-o
с помощью курсора можно что-то делать массово построчно, но курсор для *точечного* удаления?


Я думаю речь идёт не об удалении, а о том, чтобы пометить как отчисленного. Сменить флаг, не удаляя запись. Но честно говоря, препод готовить выпускников-извращенцев.
31 мар 15, 16:41    [17455352]     Ответить | Цитировать Сообщить модератору
 Re: КУРСОРЫ В SQL  [new]
Glory
Member

Откуда:
Сообщений: 104760
smbekzat
. Из двух групп студентов сделать одну

- Петька, ты чего тут копаешь ?
- Да вот преподаватель по математики задал квадратные корни найти. Вот и копаю.
- Мда, не повезло.
- Это что. Вот Василию Ивановичу вообще задали из многочлена одночлен сделать.
31 мар 15, 16:44    [17455368]     Ответить | Цитировать Сообщить модератору
 Re: КУРСОРЫ В SQL  [new]
smbekzat
Member

Откуда:
Сообщений: 16
Видимо кроме издевок нечем помочь не можете?
31 мар 15, 16:46    [17455376]     Ответить | Цитировать Сообщить модератору
 Re: КУРСОРЫ В SQL  [new]
Glory
Member

Откуда:
Сообщений: 104760
smbekzat
Видимо кроме издевок нечем помочь не можете?

Глупые задачи не имеют решения.
Или любое решение годится для глупой задачи.
31 мар 15, 16:48    [17455383]     Ответить | Цитировать Сообщить модератору
 Re: КУРСОРЫ В SQL  [new]
smbekzat
Member

Откуда:
Сообщений: 16
Glory,
так это вообще возможно? Объединение двух групп студентов в БД курсором?
31 мар 15, 16:50    [17455396]     Ответить | Цитировать Сообщить модератору
 Re: КУРСОРЫ В SQL  [new]
Glory
Member

Откуда:
Сообщений: 104760
smbekzat
Glory,
так это вообще возможно? Объединение двух групп студентов в БД курсором?

Еще раз
Курсор == select
Вы спрашиваете, можно ли выбрать что-то из ваших таблиц ? Или вы спрашиваете, можно ли изменить данные в ваших таблицах ?
31 мар 15, 16:52    [17455404]     Ответить | Цитировать Сообщить модератору
 Re: КУРСОРЫ В SQL  [new]
londinium
Member

Откуда: Киев
Сообщений: 1176
автор
ак это вообще возможно? Объединение двух групп студентов в БД курсором?

все возможно. Но давайте для начала Вы расскажете, что такое курсор, а то у меня есть подозрение, что Ваша/Вашего преподавателя трактовка отличается от общепринятой
31 мар 15, 16:53    [17455405]     Ответить | Цитировать Сообщить модератору
 Re: КУРСОРЫ В SQL  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
smbekzat
Glory,
так это вообще возможно? Объединение двух групп студентов в БД курсором?



Курсор — SQL (Oracle, Microsoft SQL Server) — получаемый при выполнении запроса результирующий набор и связанный с ним указатель текущей записи.

https://ru.wikipedia.org/wiki/Курсор_(базы_данных)

Можно объединить две группы студентов и пройти по этому "результирующему набору" курсором.

Может быть ваша задача звучит так: "Объединить две группы студентов, используя при этом курсор?"
31 мар 15, 17:09    [17455506]     Ответить | Цитировать Сообщить модератору
 Re: КУРСОРЫ В SQL  [new]
o-o
Guest
Glory
smbekzat
. Надо с помощью курсора удалить студента любого, и снова восстановить.

Курсор не может изменять данные.

мы же в клубе извращенцев.
еще вновь обвиняют в нежелании помочь.
я отвечу развернуто и аргументированно.
вот удаление студента через ж курсор:
create table dbo.st (stud_id int, name varchar(100));
insert into dbo.st values(1, '1'), (2, '2');

declare
	@stud_id int,
	@name varchar(100),
	@stud_id_for_del int = 2
	
declare c cursor fast_forward for
	select stud_id, name
	from dbo.st
	order by stud_id;
open c;

fetch next from c into @stud_id, @name;
while @@fetch_status = 0
begin
   if @stud_id = @stud_id_for_del
   delete dbo.st
   where stud_id = @stud_id
   fetch next from c into @stud_id, @name;
end;
close c;
deallocate c;


вот без:
delete dbo.st
where stud_id = @stud_id_for_del


почувтвуйте разницу и продолжайте извлекать квадратный корень
31 мар 15, 17:20    [17455567]     Ответить | Цитировать Сообщить модератору
 Re: КУРСОРЫ В SQL  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
Сразу вспомнился анекдот, про солдата, подметающего плац ломом.
31 мар 15, 17:30    [17455620]     Ответить | Цитировать Сообщить модератору
 Re: КУРСОРЫ В SQL  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
Владислав Колосов
Сразу вспомнился анекдот, про солдата, подметающего плац ломом.


Или копающего от командира и до следующего дуба
31 мар 15, 17:33    [17455636]     Ответить | Цитировать Сообщить модератору
 Re: курсоры в SQL  [new]
smbekzat
Member

Откуда:
Сообщений: 16
a_voronin
"Объединить две группы студентов, используя при этом курсор?"

Да, именно такое задание было дано
31 мар 15, 17:58    [17455759]     Ответить | Цитировать Сообщить модератору
 Re: курсоры в SQL  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
smbekzat
a_voronin
"Объединить две группы студентов, используя при этом курсор?"

Да, именно такое задание было дано


Ну нужно объединить две группы студентов используя UNION в запросе, а потом, чтобы удовлетворить препода -- пройтись по этому запросу курсором
31 мар 15, 18:05    [17455784]     Ответить | Цитировать Сообщить модератору
 Re: курсоры в SQL  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
smbekzat
a_voronin
"Объединить две группы студентов, используя при этом курсор?"

Да, именно такое задание было дано


Вы хоть поняли, что препод заставляет вас копать отсюда и до обеда?
31 мар 15, 18:05    [17455788]     Ответить | Цитировать Сообщить модератору
 Re: курсоры в SQL  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4247
a_voronin
smbekzat
пропущено...

Да, именно такое задание было дано


Ну нужно объединить две группы студентов используя UNION в запросе, а потом, чтобы удовлетворить препода -- пройтись по этому запросу курсором

поочередно заполнив поле UNITED_BY_CURSOR значением TRUE
31 мар 15, 18:13    [17455818]     Ответить | Цитировать Сообщить модератору
 Re: курсоры в SQL  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1424
Glory,
так это вообще возможно? Объединение двух групп студентов в БД курсором?


smbekzat,
у вас довольно странная модель базы данных, но это опустим

допустим вы знаете какие именно группы надо объединить или любые? приведу пример любых двух

DECLARE
       @GroupID1 INT,
       @GroupID2 INT,
       @StudentID INT,
       @Cur CURSOR

--необходимо раскомментировать если известно какие именно группы надо объединять
--SET @GroupID1 = 1
--SET @GroupID2 = 2

IF ISNULL(@GroupID1, 0) = 0
    SELECT @GroupID1 = Grup_ID FROM [StudySchema].[Grup]

IF ISNULL(@GroupID2, 0) = 0
    SELECT @GroupID2 = Grup_ID FROM [StudySchema].[Grup] WHERE Grup_ID <> @GroupID1

SET @Cur = CURSOR FOR
                     SELECT Stud_ID FROM [StudySchema].[Students] WHERE Grup_ID = @GroupID1

OPEN @Cur
FETCH NEXT FROM @Cur INTO @StudentID
WHILE @@FETCH_STATUS = 0 BEGIN
     UPDATE [StudySchema].[Students]
        SET Grup_ID = @GroupID2
      WHERE Stud_ID = @StudentID
FETCH NEXT FROM @Cur INTO @StudentID               
END
CLOSE @Cur
DEALLOCATE @Cur


Вариант без курсора:
         UPDATE [StudySchema].[Students]
            SET Grup_ID = 1
          WHERE Grup_ID = 2


в учебных целях чего только не напридумывают
31 мар 15, 21:15    [17456384]     Ответить | Цитировать Сообщить модератору
 Re: курсоры в SQL  [new]
o-o
Guest
felix_ff
в учебных целях чего только не напридумывают

так чему обучают-то, как НЕ НАДО делать?
почему-то мне кажется, потом даже не прокомментируют в духе "это был мегаизврат,
больше так никогда не делайте, + теперь я вам покажу, как это НАДО БЫЛО сделать"
так трудно БОЛ открыть и оттуда пример задать, раз с фантазией напряг?
да ни один студент не догадается ответ прямо там же поискать,
это ж последнее дело -- открыть документацию. есть же супер-интернет и sql.ru

да если бы кто и догадался, это же был бы первый шаг к вырабатыванию правильного инстинкта:
не знаешь, с чего начать -- ознакомься с документацией
...мир давно вывернулся наизнанку, короче...
31 мар 15, 21:36    [17456443]     Ответить | Цитировать Сообщить модератору
 Re: курсоры в SQL  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
o-o
да если бы кто и догадался, это же был бы первый шаг к вырабатыванию правильного инстинкта:
не знаешь, с чего начать -- ознакомься с документацией
...мир давно вывернулся наизнанку, короче...


Ты думаешь преподы знают слово MSDN? Я как-то попытался что-то сказать преподу по поводу нюансов турбопаскаля и как там правильно это делать, на что он громогласно заявил, что учит не конкретному языку, а некоему общему подходу, который ни в коем случае не должен учитывать особенностей конкретных языков. Дело было более 20 лет назад. А на дипломе мне вообще чуть трояк не влепили, за то, что я представил программу, которая продавалась за бабки, но была "не слишком технологичной".
31 мар 15, 22:13    [17456534]     Ответить | Цитировать Сообщить модератору
 Re: курсоры в SQL  [new]
o-o
Guest
+ to a_voronin

может, на ловца и зверь бежит?
у нас все преподы по основным предметам были вменяемые,
а в большинстве своем -- весьма достойные личности.

по поводу трояка: а что, на дипломе никакой комиссии не было?
это что за такой интересный ВУЗ, Московский?
мне вот неизвестно что светило по инглишу по причине взаимной симпатии с англичанкой.
уж не знаю, откуда такую и откопали.
на мою просьбу о переводе в другую группу не отреагировали,
пришлось стараться, чтобы об этом попросила она сама, но непробиваемая была тетя, кошмар какой-то.
вот как-то думаю, не заказать ли любимой преподавательнице песню на Радио СИ, дозваниваюсь,
объявляю ее имя и фамилию, посвящаю ей God Save The Queen (Sex Pistols, naturally)
вроде же слова отлично разбираются,
There's no future, no future,
No future for you
вообще повторяют четко и не кривляясь, так не проканалась ни капельки.
но зато на экзамене присутствовала завкафедрой, да, после моих прочих изысканий.
так что никаких тояков, как бы тетенька ни старалась
1 апр 15, 00:41    [17456915]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить