powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Заполнить таблицу данными из справочника на n-процентов (%)
16 сообщений из 16, страница 1 из 1
Заполнить таблицу данными из справочника на n-процентов (%)
    #34079410
SunnyVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите, пожалуйста, как мне реализовать заполнение таблицы данными значениями из справчоника, например, на 30%?
(DB2 UDB for iSeries (AS/400) V5R3)

Допустим, у меня есть таблица Tabl1 с полями
Number_id integer,
Class Varchar(30)
и справочник Tabl_Class с полями
Class_id Integer,
Class Varchar(30)

В справчонике Tabl_Class пускай 150 записей, а в таблице Tabl1 500... (Это так для примера, по идеи, нужно ещё предварительно узнавать кол-во строк в той и в другой таблице)

Заранее огромное спасибо
...
Рейтинг: 0 / 0
Заполнить таблицу данными из справочника на n-процентов (%)
    #34081120
SunnyVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вроде нашла решение, как заполнять таблицу из правочник на n-% случайными данными из справочника...
Но решение получилось громоздким...

да плюс что-то временные таблицы мне не совсем удается верно создать...
...
Рейтинг: 0 / 0
Заполнить таблицу данными из справочника на n-процентов (%)
    #34081261
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Объясните, что значит "заполнение на n-% данными из справочника" в вашем понимании?
А остальную часть справочника что, заполнять не надо?
Какое именно поле справочника копируется в какое поле таблицы и по какому принципу?
...
Рейтинг: 0 / 0
Заполнить таблицу данными из справочника на n-процентов (%)
    #34083274
SunnyVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
т.е. например заполнить какое-то поле таблицы значениями из справочника (причем сами значения берутся случайным образом) на 20%... Да остальные 80% у этого поля остаются пустыми...
...
Рейтинг: 0 / 0
Заполнить таблицу данными из справочника на n-процентов (%)
    #34083532
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Чтоб отобрать случайным образом 10 строк таблицы во временную таблицу, можно сделать так:
Код: plaintext
1.
2.
3.
4.
5.
6.
declare global temporary table session.t as (
select <key> 
from tabl1
order by rand()
fetch first  10  rows only
) with data with replace on commit preserve rows;
Таким образом вы отбираете все строки, которые будете потом обновлять.
Потом вам надо пронумеровать все строки справочника без пропусков.
Создаете темповую таблицу типа:
Код: plaintext
1.
2.
3.
4.
declare global temporary table session.r (
  <value> -- для значения из справочника, которым будете заполнять tabl1
, $id int generated always as identity
) with replace on commit preserve rows;
И вставляете туда записи из справочника:
Код: plaintext
insert into session.r (<value>) select <value> from Tabl_Class;
И, наконец:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
update tabl1 t
set <value>=
(
select <value> 
from session.r 
where $id= 1 +round(rand()*(<число_строк_в_справочнике>- 1 ),  0 )
)
where exists
(
select  1  from session.t where <key>=t.<key>
);
...
Рейтинг: 0 / 0
Заполнить таблицу данными из справочника на n-процентов (%)
    #34083572
SunnyVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо огромное за совет...
я пока плохо разбираюсь во временных таблицах...
не могли бы Вы мне "на пальцах" объяснить типы временных талиц, которые Вы предложили
- with data with replace on commit preserve rows
- with replace on commit preserve rows
...
Рейтинг: 0 / 0
Заполнить таблицу данными из справочника на n-процентов (%)
    #34083670
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тип временных таблиц всегда один.
Опциональные директивы определяют поведение этих таблиц при разных действиях:
with replace - если была временная таблица с таким именем, убить ее сначала;
on commit preserve rows - при коммите сохранять(а не убивать) строки.
Тут об этом подробно написано.
...
Рейтинг: 0 / 0
Заполнить таблицу данными из справочника на n-процентов (%)
    #34083825
SunnyVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо огромное! попробую все реализовать со временными таблицами...
...
Рейтинг: 0 / 0
Заполнить таблицу данными из справочника на n-процентов (%)
    #34084195
SunnyVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark, Вы здесь берете значение из справочника случайным образом по полю $id
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
update tabl1 t
set <value>=
(
select <value> 
from session.r 
where $id= 1 +round(rand()*(<число_строк_в_справочнике>- 1 ),  0 )
)
where exists
(
select  1  from session.t where <key>=t.<key>
);

А примененима ли функция RRN для временных таблиц?
Т.е. сделать так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
update tabl1 t
set <value>=
(
select <value> 
from session.r 
where RRN(session.r)= 1 +round(rand()*(<число_строк_в_справочнике>- 1 ),  0 )
)
where exists
(
select  1  from session.t where <key>=t.<key>
);

...
Рейтинг: 0 / 0
Заполнить таблицу данными из справочника на n-процентов (%)
    #34084320
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SunnyVaА примененима ли функция RRN для временных таблиц?Применима, только писать надо так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
update tabl1 t
set <value>=
(
select <value> 
from session.r r
where RRN(r)= 1 +round(rand()*(<число_строк_в_справочнике>- 1 ),  0 )
)
where exists
(
select  1  from session.t where <key>=t.<key>
);
Но:
по-хорошему после перенумерования для производительности надо создать индекс по $id.
Доступ по rrn() ведет к табличному сканированию.
...
Рейтинг: 0 / 0
Заполнить таблицу данными из справочника на n-процентов (%)
    #34084356
SunnyVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
да я тоже только что проверила... RRN сработал...
Mark, да поняла, что для производительности лучше создавать id... сейчас попробую как раз это...
...
Рейтинг: 0 / 0
Заполнить таблицу данными из справочника на n-процентов (%)
    #34087216
SunnyVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот все хорошо в данной конструкции
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
update tabl1 t
set <value>=
(
select <value> 
from session.r 
where $id= 1 +round(rand()*(<число_строк_в_справочнике>- 1 ),  0 )
)
where exists
(
select  1  from session.t where <key>=t.<key>
);

но не срабатывает выбор случайной строки из временной таблицы-справочника
всегда берет только первое значение... Как мне с этим бороться?
...
Рейтинг: 0 / 0
Заполнить таблицу данными из справочника на n-процентов (%)
    #34087519
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Очень интересно...
Действительно, оно на iSeries так как-то странно работает.
Но это все равно лучше чем на винде у меня, там оно просто ошибку выдает.
В общем, глючит и там, и там. :)
Сделайте так:
Код: plaintext
1.
2.
3.
4.
5.
6.
declare global temporary table session.t as (
select <key>
,  1 +round(rand( 1 )*(<число_строк_в_справочнике>- 1 ),  0 ) $id 
from tabl1
order by rand()
fetch first  10  rows only
) with data with replace on commit preserve rows;
и
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
update tabl1 t
set <value>=
(
select r.<value> 
from session.r r
join session.t a on r.$id=a.$id
where a.<key>=t.<key>
)
where exists
(
select  1  from session.t where <key>=t.<key>
);
...
Рейтинг: 0 / 0
Заполнить таблицу данными из справочника на n-процентов (%)
    #34087824
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark BarinsteinОчень интересно...
Действительно, оно на iSeries так как-то странно работает.
Но это все равно лучше чем на винде у меня, там оно просто ошибку выдает.
В общем, глючит и там, и там.Эта была моя ошибка, 1-й мой алгоритм - ошибочный был...
...
Рейтинг: 0 / 0
Заполнить таблицу данными из справочника на n-процентов (%)
    #34091818
SunnyVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
во временных таблицах я храню большие объемы промежуточной информации... целесообразно мне использовать опцию NOT LOGGED при создании временных таблиц?
...
Рейтинг: 0 / 0
Заполнить таблицу данными из справочника на n-процентов (%)
    #34092025
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если вам не надо откатывать при rollback изменения, произведенные в этой таблице, то, по-моему, смыла не использовать not logged я не вижу.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Заполнить таблицу данными из справочника на n-процентов (%)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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