Главная / Базы данных /
Программирование в Microsoft SQL Server 2000 / Тест 27
Программирование в Microsoft SQL Server 2000 - тест 27
Упражнение 1:
Номер 1
SQL Server 2000 поддерживает различные типы курсоров:
Ответ:
 (1) курсоры API (курсоры программного интерфейса приложений) 
 (2) курсоры OLE 
 (3) курсоры T-SQL 
 (4) ODBC-курсоры 
 (5) на основе утилиты Query Analyzer 
Номер 2
Курсоры T-SQL создаются с помощью команды:
Ответ:
 (1) CREATE CURSOR 
 (2) DECLARE CURSOR 
 (3) DECLARE VIRTUAL VIEW 
Номер 3
При создании курсора T-SQL на команду SELECT накладываются ограничения:
Ответ:
 (1) команда SELECT не может возвращать несколько результирующих множеств 
 (2) команда SELECT не может содержать фраз ORDER BY и HAVING 
 (3) команда SELECT не может содержать фразу COMPUTE или COMPUTE BY, используемые для агрегирования результатов 
 (4) команда SELECT не может содержать фразу INTO для создания новой таблицы 
 (5) невозможность использования фразы WHERE 
Упражнение 2:
Номер 1
Под чувствительностью курсора следует понимать:
Ответ:
 (1) способность осуществления прокрутки как вперед, так и назад, либо только вперед 
 (2) быстродействие курсора 
 (3) cпособность курсора отражать изменения в данных 
Номер 2
Под прокруткой курсора следует понимать:
Ответ:
 (1) cпособность курсора отражать изменения в данных 
 (2) способность осуществления прокрутки как вперед, так и назад, либо только вперед 
 (3) возможность обновления строк курсором 
Номер 3
Под обновлением курсора следует понимать:
Ответ:
 (1) возможность обновления строк курсором 
 (2) способность осуществления прокрутки как вперед, так и назад, либо только вперед 
 (3) cпособность курсора отражать изменения в данных 
Упражнение 3:
Номер 1
Статические курсоры характеризуются тем, что:
Ответ:
 (1) копируют в базу tempdb только те столбцы, которые уникально идентифицируют каждую строку 
 (2) ведут себя так, как если бы при каждом обращении к строке повторно выполнялся оператор SELECT 
 (3) делают как бы моментальный снимок данных, задаваемых оператором SELECT, и хранят их в базе данных tempdb 
Номер 2
Ключевые курсоры характеризуются тем, что:
Ответ:
 (1) делают как бы моментальный снимок данных, задаваемых оператором SELECT, и хранят их в базе данных tempdb 
 (2) копируют в базу tempdb только те столбцы, которые уникально идентифицируют каждую строку 
 (3) допускают только чтение. Эти виды курсора объявляются с использованием ключевого слова FAST_FORWARD, и чаще всего их называют "пожарными" курсорами 
Номер 3
Динамические курсоры характеризуются тем, что:
Ответ:
 (1) ведут себя так, как если бы при каждом обращении к строке повторно выполнялся оператор SELECT 
 (2) делают как бы моментальный снимок данных, задаваемых оператором SELECT, и хранят их в базе данных tempdb 
 (3) допускают только чтение. Эти виды курсора объявляются с использованием ключевого слова FAST_FORWARD, и чаще всего их называют "пожарными" курсорами 
Номер 4
Курсоры быстрого доступа характеризуются тем, что:
Ответ:
 (1) допускают только чтение. Эти виды курсора объявляются с использованием ключевого слова FAST_FORWARD, и чаще всего их называют "пожарными" курсорами 
 (2) копируют в базу tempdb только те столбцы, которые уникально идентифицируют каждую строку 
 (3) ведут себя так, как если бы при каждом обращении к строке повторно выполнялся оператор SELECT 
Упражнение 4:
Номер 1
Синтаксис оператора DECLARE CURSOR имеет вид:
Ответ:
 (1)
DECLARE cursor_name CURSOR
[ LOCAL | GLOBAL ]
[ FORWARD_ONLY | SCROLL ]
[ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ]
FOR select_statement
{ FOR UPDATE [ OF column_name [ ,...n ] ] }
 
 (2)
