Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
ba3uk Member Откуда: Сообщений: 23 |
Здравствуйте , ребята , у меня тут возникла сложность при работе с курсором, хотел бы услышать от вас совета! Есть такой курсор, и он почти работает xD Ругается , что не верный синтаксис около закрытия внешнего курсора
CLOSE Writer
Говорит , что он там ожидает увидеть совсем не это DECLARE @adres varchar(40), @Name varchar(40), @Surname varchar(40), @Patronymic varchar(40), @Phone varchar(20), @ID_CL int DECLARE Writer CURSOR SCROLL READ_ONLY FOR SELECT c.addres , c.name, c.surname , c.patronymic , c.phone ,c.client_ID FROM client as c OPEN Writer FETCH NEXT FROM Writer INTO @adres ,@Name ,@Surname,@Patronymic ,@Phone , @ID_CL WHILE @@FETCH_STATUS <> -1 BEGIN PRINT + @Surname + ' ' + LEFT(@Name,1) + '. ' + LEFT(@Patronymic,1) + '. Проживает по адресу :' + @adres PRINT 'Контактный телефон -' + @Phone DECLARE @Model varchar(40), @Make varchar(40), @wheel varchar(40), @box varchar(40), @date date, @body varchar(10), @engine varchar(10), @CAR_ID int PRINT '________________Информация об автомобилях клиента________________' DECLARE WriterCar CURSOR SCROLL READ_ONLY FOR SELECT m.make , mod.model , w.wheel , b.box , a.manufactureDate , body , engineNumb , auto_id FROM auto as a , box as b , make as m , model as mod , wheel as w WHERE a.box_ID = b.box_ID AND m.make_id = a.make_id AND mod.model_id = a.model_id AND w.wheel_ID = a.wheel_id AND a.client_ID = @ID_CL FETCH NEXT FROM WriterCar INTo @Model , @Make, @wheel , @box , @date , @body , @engine , @CAR_ID WHILE @@FETCH_STATUS <> -1 PRINT ' ' + @make + ' ' + @model + 'c ' + @wheel +'рулем' PRINT ' ' + 'Год выпуска : ' + YEAR(@date) PRINT ' ' + 'Коробка передач : ' + @box PRINT ' ' + 'Номер кузова - ' + @body PRINT ' ' + 'Двигатель - ' + @body PRINT '__________________________________________________' FETCH NEXT FROM WriterCar INTo @Model , @Make, @wheel , @box , @date , @body , @engine , @CAR_ID END CLOSE WriterCar DEALLOCATE WriterCar PRINT '**************************************************' PRINT '' FETCH NEXT FROM Writer INTO @adres ,@Name ,@Surname,@Patronymic ,@Phone END CLOSE Writer DEALLOCATE Writer И ребят, не кидайтесь сразу помидорами , только учусь , заранее спасибо |
13 янв 17, 02:38 [20100837] Ответить | Цитировать Сообщить модератору |
iljy Member Откуда: Сообщений: 8711 |
ba3uk, у вас вот этот END FETCH NEXT FROM WriterCar INTo @Model , @Make, @wheel , @box , @date , @body , @engine , @CAR_ID END CLOSE WriterCar лишний, в результате последний END оказывается без BEGIN и компилятор ожидает увидеть там END CONVERSATION. Вы с чего-то не того учиться начали, курсоры - это крайнее средство с весьма специфической областью применения, я за все время курсоры использовал... ну раза 3 наверное. |
13 янв 17, 02:47 [20100839] Ответить | Цитировать Сообщить модератору |
ba3uk Member Откуда: Сообщений: 23 |
iljy,Спасибо за подсказку , действительно ,запамятывал. Студенту сказали ,что он должен уметь делать - студент учится делать, а пригодиться или нет , это уже другой разговор) Но спасибо за информацию) |
13 янв 17, 02:57 [20100844] Ответить | Цитировать Сообщить модератору |
Relic Hunter Member Откуда: AB Сообщений: 7480 |
iljy, ничего он не лишний. наоборот одного BEGIN не хватает. DECLARE WriterCar CURSOR SCROLL READ_ONLY FOR SELECT m.make , mod.model , w.wheel , b.box , a.manufactureDate , body , engineNumb , auto_id FROM auto as a , box as b , make as m , model as mod , wheel as w WHERE a.box_ID = b.box_ID AND m.make_id = a.make_id AND mod.model_id = a.model_id AND w.wheel_ID = a.wheel_id AND a.client_ID = @ID_CL FETCH NEXT FROM WriterCar INTo @Model , @Make, @wheel , @box , @date , @body , @engine , @CAR_ID WHILE @@FETCH_STATUS <> -1 BEGIN PRINT ' ' + @make + ' ' + @model + 'c ' + @wheel +'рулем' |
13 янв 17, 02:57 [20100845] Ответить | Цитировать Сообщить модератору |
ba3uk Member Откуда: Сообщений: 23 |
Relic Hunter, Да, спасибо) 7 утра дурно влияют на людей ) |
13 янв 17, 03:06 [20100846] Ответить | Цитировать Сообщить модератору |
ba3uk Member Откуда: Сообщений: 23 |
Ребят, еще возник вопрос. Надо заполнить курсор , но я не до конца догоняю как это правильно сделать, это совсем нелепый вариантDECLARE @priceWork int , @Discription varchar(100), @priceDetail int , @Detail varchar(30), @payStatus int DECLARE TotalCount CURSOR SCROLL READ_ONLY FOR SELECT ( SELECT w.price , w.description FROM service as s, work as w , estimate as e WHERE e.service_ID = s.service_ID AND s.work_ID = w.work_ID AND e.auto_id = @CAR_ID) , (SELECT d.price , d.description FROM detail as d , estimate as e where e.detail_ID = d.detail_ID AND e.auto_id = @CAR_ID) , (SELECT payStatus_ID FROM estimate where e.auto_id = @CAR_ID) |
13 янв 17, 03:35 [20100854] Ответить | Цитировать Сообщить модератору |
doos Member Откуда: Ленинградская обл. Сообщений: 165 |
ba3uk, В фетче, который в теле цикла не хватает одного поля |
13 янв 17, 05:37 [20100863] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47049 |
Зачем курсор SCROLL, чего-то не понял? Почему курсор называется Writer, а закрывается WriterCar? |
13 янв 17, 10:20 [20101487] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47049 |
|
||
13 янв 17, 10:22 [20101500] Ответить | Цитировать Сообщить модератору |
Гость проходящий мимо
Guest |
ba3uk, У Вас во 2-ом курсоре не хватает BTGIN FETCH NEXT FROM WriterCar INTo @Model , @Make, @wheel , @box , @date , @body , @engine , @CAR_ID WHILE @@FETCH_STATUS <> -1 BEGIN PRINT ' ' + @make + ' ' + @model + 'c ' + @wheel +'рулем' PRINT ' ' + 'Год выпуска : ' + YEAR(@date) PRINT ' ' + 'Коробка передач : ' + @box PRINT ' ' + 'Номер кузова - ' + @body PRINT ' ' + 'Двигатель - ' + @body PRINT '__________________________________________________' FETCH NEXT FROM WriterCar INTo @Model , @Make, @wheel , @box , @date , @body , @engine , @CAR_ID END CLOSE WriterCar DEALLOCATE WriterCar |
13 янв 17, 10:28 [20101529] Ответить | Цитировать Сообщить модератору |
zasandator Member [скрыт] [заблокирован] Откуда: Сообщений: 4887 |
ba3uk, Writercar не нужно пере фич делать open? |
13 янв 17, 20:30 [20104377] Ответить | Цитировать Сообщить модератору |
Руслан Дамирович Member Откуда: Резиновая нерезиновая Сообщений: 940 |
И даже такая постановка задачи не освобождает от обязанности думать головой - Нильс Бор вас бы осудил |
||
16 янв 17, 10:25 [20109196] Ответить | Цитировать Сообщить модератору |
ba3uk Member Откуда: Сообщений: 23 |
Это верно, но когда требуют Курсор , значит надо курсор. |
||
16 янв 17, 15:50 [20110792] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |