Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Краткие ответы.docx
Скачиваний:
3
Добавлен:
01.03.2025
Размер:
111.53 Кб
Скачать

Тема 5: Расширения transact-sql.

  1. Локальные и глобальные переменные. Операторы определения и использования переменных. Табличные переменные. Пример.

T-SQL поддерживается всеми системными БД, предлагающих ряд дополнительных ф-й:

  1. Определение и использование переменных. DECLARE <имя переменной><тип>. DECLARE @x int

  2. Задание значений переменных.

  1. SET <имя переменной>=<значение>. SET @x=10

  2. SELECT <имя переменной>= <запрос> | <значение>. SELECT @x=10 SELECT @x=count(select pname from p). Замечание: если оператор SELECT возвращает несколько значений переменной, должно присваиваться первое возвращаемое им значение.

  1. Определение табличных переменных DECLARE @t table <опис.столбцов >. DECLARE @t table (pname char(10), pnum int, address char(50))

При создании таблиц на табличные переменные можно накладывать такие же ограничения, как и на таблицу.

Пример: создать табличную переменную и записать в нее данные о поставляемой детали с номером 1

  • DECLARE @pd1 table (pnum int, dnum int, vol int, primary key(pnum,dnum))

  • INSERT INTO @pd1 SELECT *FROM PD WHERE dnum=1

  • SELECT * FROM @pd1

  • DELETE FROM @pd1 WHERE pnum=2

Существуют также заранее определяемые системные переменные (глобальные):

  • @@ ERROR-возвращает последний код ошибки

  • @@ ROWCOUNT – возвращает число строк после выполнения последней операции

  • @@ FETCHSTATUS

____________________________________________________________________________

  1. Условные и циклические конструкции. Пример.

IF… ELSE…

Пример: вывести цену детали болт, если она неизвестна, вывести соответствующее значение.

  • IF @dprice IS NOT NULL PRINT CONVERT (char(4),@dprice)+’руб’ ELSE PRINT ‘неизвестная цена

Вместе с оператором IF используется конструкция IF EXISTS … ELSE. Предикат EXISTS возвращает значение истина, если набор к которому он применяется не пустой.

Пример: определить, есть ли сведения о поставщике ‘Иванов’, вывести соответствующее сообщение.

  • IF EXISTS (SELECT * FROM P WHERE pname= ‘Иванов’) PRINT ‘информация присутствует’ ELSE ‘нет

Операторные скобки BEGIN …END

Циклические конструкции. Циклы определяются единственным образом: WHILE, для которого существует оператор BREAK для выхода и CONTINUE

WHILE <условие продолжения цикла> BEGIN ..<тело цикла> END

Пример: увеличивать цену в 1.5 раза пока средняя цена < 30 рублей.

  • WHILE (SELECT AVG(dprice) FROM D)<30 BEGIN UPDATE D SET dprice=1.5*dprice END

  1. Использование выражения CASE. Пример.

Не является самостоятельным оператором, поэтому возвращаемое значение помещается в соответствующую переменную оператором SET, SELECT

CASE <селектор>

WHEN <значение 1> THEN <выход.знач.1>

WHEN <значение 2> THEN <выход.знач.2>

WHEN <значение N> THEN <выход.знач.N>

ELSE <знач.>

Пример: вывести цену заданной детали в валюте задаваемой пользователем.

  • DECLARE @dnum int

  • DECLARE @cur char(3) –валюта

  • SET @dnum=1 SET @cur=’EUR’ DECLARE @dprice money SELECT @dprice=dprice FROM D WHERE dnum=@dnum

  • SET @dprice= CASE @cur

  • WHEN ‘руб’ THEN @dprice WHEN ‘$’ THEN @dprice/30 WHEN ‘EUR’ THEN @dprice/40 PRINT @dprice

_____________________________________________________________________________