Cursor PL-SQL

Status
Niet open voor verdere reacties.

24Cagri

Gebruiker
Lid geworden
16 mrt 2015
Berichten
10
Goedemiddag,


Ik heb een cursor gemaakt die de volgende gegevens laat zien.

Medewerkernummer (MNR)
Naam
Afdeling (AFD)

DECLARE
m_mnr medewerkers.mnr%type;
m_naam medewerkers.naam%type;
m_afd medewerkers.afd%type;
CURSOR m_medewerkers is
SELECT mnr, naam, AFD
FROM Medewerkers
order by mnr;

BEGIN
OPEN m_medewerkers;
LOOP
FETCH m_medewerkers into m_mnr, m_naam, m_afd;
EXIT WHEN m_medewerkers%notfound;
dbms_output.put_line(m_mnr || ' ' || m_naam || ' ' || m_afd);
END LOOP;
CLOSE m_medewerkers;
END;
/

Nu zou ik graag willen dat ik de medewerkers kan categoriseren in verschillende afdelingen.


Bijv.

Afd A
Medewerker (mnr, naam, AFD)

Afd B
Medewerkers

AFD C
Medewerker

Heeft iemand een idee hoe ik dit kan toepassen??
 
Het is al heel lang geleden. maar je kunt toch een "group by AFD" ? Ah wacht mogelijk lees ik het verkeerd.

Anders een "order by AFD" en in je procedure een verandering van m_afd afvangen.. Gaat het over de opmaak of het zorgen dat je het per afdeling krijgt?
 
Ik moet het per afdeling hebben.

Als resultaat moet het ogeveer zo zijn.

Afdeling A
mnr naam afd

Afdeling b
mnr naam afd
 
Ik kan het niet testen natuurlijk, maar zoiets?

Code:
Medewerkernummer (MNR)
Naam
Afdeling (AFD)

DECLARE
m_mnr medewerkers.mnr%type;
m_naam medewerkers.naam%type;
m_afd medewerkers.afd%type;
m_temp VARCHAR2 (50) := ''; 
CURSOR m_medewerkers is
SELECT mnr, naam, AFD
FROM Medewerkers
order by AFD, mnr;

BEGIN
OPEN m_medewerkers;
LOOP
FETCH m_medewerkers into m_mnr, m_naam, m_afd;
EXIT WHEN m_medewerkers%notfound;
IF m_afd <> m_temp THEN
  dbms_output.put_line('AFDELING ' || m_afd);
  m_temp = m_afd;
END IF;
dbms_output.put_line(m_mnr || ' ' || m_naam || ' ' || m_afd);
END LOOP;
CLOSE m_medewerkers;
END;
/

let op m_temp moet wel hetzelfde type en lengte zijn als m_afd natuurlijk
 
Zie medewerker: data.PNG

Ik heb het uitgevoerd.

DECLARE
m_mnr medewerkers.mnr%type;
m_naam medewerkers.naam%type;
m_afd medewerkers.afd%type;
m_temp NUMBER (2,0) := '';
CURSOR m_medewerkers is
SELECT mnr, naam, AFD
FROM Medewerkers
order by AFD, mnr;

BEGIN
OPEN m_medewerkers;
LOOP
FETCH m_medewerkers into m_mnr, m_naam, m_afd;
EXIT WHEN m_medewerkers%notfound;
IF m_afd <> m_temp THEN
dbms_output.put_line('AFDELING ' || m_afd);
m_temp = m_afd;
END IF;
dbms_output.put_line(m_mnr || ' ' || m_naam || ' ' || m_afd);
END LOOP;
CLOSE m_medewerkers;
END;
/

Ik krijgt deze foutmelding.

ORA-06550: line 18, column 10:
PLS-00103: Encountered the symbol "=" when expecting one of the following:

:= . ( @ % ;
The symbol ":= was inserted before "=" to continue.


1. DECLARE
2. m_mnr medewerkers.mnr%type;
3. m_naam medewerkers.naam%type
 
oeps klopt:

moet zijn:

m_temp := m_afd;

edit: en als het number is moet je mogelijk declareren als :=0 ipv :=''

laaste keer dat ik met oracle werkte is 15 jaar terug of zo
 
Laatst bewerkt:
Hartelijk dank voor je hulp. Het werkt!!

Ik krijg nu onder alle afdelingen de juiste medewerkers te zien :)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan