Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

Уорсли Дж. Дрейк версія 7

Работа добавлена на сайт samzan.net:

Поможем написать учебную работу

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

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 2.6.2024

PAGE  2

        Обробка помилок і виключень (PostgreSQL для профессионалов, Дж. Уорсли, Дж. Дрейк, версія 7.1, стор. 350)  (delete from tab where kod>2;)

        Для ініціювання помилок і виключень у функціях PL/pgSQL служить команда RAISE. Вона передає задану інформацію механізму PostgreSQL elog (стандартна програма ведення протоколу помилок, дані зазвичай прямують у файл /var/log/messages або $PGDATA/serverlog з одночасним виведенням у потік stderr).

        У команді RAISE можна вказати рівень помилки, а також включити змінні та вирази. Відповідні позиції цих змінних позначаються знаками відсотка (%). Команда має вигляд:

        RAISE рівень 'повідомлення' [, ідентифікатор [...]];

        Різні версії PL/pgSQL мають різну кількість рівнів повідомлень. З них тут розглядається три найбільш вживані, вони такі:

  •  DEBUG направляє заданий текст у журнал PostgreSQL та клієнтській програмі, якщо клієнт підключений до кластеру бази даних і вона працює в налагоджувальному режимі. Команди RAISE рівня DEBUG ігноруються базами даних, які працюють у режимі реальної експлуатації;
  •  NOTICE направляє заданий текст у журнал PostgreSQL та клієнтській програмі. Повідомлення передається в будь-якому режимі роботи PostgreSQL; 
  •  EXCEPTION  направляє заданий текст у журнал PostgreSQL та клієнтській програмі.

        Помилка рівня EXCEPTION завершує виконання функції, в якій вона ініціалізована.

      У лістингу 11.48 наведено приклад функції raise_err(), яка містить ініціалізацію виключень і помилки. Проведемо експеримент, запустимо цю програму два рази з різними умовами.

        Лістинг 11.48 Команда RAISE

 

CREATE OR REPLACE FUNCTION raise_err()

 RETURNS integer AS

$BODY$

DECLARE

i integer:= 3;

BEGIN

RAISE DEBUG 'Вивести повідомлення рівня DEBUG';

i:=i*2;

RAISE NOTICE 'Рівень NOTICE';

RAISE NOTICE 'Рівень NOTICE з виводом і=%', i;

RAISE EXCEPTION 'Рівень EXCEPTION і=% (кінець)', i;

RETURN i;

END;

$BODY$

 LANGUAGE plpgsql VOLATILE

 COST 100;

       Результати виконання функції. Повідомлення DEBUG відсутнє, оскільки база даних працює не в налагоджувальному режимі. Інші повідомлення такі:

1. результати в розділі Messages вікна SQL:

NOTICE:  Рівень NOTICE
NOTICE
:  Рівень NOTICE з виводом і=6
ERROR
:  Рівень EXCEPTION і=6 (кінець)
Програма завершена аварійно, результат у вікні
Data Output відсутній.

2. виключено рівень EXCEPTION

NOTICE:  Рівень NOTICE

NOTICE:  Рівень NOTICE з виводом і=6

Результати в розділі Data Output:

6

        39.8 Помилки та повідомлення (Версія PostgreSQL 9.0 Beta)


         Для видачі повідомлень і виклику помилок використовується оператор RAISE.


        RAISE [ level ] ’format’ [, expression [,  ...  ]] [ USING option =  expression [,   ...  ]];

        RAISE [ level ]  condition_name [ USING  option  =  expression  [,  ...   ] ];

        RAISE [ level ]  SQLSTATE     ’sqlstate’ [ USING   option   =  expression  [,  ...   ] ];

        RAISE [ level ]  USING   option   =  expression [,  ...   ];

        RAISE;

         Рівень визначає серйозність помилки. Допускаються рівні: DEBUG, LOG, INFO, NOTICE, WARNING, і EXCEPTION. Рівень EXCEPTION викликає помилку, яка зазвичай перериває поточну транзакцію, він встановлюється за замовчуванням; інші рівні тільки генерують повідомлення різних пріоритетів. Якщо повідомлення має особливий пріоритет або якщо контролюються змінні конфігурації log_min_messages і client_min_messages, то клієнт може його записати в журнал сервера. Див. розділ 18 для отримання додаткової інформації.
         Після рівнів, пишеться формат, який повинен бути рядком літер. Формат рядка вказує текст повідомлення про помилку. Наприкінці рядка формату може стояти необов’язковий аргумент – вирази, які вставляються в повідомлення замість знака %, тобто цей знак замінюється значенням додаткового аргумента. Для букви % треба писати %%. У поданому нижче прикладі, значення v_job_id замінить % у рядок:


         RAISE  NOTICE  ’Calling  cs_create_job(%)’,  v_job_id;

         Можна розширити інформацію про помилку за допомогою виразу:

        секція = значення.