DECLARE cursor_name CURSOR
{ LOCAL | GLOBAL }
{ FORWARD_ONLY | SCROLL }
[ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ]
[ READ_ONLY | SCROLL_LOCKS | OPTIMISTIC ]
[ TYPE_WARNING ]
 
 (3)
DECLARE cursor_name CURSOR
[ LOCAL | GLOBAL ]
[ FORWARD_ONLY | SCROLL ]
[ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ]
[ READ_ONLY | SCROLL_LOCKS | OPTIMISTIC ]
[ TYPE_WARNING ]
FOR select_statement
[ FOR UPDATE [ OF column_name [ ,...n ] ] ]
 
Номер 2
Синтаксис оператора DECLARE CURSOR имеет вид:
Ответ:
 (1)
DECLARE cursor_name CURSOR
{ LOCAL | GLOBAL }
{ FORWARD_ONLY | SCROLL }
[ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ]
[ READ_ONLY | SCROLL_LOCKS | OPTIMISTIC ]
[ TYPE_WARNING ]
 
 (2)
DECLARE cursor_name CURSOR
[ LOCAL | GLOBAL ]
[ FORWARD_ONLY | SCROLL ]
[ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ]
[ READ_ONLY | SCROLL_LOCKS | OPTIMISTIC ]
[ TYPE_WARNING ]
FOR select_statement
[ FOR UPDATE [ OF column_name [ ,...n ] ] ]
 
 (3)
DECLARE cursor_name CURSOR
[ LOCAL | GLOBAL ]
[ FORWARD_ONLY | SCROLL ]
[ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ]
FOR select_statement
{ FOR UPDATE [ OF column_name [ ,...n ] ] }
 
Номер 3
Синтаксис оператора DECLARE CURSOR имеет вид:
Ответ:
 (1)
DECLARE cursor_name CURSOR
[ LOCAL | GLOBAL ]
[ FORWARD_ONLY | SCROLL ]
[ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ]
[ READ_ONLY | SCROLL_LOCKS | OPTIMISTIC ]
[ TYPE_WARNING ]
FOR select_statement
[ FOR UPDATE [ OF column_name [ ,...n ] ] ]
 
 (2)
DECLARE cursor_name CURSOR
[ LOCAL | GLOBAL ]
[ FORWARD_ONLY | SCROLL ]
[ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ]
FOR select_statement
{ FOR UPDATE [ OF column_name [ ,...n ] ] }
 
 (3)
DECLARE cursor_name CURSOR
{ LOCAL | GLOBAL }
{ FORWARD_ONLY | SCROLL }
[ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ]
[ READ_ONLY | SCROLL_LOCKS | OPTIMISTIC ]
[ TYPE_WARNING ]
 
Упражнение 5:
Номер 1
DECLARE @CustId INT
DECLARE @CustName VARCHAR( 30 )
DECLARE CustCursor CURSOR FOR
SELECT CustId, Name
FROM Customer
ORDER BY CustId
FOR READ ONLY
OPEN CustCursor
WHILE (0 = 0) BEGIN
FETCH NEXT
FROM CustCursor
INTO @CustId, @CustName
IF ( @@FETCH_STATUS <> 0 ) BREAK
PRINT CAST ( @CustId AS VARCHAR(IO) ) + ' ' + @CustName
END
CLOSE CustCursor
DEALLOCATE CustCursor
Данный сценарий выполняет действия:
Ответ:
 (1) объявляются две переменные(@CustId и @CustName), при выполнении инструкции DECLARE CURSOR СОЗДАЕТСЯ результирующий набор строк инструкции SELECT. При первом выполнении инструкции FETCH NEXT считывает первую строку результирующей таблицы курсора и помещает значения ее столбцов в НОВЫЙ НАБОР СТРОК. Далее, выполняясь в цикле, инструкция FETCH NEXT считывает очередные строки результирующей таблицы и помещает их данные в ТОТ ЖЕ НАБОР СТРОК до тех пор, пока таблица не будет прочитана до конца 
 (2) объявляются две переменные(@CustId и @CustName), при выполнении инструкции DECLARE CURSOR СОЗДАЕТСЯ результирующий набор строк инструкции SELECT. При первом выполнении инструкции FETCH NEXT считывает первую строку результирующей таблицы курсора и помещает значения ее столбцов в переменные, заданные в предложении INTO. Далее, выполняясь в цикле, инструкция FETCH NEXT считывает очередные строки результирующей таблицы и помещает их данные в те же переменные до тех пор, пока таблица не будет прочитана до конца 
 (3) объявляются две переменные(@CustId и @CustName), при выполнении инструкции DECLARE CURSOR результирующий набор строк инструкции SELECT НЕ создается. Он создается при выполнении инструкции OPEN. При первом выполнении инструкции FETCH NEXT считывает первую строку результирующей таблицы курсора и помещает значения ее столбцов в переменные, заданные в предложении INTO. Далее, выполняясь в цикле, инструкция FETCH NEXT считывает очередные строки результирующей таблицы и помещает их данные в те же переменные до тех пор, пока таблица не будет прочитана до конца 
