powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / неточность данных в syscatalog
9 сообщений из 9, страница 1 из 1
неточность данных в syscatalog
    #35213339
Kru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня такая проблема, что запросы к syscatalog возвращают не совсем правильные ответы.
Есть подозрение, что метаданные не совсем правильные.

Может ли такое быть и как можно обновить метаданные?

Заранее большое спасибо
...
Рейтинг: 0 / 0
неточность данных в syscatalog
    #35213937
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KruЕсть подозрение, что метаданные не совсем правильные.Пример можно?
KruМожет ли такое быть и как можно обновить метаданные?Нет.
...
Рейтинг: 0 / 0
неточность данных в syscatalog
    #35216083
Kru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mark Barinstein KruЕсть подозрение, что метаданные не совсем правильные.Пример можно?


Можно:

Код: plaintext
1.
2.
select * from SYSCAT.ROUTINEDEP r
where r.BSCHEMA = 'имя схемы'
and r.ROUTINENAME = 'имя процедуры'

Для простоты имя и специфик имя одинаковы.

Запрос возвращает 1 строку где BNAME содержит имя пакаджа.

Однако код процедуры содержит insert into schema_name.table1.. select from schema_name.table2 и тоже delete from schema_name.table3

Мне нужно написать такой запрос который бы возвращал table1, table2 и table3, т.к. процедура зависит от этих таблиц.

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

Заранее огромное спасибо
...
Рейтинг: 0 / 0
неточность данных в syscatalog
    #35216151
mustaccio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kru

Запрос возвращает 1 строку где BNAME содержит имя пакаджа.

Однако код процедуры содержит insert into schema_name.table1.. select from schema_name.table2 и тоже delete from schema_name.table3

Мне нужно написать такой запрос который бы возвращал table1, table2 и table3, т.к. процедура зависит от этих таблиц.



Осталось сделать всего один шаг, чтобы, зная имя пакиджа, извлечь необходимую информацию из SYSCAT.PACKAGEDEP...
...
Рейтинг: 0 / 0
неточность данных в syscatalog
    #35216544
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KruМне нужно написать такой запрос который бы возвращал table1, table2 и table3, т.к. процедура зависит от этих таблиц.
Код: plaintext
1.
2.
3.
4.
5.
6.
select p.*
from SYSCAT.ROUTINEDEP r
join syscat.packagedep p on r.bschema=p.pkgschema and r.bname=p.pkgname
where r.BSCHEMA = 'имя схемы'
and r.ROUTINENAME = 'имя процедуры'
and r.btype='K'
...
Рейтинг: 0 / 0
неточность данных в syscatalog
    #35219027
Kru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Запрос к SYSCAT.PACKAGEDEP
Код: plaintext
1.
2.
3.
4.
5.
6.
select p.*
from SYSCAT.ROUTINEDEP r
join syscat.packagedep p on r.bschema=p.pkgschema and r.bname=p.pkgname
where r.BSCHEMA = 'имя схемы'
and r.ROUTINENAME = 'имя процедуры'
and r.btype='K'

возвращает BNAME = SYSDUMMY1

текст процедуры из запроса
Код: plaintext
1.
2.
3.
select r.TEXT
from SYSCAT.ROUTINES r
where r.ROUTINESCHEMA = 'схема'
and r.ROUTINENAME = 'имя процедуры'

содержит операции с постоянными таблицами из базы данных.

Я попробовал пересоздать процедуру из скрипта на другой базе, после чего выполнил запрос. Результат такой-же: BNAME = SYSDUMMY1

Попробовал выполнить запрос для произвольно взятой другой процедуры: он вернул список таблиц и даже индексов.

Странно, почему для 1й процедуры возвращает SYSDUMMY1.

Интересно это только у меня такая проблема?

Версия : select * from sysibm.sysversions --> 9010400

Всем заранее большой спасибо за отклик
...
Рейтинг: 0 / 0
неточность данных в syscatalog
    #35231080
Kru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа,
я обнаружил одну интересную особенность, что syscat не возвращает имена только тех таблиц которые в процедурах используются в запросам вместе со временными таблицами. Я сделал небольшой тестик, который демонстрирует это поведение.

