SQL:
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
| create or replace procedure update_demografie_dimklant is cursor cursklant is select * from klantdim for update of demografiekey; l_klantnr number; l_waarde number; l_kind number; l_inkomen number; l_rijksregisternr number; k_klant number; k_demografie number; begin for recklant in cursklant loop select klantnummer, inkomen into l_klantnr, l_inkomen from klant where rijksregisternr=recklant.rijksregisternr; --huidige demografie van de klant bepalen select nvl(sum(waarde),0) into l_waarde from eigendom where klantnummer=l_klantnr; --aantal kinderen berekenen select count(*) into l_kind from kind where klantnr = l_klantnr; k_demografie := zoek_demografie(l_kind, l_inkomen, l_waarde); update klantdim set demografiekey = k_demografie where current of cursklant; end loop; end; / list show errors; |
Ik ben bezig met het laatste opdrachtje voor mijn examen (Datawarehousing), echter zit ik hier al enkele ettelijke uren op te zwoegen.
In de tabel klantdimensies worden ALLE klantversies bijgehouden. Het kan dus zijn dat verschillende rijksregisternummers dubbel voorkomen, maar dan met een ander adres (vb: een verhuis)
In de tabel klant worden alle huidige klantversies bijgehouden die gebruikt worden door de 'filialen'. Hier is dus enkel de laatste versie van elke klant nuttig.
Nu moet ik door middel van een procedure ervoor zorgen dat de demografiegegevens, dit is een code op basis van loon, aantal kinderen en onroerend goed, aan de klantversie in de klantdimensie wordt gekoppeld.
Er is echt een addertje onder het gras: het kan zijn dat de klant nog wel bestaan in klantdimensie, maar niet meer in de klantentabel die gebruikt wordt voor de filialen. Hierop loopt deze procedure dus vast, aangezien het loon, aantal kinderen, ... daar nog steeds uitgehaald wordt.
De klant in de tabel "klant" laten staan MAG niet, laten we er vanuitgaan dat er reeds een heel systeem rond geschreven is dat niet aangepast kan worden.
Er zou dus een systeem moeten zijn, dat er voor zorgt dat hij controleert of het rijksregisternummer dat in de klantendimensie staat, gecontroleerd wordt in de tabel klant. Wanneer dit niet bestaat, moet hij alle update's niet uitvoeren.
Hopelijk is het duidelijk.
[ Voor 3% gewijzigd door bartgabriels op 05-06-2006 20:43 ]