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

Откуда:
Сообщений: 3
Всем здравствуйте.
Помогите пожалуйста, нужно организовать курсор в курсоре, чтобы сначала выводилось одно значение с первого курсора, после второго курсора... далее снова одно значение с первого курсора и после со второго....

create proc stat_gpa_1_1
as
declare
@gr_id int,
@gr_id1 int,
@grup_name varchar(10),
@student_fam varchar(25),
@gpa varchar(100),
@qwe varchar(200)
print 'Статистика группы'

declare cursor_gpa1 CURSOR SCROLL
FOR
(SELECT distinct g.grup_name, g.Grup_ID
from StudySchema.Students s, StudySchema.Progress p, StudySchema.Grup g
where s.Stud_ID=p.Stud_ID and s.Grup_ID=g.Grup_ID )
for update

declare cur2 cursor scroll
for
(SELECT distinct s.Stud_FAM, g.Grup_ID
from StudySchema.Students s, StudySchema.Progress p, StudySchema.Grup g
where s.Stud_ID=p.Stud_ID and s.Grup_ID=g.Grup_ID )
for update

open cursor_gpa1
fetch next FROM cursor_gpa1 into @grup_name, @gr_id
BEGIN
select @gpa='Группа '+@grup_name
print @gpa
fetch next FROM cursor_gpa1 into @grup_name, @gr_id
END
open cur2
fetch next FROM cur2 into @student_fam, @gr_id1
while @@FETCH_STATUS=0 --and @gr_id=@gr_id1
BEGIN
select @qwe=' студент '+@student_fam -----+' имеет GPA '+@gpa
print @qwe
FETCH NEXT FROM cur2 into @student_fam, @gr_id1
END
close cur2

fetch next FROM cursor_gpa1 into @grup_name, @gr_id
close cursor_gpa1

Тут берется одно значение с первого и выводятся данные со второго. и все. и на этом стоп.
15 мар 16, 21:02    [18935486]     Ответить | Цитировать Сообщить модератору
 Re: Курсор в курсоре  [new]
правильный проходящий.
Guest
Danik_Joker
Помогите пожалуйста, нужно организовать курсор в курсоре,
Точно нужно? И для решения какой задачи ЭТО нужно? Чем не подошли другие варианты решения?
15 мар 16, 21:08    [18935517]     Ответить | Цитировать Сообщить модератору
 Re: Курсор в курсоре  [new]
Danik_Joker
Member

Откуда:
Сообщений: 3
Задача звучит так:
Создать процедуру, которая будет выводить студентов определенной группы. Используя курсор в курсоре
Результат будет типа такой:
СИБ 12
Иванова Анна
...
БАУ
Петров Николай
...
Итд...
15 мар 16, 21:11    [18935527]     Ответить | Цитировать Сообщить модератору
 Re: Курсор в курсоре  [new]
Glory
Member

Откуда:
Сообщений: 104751
Вы не поверите, но в хелпе в статье про declare cursor приведен пример, который так и называется B.Using nested cursors to produce report output
15 мар 16, 21:14    [18935545]     Ответить | Цитировать Сообщить модератору
 Re: Курсор в курсоре  [new]
Danik_Joker
Member

Откуда:
Сообщений: 3
Большое вам спасибо)
Теперь осталось указать условие...)
15 мар 16, 21:33    [18935613]     Ответить | Цитировать Сообщить модератору
 Re: Курсор в курсоре  [new]
o-o
Guest
правильный проходящий.
Точно нужно? И для решения какой задачи ЭТО нужно?

+ это нынешнее обучение. все еще впереди

Картинка с другого сайта.
15 мар 16, 22:03    [18935726]     Ответить | Цитировать Сообщить модератору
 Re: Курсор в курсоре  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
o-o,

Предмет называется "Основы говнокодинга и процедурномыслие в SQL"
15 мар 16, 22:23    [18935790]     Ответить | Цитировать Сообщить модератору
 Re: Курсор в курсоре  [new]
AntiCursor
Guest
Danik_Joker,

Зачем тут вообще курсор?
16 мар 16, 10:24    [18936683]     Ответить | Цитировать Сообщить модератору
 Re: Курсор в курсоре  [new]
Glory
Member

Откуда:
Сообщений: 104751
AntiCursor
Зачем тут вообще курсор?

Контрольная такая. Проверка знаний о курсорах.
16 мар 16, 10:25    [18936688]     Ответить | Цитировать Сообщить модератору
 Re: Курсор в курсоре  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
AntiCursor
Danik_Joker,