Вопрос. Что это? Багафича?

Заранее очень благодарен за отклик

Код: plaintext
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.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
create table MY_SCHEMA.TEST_PROC_TAB (id smallint);

insert into MY_SCHEMA.TEST_PROC_TAB values  1 , 2 , 3 ;


CREATE PROCEDURE MY_SCHEMA.TEST_PROC()
    SPECIFIC TEST_PROC
    RESULT SETS  1 
    NOT DETERMINISTIC
    NULL CALL
    LANGUAGE SQL
BEGIN
  DECLARE OUT_CURSOR CURSOR WITH RETURN FOR
  select * from MY_SCHEMA.TEST_PROC_TAB;
  
  OPEN OUT_CURSOR;
END
;

CREATE PROCEDURE MY_SCHEMA.TEST_PROC_1()
    SPECIFIC TEST_PROC_1
    RESULT SETS  1 
    NOT DETERMINISTIC
    NULL CALL
    LANGUAGE SQL
BEGIN
   IF ( 1  =  2 ) THEN
     DECLARE GLOBAL TEMPORARY TABLE SESSION.t_temp(i smallint) NOT LOGGED ;
   END IF;

 P: BEGIN
  DECLARE OUT_CURSOR CURSOR WITH RETURN FOR
  select a.* from MY_SCHEMA.TEST_PROC_TAB a
  left join SESSION.t_temp t
  on a.id = t.i;

  OPEN OUT_CURSOR;
 END P; 
END
;


select p.* from SYSCAT.ROUTINEDEP d
join SYSCAT.ROUTINES r on d.ROUTINENAME = r.SPECIFICNAME
join syscat.packagedep p on d.bschema=p.pkgschema and d.bname=p.pkgname
and d.ROUTINESCHEMA = r.ROUTINESCHEMA
where r.ROUTINESCHEMA = 'MY_SCHEMA'
and  r.ROUTINENAME = 'TEST_PROC';

select p.* from SYSCAT.ROUTINEDEP d
join SYSCAT.ROUTINES r on d.ROUTINENAME = r.SPECIFICNAME
join syscat.packagedep p on d.bschema=p.pkgschema and d.bname=p.pkgname
and d.ROUTINESCHEMA = r.ROUTINESCHEMA
where r.ROUTINESCHEMA = 'MY_SCHEMA'
and  r.ROUTINENAME = 'TEST_PROC_1';

drop procedure MY_SCHEMA.TEST_PROC;

drop procedure MY_SCHEMA.TEST_PROC_1;

drop table MY_SCHEMA.TEST_PROC_TAB;
...
Рейтинг: 0 / 0
неточность данных в syscatalog
    #35231893
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KruГоспода,
я обнаружил одну интересную особенность, что syscat не возвращает имена только тех таблиц которые в процедурах используются в запросам вместе со временными таблицами. Я сделал небольшой тестик, который демонстрирует это поведение.

Вопрос. Что это? Багафича?Это фича.
Команды, в которых встречаются временные таблицы, не связываются статически.
А в системый каталог заносится информация только о статичеких командах.
...
Рейтинг: 0 / 0
неточность данных в syscatalog
    #35233948
Kru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mark Barinstein KruГоспода,
я обнаружил одну интересную особенность, что syscat не возвращает имена только тех таблиц которые в процедурах используются в запросам вместе со временными таблицами. Я сделал небольшой тестик, который демонстрирует это поведение.

Вопрос. Что это? Багафича?Это фича.
Команды, в которых встречаются временные таблицы, не связываются статически.
А в системый каталог заносится информация только о статичеких командах.

Спасибо.

Интересно, а как IBM предлагает определять постоянные объекты от которых зависит процедура в случае описанном выше.
Например, как быть если есть база данных с сотней таблиц и процедур и нужно часть из этих процедур смигрировать на другой сервер, причём смигрировать вместе с зависимыми таблицами (в более сложном случае ещё и смигрировать триггеры которые тоже зависят от таблиц, на которых тоже могут быть триггеры :-))) )

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

Заранее огромное спасибо
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / неточность данных в syscatalog
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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