Регистрозависимость и правильное использование кавычек

Задавая значения опций и указывая объекты в операторах SQL Db2, необходимо знать, где нужны кавычки, какого типа и как они влияют на регистрозависимость.

От того, как вы назовете объекты при создании, зависит регистр символов в имени объектов и требования к дальнейшим спецификациям имен объектов и значений опций в командах. Например, если при создании псевдонима не заключить имя в двойные кавычки, системный каталог сохранит псевдоним в символах верхнего регистра независимо от того, в каком регистре ввели имя объекта вы. Если использовать двойные кавычки при создании псевдонима, каталог сохранит символы в имени объекта точно в том регистре, в каком вы их задали. После этого при использовании имени объекта как значения опции будет необходимо точно указывать этот регистр. Например, для опции столбца FOREIGN_KEY, которой пользуются оболочки Script, веб-службы и XML, требуется указывать псевдоним столбца внешнего ключа как значение опции. Вводя значение опции, нужно использовать тот же регистр, в котором каталог сервера объединения сохранил псевдоним.

В следующей таблице описывается правильное использование регистра и кавычек при задании значений опций и объектов в операторах SQL Db2.
Табл. 1. Правильное использование регистра и кавычек
Идентификатор Использование регистра и кавычек Примеры
Значение опции Используйте регистр, который требуется для значения опции, и заключите это значение опции в одинарные кавычки. Этот оператор создает таблицу источника данных с именем remote_schema.remote_table (все в нижнем регистре):
CREATE TABLE newton.my_nick
(c1 int)
OPTIONS
(remote_server 'MY_SERVER'
remote_schema 'remote_schema',
remote_tabname 'remote_table');
Этот оператор создает таблицу источника данных с именем REMOTE_SCHEMA.REMOTE_TABLE (все в верхнем регистре):
CREATE TABLE newton.my_nick
(c1 int) 
OPTIONS 
(remote_server'MY_SERVER'
remote_schema 'REMOTE_SCHEMA',
remote_tabname 'REMOTE_TABLE');
Объект, содержащий только символы нижнего регистра Используйте символы только нижнего регистра и заключите идентификатор в двойные кавычки. Этот оператор создает псевдоним для таблицы источника данных с именем infx_user.remote_table (все в нижнем регистре):
CREATE NICKNAME my_nick
FOR 
infx_server.
"infx_user"."remote_table";
Прим.: Некоторые источники данных, такие как Informix и Teradata, по умолчанию используют имена в нижнем регистре.
Объект, содержащий только символы верхнего регистра, цифры и символы подчеркивания (_) Можно выбрать один из двух вариантов:
  • Используйте символы только верхнего регистра и заключите идентификатор в двойные кавычки.
  • Используйте любой регистр и не заключайте идентификатор в двойные кавычки.
Каждый из этих операторов создает псевдоним MY_NICK (все в верхнем регистре):
CREATE NICKNAME my_nick
FOR infx_server.
"infx_user"."remote_table";
CREATE NICKNAME "MY_NICK"
FOR infx_server.
"infx_user"."remote_table";
Для ID и паролей авторизации источника данных можно также использовать опции сервера FOLD_ID и FOLD_PW, чтобы преобразовать ID и пароль в нужный регистр.

Из окна командной строки операционной системы UNIX

Если заключить в кавычки регистрозависимое значение в окне командной строки UNIX на сервере объединения, нужно будет обеспечить правильный синтаксический анализ кавычек:
Операторы SQL, содержащие двойные кавычки, но не содержащие одинарных кавычек
Если оператор SQL содержит двойные кавычки, но не содержит одинарных кавычек, заключите весь оператор в одинарные кавычки.
Например, если вы хотите ввести следующий оператор SQL:
CREATE NICKNAME мой_псевдоним FOR мой_сервер."владелец"."моя_таблица"

Вы вводите следующий текст в окно командной строки UNIX:

db2 'CREATE NICKNAME мой_псевдоним FOR мой_сервер."владелец"."
my_table"'
Операторы SQL, содержащие одинарные кавычки, но не содержащие двойных кавычек
Если оператор SQL содержит одинарные кавычки, но не содержит двойных кавычек, заключите весь оператор в двойные кавычки.
Например, если вы хотите ввести следующий оператор SQL:
CREATE USER MAPPING FOR USER SERVER my_server 
    OPTIONS(REMOTE_AUTHID 'my_id', REMOTE_PASSWORD 'my_password') 

Вы вводите следующий текст в окно командной строки UNIX:

db2 "CREATE USER MAPPING FOR ПОЛЬЗОВАТЕЛЬ SERVER мой_сервер 
    OPTIONS(REMOTE_AUTHID 'мой_ID', REMOTE_PASSWORD 'мой_пароль')" 
Операторы SQL, содержащие и двойные, и одинарные кавычки
Если оператор SQL содержит и одинарные, и двойные кавычки:
  • Заключите весь оператор в двойные кавычки
  • Перед каждой двойной кавычкой в операторе добавьте обратную дробную черту.
Например, в таком операторе SQL:
CREATE USER MAPPING FOR "local_id" SERVER my_server 
    OPTIONS(REMOTE_AUTHID 'my_id', REMOTE_PASSWORD 'my_password')
Вы вводите следующий текст в окно командной строки UNIX:
db2 "CREATE USER MAPPING FOR \"local_id\" SERVER my_server 
    OPTIONS(REMOTE_AUTHID 'my_id',  REMOTE_PASSWORD 'my_password')"

В приведенном примере предполагается, что вы вводите операторы SQL из окна командной строки UNIX и передаете оператор в команду Db2, не используя опцию -f. Чтобы использовать команду Db2 с опцией -f для ввода операторов SQL из файла, введите первые операторы из каждого примера.

Из окна командной строки операционной системы Windows

Чтобы сохранить регистрозависимые значения при вводе команд в окне командной строки Microsoft Windows на сервере объединения, добавьте перед каждой двойной кавычкой обратную дробную черту. Например, пусть нужно создать псевдоним nick1 для таблицы Microsoft SQL Server weekly_salary. Эта таблица расположена в базе данных NORBASE. Локальная схема - my_schema.

В окне командной строки Windows на сервере объединения введите:
db2 CREATE NICKNAME nick1 
    FOR NORBASE.\"my_schema\".\"weekly_salary\"

Из командной строки или из прикладной программы Db2

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

Например, пусть нужно создать отображение пользователя с ID local_id. ID удаленного пользователя - my_id, а пароль - my_password. Нужно, чтобы все три значения остались в нижнем регистре. В окне командной строки Db2 введите:
CREATE USER MAPPING FOR "local_id" SERVER my_server 
    OPTIONS(REMOTE_AUTHID 'my_id', REMOTE_PASSWORD 'my_password')