Зачем тут вообще курсор?
Зачем вообще такое образование?
И откуда берутся такие "преподаватели"?
16 мар 16, 10:25    [18936695]     Ответить | Цитировать Сообщить модератору
 Re: Курсор в курсоре  [new]
AntiCursor
Guest
Glory
AntiCursor
Зачем тут вообще курсор?

Контрольная такая. Проверка знаний о курсорах.


Так надо было и задачу ставить, чтобы без курсора - ну никак не обойтись
Препод - м*дак
16 мар 16, 10:32    [18936716]     Ответить | Цитировать Сообщить модератору
 Re: Курсор в курсоре  [new]
_djХомяГ
Guest
Ну если проверка на знание курсоров то ТС забыл сделать их DEALLOCATE
16 мар 16, 10:33    [18936718]     Ответить | Цитировать Сообщить модератору
 Re: Курсор в курсоре  [new]
Glory
Member

Откуда:
Сообщений: 104751
AntiCursor
Так надо было и задачу ставить, чтобы без курсора - ну никак не обойтись
Препод - м*дак

Вы когда писали контрольные, скажем, на деление угла попалам с помощью только циркуля, наверно тоже так про преподавателя думали ?
Контрольные задают не для решения реальных задач оптимальным способом.
А для проверки того, как вы владете конкретным интсрументом.

Сообщение было отредактировано: 16 мар 16, 10:39
16 мар 16, 10:38    [18936743]     Ответить | Цитировать Сообщить модератору
 Re: Курсор в курсоре  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
iap
AntiCursor
Danik_Joker,

Зачем тут вообще курсор?
Зачем вообще такое образование?
И откуда берутся такие "преподаватели"?


не разоряйтесь так, смотрите философски, чем больше таких говнокодеров выпустят, тем больше будут ценится наши с вами знания:)
16 мар 16, 10:39    [18936748]     Ответить | Цитировать Сообщить модератору
 Re: Курсор в курсоре  [new]
AntiCursor
Guest
Glory,

Самое интересное, что я не помню как делить угол пополам циркулем
Школьная геометрия мне мало понадобилась в жизни
А вот учить пользоваться курсором, где им пользоваться нежелательно - это моветон
16 мар 16, 10:46    [18936785]     Ответить | Цитировать Сообщить модератору
 Re: Курсор в курсоре  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Glory
AntiCursor
Так надо было и задачу ставить, чтобы без курсора - ну никак не обойтись
Препод - м*дак

Вы когда писали контрольные, скажем, на деление угла попалам с помощью только циркуля, наверно тоже так про преподавателя думали ?
Контрольные задают не для решения реальных задач оптимальным способом.
А для проверки того, как вы владете конкретным интсрументом.
Курсорам надо учить, если всё остальное изучено досконально.
Ибо это последнее, что потребуется в реальной жизни.

Кстати, сразу мог бы предложить практическую задачу,
для которой курсор выигрывает по сравнению с другими средствами SQL.
Например, сопоставление товаров и платежей по LIFO или FIFO.
16 мар 16, 10:48    [18936789]     Ответить | Цитировать Сообщить модератору
 Re: Курсор в курсоре  [new]
Glory
Member

Откуда:
Сообщений: 104751
iap
Курсорам надо учить, если всё остальное изучено досконально.
Ибо это последнее, что потребуется в реальной жизни.

Геометрию начинают учить тоже не с 1го класса.
Вот вы циркулем когда последний раз пользовались ? А площадь пирамиды, например, когда последний раз вычисляли ? Нужно ли было вас всему этому учить для реальной жизни ?
16 мар 16, 10:52    [18936824]     Ответить | Цитировать Сообщить модератору
 Re: Курсор в курсоре  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Glory
iap
Курсорам надо учить, если всё остальное изучено досконально.
Ибо это последнее, что потребуется в реальной жизни.

Геометрию начинают учить тоже не с 1го класса.
Вот вы циркулем когда последний раз пользовались ? А площадь пирамиды, например, когда последний раз вычисляли ? Нужно ли было вас всему этому учить для реальной жизни ?
Расчёт площади пирамиды - моё любимое занятие!
Учить меня этому было нужно. Бесспорно.
Программисту, может, циркуль не так важен. Хотя, зависит от того, в какой области программируешь.
На прошлой работе применял его каждый день (давно уже).
16 мар 16, 10:59    [18936883]     Ответить | Цитировать Сообщить модератору
 Re: Курсор в курсоре  [new]
Glory
Member

