ані змінено ); FROM dateCur INTOinsDatedateCurdateCur
2) Не можна видаляти інформацію про видачу книги, якщо поле ДатаВозврата відсутня
CREATE TRIGGER DeleteInfoСТУДЕНТDELETE @ retDate datetimedateCur CURSORSELECT ДатаВозврата FROM deleteddateCurFROM dateCur INTOretDate (@@FETCH_STATUS=0)retDate=null ( Студент не повернув навчальний матеріал , 16,1); TRANSACTION; FROM dateCur INTOretDatedateCurdateCur
3.3 Розробка збережених процедур
Збережені процедури це група пов'язаних між собою операторів SQL або функцій, збережених в відкомпілювався вигляді. Використання збережених процедур замість окремих операторів SQL дає користувачеві наступні переваги: ??
· зберігання у виконуваному форматі (перед виконанням збереженої процедури SQL Server генерує для неї план виконання, виконує її оптимізацію та компіляцію);
· підтримка модульного програмування (дозволяють розбивати великі завдання на самостійні, більш дрібні та зручні в управлінні частини);
· можуть викликати інші збережені процедури і функції;
· можуть бути викликані з прикладних програм інших типів;
· виконуються швидше, ніж послідовність окремих операторів;
· зменшує розмір запиту.
Для мінімізації обсягів переданої інформації, забезпечення захисту даних обмеження самостійного формування запитів до БД в роботі реалізовані збережені процедури, що дозволяють передавати параметри запитів і повертати результати їх виконання під зовнішню програму (клієнту).
) Процедура ІнфоСтудента повертає кількість книг, які брав студент
Процедура організована таким чином:
CREATE PROCEDURE ІнфоСтудента
@ count int OUTPUT,
@ fio nchar (100) @ count=COUNT (fio) СТУДЕНТФІО =fio
Виклик процедури та обробка вихідних даних.
DECLAREcount intІнфоСтудентаcount output, Лакатош В.А. Кількість взятих книг + CONVERT (char (10),count)
2) Процедура ІзданіяГода знаходить видання, випущені в заданому році.
Так як дані запити повертають безліч рядків (тобто таблицю) реалізуємо процедуру у вигляді смешенного курсора.
Процедура організована таким чином:
CREATE PROC ІзданіеГода
@ year int,
@ cur CURSOR VARYING OUTPUT @ cur=CURSOR FORWARD_ONLY STATICНазваніе, Автор, ГодІзданія, ПредметІЗДАНІЕГодІзданія=@ year @ cur
Виклик процедури і вивід на друк даних з вихідного курсору
DECLAREyearPubl CURSOR @ nazv nchar (100)auth nchar (100)year int @ subj nchar (40) ІзданіеГода @ year= 2 007 raquo ;, @ cur=@ yearPubl OUTPUTNEXT FROM @ yearPubl INTOnazv,auth,year, subj @ nazv,auth,year, subj (@@FETCH_STATUS=0) NEXT FROMyearPubl INTOnazv,auth,year, subj @ nazv,auth, year, subj @ yearPubl @ yearPubl
Для додавання і видалення даних в таблиці створимо для кожної таблиця за процедурою на додавання та видалення.
Для таблиці СТУДЕНТ
) Додавання
CREATE PROCEDURE addStud
@ fio nchar (100),
@ nazv nchar (100),
@ getDate date,
@ retDate date=null @ a int @ b char (10),c char (100) INTO СТУДЕНТ (ПІБ, Назва, ДатаВидачі, ДатаВозврата) (@ fio,nazv,getDate, retDate)a =@@ERROR @ b=CONVERT (char (10), @ a) @ c= Код помилки + @ b + - дублювання ключа (@ a!=0)c
Дзвінок
EXEC addStud Лакатош В.А. , MS SQL Server , 21.10.2012
2) Видалення
CREATE PROCEDURE delStud
@ fio nchar (100),
@ nazv nchar (100) СТУДЕНТ WHERE ПІБ=@ fio and Назва=@ nazv
Для таблиці ВИДАННЯ
) Додавання
CREATE PROCEDURE addIzdan
@ name nchar (100),
@ type nchar (40),
@ topic nchar (100),
@ author nchar (100),
@ year int,
@ cath nchar (40),
@ subj nchar (40)a int @ b char (10),c char (100) INTO ВИДАННЯ (Назва, ТіпЛітератури, Тема, Автор, ГодІзданія, Кафедра, Предмет) (@ name ,type,topic,author,year,cath,subj)a =@@ERROR @ b=CONVERT (char (10), @ a) @ c= Код помилки + @ b + - дублювання ключа (@ a!=0)c
2) Видалення