PLSQL ORA-01422 & ORA-06512 fetch to many rows I NEED HELP PLS!!!
From: iko <iko_at_iko.demon.nl>
Date: 18 Jun 2002 02:53:21 -0700
Message-ID: <ca270eb5.0206180153.703d744d_at_posting.google.com>
-------Nu: spool file:
select '' from dual;
execute dbms_output.put_line ('Nu volgen nadere bijzonderheden per persoon');
select '' from dual;
select decode(0,count(*),
' Telefoonnrs ok, d.w.z. niet te lang', count(*)||
' X Telefoonnr te lang. (-> Telefoonnr leeg in COPIE)')
from point where
length(point.PHONE) > 12;
set heading on
select ' ' ||
emplid EMPLID, phone PHONE
from point where
length(point.PHONE) > 12;
update point p set p.PHONE = NULL
where
length(p.PHONE) > 12;
execute dbms_output.put_line
select decode(0,count(*),
' Huisadressen ok, d.w.z. niet te lang.',count(*)||
' X Huisadres te lang. (-> Aanpassing in COPIE)')
from point where
LENGTH(ADDRESS1||
' '||
NL_POST_NR||
NL_NUMHS_ADD) > 35;
select decode(0,count(*),
' ----', ' Adres/adressen volgens POINT:')
from point where
LENGTH(ADDRESS1||
' '||
NL_POST_NR||
NL_NUMHS_ADD) > 35;
set heading on
select ' '||
emplid EMPLID, ADDRESS1||
' '||
NL_POST_NR||
NL_NUMHS_ADD POINT_ADRES
from point where
LENGTH(ADDRESS1||
' '||
NL_POST_NR||
NL_NUMHS_ADD) > 35;
set heading off
select decode(0,count(*),
' ----', ' Adres/adressen wordt/worden in COPIE:')
from point where
LENGTH(ADDRESS1||
' '||
NL_POST_NR||
NL_NUMHS_ADD) > 35;
set heading on
select ' '||
emplid EMPLID,
substr(ADDRESS1,1,35-LENGTH(' '||
NL_POST_NR||
NL_NUMHS_ADD))||
' '||
NL_POST_NR||
NL_NUMHS_ADD COPIE_ADRES
from point where
LENGTH(ADDRESS1||
' '||
NL_POST_NR||
NL_NUMHS_ADD) > 35;
update point
set ADDRESS1 = substr(ADDRESS1,1,35-LENGTH(' '|| NL_POST_NR||
NL_NUMHS_ADD))
where
LENGTH(ADDRESS1||
' '||
NL_POST_NR||
NL_NUMHS_ADD) > 35;
execute dbms_output.put_line
-- Opm.: in Point zijn A en T codes voor aankomende en tijdelijke emplid's;
set heading off
select decode(0,count(*),
' Registernummers ok: zonder Spatie, A of T.', count(*)||
' X Spatie, A of T in registernummer (emplid). (-> Persoon niet naar
COPIE)')
from point where
set heading on
select ' '||
emplid EMPLID
from point where
delete
from point where
execute dbms_output.put_line
select decode(0,count(*),
' Naamvolgorde-codes: ok.', count(*)||
' X Onbekende naamvolgorde (nl_name_preference). (-> Persoon niet
naar COPIE)')
from point where
point.nl_name_preference not in ('1','2','3','4'); set heading on
select ' '||
emplid EMPLID, nl_name_preference NL_NAME_PREFERENCE from point where
point.nl_name_preference not in ('1','2','3','4'); delete
from point where
point.nl_name_preference not in ('1','2','3','4'); execute dbms_output.put_line
select decode(0,count(*),
' Geslacht-codes ok', count(*)||
' X Onbekende sex code (nl. niet 1 of 2). (-> Persoon niet naar
COPIE)')
from point where
point.sex not in ('1','2');
set heading on
select ' '||
emplid EMPLID, sex SEX_CODE
from point where
point.sex not in ('1','2');
delete
from point where
point.sex not in ('1','2');
execute dbms_output.put_line
select decode(0,count(*),
' Geboortedata ok, d.w.z. zonder spaties.', count(*) ||
' X Spatie(s) in birthdate. (-> Persoon niet naar COPIE)')
from point where
instr(birthdate, ' ') <> 0 ;
set heading on
select ' '||
emplid EMPLID
from point where
instr(birthdate, ' ') <> 0 ;
delete
from point where
instr(birthdate, ' ') <> 0 ;
execute dbms_output.put_line
select decode(0,count(*),
' Geboortedata ok, d.w.z. allen > 14 jaar.', count(*) ||
' X Jonger dan 14 jaar (-> Persoon niet naar COPIE)')
from point where
to_date(birthdate, 'yyyymmdd') > sysdate - 14 * 365; set heading on
select ' '||
emplid EMPLID, to_date(birthdate, 'yyyymmdd') GEBDAT from point where
to_date(birthdate, 'yyyymmdd') > sysdate - 14 * 365; delete
from point where
to_date(birthdate, 'yyyymmdd') > sysdate - 14 * 365; execute dbms_output.put_line
select decode(0,count(*),
' Geboortedata ok, d.w.z. allen < 75 jaar.', count(*) ||
' X Ouder dan 75 jaar. (-> Persoon niet naar COPIE)')
from point where
to_date(birthdate, 'yyyymmdd') < sysdate - 75 * 365; set heading on
select ' '||
emplid EMPLID, to_date(birthdate, 'yyyymmdd') GEBDAT from point where
to_date(birthdate, 'yyyymmdd') < sysdate - 75 * 365; delete
from point where
to_date(birthdate, 'yyyymmdd') < sysdate - 75 * 365; execute dbms_output.put_line
--MAAK VAN DIT onderstaand DEEL COMMENTAAR OM NIEUWE AFDELINGEN TOE TE LATEN
-- - ' X Afdcode (deptid) niet in COPIE. (-> Persoon niet naar COPIE)')
set heading off
select decode(0,count(*),
' Data in dienst (hire_dt) ok, d.w.z. zonder spaties.', count(*)
||
' X Spatie(s) in hire_dt. (-> Persoon niet naar COPIE)')
from point where
instr(hire_dt, ' ') <> 0;
set heading on
select ' '||
emplid EMPLID, hire_dt HIRE_DT
from point where
instr(hire_dt, ' ') <> 0;
delete
from point where
instr(hire_dt, ' ') <> 0;
execute dbms_output.put_line
select decode(0,count(*),
' Data in dienst (hire_dt) ok, binnen 1 jaar in dienst.',
count(*) ||
' X Over meer dan 1 jaar in dienst (hire_dt). (-> Persoon niet naar
COPIE)')
from point where
to_date(hire_dt, 'yyyymmdd') > sysdate + 1 * 365; set heading on
select ' '||
emplid EMPLID, to_date(hire_dt, 'yyyymmdd') HIRE_DT from point where
to_date(hire_dt, 'yyyymmdd') > sysdate + 1 * 365; delete
from point where
to_date(hire_dt, 'yyyymmdd') > sysdate + 1 * 365; execute dbms_output.put_line
select decode(0,count(*),
' Data in dienst (hire_dt) ok, niemand meer dan 60 jaar.',
count(*) ||
' X Meer dan 60 Jaar in dienst (hire_dt). (-> Persoon niet naar
COPIE)')
from point where
to_date(hire_dt, 'yyyymmdd') < sysdate - 60 * 365; set heading on
select ' '||
emplid EMPLID, to_date(hire_dt, 'yyyymmdd') HIREDAT from point where
to_date(hire_dt, 'yyyymmdd') < sysdate - 60 * 365; delete
from point where
to_date(hire_dt, 'yyyymmdd') < sysdate - 60 * 365; execute dbms_output.put_line
select decode(0,count(*),
' Data uit dienst ok, d.w.z. zonder spaties.', count(*) ||
' X Spatie(s) in termination_dt. (-> Persoon niet naar COPIE)')
from point where
instr(TERMINATION_DT, ' ') <> 0;
set heading on
select ' '||
emplid EMPLID, termination_dt TERMINATION_DT from point where
instr(TERMINATION_DT, ' ') <> 0;
delete
from point where
instr(TERMINATION_DT, ' ') <> 0;
execute dbms_output.put_line
select decode(0,count(*),
' Data In/Uit dienst ok, d.w.z. In- voor Uit-dienst.', count(*)
||
' X Uit-dienst voor In-dienst (term.date). (-> Persoon niet naar
COPIE)')
from point where
to_date(TERMINATION_DT, 'yyyymmdd') < to_date(ORIG_HIRE_DT, 'yyyymmdd');
set heading on
select ' '||
emplid EMPLID, to_date(TERMINATION_DT, 'yyyymmdd') TERMDATE from point where
to_date(TERMINATION_DT, 'yyyymmdd') < to_date(ORIG_HIRE_DT, 'yyyymmdd');
delete
from point where
to_date(TERMINATION_DT, 'yyyymmdd') < to_date(ORIG_HIRE_DT, 'yyyymmdd');
execute dbms_output.put_line
select decode(0,count(*),
' Paygroup codes: alle ok, d.w.z. bestaand.', count(*) ||
' X Ongeldige paygroup uit POINT. (-> Persoon niet naar COPIE)')
from point where
point.paygroup not in
('11','12','13','14','31','41','42','43','44','51','52','57','81','82','PAO'); set heading on
select ' '||
emplid EMPLID, paygroup PAYGROUP
from point where
point.paygroup not in
('11','12','13','14','31','41','42','43','44','51','52','57','81','82','PAO'); delete
from point where
point.paygroup not in
('11','12','13','14','31','41','42','43','44','51','52','57','81','82','PAO'); execute dbms_output.put_line
select decode(0,count(*),
' Data in dienst (orig_hire_dt) ok, d.w.z. zonder spaties.',
count(*) ||
' X Personen, met spaties in orig_hire_dt. (-> Persoon niet naar
COPIE)')
from point where
instr(orig_hire_dt, ' ') <> 0 ;
set heading on
select ' '||
emplid EMPLID
from point where
instr(orig_hire_dt, ' ') <> 0 ;
delete
from point where
instr(orig_hire_dt, ' ') <> 0 ;
execute dbms_output.put_line
select decode(0,count(*),
' Data in dienst (orig_hire_dt) ok, niemand over > 1 jaar.',
count(*) ||
' X Over > 1 jaar in dienst (orig_hire_dt). (-> Persoon niet naar
COPIE)')
from point where
to_date(hire_dt, 'yyyymmdd') > sysdate + 1 * 365; set heading on
select ' '||
emplid EMPLID, to_date(orig_hire_dt, 'yyyymmdd') ORIGHIREDAT from point where
to_date(hire_dt, 'yyyymmdd') > sysdate + 1 * 365; delete
from point where
to_date(orig_hire_dt, 'yyyymmdd') > sysdate + 1 * 365; execute dbms_output.put_line
select decode(0,count(*),
' Data in dienst (orig_hire_dt) ok, niemand langer dan 60 jaar.',
count(*) ||
' X > 60 jaar in dienst (orig_hire_dt). (-> Persoon niet naar
COPIE)')
from point where
to_date(orig_hire_dt, 'yyyymmdd') < sysdate - 60 * 365; set heading on
select ' '||
emplid EMPLID, to_date(orig_hire_dt, 'yyyymmdd') ORIGHIREDAT from point where
to_date(orig_hire_dt, 'yyyymmdd') < sysdate - 60 * 365; delete
from point where
to_date(orig_hire_dt, 'yyyymmdd') < sysdate - 60 * 365; execute dbms_output.put_line
select decode(0,count(*),
' Partnernames ok, d.w.z. aanwezig bij naamvoorkeur-codes <> 1.',
count(*) ||
' X nl_name_preference <> 1 zonder Partnername. (-> Persoon niet
naar COPIE)')
from point where
point.NL_NAME_PREFERENCE in ('2','3','4') and length(replace(point.NL_FAMNAME_PARTNER,' ') ||
'x') = 1;
set heading on
select ' '||
emplid EMPLID, NL_NAME_PREFERENCE NPREF from point where
point.NL_NAME_PREFERENCE in ('2','3','4') and length(replace(point.NL_FAMNAME_PARTNER,' ') ||
'x') = 1;
delete
from point where
point.NL_NAME_PREFERENCE in ('2','3','4') and length(replace(point.NL_FAMNAME_PARTNER,' ') ||
'x') = 1;
execute dbms_output.put_line
delete
from point where
emplid = '578849';
spool off
-------Nu: andere spool file:
set serveroutput on
set feedback off
break on Spoolfile
col Spoolfile new_value _Spoolfile
select
'd:\oracle\admin\pkan\log\point\' ||
to_char (sysdate, 'YYMMDD') ||
'.log' Spoolfile
from dual;
set termout on
spool &_Spoolfile
select ('*xxxxx Hier stonden de uitzonderingenxxxxxxxxxxx ') from dual;
Date: 18 Jun 2002 02:53:21 -0700
Message-ID: <ca270eb5.0206180153.703d744d_at_posting.google.com>
I've looked at the code 4 a week now and cant find the prob. IT returnes the ORA 01422 error. Pls help me out here im stuck !!! :( The error is in the two fetch statements or in the declare!
*xxxxx Hier stonden de uitzonderingenxxxxxxxxxxx
Import wordt gestart.
.
Controleren Point afdelingen op aanwezigheid in Copie.
declare
*
ERROR at line 1:
ORA-01422: exact fetch returns more than requested number of rows ORA-06512: at line 30 ORA-06512: at line 87 ORA-06512: at line 614
//Script start
set serveroutput on
set feedback off
break on Spoolfile
col Spoolfile new_value _Spoolfile
select
'd:\oracle\admin\pkan\log\point\pointcop2.log' Spoolfile from dual;
set termout on
spool &_Spoolfile
-------Nu: spool file:
pointcop2.log------------------------------------- -------------------------------------------------------------------------set heading off
select '' from dual;
execute dbms_output.put_line ('Nu volgen nadere bijzonderheden per persoon');
select '' from dual;
select decode(0,count(*),
' Telefoonnrs ok, d.w.z. niet te lang', count(*)||
' X Telefoonnr te lang. (-> Telefoonnr leeg in COPIE)')
from point where
length(point.PHONE) > 12;
set heading on
select ' ' ||
emplid EMPLID, phone PHONE
from point where
length(point.PHONE) > 12;
update point p set p.PHONE = NULL
where
length(p.PHONE) > 12;
execute dbms_output.put_line
('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx');set heading off
select decode(0,count(*),
' Huisadressen ok, d.w.z. niet te lang.',count(*)||
' X Huisadres te lang. (-> Aanpassing in COPIE)')
from point where
LENGTH(ADDRESS1||
' '||
NL_POST_NR||
NL_NUMHS_ADD) > 35;
select decode(0,count(*),
' ----', ' Adres/adressen volgens POINT:')
from point where
LENGTH(ADDRESS1||
' '||
NL_POST_NR||
NL_NUMHS_ADD) > 35;
set heading on
select ' '||
emplid EMPLID, ADDRESS1||
' '||
NL_POST_NR||
NL_NUMHS_ADD POINT_ADRES
from point where
LENGTH(ADDRESS1||
' '||
NL_POST_NR||
NL_NUMHS_ADD) > 35;
set heading off
select decode(0,count(*),
' ----', ' Adres/adressen wordt/worden in COPIE:')
from point where
LENGTH(ADDRESS1||
' '||
NL_POST_NR||
NL_NUMHS_ADD) > 35;
set heading on
select ' '||
emplid EMPLID,
substr(ADDRESS1,1,35-LENGTH(' '||
NL_POST_NR||
NL_NUMHS_ADD))||
' '||
NL_POST_NR||
NL_NUMHS_ADD COPIE_ADRES
from point where
LENGTH(ADDRESS1||
' '||
NL_POST_NR||
NL_NUMHS_ADD) > 35;
update point
set ADDRESS1 = substr(ADDRESS1,1,35-LENGTH(' '|| NL_POST_NR||
NL_NUMHS_ADD))
where
LENGTH(ADDRESS1||
' '||
NL_POST_NR||
NL_NUMHS_ADD) > 35;
execute dbms_output.put_line
('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'); -- Personen, met spaties in registernummer (emplid);-- select tbv log-file, delete.
-- Opm.: in Point zijn A en T codes voor aankomende en tijdelijke emplid's;
-- Deze emplids worden in Copie niet gebruikt. -- Bij zulke codes is de eerste positie van het emplid een A of een T; -- bij de weergave in 6 posities verdwijnt het minst significantecijfer.
set heading off
select decode(0,count(*),
' Registernummers ok: zonder Spatie, A of T.', count(*)||
' X Spatie, A of T in registernummer (emplid). (-> Persoon niet naar
COPIE)')
from point where
instr(emplid, ' ') <> 0 OR instr(emplid, 'A') <> 0 OR instr(emplid, 'T') <> 0;
set heading on
select ' '||
emplid EMPLID
from point where
instr(emplid, ' ') <> 0 OR instr(emplid, 'A') <> 0 OR instr(emplid, 'T') <> 0;
delete
from point where
instr(emplid, ' ') <> 0 OR instr(emplid, 'A') <> 0 OR instr(emplid, 'T') <> 0;
execute dbms_output.put_line
('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx');set heading off
select decode(0,count(*),
' Naamvolgorde-codes: ok.', count(*)||
' X Onbekende naamvolgorde (nl_name_preference). (-> Persoon niet
naar COPIE)')
from point where
point.nl_name_preference not in ('1','2','3','4'); set heading on
select ' '||
emplid EMPLID, nl_name_preference NL_NAME_PREFERENCE from point where
point.nl_name_preference not in ('1','2','3','4'); delete
from point where
point.nl_name_preference not in ('1','2','3','4'); execute dbms_output.put_line
('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx');set heading off
select decode(0,count(*),
' Geslacht-codes ok', count(*)||
' X Onbekende sex code (nl. niet 1 of 2). (-> Persoon niet naar
COPIE)')
from point where
point.sex not in ('1','2');
set heading on
select ' '||
emplid EMPLID, sex SEX_CODE
from point where
point.sex not in ('1','2');
delete
from point where
point.sex not in ('1','2');
execute dbms_output.put_line
('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx');set heading off
select decode(0,count(*),
' Geboortedata ok, d.w.z. zonder spaties.', count(*) ||
' X Spatie(s) in birthdate. (-> Persoon niet naar COPIE)')
from point where
instr(birthdate, ' ') <> 0 ;
set heading on
select ' '||
emplid EMPLID
from point where
instr(birthdate, ' ') <> 0 ;
delete
from point where
instr(birthdate, ' ') <> 0 ;
execute dbms_output.put_line
('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx');set heading off
select decode(0,count(*),
' Geboortedata ok, d.w.z. allen > 14 jaar.', count(*) ||
' X Jonger dan 14 jaar (-> Persoon niet naar COPIE)')
from point where
to_date(birthdate, 'yyyymmdd') > sysdate - 14 * 365; set heading on
select ' '||
emplid EMPLID, to_date(birthdate, 'yyyymmdd') GEBDAT from point where
to_date(birthdate, 'yyyymmdd') > sysdate - 14 * 365; delete
from point where
to_date(birthdate, 'yyyymmdd') > sysdate - 14 * 365; execute dbms_output.put_line
('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx');set heading off
select decode(0,count(*),
' Geboortedata ok, d.w.z. allen < 75 jaar.', count(*) ||
' X Ouder dan 75 jaar. (-> Persoon niet naar COPIE)')
from point where
to_date(birthdate, 'yyyymmdd') < sysdate - 75 * 365; set heading on
select ' '||
emplid EMPLID, to_date(birthdate, 'yyyymmdd') GEBDAT from point where
to_date(birthdate, 'yyyymmdd') < sysdate - 75 * 365; delete
from point where
to_date(birthdate, 'yyyymmdd') < sysdate - 75 * 365; execute dbms_output.put_line
('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx');--11-01-2000 DG
--MAAK VAN DIT onderstaand DEEL COMMENTAAR OM NIEUWE AFDELINGEN TOE TE LATEN
-- -set heading off -- -select decode(0,count(*), -- - ' Afdcodes (deptid s) ok, d.w.z. bestaan in COPIE.', count(*)||
-- - ' X Afdcode (deptid) niet in COPIE. (-> Persoon niet naar COPIE)')
-- -from point where -- - point.deptid not in (select afdcode from copie.afdeling); -- -set heading on -- -select ' '|| -- - emplid EMPLID, deptid DEPTID, nl_family_name ACHTERNAAM,nl_first_names VOORNAAM
-- -from point where -- - point.deptid not in (select afdcode from copie.afdeling); -- -delete -- -from point where -- - point.deptid not in (select afdcode from copie.afdeling); -- -execute dbms_output.put_line ('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx');-- MAAK VAN DIT bovenstaand DEEL COMMENTAAR OM NIEUWE AFDELINGEN TOE TE LATEN
set heading off
select decode(0,count(*),
' Data in dienst (hire_dt) ok, d.w.z. zonder spaties.', count(*)
||
' X Spatie(s) in hire_dt. (-> Persoon niet naar COPIE)')
from point where
instr(hire_dt, ' ') <> 0;
set heading on
select ' '||
emplid EMPLID, hire_dt HIRE_DT
from point where
instr(hire_dt, ' ') <> 0;
delete
from point where
instr(hire_dt, ' ') <> 0;
execute dbms_output.put_line
('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx');set heading off
select decode(0,count(*),
' Data in dienst (hire_dt) ok, binnen 1 jaar in dienst.',
count(*) ||
' X Over meer dan 1 jaar in dienst (hire_dt). (-> Persoon niet naar
COPIE)')
from point where
to_date(hire_dt, 'yyyymmdd') > sysdate + 1 * 365; set heading on
select ' '||
emplid EMPLID, to_date(hire_dt, 'yyyymmdd') HIRE_DT from point where
to_date(hire_dt, 'yyyymmdd') > sysdate + 1 * 365; delete
from point where
to_date(hire_dt, 'yyyymmdd') > sysdate + 1 * 365; execute dbms_output.put_line
('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx');set heading off
select decode(0,count(*),
' Data in dienst (hire_dt) ok, niemand meer dan 60 jaar.',
count(*) ||
' X Meer dan 60 Jaar in dienst (hire_dt). (-> Persoon niet naar
COPIE)')
from point where
to_date(hire_dt, 'yyyymmdd') < sysdate - 60 * 365; set heading on
select ' '||
emplid EMPLID, to_date(hire_dt, 'yyyymmdd') HIREDAT from point where
to_date(hire_dt, 'yyyymmdd') < sysdate - 60 * 365; delete
from point where
to_date(hire_dt, 'yyyymmdd') < sysdate - 60 * 365; execute dbms_output.put_line
('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx');set heading off
select decode(0,count(*),
' Data uit dienst ok, d.w.z. zonder spaties.', count(*) ||
' X Spatie(s) in termination_dt. (-> Persoon niet naar COPIE)')
from point where
instr(TERMINATION_DT, ' ') <> 0;
set heading on
select ' '||
emplid EMPLID, termination_dt TERMINATION_DT from point where
instr(TERMINATION_DT, ' ') <> 0;
delete
from point where
instr(TERMINATION_DT, ' ') <> 0;
execute dbms_output.put_line
('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx');set heading off
select decode(0,count(*),
' Data In/Uit dienst ok, d.w.z. In- voor Uit-dienst.', count(*)
||
' X Uit-dienst voor In-dienst (term.date). (-> Persoon niet naar
COPIE)')
from point where
to_date(TERMINATION_DT, 'yyyymmdd') < to_date(ORIG_HIRE_DT, 'yyyymmdd');
set heading on
select ' '||
emplid EMPLID, to_date(TERMINATION_DT, 'yyyymmdd') TERMDATE from point where
to_date(TERMINATION_DT, 'yyyymmdd') < to_date(ORIG_HIRE_DT, 'yyyymmdd');
delete
from point where
to_date(TERMINATION_DT, 'yyyymmdd') < to_date(ORIG_HIRE_DT, 'yyyymmdd');
execute dbms_output.put_line
('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx');set heading off
select decode(0,count(*),
' Paygroup codes: alle ok, d.w.z. bestaand.', count(*) ||
' X Ongeldige paygroup uit POINT. (-> Persoon niet naar COPIE)')
from point where
point.paygroup not in
('11','12','13','14','31','41','42','43','44','51','52','57','81','82','PAO'); set heading on
select ' '||
emplid EMPLID, paygroup PAYGROUP
from point where
point.paygroup not in
('11','12','13','14','31','41','42','43','44','51','52','57','81','82','PAO'); delete
from point where
point.paygroup not in
('11','12','13','14','31','41','42','43','44','51','52','57','81','82','PAO'); execute dbms_output.put_line
('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx');set heading off
select decode(0,count(*),
' Data in dienst (orig_hire_dt) ok, d.w.z. zonder spaties.',
count(*) ||
' X Personen, met spaties in orig_hire_dt. (-> Persoon niet naar
COPIE)')
from point where
instr(orig_hire_dt, ' ') <> 0 ;
set heading on
select ' '||
emplid EMPLID
from point where
instr(orig_hire_dt, ' ') <> 0 ;
delete
from point where
instr(orig_hire_dt, ' ') <> 0 ;
execute dbms_output.put_line
('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx');set heading off
select decode(0,count(*),
' Data in dienst (orig_hire_dt) ok, niemand over > 1 jaar.',
count(*) ||
' X Over > 1 jaar in dienst (orig_hire_dt). (-> Persoon niet naar
COPIE)')
from point where
to_date(hire_dt, 'yyyymmdd') > sysdate + 1 * 365; set heading on
select ' '||
emplid EMPLID, to_date(orig_hire_dt, 'yyyymmdd') ORIGHIREDAT from point where
to_date(hire_dt, 'yyyymmdd') > sysdate + 1 * 365; delete
from point where
to_date(orig_hire_dt, 'yyyymmdd') > sysdate + 1 * 365; execute dbms_output.put_line
('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx');set heading off
select decode(0,count(*),
' Data in dienst (orig_hire_dt) ok, niemand langer dan 60 jaar.',
count(*) ||
' X > 60 jaar in dienst (orig_hire_dt). (-> Persoon niet naar
COPIE)')
from point where
to_date(orig_hire_dt, 'yyyymmdd') < sysdate - 60 * 365; set heading on
select ' '||
emplid EMPLID, to_date(orig_hire_dt, 'yyyymmdd') ORIGHIREDAT from point where
to_date(orig_hire_dt, 'yyyymmdd') < sysdate - 60 * 365; delete
from point where
to_date(orig_hire_dt, 'yyyymmdd') < sysdate - 60 * 365; execute dbms_output.put_line
('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx');set heading off
select decode(0,count(*),
' Partnernames ok, d.w.z. aanwezig bij naamvoorkeur-codes <> 1.',
count(*) ||
' X nl_name_preference <> 1 zonder Partnername. (-> Persoon niet
naar COPIE)')
from point where
point.NL_NAME_PREFERENCE in ('2','3','4') and length(replace(point.NL_FAMNAME_PARTNER,' ') ||
'x') = 1;
set heading on
select ' '||
emplid EMPLID, NL_NAME_PREFERENCE NPREF from point where
point.NL_NAME_PREFERENCE in ('2','3','4') and length(replace(point.NL_FAMNAME_PARTNER,' ') ||
'x') = 1;
delete
from point where
point.NL_NAME_PREFERENCE in ('2','3','4') and length(replace(point.NL_FAMNAME_PARTNER,' ') ||
'x') = 1;
execute dbms_output.put_line
('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx');spool off
delete
from point where
emplid = '578849';
spool off
-------Nu: andere spool file:
datum.log---------------------------------- ------------------------------------------------------------------------- set feedback on /*** Opties om output en loggen goed te laten verlopen***/
set serveroutput on
set feedback off
break on Spoolfile
col Spoolfile new_value _Spoolfile
select
'd:\oracle\admin\pkan\log\point\' ||
to_char (sysdate, 'YYMMDD') ||
'.log' Spoolfile
from dual;
set termout on
spool &_Spoolfile
/***********************************************************************/ /*** Verwerp bij voorbaat uit tabel Point***/
/***********************************************************************/set heading off
select ('*xxxxx Hier stonden de uitzonderingenxxxxxxxxxxx ') from dual;
-- /***********************************************************************/ /*** Declaratieblok Import Point ***/ /***********************************************************************/ declare Lege_Regel varchar2 (3); MaxRegisternummer varchar2 (11) default '999999'; Point_Medewerker point%rowtype; PointMedewerkers number (4); /*** Cursor met Point medewerkers ***/ cursor cPoint_Medewerker is select * from point where emplid < MaxRegisternummer AND ROWNUM = 1 order by emplid; Personeelsnummer number (6); /***********************************************************************/ /*** Zoekt aan de hand van een opgegeven Afdelingscode (bijv. ***/ /*** 692040) of de afdeling al bestaat in COPIE. ***/ /*** Indien de afdeling al bestaat, wordt het COPIE afdelingsnummer ***/ /*** teruggegeven. Indien de afdeling nog niet bestaat, wordt een ***/ /*** 0 geretourneerd. ***/ /***********************************************************************/ function fZoekAfdelingsnummer (Afdelingscode in varchar2) return number is /*** Variabelen voor Copie afdelingsnummers ***/ Afdelingsnummer number (6); begin /*** Zoek naar Copie Afdelingsnummer via Afdelingscode ***/ Afdelingsnummer := 0; begin select afd_key into Afdelingsnummer from copie.afdeling where afdcode = Afdelingscode; /*** Exception kan voorkomen als Afdelingscode onbekend is ***/ exception when no_data_found then Afdelingsnummer := 0; end; /*** Retourneer het Copie Afdelingsnummer ***/ return (Afdelingsnummer); end; /***********************************************************************/ /*** Leest via een cursor alle unieke afdeling - werkveld combi- ***/ /*** naties in en controleert of deze voorkomen in de AFDELING ***/ /*** tabel. ***/ /*** Als de afdeling al voorkomt, wordt deze niet geupdate. ***/ /*** Als de afdeling nog niet bestaat, wordt een nieuw COPIE ***/ /*** afdelingsnummer berekend, de afdelingsnaam en werkveld op ***/ /*** tekst gecontroleerd, en wordt de nieuwe afdeling in de ***/ /*** AFDELING tabel toegevoegd. ***/ /***********************************************************************/ procedure pControleerAfdelingen is /*** Cursor met Point afdelingen in Copie formaat ***/ cursor cAfdeling is select distinct decode (instr (deptname, ' '), 0, deptname, substr (deptname, 1, instr (deptname, ' ') - 1)) "NAAM", decode (instr (deptname, ' '), 0, ' ', substr (deptname, instr (deptname, ' ') + 1)) "WERKVELD1", kp_dept_descr50, deptid from point where emplid < MaxRegisternummer order by deptid; Afdeling cAfdeling%rowtype; Afdelingsnummer number (6); begin /*** Maak een loop met alle afdelingen uit Point ***/ open cAfdeling; loop fetch cAfdeling into Afdeling; exit when cAfdeling%notfound; /*** Zoek het Copie afdelingsnummer bij de Pointmedewerker ***/ Afdelingsnummer := fZoekAfdelingsnummer (Afdeling.deptid); /*** Afdeling uit Point: bestaat niet (=0) of wel (>0) ***/ if Afdelingsnummer = 0 then /*** Eerst het afdelingsnummer voor COPIE berekenen ***/ select nvl (max (afd_key) + 1, 1) into Afdelingsnummer from copie.afdeling; /*** Controleer de nieuwe waarden op not null ***/ if Afdeling.naam is null then Afdeling.naam := 'NIET'; end if; if Afdeling.werkveld1 is null then Afdeling.werkveld1 := 'BEKEND'; end if; if Afdeling.kp_dept_descr50 is null then Afdeling.kp_dept_descr50 := 'Onbekende afdeling'; end if; /*** insert de nieuwe afdeling dan met de waarden ***/ dbms_output.put_line ('** Nieuwe afdeling toegevoegd: afdcode ' || Afdeling.deptid || ' ' || substr (Afdeling.naam, 1, 6)|| ', ' || substr (Afdeling.Werkveld1, 1, 7) || '.'); insert into copie.afdeling ( afd_key, naam, werkveld1, werkveld2, afdcode ) values ( Afdelingsnummer, substr (Afdeling.naam, 1, 6), substr (Afdeling.werkveld1, 1, 7), Afdeling.kp_dept_descr50, to_number (Afdeling.deptid) ); commit work; else dbms_output.put_line ('Bestaande afdeling: afdcode '|| Afdeling.deptid); end if; /*** Einde loop, alle Pointafdelingen zijn verwerkt ***/ end loop; close cAfdeling; end; /***********************************************************************/ /*** Reserveert een nieuw personeelsnummer in COPIE. ***/ /*** Ieder personeelslid heeft een COPIE personeelsnummer. Dit ***/ /*** is een nieuw uniek nummer, en wordt alleen door COPIE gebruikt.***/ /*** Het wordt gegenereerd door een update + 1 te doen op een ***/ /*** speciale PERSONEEL_KEY tabel. Hierin bevindt zich maar 1 rij, ***/ /*** waarin het laatst gebruikte COPIE personeelsnummer in staat. ***/ /***********************************************************************/ function fNieuwPersoneelsnummer return number is /*** Variabelen voor Copie Personeelsnummers ***/ Personeelsnummer number (6); begin /*** Update de personeel_key tabel met de gereserveerde pers_key ***/ update copie.personeel_key set pers_key = pers_key + 1; /*** Voer direct een commit uit zodat tabel gereleased wordt ***/ commit work; /*** Selecteer de nieuwe pers_key van de tabel ***/ select pers_key into Personeelsnummer from copie.personeel_key; /*** En retourneer dit nieuwe Copie Personeelsnummer ***/ return (Personeelsnummer); end; /***********************************************************************/ /*** Zoekt aan de hand van een opgegeven Registernummer (intern ***/ /*** nummer van KPN) het bijbehorende COPIE personeelsnummer. ***/ /*** Als het registernummer niet kan worden gevonden, wordt een nul ***/ /*** geretourneerd. ***/ /***********************************************************************/ function fZoekPersoneelsnummer (Registernummer in varchar2) return number is /*** Variabelen voor Copie Personeelsnummers ***/ Personeelsnummer number (6); begin /*** Beginwaarde 0, als niets wordt gevonden, return dan 0 ***/ Personeelsnummer := 0; begin /*** Zoek naar Copie personeelsnummer via Registernummer ***/ select pers_key into Personeelsnummer from copie.personeel_kpn where regnr = Point_Medewerker.emplid; /*** Exception kan voorkomen als personeelsnummer onbekend is ***/ exception when no_data_found then Personeelsnummer := 0; end; /*** Retourneer het Copie personeelsnummer ***/ return (Personeelsnummer); end; /***********************************************************************/ /*** Retourneert de voorletters van de Pointmedewerker zonder ***/ /*** spaties aan de hand van de opgegeven voorletters. ***/ /***********************************************************************/ function fBepaalVoorletters (PointVoorletters in varchar2) return varchar2 is /*** Variabelen voor filteren Copie Voorletters (zonder puntjes) ***/ CopieVoorletters varchar2 (5); begin CopieVoorletters := replace (PointVoorletters, '.', ''); /*** Retourneer de Copie voorletters (zonder puntjes) ***/ return (CopieVoorletters); end; /***********************************************************************/ /*** Bepaalt aan de hand van de opgegeven waarden de achternaam van ***/ /*** de Pointmedewerker. In Point worden achternaam en ***/ /*** tussenvoegsel, plus meisjesnaam en tussenvoegsel, allen apart ***/ /*** opgeslagen. Daarnaast wordt een indicatie aangegeven wat ***/ /*** de voorkeursnaam van de persoon in kwestie is. ***/ /*** Als de voorkeur de combinatie achternaam-meisjesnaam is, ***/ /*** dan dient precies andersom geredeneerd te worden dan normaal. ***/ /***********************************************************************/ function fBepaalAchternaam ( PointAchternaam in varchar2, PointTussenvAchternaam in varchar2, PointAchternaamPartner in varchar2, PointTussenvPartner in varchar2, PointVoorkeur in number ) return varchar2 is /*** Variabelen voor samenstellen Copie achternaam ***/ CopieAchternaam varchar2 (93); begin /*** 1 Volledige achternaam wordt: PointAchternaam ***/ if PointVoorkeur = 1 then CopieAchternaam := rtrim (PointAchternaam, ' '); /*** 2 Volledige achternaam wordt: PointAchternaamPartner ***/ elsif PointVoorkeur = 2 then CopieAchternaam := rtrim (PointAchternaamPartner, ' '); /*** 3 Achternaam wordt: Partner-van Eigen ***/ elsif PointVoorkeur = 3 then CopieAchternaam := rtrim (PointAchternaamPartner, ' ') || '-'; CopieAchternaam := CopieAchternaam || rtrim (PointTussenvAchternaam, ' '); if length(rtrim (PointTussenvAchternaam, ' ') || 'x') > 1 then CopieAchternaam := CopieAchternaam || ' '; end if; CopieAchternaam := CopieAchternaam || rtrim (PointAchternaam, ' '); /*** 4 Volledige achternaam wordt: Eigen-van Partner ***/ elsif PointVoorkeur = 4 then CopieAchternaam := rtrim (PointAchternaam, ' ') || '-'; CopieAchternaam := CopieAchternaam || rtrim (PointTussenvPartner, ' '); if length(rtrim (PointTussenvPartner, ' ') || 'x') > 1 then CopieAchternaam := CopieAchternaam || ' '; end if; CopieAchternaam := CopieAchternaam || rtrim (PointAchternaamPartner, ' '); else /*** Bij voorkeur-code onvoorzien ***/ CopieAchternaam := rtrim (PointAchternaam, ' '); end if; /*** Retourneer de Copie achternaam ***/ return (substr (CopieAchternaam, 1,40)); end; /***********************************************************************/ /*** Bepaalt het tussenvoegsel van een Pointmedewerk in Copie. ***/ /*** Als de voorkeur de combinatie achternaam-meisjesnaam is, ***/ /*** dan dient precies andersom geredeneerd te worden dan normaal. ***/ /***********************************************************************/ function fBepaalTussenvoegsel ( PointTussenvAchternaam in varchar2, PointTussenvPartner in varchar2, PointVoorkeur in number ) return varchar2 is /*** Variabelen voor samenstellen Copie tussenvoegsel ***/ CopieTussenvoegsel varchar2 (10); begin /*** Tussenvoegsel afhankelijk van voorkeur meisjes/mannaam ***/ if PointVoorkeur in (2,3) then /*** Meisjesnaam, dus tussenvoegsel van partner ***/ CopieTussenvoegsel := PointTussenvPartner; elsif PointVoorkeur in (1,4) then /*** Normale achternaam, dus normaal tussenvoegsel ***/ CopieTussenvoegsel := PointTussenvAchternaam; else /*** Bij voorkeur-code onvoorzien ***/ CopieTussenvoegsel := PointTussenvAchternaam; end if; /*** Retourneer de Copie tussenvoegsel ***/ return (substr (CopieTussenvoegsel, 1,10)); end; /***********************************************************************/ /*** Bepaalt en retourneert het geslacht in M/V formaat aan de hand ***/ /*** het opgegeven Pointgeslacht (0 of 1). ***/ /***********************************************************************/ function fBepaalGeslacht (PointGeslacht in varchar2) return varchar2 is /*** Variabelen voor samenstellen Copie Geslacht ***/ CopieGeslacht varchar2 (1); begin /*** 1 geeft Mannelijk geslacht aan, 2 Vrouwelijk geslacht ***/ if PointGeslacht = 'M' then CopieGeslacht := 'M'; elsif PointGeslacht = 'F' then CopieGeslacht = 'V'; else CopieGeslacht := 'V'; end if; /*** Retourneer het Copie geslacht ***/ return (CopieGeslacht); end; /***********************************************************************/ /*** De velden DATUMUIT, DATUMIN en GEBDATUM in de COPIE tabel ***/ /*** PERSONEEL zijn van het datatype DATE. De waardes voor deze ***/ /*** velden worden door POINT aangeleverd met het datatype varchar ***/ /*** met formaat YYYYMMDD. De functie fDatumConversie converteert ***/ /*** de varchars naar dates. ***/ /***********************************************************************/ function fDatumConversie (PointDatum in varchar) return date is /*** Variabelen voor samenstellen Copie Datum ***/ CopieDatum date; begin CopieDatum := to_date(Pointdatum,'YYYYMMDD'); return (CopieDatum); end; /***********************************************************************/ /*** Bepaalt aan de hand van de opgegeven Pointgegevens de ***/ /*** soort van de medewerker zoals deze in Copie wordt gehanteerd. ***/ /*** Paygroup geeft aan of medewerker vast, stagiair, onbepaald of ***/ /*** pao'er is. ***/ /*** Acctcd houdt in of medewerker declarabel (direct, per uur ***/ /*** schrijven) is of niet-declarabel (niet direct, per maand ***/ /*** schrijven). ***/ /*** Type wordt op dit moment nog niet gebruikt, dit zou betekenen: ***/ /*** stagaire HBO, WO etc. Wordt echter al in Paygroup gevonden. ***/ /*** 9-9-99 DG gewijzigd: vertaling 00010-11 van 3 naar 5 ***/ /*** 9-9-99 DG gewijzigd: vertaling 00060-11 van 1 naar 7 ***/ /*** 23-9-99 DG gewijzigd: vertaling 00010-11 van 5 naar 7 ***/ /*** 23-9-99 DG gewijzigd: vertaling 00060-11 van 7 naar 5 ***/ /*** 30-1-01 DG toegevoegd: code paygroup 14 met 8 ***/ /*** 30-1-01 DG gewijzigd: code paygroup 14 van 8 naar 5 ***/ /*** 14-1-2002 JK toegevoegd paygroups 41,42,43 en 44, ter ***/ /*** vervanging van 11,12,13 en 31, die alleen nog in bestaande ***/ /*** arbeidscontracten gebruikt worden. Ze blijven dus wel bestaan. ***/ /*** De vertaling naar Copie soorten is hetzelfde. ***/ /***********************************************************************/ function fBepaalSoort ( PointPaygroup in varchar2) return number is CopieSoort number (1); begin if PointPaygroup = '11' then CopieSoort := 7; elsif PointPaygroup = '12' then CopieSoort := 8; elsif PointPaygroup = '13' then CopieSoort := 8; elsif PointPaygroup = '14' then CopieSoort := 7; elsif PointPaygroup = '31' then CopieSoort := 8; elsif PointPaygroup = '41' then CopieSoort := 7; elsif PointPaygroup = '42' then CopieSoort := 8; elsif PointPaygroup = '43' then CopieSoort := 8; elsif PointPaygroup = '44' then CopieSoort := 8; elsif PointPaygroup = '51' then CopieSoort := 6; elsif PointPaygroup = '52' then CopieSoort := 6; elsif PointPaygroup = '57' then CopieSoort := 6; elsif PointPaygroup = '81' then CopieSoort := 7; elsif PointPaygroup = '82' then CopieSoort := 6; elsif PointPaygroup = 'PAO' then CopieSoort := 6; else CopieSoort := 0; end if; return (CopieSoort); end; /***********************************************************************/ /*** Deze procedure update van het opgegeven Copie personeelsnummer ***/ /*** alle persoonsgegevens die uit Point komen. Hiervoor ***/ /*** worden de juiste gegevens in het juiste formaat gezet door ***/ /*** aanroepen van bovenstaande procedures en functies. ***/ /*** Daarna wordt het update commando uitgevoerd en wordt direct ***/ /*** een commit gegenereerd, zodat de gegevens direct bewaard zijn. ***/ /***********************************************************************/ procedure pUpdateBestaandPersoneel (Personeelsnummer in number) is /*** Variabelen voor samenstellen Copie gegevens medewerker ***/ UpdateVoorletters varchar2 (5); UpdateAchternaam varchar2 (40); UpdateTussenvoegsel varchar2 (10); UpdateGeslacht varchar2 (1); UpdateAfdelingsnummer number (3); UpdateDatumuitDienst date; UpdateDatuminDienst date; UpdateGeboorteDatum date; UpdateSoortnummer number (1); UpdatePriveadres varchar2 (35); begin /*** Bepaal de voorletters van de Pointmedewerker ***/ UpdateVoorletters := fBepaalVoorletters (Point_Medewerker.kp_initials); /*** Bepaal de achternaam van de Pointmedewerker ***/ UpdateAchternaam := fBepaalAchternaam ( Point_Medewerker.nl_family_name, Point_Medewerker.nl_family_name_pfx, Point_Medewerker.nl_famname_partner, Point_Medewerker.nl_partner_prefix, Point_Medewerker.nl_name_preference ); /*** Bepaal het tussenvoegsel van de Pointmedewerker ***/ UpdateTussenvoegsel := fBepaalTussenvoegsel ( Point_Medewerker.nl_family_name_pfx, Point_Medewerker.nl_partner_prefix, Point_Medewerker.nl_name_preference ); /*** Bepaal het geslacht van de Pointmedewerker ***/ UpdateGeslacht := fBepaalGeslacht (Point_Medewerker.sex); /*** Bepaal de afdeling van de Pointmedewerker ***/ UpdateAfdelingsnummer := fZoekAfdelingsnummer (Point_Medewerker.deptid); /*** Bepaal de datumuit van de Pointmedewerker ***/ UpdateDatumuitDienst := fDatumConversie (Point_Medewerker.termination_dt); /*** Bepaal de datumin van de Pointmedewerker ***/ UpdateDatuminDienst := fDatumConversie (Point_Medewerker.hire_dt); /*** Bepaal de geboorte datum van de Pointmedewerker ***/ UpdateGeboorteDatum := fDatumConversie (Point_Medewerker.birthdate); /*** Bepaal de soort van de Pointmedewerker ***/ UpdateSoortnummer := fBepaalSoort (Point_Medewerker.paygroup); /*** Bepaal het priveadres van de Pointmedewerker ***/ UpdatePriveadres := Point_Medewerker.address1 || ' ' || Point_Medewerker.nl_post_nr || Point_Medewerker.nl_numhs_add; /*** Update nu de samengestelde gegevens in de eerste tabel ***/ update copie.personeel set --naam = ' ', voorletters = UpdateVoorletters, tussenvoeg = UpdateTussenvoegsel, achternaam = UpdateAchternaam, afd_key = UpdateAfdelingsnummer, geslacht = UpdateGeslacht, gebdatum = UpdateGeboorteDatum, datumin = UpdateDatuminDienst, datumuit = UpdateDatumuitDienst, uren = Point_Medewerker.kp_monthly_hrs, standplaats = Point_Medewerker.gebouw_code, soort_key = UpdateSoortnummer, adres = UpdatePriveadres, telnr = Point_Medewerker.phone, postcode = Point_Medewerker.zip, plaats = Point_Medewerker.city where pers_key = Personeelsnummer; /*** Direct opslaan toegevoegde medewerker ***/ commit work; /*** Laat resultaat in logfile zien ***/ dbms_output.put_line ('Bijwerken van: regnr ' || Point_Medewerker.emplid || ', ' || Point_Medewerker.nl_family_name || ' ' || Point_Medewerker.nl_first_names); end; /***********************************************************************/ /*** Deze procedure insert een nieuwe persoon in de Copie database. ***/ /*** Eerst wordt een nieuw intern Copie personeelsnummer ***/ /*** gegenereerd. Vervolgens worden de juiste gegevens in het ***/ /*** juiste formaat gezet door aanroepen van bovenstaande ***/ /*** procedures en functies. ***/ /*** Daarna wordt het insert commando uitgevoerd en wordt direct ***/ /*** een commit gegenereerd, zodat de gegevens direct bewaard zijn. ***/ /***********************************************************************/ procedure pInsertBestaandPersoneel is /*** Variabelen voor samenstellen Copie gegevens medewerker ***/ Personeelsnummer number (6); InsertVoorletters varchar2 (5); InsertAchternaam varchar2 (40); InsertTussenvoegsel varchar2 (10); InsertGeslacht varchar2 (1); InsertAfdelingsnummer number (3); InsertDatumuitDienst date; InsertDatuminDienst date; InsertGeboorteDatum date; InsertSoortnummer number (1); InsertPriveadres varchar2 (35); begin /*** Bepaal een nieuw uniek Copie personeelsnummer ***/ Personeelsnummer := fNieuwPersoneelsnummer; /*** Bepaal de voorletters van de Pointmedewerker ***/ InsertVoorletters := fBepaalVoorletters (Point_Medewerker.kp_initials); /*** Bepaal de achternaam van de Pointmedewerker ***/ InsertAchternaam := fBepaalAchternaam ( Point_Medewerker.nl_family_name, Point_Medewerker.nl_family_name_pfx, Point_Medewerker.nl_famname_partner, Point_Medewerker.nl_partner_prefix, Point_Medewerker.nl_name_preference ); /*** Bepaal het tussenvoegsel van de Pointmedewerker ***/ InsertTussenvoegsel := fBepaalTussenvoegsel ( Point_Medewerker.nl_family_name_pfx, Point_Medewerker.nl_partner_prefix, Point_Medewerker.nl_name_preference ); /*** Bepaal het geslacht van de Pointmedewerker ***/ InsertGeslacht := fBepaalGeslacht (Point_Medewerker.sex); /*** Bepaal de afdeling van de Pointmedewerker ***/ InsertAfdelingsnummer := fZoekAfdelingsnummer (Point_Medewerker.deptid); /*** Bepaal de datumuit van de Pointmedewerker ***/ InsertDatumuitDienst := fDatumConversie (Point_Medewerker.termination_dt); /*** Bepaal de datumin van de Pointmedewerker ***/ InsertDatuminDienst := fDatumConversie (Point_Medewerker.hire_dt); /*** Bepaal de geboorte datum van de Pointmedewerker ***/ InsertGeboorteDatum := fDatumConversie (Point_Medewerker.birthdate); /*** Bepaal de soort van de Pointmedewerker ***/ InsertSoortnummer := fBepaalSoort (Point_Medewerker.paygroup); /*** Bepaal het priveadres van de Pointmedewerker ***/ InsertPriveadres := Point_Medewerker.address1 || ' ' || Point_Medewerker.nl_post_nr || Point_Medewerker.nl_numhs_add; /*** Insert nu de samengestelde gegevens in de eerste tabel ***/ insert into copie.personeel ( pers_key, naam, voorletters, tussenvoeg, achternaam, geslacht, gebdatum, afd_key, datumin, datumuit, uren, standplaats, soort_key, adres, telnr, postcode, plaats ) values ( Personeelsnummer, ' ', InsertVoorletters, InsertTussenvoegsel, InsertAchternaam, /***Verwijderd zijn de titulatuur inserts ***/ InsertGeslacht, InsertGeboorteDatum, InsertAfdelingsnummer, InsertDatuminDienst, InsertDatumuitDienst, Point_Medewerker.kp_monthly_hrs, Point_Medewerker.gebouw_code, InsertSoortnummer, InsertPriveadres, Point_Medewerker.phone, Point_Medewerker.zip, Point_Medewerker.city ); /*** Insert nu de samengestelde gegevens in de tweede tabel ***/ insert into copie.personeel_kpn ( pers_key, regnr ) values ( Personeelsnummer, Point_Medewerker.emplid ); /*** Direct opslaan toegevoegde medewerker ***/ commit work; /*** Laat resultaat in logfile zien ***/ dbms_output.put_line ('** Nieuwe medewerker toegevoegd: regnr ' || Point_Medewerker.emplid || ' ' || Point_Medewerker.nl_family_name || ', ' || Point_Medewerker.nl_first_names); end; /***********************************************************************/ /*** Begin hoofdprogramma Import Point. ***/ /*** Hier begint het werkelijk hoofdprogramma van de Import. ***/ /*** Hiervoor worden eerst de afdelingen ***/ /*** gecontroleerd en eventueel toegevoegd, zodat deze directe ***/ /*** afhankelijkheid gewaarborgd is. ***/ /*** Vervolgens worden met een cursor aan de hand van het ***/ /*** emplid (registernummer) de medewerkers gecontroleerd op ***/ /*** aanwezigheid in de Copie database. ***/ /*** - Indien aanwezig, wordt de medewerker bijgewerkt (update) ***/ /*** - Indien afwezig, wordt de medewerker toegevoegd (insert) ***/ /***********************************************************************/ begin dbms_output.enable (100000); Lege_Regel := '.'; dbms_output.put_line ('Import wordt gestart.'); dbms_output.put_line (Lege_Regel); /*** Controleer of Pointafdelingen in Copie voorkomen ***/ dbms_output.put_line ('Controleren Point afdelingen op aanwezigheid in Copie.'); pControleerAfdelingen; dbms_output.put_line ('Alle Point afdelingen gecontroleerd en in Copie aanwezig.'); dbms_output.put_line (Lege_Regel); /*** Maak een loop waarin alle Pointers voorkomen ***/ open cPoint_Medewerker; dbms_output.put_line ('Controleren Point medewerkers op aanwezigheid in Copie.'); PointMedewerkers := 0; loop fetch cPoint_Medewerker into Point_Medewerker; exit when cPoint_Medewerker%notfound; PointMedewerkers := PointMedewerkers + 1; /*** Zoek het Copie personeelsnummer bij de Pointer ***/ Personeelsnummer := fZoekPersoneelsnummer (Point_Medewerker.emplid); /*** Personeel uit Point: bestaat (>0) of niet (=0) ***/ if ( Personeelsnummer > 0) then pUpdateBestaandPersoneel (Personeelsnummer); else pInsertBestaandPersoneel; end if; /*** Einde loop, alle Point medewerkers zijn verwerkt ***/ end loop; dbms_output.put_line ( to_char (PointMedewerkers) || ' Point medewerkers gecontroleerd en in Copie aanwezig.'); dbms_output.put_line (Lege_Regel); close cPoint_Medewerker; dbms_output.put_line ('Einde import van Point medewerkers via dumptabel.'); end; / spool off exitReceived on Tue Jun 18 2002 - 11:53:21 CEST