Книга: Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ
Написание вашего собственного списка кодов ошибок
Написание вашего собственного списка кодов ошибок
Ради любопытства вы можете легко получить версию gbak для базы данных (с именем gbak.msg) из репозитория CVS проекта Firebird. Войдите на http:// sourceforge.net/projects/firebird и идите по ссылке CVS Browser, пока не доберетесь до ветви с именем ,/firebird/firebird2/src/msgs/. В нижней части дисплея щелкните по стрелке выпадающего списка для поиска интересующей вас ветви. Оттуда вы сможете получить файл.
Следующая хранимая процедура сгенерировала список для приложения 10. Она выводит список во внешнюю таблицу, но вы можете модифицировать эту процедуру подходящим для вас образом.
SET TERM ^;
/* Выходной файл */
CREATE TABLE ERRORCODES
EXTERNAL FILE
'С:Program FilesFirebirdFirebird_1_5MyData27 94app10.txt'
(Listltem CHAR(169))^
COMMIT^
/* При необходимости уберите комментарии в следующей секции и объявите функцию ASCII_CHAR() для получения символов возврата каретки и перевода строки */
/* DECLARE EXTERNAL FUNCTION ascii_char
INTEGER
RETURNS CSTRING(1) FREE_IT
ENTRY_POINT 'IB_UDF_ascii_char' MODULE_NAME 'ib_udf'^
COMMIT^
/* Под конец сама хранимая процедура, создающая текстовый файл, эквивалентный приложению 10 данной книги*/
CREATE PROCEDURE OUTPUT ERRCODES
AS
DECLARE VARIABLE SQC SMALLINT;
DECLARE VARIABLE NUM SMALLINT;
DECLARE VARIABLE FAC SMALLINT;
DECLARE VARIABLE SYM VARCHAR(32);
DECLARE VARIABLE TXTVARCHAR(118) ;
DECLARE VARIABLE GDC CHAR(9) CHARACTER SET OCTETS
DECLARE VARIABLE BASEO INTEGER = 335544320;
DECLARE VARIABLE CALCNUM INTEGER;
DECLARE VARIABLE EOL CHAR(2) ;
BEGIN
EOL = ASCII_CHAR(13) || ASCII_CHAR(10);
/* последовательность конца строки */
FOR SELECT
S.SQL_CODE,
S.NUMBER,
S.FAC_CODE,
S. GDS_SYMBOL,
M.TEXT
FROM SYSTEM_ERRORS S
JOIN MESSAGES M
ON
M.FAC_CODE = S.FAC_CODE
AND M.NUMBER = S.NUMBER
AND M.SYMBOL = S.GDS_SYMBOL
/* Устранение некоторых нежелательных/ненужных кодов */
WHERE M.TEXTNOT CONTAINING 'journal'
AND M.TEXTNOT CONTAINING 'dump'
AND s.GDS_SYMBOL NOT CONTAINING 'license'
AND S.GDS_SYMBOL NOT CONTAINING 'wal_'
AND S. GDS_SYMBOLIS NOT NOLL
AND S.SQL_CODE < 102
ORDER BY1 DESC, 2
INTO :SQC, :NUM, :FAC, :SYM, :TXT
DO
BEGIN
/* Тексты сообщений в нижнем регистре, следовательно, мы выполним небольшой трюк для перевода в верхний регистр первой буквы */
IF (TXT IS NULL) THEN
TXT = '(Message unknown)';
ELSE
TXT = UPPER(SUBSTRING(TXT FROM 1 FOR 1)) ||
SUBSTRING(TXT FROM 2);
/* Разработанные значения кодов (FAC_CODE) и чисел NUMBER используются для генерации чисел GDSCODE. Очень просто получить их из последних таблиц SYSTEM_ERRORS и MESSAGES */
IF (FAC IS NOT NULL AND NUM IS NOT NULL) THEN
/* Нам не нужны наполовину приготовленные коды ошибок! */
BEGIN
CALCNUM = BASE0 + (FAC * 65535);
CALCNUM = CALCNUM + NUM + FAC;
GDC = CAST(CALCNUM AS CHAR(9));
INSERT INTO ERRORCODES
VALUES(
/* все переменные поступают в одной строке */
:SQC || ' | ' || :GDC | | ' | ' || :SYM | | ' |' | | :TXT || :EOL) ;
END
END
END ^
COMMIT^
EXECUTE PROCEDURE OUTPUT_ERRCODES ^
COMMIT ^
SET TERM ; ^
/* Текстовый файл теперь готов к обработке текстовым процессором для небольшой корректировки, чтобы избавиться от лишних пробелов, созданных в правой части выходной строки. Быстрый поиск и замена заменят все разделители '|' на ASCII 9 (tab), потому что это было требованием к табуляции для печати. */
- Перехват ошибок
- Обработка перехваченных ошибок
- Дополнительные национальные кодовые страницы и порядки сортировки
- 7.4.2. Создание собственного LiveCD
- Кроссбраузерность вашего сайта
- Установите тип вашего терминала
- Создание списка
- Добавление, изменение и удаление элементов списка
- Восстановление элементов списка из Корзины
- Добавление, изменение и удаление столбцов списка
- Сортировка и фильтрация списка
- Добавление и изменение представления списка