Откуда:
Сообщений: 104751
iap
Расчёт площади пирамиды - моё любимое занятие!
Учить меня этому было нужно. Бесспорно.
Программисту, может, циркуль не так важен. Хотя, зависит от того, в какой области программируешь.
На прошлой работе применял его каждый день (давно уже).

Простейший циркуль между прочим есть всего лишь кусок веревки.
Поэтому любой угол вы можете поделить точно попалам _подручными средствами_ ! Если конечно вы помните, что вас этоум учили.
16 мар 16, 11:10    [18936943]     Ответить | Цитировать Сообщить модератору
 Re: Курсор в курсоре  [new]
Владислав Колосов
Member

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

простейшая линейка - также кусок веревки, надо заметить.
16 мар 16, 11:12    [18936957]     Ответить | Цитировать Сообщить модератору
 Re: Курсор в курсоре  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Кстати, раз такое дело, посоветую Danik_Jokerу самостоятельно
проштудировать статьи про курсоры из документации
https://technet.microsoft.com/ru-ru/library/ms180169(v=sql.120).aspx
https://technet.microsoft.com/ru-ru/library/ms191179(v=sql.120).aspx,

и объяснить самому себе, зачем выбран самый ресурсоёмкий и медленный курсор (SCROLL),
если применяется только FETCH NEXT?
В данном случае достаточно FAST_FORWARD (самый быстрый вариант курсора).
Зачем вкурсор объявлен FOR UPDATE, если нет ни одного UPDATEа?
В подавляющем числе случаев курсор должен быть упорядочен совершенно определённым образом
(хотя в данном "учебном" примере это необязательно). Где ORDER BY, я спрашиваю?
Почему FETCH по первому курсору стоит вне цикла WHILE?
Курсоры были бы вложенные, если бы FETCHи для них располагались бы во вложенных циклах WHILE.

Если уж человека обучают курсорам, то могли бы по крайней мере объяснить ему нюансы?
Но обучают ли?
И почему учащийся боится задать вопросы своему преподавателю и задаёт их здесь?
Ведь учиться - это значит постоянно мучить учителя вопросами по существу, не так ли?
16 мар 16, 11:21    [18937010]     Ответить | Цитировать Сообщить модератору
 Re: Курсор в курсоре  [new]
Glory
Member

Откуда:
Сообщений: 104751
Владислав Колосов
простейшая линейка - также кусок веревки, надо заметить.

Если вы помните, чему вас учили, что можно делать этой линейкой ?
16 мар 16, 11:24    [18937028]     Ответить | Цитировать Сообщить модератору
 Re: Курсор в курсоре  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Glory
iap
Расчёт площади пирамиды - моё любимое занятие!
Учить меня этому было нужно. Бесспорно.
Программисту, может, циркуль не так важен. Хотя, зависит от того, в какой области программируешь.
На прошлой работе применял его каждый день (давно уже).

Простейший циркуль между прочим есть всего лишь кусок веревки.
Поэтому любой угол вы можете поделить точно попалам _подручными средствами_ ! Если конечно вы помните, что вас этоум учили.
А вас не учили рисовать эллипс с помощью куска нитки, закреплённой в двух точках на бумаге?
Всё это очень интересно. Но нас хотя бы систематически этому учили.
А я вот сомневаюсь в современном обучении. После него в голове поселяется хаос.
Ибо сами преподаватели слабо знают свой предмет.
16 мар 16, 11:28    [18937055]     Ответить | Цитировать Сообщить модератору
 Re: Курсор в курсоре  [new]
Glory
Member

Откуда:
Сообщений: 104751
iap
Ибо сами преподаватели слабо знают свой предмет.

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

Конечным заданием было быть сравнение обеих методов.

Это к тому, что по одному заданию не надо делать трендов ни о чем. Об уровне преподавателя и методах обучения тем более.
16 мар 16, 11:44    [18937154]     Ответить | Цитировать Сообщить модератору
 Re: Курсор в курсоре  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Glory
по одному заданию не надо делать трендов ни о чем. Об уровне преподавателя и методах обучения тем более.
А я думаю, надо.
Иначе непонятно, откуда берётся околесица, написанная в первом посте?

Кстати, я только что заметил, что там таблицы перечисляются через запятую во FROMе.
Не ошибка, конечно, но надо ли к такому привыкать?
А робкая попытка связать один курсор с другим закомментарена.
Немудрено: такого типа связь между ними возможна только при одинаковой сортировке по g.Grup_ID обоих курсоров.
Так что ORDER BY-таки нужен!
16 мар 16, 12:01    [18937248]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить