Сравнение таблиц
На страницу 1, 2 След.
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
wolfio Участник - экстремал
Вступление в Клуб: 22.10.2012
|
Вт Фев 19, 2013 06:55  Сравнение таблиц |
|
Полезность: Нет оценки
|
Доброго времени суток, товарищи.
Я не программер, но в целях саморазвития пишу операции, когда работа позволяет отвлечься.
Сейчас дошел до момента, где мне нужно сравнить 2 таблицы.
И так условия:
есть временная таблица, созданная в процессе работы операции, назовем ее таблица А.
Данные в ней такие:
1
2
3
4
5
Есть массив, который походит на таблицу в моем случае, назовем ее Б.
Данные:
1
3
4
5
---
Вопрос: как сделать проверку (через FOR), на данные таблицы А, которых нет в таблице Б?
В результате, в отладку я должен вывести, строку таблицы А, которой нет в Б.
Может и не через For, просто не знаю как по-другому. Подскажите, пожалуйста. |
|
 |
yaffil Профи
Вступление в Клуб: 18.08.2011
|
Вт Фев 19, 2013 08:01   |
|
Полезность: Нет оценки
|
Как то вот так. В лупе делаете чего угодно с данными записями.
Код: | for (select ee (trunc(ee.[DATE]) :A1
,vid_oper(ee.[OPER]) :B1
,nvl(ee.[SUMMA],0) :C1
,to_char(kredit%id) : D1
) in kredit.[LIST_PLAN_PAY]
where ee.[CHANGE]=1
and vid_oper(ee.[OPER]) in (1,2,3)
and ee.[OPER].
minus
select ee2 (trunc(ee2.[CHART_DATE]) :A2
,ee3.[TYPE1] :B2
,nvl(ee3.[SUM1],0) :C2
,ee2.[CREDIT_ID] : D2
) in ::[STR_CHART], (::[STR_CHART_SUM] :ee3)
where ee2.[CHART_ID]=ee3.[CHART_ID]
and ee3.[TYPE1] in (1,2,3)
and ee2.[CREDIT_ID]=kredit
) loop
debug_pipe(' ee '||A1||B1||C1||D1,0);
end loop; |
|
|
 |
wolfio Участник - экстремал
Вступление в Клуб: 22.10.2012
|
Вт Фев 19, 2013 08:29   |
|
Полезность: Нет оценки
|
yaffil, боюсь, что ваш метод мне не подходит, т.к. я сказал сразу - таблица А - это объявленная таблица. Я не могу сделать по ней селект. |
|
 |
yaffil Профи
Вступление в Клуб: 18.08.2011
|
Вт Фев 19, 2013 08:36   |
|
Полезность: Нет оценки
|
wolfio пишет: | yaffil, боюсь, что ваш метод мне не подходит, т.к. я сказал сразу - таблица А - это объявленная таблица. Я не могу сделать по ней селект. |
Читаем внимательно
wolfio пишет: |
Сейчас дошел до момента, где мне нужно сравнить 2 таблицы.
есть временная таблица, созданная в процессе работы операции, назовем ее таблица А
Вопрос: как сделать проверку (через FOR), на данные таблицы А, которых нет в таблице Б?
|
Ни слова ни про какие объявленные таблицы! |
|
 |
wolfio Участник - экстремал
Вступление в Клуб: 22.10.2012
|
Вт Фев 19, 2013 08:40   |
|
Полезность: Нет оценки
|
блин, ну прошу прощения думал будет понятно) давайте решать проблему конструктивно) |
|
 |
vtar Эксперт
Вступление в Клуб: 20.03.2009
|
Вт Фев 19, 2013 09:02   |
|
Полезность: Нет оценки
|
объявленная таблица - table of ?
В таком случае, завести временную таблицу - ТБП с временем жизни до окончания сессии и нужными полями, вставить нужные значения в ТБП - можно select сделать. |
|
 |
wolfio Участник - экстремал
Вступление в Клуб: 22.10.2012
|
Вт Фев 19, 2013 09:06   |
|
Полезность: Нет оценки
|
vtar пишет: | объявленная таблица - table of ?
В таком случае, завести временную таблицу - ТБП с временем жизни до окончания сессии и нужными полями, вставить нужные значения в ТБП - можно select сделать. |
блииин.. она так и сделана:
Код: | type STRUCTURE is record (vid_tune ref [KIND_TUNINGS]
,cod_tun varchar2
,cod_gr varchar2
); --создаем структуру с указанными полями
type table_of_STRUCTURE is table of STRUCTURE; --создаем таблицу на основе структуры
tmptbl table_of_STRUCTURE; --алиас для созданной таблицы |
Это у меня таблица А.
Таблицей Б у меня выступает массив, по которому я бегаю через for |
|
 |