Номер 2
DECLARE @CustId INT
DECLARE @CustName VARCHAR( 30 )
DECLARE CustCursor CURSOR FOR
SELECT CustId, Name
FROM Customer
ORDER BY CustId
FOR READ ONLY
OPEN CustCursor
WHILE (0 = 0) BEGIN
FETCH NEXT
FROM CustCursor
INTO @CustId, @CustName
IF ( @@FETCH_STATUS <> 0 ) BREAK
PRINT CAST ( @CustId AS VARCHAR(10) ) + ' ' + @CustName
END
CLOSE CustCursor
DEALLOCATE CustCursor
Данный сценарий выполняет действия:
Ответ:
 (1) объявляются две переменные(@CustId и @CustName), при выполнении инструкции DECLARE CURSOR СОЗДАЕТСЯ результирующий набор строк инструкции SELECT. При первом выполнении инструкции FETCH NEXT считывает первую строку результирующей таблицы курсора и помещает значения ее столбцов в переменные, заданные в предложении INTO. Далее, выполняясь в цикле, инструкция FETCH NEXT считывает очередные строки результирующей таблицы и помещает их данные в те же переменные до тех пор, пока таблица не будет прочитана до конца 
 (2) объявляются две переменные(@CustId и @CustName), при выполнении инструкции DECLARE CURSOR результирующий набор строк инструкции SELECT НЕ создается. Он создается при выполнении инструкции OPEN. При первом выполнении инструкции FETCH NEXT считывает первую строку результирующей таблицы курсора и помещает значения ее столбцов в переменные, заданные в предложении INTO. Далее, выполняясь в цикле, инструкция FETCH NEXT считывает очередные строки результирующей таблицы и помещает их данные в те же переменные до тех пор, пока таблица не будет прочитана до конца 
 (3) объявляются две переменные(@CustId и @CustName), при выполнении инструкции DECLARE CURSOR СОЗДАЕТСЯ результирующий набор строк инструкции SELECT. При первом выполнении инструкции FETCH NEXT считывает первую строку результирующей таблицы курсора и помещает значения ее столбцов в НОВЫЙ НАБОР СТРОК. Далее, выполняясь в цикле, инструкция FETCH NEXT считывает очередные строки результирующей таблицы и помещает их данные в ТОТ ЖЕ НАБОР СТРОК до тех пор, пока таблица не будет прочитана до конца 
