Obliczenie różnić

Odpowiedz Nowy wątek
2019-01-04 10:51
mar_mar96
0

Witam,
poniższe zapytanie wyświetli mi obiekty które są w pierwszej bazie(połączenie dblink), ale nie ma ich w drugiej.
SELECT count(*), owner, object_type
FROM [email protected] d1 WHERE NOT EXISTS
(SELECT owner, object_type FROM dba_objects d2
WHERE d1.owner = d2.owner and d1.object_type = d2.object_type)
and d1.owner not in ('SYS', 'SYSTEM', 'PUBLIC', 'SYSAUX') group by owner, object_type;

Natomiast chciałbym otrzymać różnicę obiektów z pierwszej i drugiej bazy oraz ich count. Operator MINUS wskazuje błędne wyniki.
Czy macie na to rozwiązanie jakieś pomysły?

Dzięki i życzę szczęśliwego nowego roku!!!

Pozostało 580 znaków

2019-01-04 11:51
0

Może tak?

select 
  count(0),
  owner,
  object_type 
from (
  select owner,object_type,object_name from dba_objects
  minus
  select owner,object_type,object_name from [email protected]
) 
group by 
  owner,
  object_type

Pozostało 580 znaków

2019-01-04 13:34
mar_mar96
0

Niestety zapytanie nie zwraca poprawnego wyniku przykładowo:
select count(0), owner, object_type from [email protected] where owner = 'SYS' and object_type = 'INDEX' group by owner, object_type;
-- zwróci 213

select count(0), owner, object_type from dba_objects where owner = 'SYS' and object_type = 'INDEX' group by owner, object_type;

-- zwróci również 213

a po wykonaniu zapytania wynik jest następujący:

9 SYS INDEX

A nie powinno zwrócić tego rekordu gdyż count w obu przypadkach jest równy.

Moim zdaniem bez sensu patrzeć na ilość obiektów danego typu. Prosty przykład: OWNER1: TABELA_X,TABELA_Y - ma 2 tabele, [email protected]: TABELA_A, TABELA_B - też ma 2 tabele. Ilość się zgadza, obiekty nie. Może opisz czym jest dla Ciebie "różnica" między stanem na bazieA i bazieB. - yarel 2019-01-04 14:13

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0