Poprzedni post zakończyłem następującym zapytaniem:
SELECT* FROM ALL_TABLES WHERE OWNER = 'HR'
MODEL
DIMENSION BY (TABLE_NAME AS NAZWA_TABELI)
MEASURES(
NUM_ROWS AS LICZBA_WIERSZY,
'NIC' AS NUM_ROWS,
TRUNC(SYSDATE) AS DATA,
CAST(NULL AS VARCHAR2(30 CHAR) ) AS TEKST,
1 LICZBA)
RULES();
Co w nim mamy:
- definicję wymiaru (tutaj nazwa tabeli)
- definicje kolumn, dla których określmy, typ, wielkość i ew wartość domyślną
- pustą klauzulę RULES()
REGIONS 4 NIC 2018-11-10 00:00:00 1
COUNTRIES 25 NIC 2018-11-10 00:00:00 1
LOCATIONS 23 NIC 2018-11-10 00:00:00 1
DEPARTMENTS 27 NIC 2018-11-10 00:00:00 1
JOBS 19 NIC 2018-11-10 00:00:00 1
EMPLOYEES 107 NIC 2018-11-10 00:00:00 1
JOB_HISTORY 10 NIC 2018-11-10 00:00:00 1
Zakładamy, że na razie używamy domyślnych ustawień klauzuli model. Klauzula RULES() zawiera sposób wyliczenia kolumn zdefiniowanych w klauzuli MEASURES() .Klauzula ta oczywiście może być pusta,Odwołanie do poszczególnych wartości w kolumnach następuje za pomocą nawiasu kwadratowego.
Korzystamy z dwóch predefiniowanych operacji dostępu CV() i ANY, gdzie CV() to bieżaca wartość wymiaru, a ANYto dowolna wartość wymiaru. CV() wykorzystuje się w wyrażeniach dla bieżącego wiersza, a ANYdla operacji agregujących lub przy ustawianiu wartości dla całej kolumny
Zacznijmy od najprostszych
RULES( NUM_ROWS['JOBS'] = -1 );
Powyższa klauzula wstawiona do zapytania zmieni nam jedną wartość, co widać poniżej na czerwono:
REGIONS 4 NIC 2018-11-10 00:00:00 1
COUNTRIES 25 NIC 2018-11-10 00:00:00 1
LOCATIONS 23 NIC 2018-11-10 00:00:00 1
DEPARTMENTS 27 NIC 2018-11-10 00:00:00 1
JOBS -1 NIC 2018-11-10 00:00:00 1
EMPLOYEES 107 NIC 2018-11-10 00:00:00 1
RULES( NUM_ROWS['JOBS'] = 44 , NUM_ROWS['JOBS'] = -1 );
Powyższa klauzula ustawia wartość wiersza w kolumnie NUM_|ROWS dla tabeli JOBS najpierw
na 44, a później na- 1, wynik taki sam jak dla przypadku
RULES( NUM_ROWS['JOBS'] = -1 );
RULES(
TEKST[ NAZWA_TABELI<>'JOBS' ] = 'To nie jest robota'
);
Klauzula powyżej dla wszystkich rekordów, gdzie nazwa tabeli jest inna ni z JOBS ustawia w kolumnie TEKST wartość: To nie jest robota. Otrzymujemy poniższy wynik
REGIONS 4 NIC 2018-11-12 00:00:00 To nie jest robota 1
COUNTRIES 25 NIC 2018-11-12 00:00:00 To nie jest robota 1
LOCATIONS 23 NIC 2018-11-12 00:00:00 To nie jest robota 1
DEPARTMENTS 27 NIC 2018-11-12 00:00:00 To nie jest robota 1
JOBS 19 NIC 2018-11-12 00:00:00 1
EMPLOYEES 107 NIC 2018-11-12 00:00:00 To nie jest robota 1
JOB_HISTORY 10 NIC 2018-11-12 00:00:00 To nie jest robota 1