powered by simpleCommunicator - 2.0.33     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Обработка ошибок в динамическом sql
2 сообщений из 2, страница 1 из 1
Обработка ошибок в динамическом sql
    #40138615
ATeplov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, создаю динамически таблицы по списку, как организовать обработку ошибок, если какая либо таблица не была создана по любой причине то записать лог и продолжить выполнение ?? Ниже привожу пример кода, возможна ли обработка внутри одной ф-ции или сам ddl выводить в отдельную ф-цию а здесь только вызывать её с параметрами
Код: PL/pgSQL
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
DECLARE
 arh_tab_cur CURSOR for SELECT name_table,name_prefix FROM owner_ink.arh_list_tables;
 arh_tab_rec RECORD;
 _id_event int4;
 _status              bpchar(32);
BEGIN

LOOP
FETCH NEXT FROM arh_tab_cur INTO arh_tab_rec;
EXIT WHEN NOT FOUND;

  _status = 'COMPLITE';
  EXECUTE 'INSERT INTO owner_ink.arh_events (id_event,fdate,desc_event) VALUES ('||_id_event||',now(),'||chr(39)||'создание таблицы '||arh_tab_rec.name_prefix||'_'||arh_tab_rec.name_table||' '||chr(39)||')';

  BEGIN
    EXECUTE 'CREATE TABLE owner_ink.'||arh_tab_rec.name_prefix||'_'||arh_tab_rec.name_table||' as TABLE owner_ink.'||arh_tab_rec.name_table||' with NO DATA';
    EXCEPTION WHEN OTHERS then
      _status = 'FALIED';
   END;

  EXECUTE 'UPDATE owner_ink.arh_events SET status='||chr(39)||_status||chr(39)||',edate=now() WHERE id_event='||_id_event;

END LOOP;
CLOSE arh_tab_cur;
END;
...
Рейтинг: 0 / 0
Обработка ошибок в динамическом sql
    #40138616
ma1tus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ATeplov  16.05.2024, 11:55
[игнорируется]
Добрый день, создаю динамически таблицы по списку, как организовать обработку ошибок, если какая либо таблица не была создана по любой причине то записать лог и продолжить выполнение ?? Ниже привожу пример кода, возможна ли обработка внутри одной ф-ции или сам ddl выводить в отдельную ф-цию а здесь только вызывать её с параметрами
Код: PL/pgSQL
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
DECLARE
 arh_tab_cur CURSOR for SELECT name_table,name_prefix FROM owner_ink.arh_list_tables;
 arh_tab_rec RECORD;
 _id_event int4;
 _status              bpchar(32);
BEGIN

LOOP
FETCH NEXT FROM arh_tab_cur INTO arh_tab_rec;
EXIT WHEN NOT FOUND;

  _status = 'COMPLITE';
  EXECUTE 'INSERT INTO owner_ink.arh_events (id_event,fdate,desc_event) VALUES ('||_id_event||',now(),'||chr(39)||'создание таблицы '||arh_tab_rec.name_prefix||'_'||arh_tab_rec.name_table||' '||chr(39)||')';

  BEGIN
    EXECUTE 'CREATE TABLE owner_ink.'||arh_tab_rec.name_prefix||'_'||arh_tab_rec.name_table||' as TABLE owner_ink.'||arh_tab_rec.name_table||' with NO DATA';
    EXCEPTION WHEN OTHERS then
      _status = 'FALIED';
   END;

  EXECUTE 'UPDATE owner_ink.arh_events SET status='||chr(39)||_status||chr(39)||',edate=now() WHERE id_event='||_id_event;

END LOOP;
CLOSE arh_tab_cur;
END;
добавь raise внутрь вложенного блока, проверишь логику
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Обработка ошибок в динамическом sql
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]