Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
80
Добавлен:
10.05.2015
Размер:
4.94 Mб
Скачать

 

ГЛАВА 7 Команды

 

prepare transaction

Описание

Используется DB-Library в приложениях с двухфазной фиксацией

 

транзакций; позволяет определить, готов ли сервер зафиксировать

 

транзакцию.

Синтаксис

prepare tran[saction]

Использование

Дополнительную информацию см. в книге Open Client DB-Library

 

Reference Manual.

Стандарты

Уровень соответствия стандарту SQL92: расширение Transact-SQL.

См. также

Команды begin transaction, begin transaction, rollback, save transaction

641

print

print

Описание

Выводит пользовательское сообщение на экран.

Синтаксис

print

 

{строка_формата | @локальная_переменная |

 

@@глобальная_переменная}

 

[, список_аргументов]

Параметры

строка_формата

 

Переменная или строка символов. Максимальная длина

 

строки_формата – 1023 байта.

 

Строки формата могут содержать до 20 уникальных указателей места

 

подстановки в любом порядке. Когда текст сообщения будет отправ-

 

лен клиенту, эти указатели места подстановки будут заменены форма-

 

тированным содержимым аргументов, которые идут за строкой_

 

формата.

 

Чтобы иметь возможность изменить порядок следования аргументов

 

при переводе строк формата на язык с другой грамматической струк-

 

турой, указатели места подстановки нумеруются. Указатель места

 

подстановки для аргумента выглядит так: “ %nn !”– знак процента (%),

 

за ним целое число от 1 до 20 и восклицательный знак (!). Целое число

 

представляет номер аргумента в строке в списке аргументов. Напри-

 

мер, “%1!” – это первый аргумент в первоначальной версии, “%2!” –

 

второй аргумент и т.д.

 

Обозначение позиции аргумента таким способом позволяет правильно

 

перевести текст, даже если порядок аргументов в целевом языке отли-

 

чается.

 

Возьмем такое сообщение на английском:

 

%1! is not allowed in %2!.

 

Немецкая версия этого сообщения выглядит так:

 

%1! ist in %2! nicht zulassig.

 

@локальная_переменная

 

Должна иметь тип char, nchar, varchar или nvarchar и должна быть

 

объявлена в пакете или процедуре, в которой используется.

 

@@глобальная_переменная

 

Должна иметь тип char или varchar или допускать автоматическое

 

преобразование к этим типам (например @@version). В данный

 

момент @@version это единственная глобальная переменная

 

символьного типа.

642

ГЛАВА 7 Команды

список_аргументов

 

Может быть последовательностью переменных или констант, разде-

 

ленных запятыми. список_аргументов необязателен, если не указана

 

строка формата, содержащая указатели места подстановки вида

 

%nn !”. Если строка формата содержит указатели места подстановки,

 

то список_аргументов должен содержать количество аргументов,

 

соответствующее максимальному номеру указателя места подстанов-

 

ки. Аргумент может быть любого типа данных, кроме text или image;

 

перед включением в конечное сообщение он преобразуется в сим-

 

вольный тип.

Примеры

Пример 1. Печать строки “Berkeley author”, если автор из таблицы authors

 

проживает в области с почтовым индексом (столбец postacode) 94705:

 

if exists (select postalcode from authors

 

where postalcode = '94705')

 

print "Berkeley author"

 

Пример 2. Объявление переменной, присвоение ей значения и его вывод

 

на экран:

 

declare @msg char(50)

 

select @msg = "What's up, doc?"

 

print @msg

 

What's up, doc?

 

Пример 3. Использование переменных и указателей места подстановки в

 

сообщениях:

 

declare @tabname varchar(30)

 

select @tabname = "titles"

 

declare @username varchar(30)

 

select @username = "ezekiel"

 

print "The table '%1!' is not owned by the user '%2!'.",

 

@tabname, @username

 

The table 'titles' is not owned

 

by the user 'ezekiel'.

Использование

Максимальная длина выводимой строки_формата (со всеми

 

аргументами после подстановки) равна 1024 байтам.

 

Если строка формата содержит указатель места подстановки с

 

номером n, то в этой же строке должны присутствовать указатели

 

места подстановки с номерами от 1 до n- 1, хотя и не обязательно в

 

порядке номеров. Например, недопустимо, чтобы в строке формата

643

print

были указатели места подстановки 1 и 3, но не было указателя места подстановки 2. Если в строке формата пропущен номер, то при выполнении команды print будет выдано сообщение об ошибке.

список_аргументов должен содержать аргумент для каждого указа- теля места подстановки в строке_формата, иначе выполнение тран- закции будет прекращено. Аргументов может быть больше, чем указа- телей места подстановки.

Чтобы вставить знак процента в сообщение об ошибке, в строке_ формата нужно указать два знака процента (‘‘%%’’). Если строка_ формата содержит один знак процента (‘‘%’’), который не исполь зуется как указатель места подстановки, то будет возвращено сообщение об ошибке.

Если аргумент принимает значение NULL, то он преобразуется в символьную строку нулевой длины. Чтобы избежать вывода строк нулевой длины, используется функция isnull. Например, если аргумент @arg имеет значение NULL, то следующий оператор выдает сообщение "I think we have nothing here.":

declare @arg varchar(30)

select @arg = isnull(col1, "nothing") from table_a where ...

print "I think we have %1! here", @arg

Пользовательские сообщения можно добавлять в системную таблицу

 

sysusermessages, чтобы использовать их в любом приложении. Для

 

добавления сообщений в таблицу sysusermessages используется

 

системная процедура sp_addmessage, а для извлечения сообщений

 

для команд print и raiserror процедура sp_getmessage.

 

Чтобы вывести определенное пользователем сообщение об ошибке

 

и сохранить номер ошибки в переменной @@error, нужно исполь-

 

зовать команду raiserror, а не print.

Стандарты

Уровень соответствия стандарту SQL92: расширение Transact-SQL.

Полномочия

Команду print по умолчанию могут выполнять все пользователи. Для этого

 

не требуется никаких полномочий.

См. также

Команды declare, raiserror

 

Системные процедуры sp_addmessage, sp_getmessage

644

Соседние файлы в папке БД задание ко 2 лабе и методичка