В пакетах FixPak Версии 7 появились новые встроенные скалярные функции SQL. Описание этих функций смотрите в обновлениях справочника SQL Reference. Новые функции не включаются автоматически в каждой базе данных при обновлении кода сервера базы данных до нового уровня. Чтобы включить эти новые функции, системный администратор должен выполнить команду db2updv7, указав каждую базу данных на сервере. Эта команда создает в базе данных запись, гарантирующую, что никакой объект базы данных, созданный до выполнения этой команды, не использует существующую функцию с сигнатурой, которая может совпасть с сигнатурой новой функции.
Информацию о включении функций MQSeries (определяемых в схеме MQDB2) смотрите в разделе MQSeries.
>>-+-ABS----+--(выражение)------------------------------------->< '-ABSVAL-'
Схема - SYSIBM.
Эта функция впервые стала доступна в FixPak 2 Версии 7.1.
Прим.: | Версия SYSFUN функции ABS (или ABSVAL) по-прежнему доступна. |
Возвращает абсолютную величину аргумента.
Аргументом является выражение, возвращающее значение любого встроенного числового типа данных.
У результата функции такой же тип данных и атрибут длины, как у аргумента. Если значение аргумента может быть пустым или если в конфигурации базы данных для параметра DFT_SQLMATHWARN задано значение YES, значение результата может быть пустым; если значение аргумента - пустое, то и значение результата - пустое.
Например:
ABS(-51234)
возвращает INTEGER со значением 51234.
>>-+-DECRYPT_BIN--+---------------------------------------------> '-DECRYPT_CHAR-' >----(--шифрованные-данные--+-----------------------------+---)-->< '-,--выражение-строки-пароля--'
Схема - SYSIBM.
Эта функция впервые стала доступна в FixPak 3 Версии 7.1.
Функции DECRYPT_BIN и DECRYPT_CHAR возвращают значение, полученное в результате дешифрования шифрованных-данных. Используемый для дешифрования пароль - это или значение выражения-строки-пароля, или значение ENCRYPTION PASSWORD (заданное с помощью оператора SET ENCRYPTION PASSWORD). Функции DECRYPT_BIN и DECRYPT_CHAR могут дешифровать только значения, зашифрованные функцией ENCRYPT (SQLSTATE 428FE).
Результат функции DECRYPT_BIN имеет тип VARCHAR FOR BIT DATA. Результат функции DECRYPT_CHAR имеет тип VARCHAR. Если шифрованные-данные содержат подсказку, эта функция не возвращает подсказку. Атрибут длины результата равен атрибуту длины типа данных шифрованных-данных минус 8 байт. Реальная длина возвращаемого функцией значения будет совпадать с длиной исходной строки, которая была зашифрована. Если шифрованные-данные содержат дополнительные байты после шифрованной строки, эти байты не возвращаются этой функцией. Если значение первого аргумента может быть пустым, значение результата может быть пустым; если первый аргумент имеет пустое значение, то и результат будет иметь пустое значение.
Если данные дешифруются в другой системе, использующей кодовую страницу, отличающуюся от кодовой страницы, в которой выполнялось шифрование, длина дешифрованного значения при преобразовании его в кодовую страницу базы данных может увеличиться. В таких ситуациях значение шифрованные-данные должно быть преобразовано в строку VARCHAR с большим числом байт.
Дополнительную информацию об использовании этой функции смотрите в разделах 38.3.2.3, ENCRYPT и 38.3.2.4, GETHINT.
Примеры:
Пример 1: В этом примере для хранения пароля шифрования используется значение ENCRYPTION PASSWORD.
SET ENCRYPTION PASSWORD = 'Ben123'; INSERT INTO EMP (SSN) VALUES ENCRYPT('289-46-8832'); SELECT DECRYPT_CHAR(SSN) FROM SSN;
Возвращается значение '289-46-8832'.
Пример 2: В этом примере пароль шифрования задается явно.
SELECT DECRYPT_CHAR(SSN,'Ben123') FROM SSN;
Возвращается значение '289-46-8832'.
>>-ENCRYPT------------------------------------------------------> >----(--выражение-строки-данных--+-----------------------------------------------------------------+---)-> '-,--выражение-строки-пароля--+--------------------------------+--' '-,--выражение-строки-подсказки--' >--------------------------------------------------------------><
Схема - SYSIBM.
Эта функция впервые стала доступна в FixPak 3 Версии 7.1.
Функция ENCRYPT возвращает значение, полученное в результате шифрования выражения-строки-данных. Используемый для шифрования пароль - это или значение выражения-строки-пароля, или значение ENCRYPTION PASSWORD (заданное с помощью оператора SET ENCRYPTION PASSWORD).
Тип данных результата этой функции - VARCHAR FOR BIT DATA.
Атрибут длины результата:
Если значение первого аргумента может быть пустым, значение результата может быть пустым; если первый аргумент имеет пустое значение, то и результат будет иметь пустое значение.
Учтите, что шифрованный результат имеет большую длину, чем значение выражение-строки-данных. Поэтому присваивая шифрованные значения, убедитесь, что размер места назначения достаточен, чтобы вместить все шифрованное значения.
Примечания:
Определение столбца таблицы: При определении столбцов и типов данных, которые будут содержать зашифрованные данные, всегда вычисляйте атрибут длины, как указано ниже. Для шифрованных данных без подсказки:
Длина столбца шифрованных данных = максимальная длина нешифрованных данных + 8 байт + число байт до следующей 8-байтной границы.
Для шифрованных данных с подсказкой:
Длина столбца шифрованных данных = максимальная длина нешифрованных данных + 8 байт + число байт до следующей 8-байтной границы + 32 байта для подсказки.
Все операции присваивания или преобразования в тип меньшей длины, чем указанная выше, могут привести в результате к невозможности расшифровать данные и к потере данных. Пробелы (возможные значения зашифрованных данных) могут быть усечены при сохранении данных в слишком коротком столбце.
Пример вычислений длины столбца
Максимальная длина нешифрованных данных 6 байт 8 байт 8 байт Число байт до следующей 8-байтной границы 2 байта --------- Длина столбца шифрованных данных 16 байт Максимальная длина нешифрованных данных 32 байта 8 байт 8 байт Число байт до следующей 8-байтной границы 8 байт --------- Длина столбца шифрованных данных 48 байт
Дополнительную информацию об использовании этой функции смотрите в разделах 38.3.2.2, DECRYPT_BIN и DECRYPT_CHAR и 38.3.2.4, GETHINT.
Примеры:
Пример 1: В этом примере для хранения пароля шифрования используется значение ENCRYPTION PASSWORD.
SET ENCRYPTION PASSWORD = 'Ben123'; INSERT INTO EMP (SSN) VALUES ENCRYPT('289-46-8832');
Пример 2: В этом примере пароль шифрования задается явно.
INSERT INTO EMP (SSN) VALUES ENCRYPT('289-46-8832','Ben123','');
Пример 3: Сохраняется подсказка 'океан', помогающая пользователю вспомнить пароль шифрования 'Тихий'.
INSERT INTO EMP (SSN) VALUES ENCRYPT('289-46-8832','Тихий','океан');
>>-GETHINT--(--шифрованные-данные--)---------------------------><
Схема - SYSIBM.
Эта функция впервые стала доступна в FixPak 3 Версии 7.1.
Функция GETHINT возвращает подсказку пароля, если она содержится в шифрованных-данных. Подсказка пароля - это фраза, помогающая владельцу данных вспомнить пароль (например, 'океан' в качестве подсказки для пароля 'Тихий').
Выражение, возвращающее значение CHAR FOR BIT DATA или VARCHAR FOR BIT DATA - полная строка шифрованных данных, созданная функцией ENCRYPT (SQLSTATE 428FE).
Результат функции имеет тип VARCHAR(32). Значение результата может быть пустым; если параметр подсказки не добавлен в шифрованные-данные функцией ENCRYPT или если первый аргумент имеет пустое значение, результат будет иметь пустое значение.
Дополнительную информацию об использовании этой функции смотрите в разделах 38.3.2.2, DECRYPT_BIN и DECRYPT_CHAR и 38.3.2.3, ENCRYPT.
Пример:
В этом примере сохраняется подсказка 'океан', помогающая пользователю вспомнить пароль шифрования 'Тихий'.
INSERT INTO EMP (SSN) VALUES ENCRYPT('289-46-8832', 'Тихий','океан'); SELECT GETHINT(SSN) FROM EMP;
Возвращается значение 'океан'.
>>-IDENTITY_VAL_LOCAL--(--)------------------------------------><
Схема - SYSIBM.
Эта процедура впервые стала доступна в FixPak 3 Версии 7.1.
Функция IDENTITY_VAL_LOCAL - это недетерминированная функция, возвращающая самое последнее значение, присвоенное столбцу идентификации в результате выполнения оператора вставки одной строки (INSERT) с условием VALUES. У этой функции нет входных параметров.
Тип данных результата - DECIMAL(31,0), независимо от типа данных соответствующего столбца идентификации.
Возвращаемое этой функцией значение - это значение, присвоенное столбцу идентификации таблицы, указанной в самом последнем операторе вставки одной строки INSERT. В этом операторе INSERT должно использоваться условие VALUES для таблицы, содержащей столбец идентификации. Кроме того, этот оператор INSERT должен быть выдан на том же уровне обработки 1 ; это значит, что это значение доступно локально на том уровне обработки, на котором оно было присвоено, пока оно не будет замещено новым присвоенным значением.
Присвоенное значение - это или значение, заданное пользователем (если этот столбец идентификации определен как GENERATED BY DEFAULT), или значение идентификации, сгенерированное DB2.
В следующих ситуациях эта функция возвращает пустое значение:
На результат этой функции не влияют:
Примечания:
Примеры:
Пример 1: Присваивает переменной IVAR значение, присвоенное столбцу идентификации в таблице EMPLOYEE. Если это была первая операция вставки в таблицу EMPLOYEE, переменная IVAR должна иметь значение 1.
CREATE TABLE EMPLOYEE (EMPNO INTEGER GENERATED ALWAYS AS IDENTITY, NAME CHAR(30), SALARY DECIMAL(5,2), DEPTNO SMALLINT)
Пример 2: Функция IDENTITY_VAL_LOCAL, вызванная в операторе INSERT, возвращает значение, присвоенное предыдущим оператором вставки одной строки INSERT с условием VALUES для таблицы со столбцом идентификации. Для этого примера предположим, что есть две таблицы - T1 и T2. Обе эти таблицы содержат столбец идентификации с именем C1. DB2 генерирует для столбца C1 таблицы T1 последовательные значения, начиная с 1, а для столбца C2 таблицы T2 - последовательные значения, начиная с 10.
CREATE TABLE T1 (C1 INTEGER GENERATED ALWAYS AS IDENTITY, C2 INTEGER), CREATE TABLE T2 (C1 DECIMAL(15,0) GENERATED BY DEFAULT AS IDENTITY (START WITH 10), C2 INTEGER), INSERT INTO T1 (C2) VALUES (5), INSERT INTO T1 (C2) VALUES (6), SELECT * FROM T1
Это дает такой результат:
C1 C2 ----------- ---------- 1 5 2 6
Теперь объявим функцию для переменной IVAR:
VALUES IDENTITY_VAL_LOCAL() INTO :IVAR
В этот момент функция IDENTITY_VAL_LOCAL вернет в переменную IVAR значение 2, поскольку это самое последнее значение, присвоенное DB2. Следующий оператор INSERT вставляет одну строку в таблицу T2; при этом столбцу C2 присваивается значение 2, возвращенное функцией IDENTITY_VAL_LOCAL.
INSERT INTO T2 (C2) VALUES (IDENTITY_VAL_LOCAL()); SELECT * FROM T2 WHERE C1 = DECIMAL(IDENTITY_VAL_LOCAL(),15,0)
Это дает такой результат:
C1 C2 ----------------- ---------- 10. 2
Если вызвать функцию IDENTITY_VAL_LOCAL после этой операции вставки, она вернет значение 10, сгенерированное DB2 для столбца C1 таблицы T2.
В среде с вложенными уровнями обработки, содержащей триггеры, функция IDENTITY_VAL_LOCAL используется для получения значения идентификации, присвоенного на конкретном уровне, хотя при этом могут также существовать значения, присвоенные на более низких уровнях. Допустим, существуют три таблицы EMPLOYEE, EMP_ACT и ACCT_LOG. Для операций вставки таблицы EMPLOYEE определен триггер AFTER, который выполняет дополнительные операции вставки в таблицы EMP_ACT и ACCT_LOG.
CREATE TABLE EMPLOYEE (EMPNO SMALLINT GENERATED ALWAYS AS IDENTITY (START WITH 1000), NAME CHAR(30), SALARY DECIMAL(5,2), DEPTNO SMALLINT); CREATE TABLE EMP_ACT (ACNT_NUM SMALLINT GENERATED ALWAYS AS IDENTITY (START WITH 1), EMPNO SMALLINT); CREATE TABLE ACCT_LOG (ID SMALLINT GENERATED ALWAYS AS IDENTITY (START WITH 100), ACNT_NUM SMALLINT, EMPNO SMALLINT); CREATE TRIGGER NEW_HIRE AFTER INSERT ON EMPLOYEE REFERENCING NEW AS NEW_EMP FOR EACH ROW MODE DB2SQL BEGIN ATOMIC INSERT INTO EMP_ACT (EMPNO) VALUES (NEW_EMP.EMPNO); INSERT INTO ACCT_LOG (ACNT_NUM EMPNO) VALUES (IDENTITY_VAL_LOCAL(), NEW_EMP.EMPNO); END
Первый оператор INSERT триггера вставляет строку в таблицу EMP_ACT. Чтобы задать, что значение идентификации для столбца EMPNO таблицы EMPLOYEE должно быть скопировано в столбец EMPNO таблицы EMP_ACT, в этом операторе INSERT используется переходная переменная триггера для столбца EMPNO таблицы EMPLOYEE. Для получения значения, присвоенного столбцу EMPNO таблицы EMPLOYEE, нельзя использовать функцию IDENTITY_VAL_LOCAL. Это связано с тем, что на этом же уровне обработки не был вызван оператор INSERT и поэтому, если вызвать функцию IDENTITY_VAL_LOCAL в условии VALUES оператора INSERT для таблицы EMP_ACT, эта функция вернет пустое значение. Этот оператор INSERT для таблицы EMP_ACT также генерирует новое значение столбца идентификации для столбца ACNT_NUM.
Второй оператор INSERT триггера вставляет строку в таблицу ACCT_LOG. Чтобы задать, что значение идентификации, присвоенное столбцу ACNT_NUM таблицы EMP_ACT предыдущим оператором INSERT действия триггера, должно быть скопировано в столбец ACNT_NUM таблицы ACCT_LOG, в этом операторе INSERT используется вызов функции IDENTITY_VAL_LOCAL. Столбцу EMPNO присваивается то же значение, что и столбцу EMPNO таблицы EMPLOYEE.
В вызывающей программе (то есть на уровне, на котором выдается оператор INSERT для таблицы EMPLOYEE) присвоим переменной IVAR значение, присвоенное столбцу EMPNO таблицы EMPLOYEE исходным оператором INSERT.
INSERT INTO EMPLOYEE (NAME, SALARY, DEPTNO) VALUES ('Rupert', 989.99, 50);
Содержимое этих трех таблиц после выполнения этого исходного оператора INSERT и всех действий триггеров будет таким:
SELECT EMPNO, SUBSTR(NAME,10) AS NAME, SALARY, DEPTNO FROM EMPLOYEE; EMPNO NAME SALARY DEPTNO ----------- ----------- ---------------------------------- ----------- 1000 Rupert 989.99 50 SELECT ACNT_NUM, EMPNO FROM EMP_ACT; ACNT_NUM EMPNO ----------- ----------- 1 1000 SELECT * FROM ACCT_LOG; ID ACNT_NUM EMPNO ----------- ----------- ----------- 100 1 1000
Функция IDENTITY_VAL_LOCAL возвращает в качестве результата самое последнее значение, присвоенное столбцу идентификации на том же уровне обработки. После выполнения этого исходного оператора INSERT и всех действий триггеров функция IDENTITY_VAL_LOCAL вернет значение 1000, так как это значение, присвоенное столбцу EMPNO таблицы EMPLOYEE. Следующий оператор VALUES присваивает переменной IVAR значение 1000. Операция вставки в таблицу EMP_ACT (которая выполнялась позже операции вставки в таблицу EMPLOYEE, но на другом уровне вложенности) не влияет на результат вызова функции IDENTITY_VAL_LOCAL.
VALUES IDENTITY_VAL_LOCAL() INTO :IVAR;
В базе данных Unicode весь набор символов Unicode переводится в верхний (или в нижний) регистр в зависимости от значения свойств Unicode этих символов. Версии символов ASCII двойной ширины и римские цифры теперь преобразуются правильным образом.
>>-MQPUBLISH---(------------------------------------------------> >-----+---------------------------------------------+-----------> '-служба-издателя--,--+--------------------+--' '-правила-службы--,--' >----данные-сообщения-------------------------------------------> >-----+--------------------------------------+--)-------------->< '-,--тема--+------------------------+--' | (1) | '-,--id-корреляции-------'
Примечания:
Схема - MQDB2.
Функция MQPUBLISH публикует данные в MQSeries. Эта функция требует установки либо MQSeries Publish/Subscribe, либо MQSeries Integrator. Дальнейшие подробности смотрите на странице www.ibm.com/software/MQSeries.
Функция MQPUBLISH публикует данные, содержащиеся в данных-сообщения, через издатель MQSeries, заданный службой-издателя, с качеством обслуживания (QoS), заданным правилами-службы. Можно задать необязательные параметры - тему сообщения и пользовательские ID корреляции сообщения. Функция возвращает значение '1' при успешном выполнении и '0' при неудаче.
Примеры
Пример 1: Этот пример публикует строку "Проверка 123" через службу издателя по умолчанию (DB2.DEFAULT.PUBLISHER) с использованием правил по умолчанию (DB2.DEFAULT.POLICY). Идентификатор корреляции и тема сообщения не задаются.
VALUES MQPUBLISH('Проверка 123')
Пример 2: Этот пример публикует строку "Проверка 345" через службу издателя "MYPUBLISHER" с темой "ИСПЫТАНИЯ". Используются правила по умолчанию, идентификатор корреляции не задается.
VALUES MQPUBLISH('MYPUBLISHER','Проверка 345', 'ИСПЫТАНИЯ')
Пример 3: Этот пример публикует строку "Проверка 678" через службу издателя "MYPUBLISHER" с правилами "MYPOLICY" и идентификатором корреляции "TEST1". Сообщение публикуется с темой "ИСПЫТАНИЯ".
VALUES MQPUBLISH('MYPUBLISHER','MYPOLICY','Проверка 678','ИСПЫТАНИЯ','TEST1')
Пример 4: Этот пример публикует строку "Проверка 901" через службу издателя "MYPUBLISHER" с темой "ИСПЫТАНИЯ" с использованием правил по умолчанию (DB2.DEFAULT.POLICY) и без идентификатора корреляции.
VALUES MQPUBLISH('Проверка 901','ИСПЫТАНИЯ')
Во всех примерах при успешном выполнении возвращается значение '1'.
>>-MQREAD---(----+----------------------------------------+--)-->< '-служба-приема--+--------------------+--' '-,--правила-службы--'
Схема - MQDB2.
Функция MQREAD возвращает сообщение из положения MQSeries, заданного службой-приема, с использованием правил качества обслуживания (QoS), заданных правилами-службы. Выполнение этой операции не удаляет сообщение из очереди, связанной со службой-приема, а возвращает сообщение в начало очереди. Возвращаемое значение имеет тип VARCHAR(4000) и содержит сообщение. Если нет доступных сообщений, возвращается пустое значение.
Примеры:
Пример 1: Этот пример читает сообщение из начала очереди, заданной службой по умолчанию (DB2.DEFAULT.SERVICE), с использованием правил по умолчанию (DB2.DEFAULT.POLICY).
VALUES MQREAD()
Пример 2: Этот пример читает сообщение из начала очереди, заданной службой "MYSERVICE" с использованием правил по умолчанию (DB2.DEFAULT.POLICY).
VALUES MQREAD('MYSERVICE')
Пример 3: Этот пример читает сообщение из начала очереди, заданной службой "MYSERVICE" с использованием правил "MYPOLICY".
VALUES MQREAD('MYSERVICE','MYPOLICY')
Все эти примеры при успешном выполнении возвращают содержимое сообщения в виде VARCHAR(4000). Если нет доступных сообщений, возвращается пустое значение.
>>-MQRECEIVE----------------------------------------------------> >----(--+---------------------------------------------------------------+---)-> '-служба-приема--+-------------------------------------------+--' '-,--правила-службы--+-------------------+--' '-,--id-корреляции--' >--------------------------------------------------------------><
Схема - MQDB2.
Функция MQRECEIVE возвращает сообщение из положения MQSeries, заданного службой-приема, с использованием правил качества обслуживания (QoS), заданных правилами-службы. Выполнение этой операции удаляет сообщение из очереди, связанной со службой-приема. Если задан id-корреляции, возвращается первое сообщение с совпадающим идентификатором корреляции. Если id-корреляции не задан, возвращается сообщение из начала очереди. Возвращаемое значение имеет тип VARCHAR(4000) и содержит сообщение. Если нет доступных сообщений, возвращается пустое значение.
Примеры:
Пример 1: Этот пример получает сообщение из начала очереди, заданной службой по умолчанию (DB2.DEFAULT.SERVICE), с использованием правил по умолчанию (DB2.DEFAULT.POLICY).
VALUES MQRECEIVE()
Пример 2: Этот пример получает сообщение из начала очереди, заданной службой "MYSERVICE", с использованием правил по умолчанию (DB2.DEFAULT.POLICY).
VALUES MQRECEIVE('MYSERVICE')
Пример 3: Этот пример получает сообщение из начала очереди, заданной службой "MYSERVICE", с использованием правил "MYPOLICY".
VALUES MQRECEIVE('MYSERVICE','MYPOLICY')
Пример 4: Этот пример получает первое сообщение с идентификатором корреляции '1234', из начала очереди, заданной службой "MYSERVICE", с использованием правил "MYPOLICY".
VALUES MQRECEIVE('MYSERVICE',MYPOLICY','1234')
Все эти примеры при успешном выполнении возвращают содержимое сообщения в виде VARCHAR(4000). Если нет доступных сообщений, возвращается пустое значение.
>>-MQSEND---(---------------------------------------------------> >-----+---------------------------------------------+-----------> '-служба-отправки--,--+--------------------+--' '-правила-службы--,--' >----данные-сообщения----+------------------------+--)--------->< | (1) | '-,--id-корреляции-------'
Примечания:
Схема - MQDB2.
Функция MQSEND отправляет данные данные-сообщения, в положение MQSeries, заданное службой-отправки, используя правила качества обслуживания (QoS), заданные правилами-службы. Необязательный параметр id-корреляции позволяет задать произвольный идентификатор корреляции сообщения. Функция возвращает значение '1' при успешном выполнении и '0' при неудаче.
Примеры:
Пример 1: Этот пример отправляет строку "Проверка 123" на службу по умолчанию (DB2.DEFAULT.SERVICE), используя правила по умолчанию (DB2.DEFAULT.POLICY), без идентификатора корреляции.
VALUES MQSEND('Проверка 123')
Пример 2: Этот пример отправляет строку "Проверка 345" на службу "MYSERVICE", используя правила "MYPOLICY", без идентификатора корреляции.
VALUES MQSEND('MYSERVICE','MYPOLICY','Проверка 345')
Пример 3: Этот пример отправляет строку "Проверка 678" на службу "MYSERVICE", используя правила "MYPOLICY", с идентификатором корреляции "TEST3".
VALUES MQSEND('MYSERVICE','MYPOLICY','Проверка 678','TEST3')
Пример 4: Этот пример отправляет строку "Проверка 901" на службу "MYSERVICE", используя правила по умолчанию (DB2.DEFAULT.POLICY) без идентификатора корреляции.
VALUES MQSEND('MYSERVICE','Проверка 901')
Каждый из примеров возвращает скалярное значение '1' в случае успешного выполнения.
>>-MQSUBSCRIBE---(----------------------------------------------> >-----+-----------------------------------------------+--тема---> '-служба-подписчика--,--+--------------------+--' '-правила-службы--,--' >----)---------------------------------------------------------><
Схема - MQDB2.
Функция MQSUBSCRIBE служит для регистрации заинтересованности в сообщениях MQSeries, публикуемых по заданной теме. Служба-подписчика задает логическое назначение для сообщений, отвечающих заданной теме. Сообщения с подходящей темой помещаются в очередь, определенную службой-подписчика, и могут быть прочитаны или получены при помощи последующего вызова MQREAD, MQRECEIVE, MQREADALL или MQRECEIVEALL. Эта функция требует установки и конфигурирования системы публикации и подписки на основе MQSeries, например MQSeries Integrator или MQSeries Publish/Subscribe. Дальнейшие подробности смотрите на странице www.ibm.com/software/MQSeries.
Функция возвращает значение '1' при успешном выполнении и '0' при неудаче. При успешном выполнении этой функции сервер публикации и подписки направит сообщения, отвечающие заданной теме, в точку службы, заданную службой-подписчика.
Примеры:
Пример 1: Этот пример регистрирует заинтересованность в сообщениях по теме "Погода". В качестве подписчика регистрируется служба-подписчика по умолчанию (DB2.DEFAULT.SUBSCRIBER), а качество обслуживания задается правилами обслуживания по умолчанию (DB2.DEFAULT.POLICY).
VALUES MQSUBSCRIBE('Погода')
Пример 2: В этом примере подписчик регистрирует заинтересованность в сообщениях по теме "Акции". Подписчик регистрируется как "PORTFOLIO-UPDATES" с правилами "BASIC-POLICY".
VALUES MQSUBSCRIBE('PORTFOLIO-UPDATES','BASIC-POLICY','Акции')
Каждый из примеров возвращает скалярное значение '1' при успешном выполнении.
>>-MQUNSUBSCRIBE---(--------------------------------------------> >-----+-----------------------------------------------+--тема---> '-служба-подписчика--,--+--------------------+--' '-правила-службы--,--' >----)---------------------------------------------------------><
Схема - MQDB2.
Функция MQUNSUBSCRIBE служит для отмены существующей подписки на сообщения. Для задания отменяемой подписки служат параметры служба-подписчика, правила-службы и тема. Эта функция требует установки и конфигурирования системы публикации и подписки на основе MQSeries, например MQSeries Integrator или MQSeries Publish/Subscribe. Дальнейшие подробности смотрите на странице www.ibm.com/software/MQSeries.
Функция возвращает значение '1' при успешном выполнении и '0' при неудаче. В результате успешного выполнения этой функции сервер публикации и подписки удалит подписку, определяемую данными параметрами. Сообщения с данной темой больше не будут посылаться в логическое назначение, определяемое службой-подписчика.
Примеры:
Пример 1: Этот пример отменяет регистрацию заинтересованности в сообщениях, содержащих тему "Погода". В качестве отменяемого подписчика регистрируется служба-подписчика по умолчанию (DB2.DEFAULT.SUBSCRIBER), а качество обслуживания задается правилами-обслуживания по умолчанию (DB2.DEFAULT.POLICY).
VALUES MQUNSUBSCRIBE('Погода')
Пример 2: В этом примере подписчик отменяет регистрацию заинтересованности в сообщениях, содержащих "Акции". Подписчик зарегистрирован как "PORTFOLIO-UPDATES" с правилами "BASIC-POLICY".
VALUES MQUNSUBSCRIBE('PORTFOLIO-UPDATES','BASIC-POLICY','Акции')
Эти примеры возвращают скалярное значение '1' при успешном выполнении и '0' при неудаче.
>>-MULTIPLY_ALT-------------------------------------------------> >----(точное-числовое-выражение;точное-числовое-выражение)-----><
Схема - SYSIBM.
Эта функция впервые стала доступна в FixPak 2 Версии 7.1.
Скалярная функция MULTIPLY_ALT возвращает десятичное значение произведения двух аргументов. Это альтернатива операции умножения, особенно когда сумма точностей аргументов превосходит 31.
Аргументы могут быть любого встроенного точного числового типа (DECIMAL, BIGINT, INTEGER или SMALLINT).
Тип результата функции - DECIMAL. Точность и масштаб результата определяются так (p и s означают точность и масштаб первого аргумента, а p' и s' - точность и масштаб второго аргумента).
Значение результата может быть пустым, если значение хотя бы одного из аргументов может быть пустым, или если в конфигурации базы данных для параметра DFT_SQLMATHWARN задано значение yes; значение результата пусто, если значение одного из аргументов пусто.
Если выполняются десятичные расчеты с масштабом хотя бы 3 и сумма точностей превосходит 31, функция MULTIPLY_ALT предпочтительнее операции умножения. В этом случае внутренние вычисления выполняются так, чтобы избежать переполнений. Потом окончательный результат приводится к типу результата, используя, если нужно, усечение, чтобы соответствовать масштабу. Обратите внимание на то, что если масштаб - 3, переполнение окончательного результата все же возможно.
Ниже приведен пример, сравнивающий типы результата функции MULTIPLY_ALT и
операции умножения.
Тип аргумента 1 | Тип аргумента 2 | Результат функции MULTIPLY_ALT | Результат операции умножения |
---|---|---|---|
DECIMAL(31,3) | DECIMAL(15,8) | DECIMAL(31,3) | DECIMAL(31,11) |
DECIMAL(26,23) | DECIMAL(10,1) | DECIMAL(31,19) | DECIMAL(31,24) |
DECIMAL(18,17) | DECIMAL(20,19) | DECIMAL(31,29) | DECIMAL(31,31) |
DECIMAL(16,3) | DECIMAL(17,8) | DECIMAL(31,9) | DECIMAL(31,11) |
DECIMAL(26,5) | DECIMAL(11,0) | DECIMAL(31,3) | DECIMAL(31,5) |
DECIMAL(21,1) | DECIMAL(15,1) | DECIMAL(31,2) | DECIMAL(31,2) |
Перемножаем два значения, тип данных первого аргумента - DECIMAL(26,3), второго - DECIMAL(9,8). Тип данных результата - DECIMAL(31,7).
values multiply_alt(98765432109876543210987,654;5,43210987) 1 --------------------------------- 536504678578875294857887,5277415
Обратите внимание на то, что полное произведение этих двух чисел - 536504678578875294857887,52774154498, но последние 4 цифры были отброшены, чтобы соответствовать масштабу типа данных результата. Использование с теми же значениями операции умножения приведет к арифметическому переполнению, так как тип данных результата - DECIMAL(31,11) - поддерживает только 20 знаков слева от десятичной точки, а у значения результата - 24 знака.
>>-REC2XML---(--десятичная-константа---,--строка-формата--------> >----,--строка-тега-строки-таблицы------------------------------> >-----+------------------------+--)---------------------------->< | .------------------. | | V | | '----,--имя-столбца---+--'
Схема - SYSIBM.
Функция REC2XML возвращает строковое значение, форматированное при помощи тегов XML и содержащее имена столбцов и значения столбцов.
Значение десятичной-константы используется для вычисления длины результата функции. Для каждого столбца с символьным типом данных атрибут длины столбца умножается на этот коэффициент растяжения перед прибавлением к длине результата.
Если растяжение не нужно, используйте значение 1,0. Значения меньше 1,0 уменьшают вычисляемую длину результата. Если фактическая длина строки результата превысит вычисленную длину результата функции, возникнет ошибка (SQLSTATE 22001).
Строка-формата регистрозависима, и приведенные ниже значения во избежание ошибки следует вводить в верхнем регистре.
>>-<--строка-тега-строки-таблицы-->-----------------------------> .------------------------------------------------------------------------------. V | >--------<--имя-столбца--=--"имя-столбца"--+->--значение-столбца--</--столбец-->--+--+> '-null="true"--</----------------------' >----</--строка-тега-строки-таблицы-->-------------------------><
Имена столбцов могут быть или не быть допустимыми значениями атрибутов XML. Если имя столбца не является допустимыми значениями атрибутов XML, перед включением в строку результата выполняется замена символов.
Значения столбцов могут быть или не быть допустимыми значениями элементов XML. Если задана строка-формата COLATTVAL, для значений столбцов, не являющихся допустимыми значениями элементов XML, перед включением в строку результата выполняется замена символов. Если задана строка-формата COLATTVAL_XML, замена символов в значениях столбцов не производится (однако замена символов все же производится в именах столбцов).
Если задана пустая строка, используется значение 'row'.
Если задана строка из одного или нескольких пробелов, в строке результата не будет ни начальных, ни конечных строк-тега-строки-таблицы (включая разделяющие угловые скобки).
Задаваемые имена столбцов не должны повторяться (SQLSTATE 42734).
Тип результата функции - VARCHAR. Максимальная длина 32672 байта (SQLSTATE 54006).
Рассмотрим следующий вызов:
REC2XML (dc, fs, rt, c1, c2, ..., cn)
'<' CONCAT rt CONCAT '>' CONCAT y1 CONCAT y2 CONCAT ... CONCAT yn CONCAT '</' CONCAT rt CONCAT '>'
где yn эквивалентен формуле:
'<имя столбца="' CONCAT xvcn CONCAT vn
а vn эквивалентен формуле:
'">' CONCAT rn CONCAT '</column>'
если значение столбца непусто, и
'" null="true"/>'
если значение столбца пусто.
xvcn эквивалентно строковому представлению имени столбца для cn, где всякий символ из Табл. 18 заменен соответствующим представлением. Благодаря этому строка результата будет допустимым значением атрибута или элемента XML.
r n эквивалентно строковому представлению согласно Табл. 17.
Значения столбцов результата:
В зависимости от типа данных столбца и заданной строки-формата
значения столбцов таблицы могут преобразовываться перед включением в строку
результата. В следующей таблице показаны преобразования для значений
столбцов.
Табл. 17. Значения столбцов в строке результата
Тип данных в cn | rn |
---|---|
CHAR, VARCHAR | Это значение - строка. Если строка-формата не оканчивается символами "_XML", каждый символ в cn заменяется на соответствующую подстановку из Табл. 18. Атрибут длины: dc * длина атрибута cn. |
SMALLINT, INTEGER, BIGINT, DECIMAL, NUMERIC, REAL, DOUBLE | Это значение - LTRIM(RTRIM(CHAR(cn))). Длина атрибута равна длине результата функции CHAR(cn). Десятичный разделитель - всегда точка. |
DATE | Это значение - CHAR(cn, ISO). Длина атрибута равна длине результата функции CHAR(cn, ISO). |
TIME | Это значение - CHAR(cn, JIS). Длина атрибута равна длине результата функции CHAR(cn, JIS) |
TIMESTAMP | Это значение - CHAR(cn). Длина атрибута равна длине результата функции CHAR(cn). |
Замена символов:
В зависимости от заданного значения строки-формата некоторые символы в именах столбцов и значениях столбцов заменяются, чтобы имена столбцов были допустимыми значения атрибутов XML, а значения столбцов - допустимыми значения элементов XML.
Табл. 18. Замена символов для значений атрибутов и элементов XML
< заменяется на < |
> заменяется на > |
" заменяется на " |
& заменяется на & |
' заменяется на ' |
Примеры:
SELECT REC2XML (1.0, 'COLATTVAL', '', DEPTNO, MGRNO, ADMRDEPT) FROM DEPARTMENT WHERE DEPTNO = 'D01'
Этот пример вернет следующую строку VARCHAR(117):
<row> <column name="DEPTNO">D01</column> <column name="MGRNO" null="true"/> <column name="ADMRDEPT">A00</column> </row>
Прим.: | REC2XML не вставляет в вывод символы перевода строки. Приведенный выше пример вывода отформатирован для удобства чтения. |
Атрибут длины для вызова REC2XML (смотри ниже) с коэффициентом расширения 1,0 составит 128 (11 займут '<row>' и '</row>', 21 уйдет на имена столбцов, 75 на '<column name=', '>', '</column>' и двойные кавычки, 7 на данные CLASS_CODE, 6 на данные DAY и 8 на данные STARTING). Поскольку символы '&' и '<' будут заменены, коэффициента расширения 1,0 недостаточно. Атрибут длины для этой функции должен будет поддержать увеличение с 7 до 14 символов для нового формата данных CLASS_CODE.
Однако поскольку известно, что значение DAY никогда не превысит длины в 1 цифру, 5 из добавленных символов никогда не будут использованы. Таким образом, растяжение должно обеспечить увеличение длины всего на 2. Поскольку единственной символьной строкой в списке аргументов является CLASS_CODE, это единственное значение столбца, на которое действует коэффициент расширения. Чтобы достичь увеличения длины на 2, коэффициент расширения должен быть равен 9/7 (примерно 1,2857). Будет использован коэффициент расширения 1,3.
SELECT REC2XML (1.3, 'COLATTVAL', 'record', CLASS_CODE, DAY, STARTING) FROM CL_SCHED WHERE CLASS_CODE = '&43<FIE'
Возвращается следующая строка:
<record> <column name="CLASS_CODE">&43<FIE</column> <column name="DAY">5</column> <column name="STARTING">06:45:00</column> </record>
Прим.: | REC2XML не вставляет в вывод символы перевода строки. Приведенный выше пример вывода отформатирован для удобства чтения. |
SELECT REC2XML (1.3,'COLATTVAL', '', Class, "time<noon") FROM (SELECT Class_code, Starting FROM Cl_sched WHERE Starting < '12:00:00') AS Early (Class, "time<noon")Этот запрос возвращает следующую строку:
<row> <column name="CLASS">&43<FIE</column> <column name="time<noon>06:45:00</column> </row>
Прим.: | REC2XML не вставляет в вывод символы перевода строки. Приведенный выше пример вывода отформатирован для удобства чтения. |
SELECT REC2XML (1.0,'COLATTVAL_XML', '', EMPNO, RESUME_XML) FROM (SELECT EMPNO, CAST(RESUME as VARCHAR(3500)) as RESUME_XML FROM EMP_RESUME WHERE RESUME_FORMAT = 'XML') AS EMP_RESUME_XML
>>-ROUND---(выражение1; выражение2)----------------------------><
Схема - SYSIBM.
Эта функция впервые стала доступна в FixPak 2 Версии 7.1.
Прим.: | Версия SYSFUN функции ROUND по-прежнему доступна. |
Функция ROUND возвращает выражение1, округленное до выражение2 цифр после разделителя целой и дробной части, если выражение2 положительно, или до выражение2 цифр до разделителя целой и дробной части - если оно отрицательно.
Если выражение1 положительно, пятерка округляется в большую сторону до следующего положительного числа. Например, ROUND(3,5;0) = 4. Если выражение1 отрицательно, пятерка округляется в меньшую сторону до следующего отрицательного числа. Например, ROUND(-3,5;0) = -4.
Если выражение2 неотрицательно, выражение1 округляется до абсолютного значения выражения2 цифр справа от разделителя целой и дробной части. Если значение выражения2 больше чем масштаб выражения1, значение не меняется, только точность значения результата будет больше на 1. Например, ROUND(748,58;5) = 748,58, где точность теперь 6, а масштаб остался 2.
Если выражение2 отрицательно, выражение1 округляется до абсолютного значения выражения2+1 цифр слева от разделителя целой и дробной части.
Если абсолютное значение отрицательного выражения2 больше, чем число цифр слева от разделителя целой и дробной части, результат будет 0. Например, ROUND(748,58;-4) = 0.
Тип данных и атрибут длинны результата те же, что и у первого аргумента, только точность увеличивается на один, если тип выражения1 - DECIMAL или NUMERIC и точность меньше 31. Например, если тип аргумента DECIMAL(5,2), тип результата будет DECIMAL(6,2). Если тип аргумента DECIMAL(31,2), тип результата останется DECIMAL(31,2). Масштаб остается такой же, как у первого аргумента.
Значение результата может быть пустым, если значение хотя бы одного из аргументов может быть пустым, или если в конфигурации базы данных для параметра DFT_SQLMATHWARN задано значение yes. Если значение одного из аргументов пусто, значение результата будет пустым.
Вычислим округления числа 873.726 до 2, 1, 0, -1, -2, -3 и -4 десятичных знаков соответственно.
VALUES (ROUND(873,726; 2), ROUND(873,726; 1), ROUND(873,726; 0), ROUND(873,726;-1), ROUND(873,726;-2), ROUND(873,726;-3), ROUND(873,726;-4) )
Этот пример возвращает:
1 2 3 4 5 6 7 --------- --------- --------- --------- --------- --------- --------- 873,730 873,700 874,000 870,000 900,000 1000,000 0,000
Вычисляем как положительные, так и отрицательные числа.
VALUES (ROUND(3,5; 0), ROUND(3,1; 0), ROUND(-3,1; 0), ROUND(-3,5;0) )
Этот пример возвращает:
1 2 3 4 ---- ---- ---- ---- 4,0 3,0 -3,0 -4,0
Измените описание этой функции на следующее:
Схема - SYSFUN.
Для переданного значения аргумента возвращает номер недели в году в виде целого значения от 1 до 53. Неделя начинается с понедельника и всегда содержит 7 дней. Неделя номер 1 - это первая неделя года, содержащая четверг, или, что то же самое, неделя года, содержащая 4 января. Поэтому возможно, что до трех дней в начале года будут относиться к последней неделе прошлого года. И наоборот, до 3 дней в конце года могут относиться к первой неделе следующего года.
Аргумент должен иметь тип данных дата, отметка времени или правильное строковое представление даты или отметки времени, но не CLOB или LONG VARCHAR.
Результат функции имеет тип INTEGER. Значение результата может быть пустым; если аргумент имеет пустое значение, результат будет иметь пустое значение.
Пример:
Ниже показаны примеры результатов функций WEEK_ISO и DAYOFWEEK_ISO.
DATE WEEK_ISO DAYOFWEEK_ISO ---------- ----------- ------------- 1997-12-28 52 7 1997-12-31 1 3 1998-01-01 1 4 1999-01-01 53 5 1999-01-04 1 1 1999-12-31 52 5 2000-01-01 52 6 2000-01-03 1 1
>>-MQREADALL---(----+----------------------------------------+--> '-служба-приема--+--------------------+--' '-,--правила-службы--' >-----+--------------+--)-------------------------------------->< '-число-строк--'
Схема - MQDB2.
Функция MQREADALL возвращает таблицу, содержащую сообщения и метаданные сообщений, из положения MQSeries, заданного службой-приема, с использованием правил качества обслуживания (QoS), заданного правилами-службы. Выполнение этой операции не удаляет сообщения из очереди, связанной со службой-приема.
Если задано число-строк, число возвращаемых сообщений не превысит числа-строк. Если число-строк не задано, будут возвращены все доступные сообщения. Возвращаемая таблица содержит следующие столбцы:
Примеры:
Пример 1: Этот пример принимает все сообщения из очереди, заданной службой по умолчанию (DB2.DEFAULT.SERVICE), с использованием правил по умолчанию (DB2.DEFAULT.POLICY). Сообщения и все метаданные возвращаются в виде таблицы.
SELECT * FROM table (MQREADALL()) T
Пример 2: Этот пример принимает все сообщения очереди, заданной службой MYSERVICE, с использованием правил по умолчанию (DB2.DEFAULT.POLICY). Возвращаются только столбцы MSG и CORRELID.
SELECT T.MSG, T.CORRELID FROM table (MQREADALL('MYSERVICE')) T
Пример 3: Этот пример читает начало очереди, заданной службой по умолчанию (DB2.DEFAULT.SERVICE), с использованием правил по умолчанию (DB2.DEFAULT.POLICY). Возвращаются только сообщения с CORRELID='1234'. Возвращаются все столбцы.
SELECT * FROM table (MQREADALL()) T WHERE T.CORRELID = '1234'
Пример 4: Этот пример получает первые 10 сообщений из начала очереди, заданной службой по умолчанию (DB2.DEFAULT.SERVICE), с использованием правил по умолчанию (DB2.DEFAULT.POLICY). Возвращаются все столбцы.
SELECT * FROM table (MQREADALL(10)) T
>>-MQRECEIVEALL---(---------------------------------------------> >-----+---------------------------------------------------------------+> '-служба-приема--+-------------------------------------------+--' '-,--правила-службы--+-------------------+--' '-,--id-корреляции--' >-----+-----------------------+--)----------------------------->< '-+----+---число-строк--' '-,--'
Схема - MQDB2.
Функция MQRECEIVEALL возвращает таблицу, содержащую сообщения и метаданные сообщений, из положения MQSeries, заданного службой-приема, с использованием правил качества обслуживания (QoS), заданных правилами-службы. Выполнение этой операции удаляет сообщения из очереди, связанной со службой-приема.
Если задан id-корреляции, возвращаются только сообщения с этим идентификатором корреляции. Если id-корреляции не задан, возвращается сообщение из начала очереди.
Если задано число-строк, число возвращаемых сообщений не превысит числа-строк. Если число-строк не задано, возвращаются все доступные сообщения. Возвращаемая таблица содержит следующие столбцы:
Примеры:
Пример 1: Этот пример принимает все сообщения из очереди, заданной службой по умолчанию (DB2.DEFAULT.SERVICE), с использованием правил по умолчанию (DB2.DEFAULT.POLICY). Сообщения и все метаданные возвращаются в виде таблицы.
SELECT * FROM table (MQRECEIVEALL()) T
Пример 2: Этот пример принимает все сообщения очереди, заданной службой MYSERVICE, с использованием правил по умолчанию (DB2.DEFAULT.POLICY). Возвращаются только столбцы MSG и CORRELID.
SELECT T.MSG, T.CORRELID FROM table (MQRECEIVEALL('MYSERVICE')) T
Пример 3: Этот пример получает все сообщения из начала очереди, заданной службой "MYSERVICE", с использованием правил "MYPOLICY". Возвращаются только сообщения с CORRELID='1234'. Возвращаются только столбцы MSG и CORRELID.
SELECT T.MSG, T.CORRELID FROM table (MQRECEIVEALL('MYSERVICE','MYPOLICY','1234')) T
Пример 4: Этот пример получает первые 10 сообщений из начала очереди, заданной службой по умолчанию (DB2.DEFAULT.SERVICE), с использованием правил по умолчанию (DB2.DEFAULT.POLICY). Возвращаются все столбцы.
SELECT * FROM table (MQRECEIVEALL(10)) T
>>-GET_ROUTINE_SAR----------------------------------------------> >----(--sarblob--,--тип--,--строка-имени-подпрограммы--)-------><
Схема - SYSFUN.
Эта процедура впервые стала доступна в FixPak 3 Версии 7.1.
Процедура GET_ROUTINE_SAR получает информацию, необходимую для установки той же подпрограммы на другом сервере баз данных, работающем в том же уровне той же операционной системы. Информация получается в виде одной строки BLOB, представляющей файл архива SQL. Вызывающий процедуру GET_ROUTINE_SAR должен обладать полномочиями DBADM.
Прим.: | Строка-имени-подпрограммы не должна содержать символ двойной кавычки ("). |
Полное имя подпрограммы используется для определения подпрограммы, информацию для которой нужно получить. Найденная подпрограмма должна быть подпрограммой SQL, иначе возникнет ошибка (SQLSTATE 428F7). Если не используется конкретное имя, может быть найдено несколько подпрограмм и возникнет ошибка (SQLSTATE 42725). В этом случае для получения информации для подпрограммы нужно использовать ее конкретное имя.
Файл SAR должен содержать файл связывания, который может быть недоступен на сервере. Если файл связывания не удалось найти и сохранить в файле SAR, возникает ошибка (SQLSTATE 55045).
>>-PUT_ROUTINE_SAR----------------------------------------------> >----(--sarblob--+-----------------------------------------------------+> '-,--новый_владелец--,--флаг_использования_регистров--' >----)---------------------------------------------------------><
Схема - SYSFUN.
Эта процедура впервые стала доступна в FixPak 3 Версии 7.1.
Процедура PUT_ROUTINE_SAR передает на сервер необходимый файл для создания на нем подпрограммы SQL и затем определяет эту подпрограмму. Вызывающий процедуру PUT_ROUTINE_SAR должен обладать полномочиями DBADM.
Если задано значение 1, специальный регистр CURRENT SCHEMA используется для неспецифицированных имен объектов в определении подпрограммы (включая имя самой подпрограммы), а специальный регистр CURRENT PATH - для неспецифицированных имен подпрограмм и типов данных в определении этой подпрограммы. Если флаг_использования_регистров не задан, предполагается значение 0.
Для находящейся в sarblob информации идентификации выполняется проверка соответствия входных данных среде; если это не так, выдается ошибка (SQLSTATE 55046). Затем процедура PUT_ROUTINE_SAR использует содержимое sarblob, чтобы определить нужную подпрограмму на сервере.
Содержимое аргумента sarblob выделяется в отдельные файлы, составлявшие файл архива SQL. Совместно используемая библиотека и файлы связывания записываются в файлы во временном каталоге. Затем среда настраивается таким образом, чтобы выполняющийся оператор определения подпрограммы знал, что компиляция и связывание не требуются и что доступны положения совместно используемой библиотеки и файлов связывания. Затем содержимое файла DDL используется для динамического выполнения оператора определения подпрограммы.
Прим.: | В данной схеме можно одновременно устанавливать только одну процедуру. |
При выполнении этого оператора могут возникнуть ошибки, как и при выполнении оператора определения подпрограммы через другие интерфейсы. В процессе определения подпрограммы отмечается наличие совместно используемой библиотеки и файлов связывания и пропускаются шаги прекомпиляции, компиляции и компоновки. Файлы связывания используются при выполнении связывания и содержимое обоих файлов копируется в обычный каталог для подпрограмм SQL.
Прим.: | При возникновении ошибок выполнения операций GET ROUTINE или PUT ROUTINE (или соответствующих им процедур) всегда возвращается код ошибки (SQLSTATE 38000) и текст диагностики, содержащий информацию о причине ошибки. Например, если заданное для GET ROUTINE имя процедуры не соответствует ни одной из процедур SQL, возвращается текст диагностики "100, 02000", где "100" и "02000" - соответственно SQLCODE и SQLSTATE, чем указывается причина ошибки. SQLCODE и SQLSTATE в этом примере указывают, что для заданного имени процедуры не найдена строка в таблицах каталога. |