vtar Эксперт
Вступление в Клуб: 20.03.2009
|
Вт Фев 19, 2013 09:15   |
|
Полезность: Нет оценки
|
wolfio пишет: | она так и сделана:
|
не так. Нет у Вас таблицы, есть объект в памяти. Посмотрите в словаре ТБП KLADR_IMPORT - пример временной таблицы. |
|
 |
wolfio Участник - экстремал
Вступление в Клуб: 22.10.2012
|
Вт Фев 19, 2013 09:26   |
|
Полезность: Нет оценки
|
vtar пишет: | wolfio пишет: | она так и сделана:
|
не так. Нет у Вас таблицы, есть объект в памяти. Посмотрите в словаре ТБП KLADR_IMPORT - пример временной таблицы. |
пусть даже так, я упомянул вначале, что не программист, а всего лишь любитель. Честно скажу, что я и четверти документации по словарю данных не прочел еще
Суть Вы поняли, меня ответ интересует, а не то, как это называется.
KLADR_IMPORT - посмотрел. Пропадет в конце чьей сессии? |
|
 |
Alkov Профи
Вступление в Клуб: 23.09.2010
|
Вт Фев 19, 2013 11:02   |
|
Полезность: Нет оценки
|
Для вложенной таблицы либо пользовать CAST, либо как тут на сайте был пример как можно сделать select к вложенным таблицам... |
|
 |
maestro Профи
Вступление в Клуб: 12.10.2010
|
Вт Фев 19, 2013 11:53   |
|
Полезность: Нет оценки
|
Сделай третью таблицу, индексированную по hash из конкатенации полей таблицы 2. При обходе table1 проверяй
table3.exists(utils.hash(...))
Заодно поймешь как HASH_JOIN работает
Ну или два вложенных цикла по каждому из массивов.. Получишь аналог NESTED_LOOPS
Цитата: | тут на сайте был пример как можно сделать select к вложенным таблицам..
|
ЦээФТа при декларировании Nested Table добавляем "index by" в теле пакета. Поэтому напрямую подставить такое в SELECT через table() не получится.
Последний раз редактировалось: maestro (Вт Фев 19, 2013 12:04), всего редактировалось 1 раз |
|
 |
vtar Эксперт
Вступление в Клуб: 20.03.2009
|
Вт Фев 19, 2013 11:59   |
|
Полезность: Нет оценки
|
wolfio пишет: | я упомянул вначале, что не программист, а всего лишь любитель. |
Выражаю опасения, как бы инициатору не снесло крышу от hsh ...
maestro пишет: | Сделай третью таблицу, индексированную по hash из конкатенации полей таблицы |
|
|
 |
maestro Профи
Вступление в Клуб: 12.10.2010
|
Вт Фев 19, 2013 12:07   |
|
Полезность: Нет оценки
|
vtar пишет: |
Выражаю опасения, как бы инициатору не снесло крышу от hsh ...
|
Наберите в Яндексе Hash и посмотрите на картинке в самом верху страницы
http://yandex.ru/yandsearch?text=hash&lr=213
Снеси крышу может  |
|
 |
Volod Эксперт
Вступление в Клуб: 19.09.2007
|
Вт Фев 19, 2013 15:02   |
|
Полезность: Нет оценки
|
Может проще?
Бежать циклом по таблице А, искать в таблице B. (если не миллионы строк) |
|
 |
wolfio Участник - экстремал
Вступление в Клуб: 22.10.2012
|
Ср Фев 20, 2013 01:21   |
|
Полезность: Нет оценки
|
maestro пишет: | Сделай третью таблицу, индексированную по hash из конкатенации полей таблицы 2. При обходе table1 проверяй
table3.exists(utils.hash(...))
Заодно поймешь как HASH_JOIN работает
Ну или два вложенных цикла по каждому из массивов.. Получишь аналог NESTED_LOOPS
Цитата: | тут на сайте был пример как можно сделать select к вложенным таблицам..
|
ЦээФТа при декларировании Nested Table добавляем "index by" в теле пакета. Поэтому напрямую подставить такое в SELECT через table() не получится. |
прошу прощения конечно, но vtar прав, я не программист. про hash я ничего не знаю. если есть возможность найти и показать простой пример из дистрибутива, то очень прошу. РБО 12.5.
Volod, пробовал бегать циклом по таблице А, и искать в Б, но он не бегает по той записи А, которой нет в Б. Может написал не правильно. логика схематично была такой:
for x in b
loop
if x.val = a.val
then ok
else err
end if
end loop |
|
 |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|