Базы данных - модели, разработка, реализация


Хранимые процедуры - часть 6


  • */
  • AS
  • /*опишем переменную, в которой будет храниться количество оставшихся
  • не оприходованных экземпляров книги, т.е. таких, которым еще не заданы
  • инвентарные номера */
  • DECLARE @ТЕК int
  • / *вводим данные о книге в таблицу BOOKS */
  • INSERT INTO BOOKS VALUES(@ISBN.@TITL.@AUTOR.@COAUTOR.@YEARIZD.@PAGES)
  • /* назначение значения текущего счетчика оставшихся к вводу экземпляров*/
  • SELECT @TEK = @NUM_EXEMPL
  • /* организуем цикл для ввода новых экземпляров данной книги */
  • WHILE @TEK>0 /* пока количество оставшихся экземпляров больше нуля */
  • BEGIN
  • /* так как для инвентарного номера экземпляра книги мы задали свойство
  • IDENTITY, то нам не надо вводить инвентарный номер. СУБД сама автоматически
  • вычислит его, добавив единицу к предыдущему, введет при выполнении оператора
  • ввода INSERT.
  • Поле, определяющее присутствие экземпляра в библиотеке (EXIST) - логическое
  • поле, мы введем туда значение TRUE,которое соответствует присутствию
  • экземпляра книги в библиотеке.
  • Даты взятия и возврата мы можем не заполнять, тогда по умолчанию СУБД
  • подставит туда значение, соответствующее 1 января 1900 года, если мы не хотим
  • хранить такие бессмысленные данные, то можем ввести для обоих полей дата
  • время, значения текущей даты. */
  • 264

    • Insert Into EXEMPLAR (ISBN.DATA_IN,DATA_OUT,EXIST)
    • VALUES (@ISBN.GetDate().GetDate()).TRUE)
    • /* изменение текущего значения счетчика количества оставшихся экземпляров */
    • SELECT @ТЕК = @ТЕК - 1
    • End /* конец цикла ввода данных о экземпляре книги*/
    • GO

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

    Текст процедуры в этом случае будет иметь вид:




    - Начало -  - Назад -  - Вперед -