Допускаються слова секції: MESSAGE, DETAIL, HINT, і ERRCODE, а кожне значення виразу може бути будь-яким рядком символів. MESSAGE  задає текст повідомлення про помилку (ця секція не може використовуватися у вигляді RAISE, який включає рядок формату). DETAIL надає детальне повідомлення про помилку, а HINT – підказку. ERRCODE вказує код помилки (SQLSTATE) або її ім’я, як показано в додатку, або безпосередньо код з п’яти символів SQLSTATE. У цьому прикладі буде перервано операцію з видачею повідомлення про помилку і підказки:


        RAISE   EXCEPTION     ’Nonexistent       ID  -->   %’,  user_id 

        USING    HINT   =  ’Please    check    your   user   id’;


         Нижче показано два приклади еквівалентних способи задання SQLSTATE:


  
     RAISE  ’Duplicate  user  ID:  %’, user_id  USING  ERRCODE  =  ’unique_violation’;

        RAISE  ’Duplicate  user  ID:  %’, user_id  USING  ERRCODE  =  ’23505’;

         Існує інший синтаксис, де головним аргументом є ім’я помилки або SQLSTATE:


        RAISE    division_by_zero;

        RAISE    SQLSTATE    ’22012’;

У цей синтаксис, USING може бути використаний для утворення персоналізованого повідомлення про помилку, докладно або підказку. Ще один спосіб зробити раніше приклад


     
  RAISE  unique_violation  USING  MESSAGE = ’Duplicate  user  ID: ’ || user_id;    

       

Ще один варіант полягає в написанні RAISE  USING or RAISE level  USING і покласти все інше в USING список. Останній варіант RAISE не має всіх параметрів. Ця форма може використовуватися тільки всередині EXCEPTION блоку BEGIN, це призводить до помилки в поточному опрацьовуються бути знову кинули на наступному навколишній блок.

         Якщо немає імені, ні вказаний в команді стан SQLSTATE в RAISE EXCEPTION, за замовчуванням використовується RAISE_EXCEPTION (P0001). Якщо немає тексту повідомлення не вказано, за замовчанням використовується ім'я умова або SQLSTATE як текстове повідомлення.

        Примітка: При вказівці коду помилки за кодом SQLSTATE, ви не обмежені в зумовленні кодів помилок, але можна вибрати будь-яку помилку код, що складається з п'яти цифр та / або ASCII-літери верхнього регістру, крім 00000. Рекомендується уникати кодів помилок, які мають три нулі, тому що ці категорії кодів і може бути тільки захоплених захоплення всієї категорії.

        Обробка помилки:

SELECT  * INTO  myrec  FROM  emp  WHERE  empname = myname;

IF  NOT  FOUND  THEN

     RAISE  EXCEPTION   ’employee  %  not  found’, myname;

END  IF;

        If the STRICT option is specified, the query must return exactly one row or a run-time error will be reported, either NO_DATA_FOUND (no rows) or TOO_MANY_ROWS (more than one row). You can use an exception block if you wish to catch the error, for example:

BEGIN

SELECT * INTO STRICT myrec FROM emp WHERE empname = myname;

EXCEPTION

WHEN NO_DATA_FOUND THEN

RAISE EXCEPTION ’employee % not found’, myname;

WHEN TOO_MANY_ROWS THEN

RAISE EXCEPTION ’employee % not unique’, myname;

END;

CREATE TABLE tab

(kod integer PRIMARY KEY NOT NULL, naz character(50));




1. Эпоха великих завоеваний.html
2. Эксплуатация систем газораспределения газопотребления
3. Создать интерфейс для работы с базой данных
4. Варкрафта. Внвь за власть над Азеротом сражаются две стороны ~ Орда Horde и Союз llince ~ и каждый раз начиная и.
5. Явление запаздывания потенциала
6. Реферат- Политические права и свободы человека- виды, содержание и правовое регулирование
7. Во многих школах средних учебных заведениях вузах воспитание как педагогическая цель вообще отсутствует Д
8. то результатов достичь поставленных целей
9. Статья- Заметка об экологической необходимости человеческого общения для очеловечивающего саморазвития
10. е именно тогда когда дух понимается как отображение вечной идеи
11. Реферат- Социально-экономические отношения в Картлийском царстве в эллинистическую эпоху
12. Грубые корма
13. Основы бухгалтерии
14. .Установка Windows XP на виртуальную машину Virtul PC 200х.
15. Россия - светское государство
16. ААмонашвили Баллада о воспитании Истинное воспитание Ребёнка ~ в воспитании самих себя Нин
17. ЧУДЕСА ПОД НОВЫЙ ГОД СЦЕНАРИЙ ТЕАТРАЛИЗОВАННОЙ ПОСТАНОВКИ ДЛЯ ДЕТЕЙ СТАРШЕГО ДОШКОЛЬНОГО
18. тема сбора анализа отслеживания коррекции сопоставления результатов наблюдения для обоснования стратеги
19. Лекция 6 Основы экологии города Город как социальное явление Города ~ относительно позднее яв
20. профилактических учреждений городов и районов сельской местности независимо от их ведомственной принадлеж