Номер 3
DECLARE @CustId INT
DECLARE @CustName VARCHAR( 30 )
DECLARE CustCursor CURSOR FOR
SELECT CustId, Name
FROM Customer
ORDER BY CustId
FOR READ ONLY
OPEN CustCursor
WHILE (0 = 0) BEGIN
FETCH NEXT
FROM CustCursor
INTO @CustId, @CustName
IF ( @@FETCH_STATUS <> 0 ) BREAK
PRINT CAST ( @CustId AS VARCHAR(IO) ) + ' ' + @CustName
END
CLOSE CustCursor
DEALLOCATE CustCursor
Данный сценарий выполняет действия:
Ответ:
 (1) объявляются две переменные(@CustId и @CustName), при выполнении инструкции DECLARE CURSOR результирующий набор строк инструкции SELECT НЕ создается. Он создается при выполнении инструкции OPEN. При первом выполнении инструкции FETCH NEXT считывает первую строку результирующей таблицы курсора и помещает значения ее столбцов в переменные, заданные в предложении INTO. Далее, выполняясь в цикле, инструкция FETCH NEXT считывает очередные строки результирующей таблицы и помещает их данные в те же переменные до тех пор, пока таблица не будет прочитана до конца 
 (2) объявляются две переменные(@CustId и @CustName), при выполнении инструкции DECLARE CURSOR СОЗДАЕТСЯ результирующий набор строк инструкции SELECT. При первом выполнении инструкции FETCH NEXT считывает первую строку результирующей таблицы курсора и помещает значения ее столбцов в НОВЫЙ НАБОР СТРОК. Далее, выполняясь в цикле, инструкция FETCH NEXT считывает очередные строки результирующей таблицы и помещает их данные в ТОТ ЖЕ НАБОР СТРОК до тех пор, пока таблица не будет прочитана до конца 
 (3) объявляются две переменные(@CustId и @CustName), при выполнении инструкции DECLARE CURSOR СОЗДАЕТСЯ результирующий набор строк инструкции SELECT. При первом выполнении инструкции FETCH NEXT считывает первую строку результирующей таблицы курсора и помещает значения ее столбцов в переменные, заданные в предложении INTO. Далее, выполняясь в цикле, инструкция FETCH NEXT считывает очередные строки результирующей таблицы и помещает их данные в те же переменные до тех пор, пока таблица не будет прочитана до конца 
Упражнение 6:
Номер 1
Команда FETCH:
Ответ:
 (1) объединяет строки курсора в новую таблицу или представление 
 (2) изменяет исходное значение во множестве модифицируемого курсора 
 (3) извлекает указанную строку из множества строк курсора 
Номер 2
Позиционное обновление представляет собой:
Ответ:
 (1) обновление курсора средствами Enterprise Manager 
 (2) изменение исходных значений во множестве модифицируемого курсора 
 (3) извлечение указанной строки из множества строк курсора 
Номер 3
Функция CURSOR_STATUS:
Ответ:
 (1) позволяет определить статус курсора 
 (2) определяет назначение и функции курсора 
 (3) предназначена для позиционного обновления курсора 
Упражнение 7:
Номер 1
Синтаксис команды позиционного обновления имеет вид:
Ответ:
 (1)
UPDATE таблица_или_представление
( SET список_для_модификации )
 
 (2)
UPDATE таблица_или_представление
[ SET список_для_модификации ]
[ WHERE CURRENT OF курсор_или_переменная ]
 
 (3)
UPDATE таблица_или_представление
SET список_для_модификации
WHERE CURRENT OF курсор_или_переменная
 
Номер 2
Синтаксис функции CURSOR_STATUS имеет вид:
Ответ:
 (1)
CURSOR_STATUS
(
{ 'local' , 'cursor_name' }
{ 'variable' , 'cursor_variable' }
)
 
 (2)
CURSOR_STATUS
(
{ 'local' , 'cursor_name' }
| { 'global' , 'cursor_name' }
| { 'variable' , 'cursor_variable' }
)
 
 (3)
CURSOR_STATUS
[
{ 'local' , 'cursor_name' }
]
 
Номер 3
Синтаксис оператора FETCH имеет вид:
Ответ:
 (1)
FETCH
[ [ NEXT | PRIOR | FIRST | LAST
| ABSOLUTE { n | @nvar }
| RELATIVE { n | @nvar }
]
FROM
]
{ { [ GLOBAL ] cursor_name } | @cursor_variable_name }
[ INTO @variable_name [ ,...n ] ]
 
 (2)
FETCH
{ [ NEXT | PRIOR | FIRST | LAST
| ABSOLUTE { n | @nvar }
| RELATIVE { n | @nvar }
]
FROM
}
[ { [ GLOBAL ] cursor_name } | @cursor_variable_name ]
 
 (3)
FETCH
[ NEXT | PRIOR ]
FROM
]
[ INTO @variable_name [ ,...n ] ]