Oracle explicita markörer - som du måste fysiskt deklarera - låter dig ta bort " enda rad " begränsning av gemensamma SELECT-satser . Istället för att kopiera och lagra kolumnvärden i SELECT-uttrycket variablerna en rad i taget , explicita markörer tillåter dig att köra en fråga , lagra en samling av värden i minnet och gå tillbaka och bearbeta varje post för sig . Detta minskar inte bara handläggningstiden , men också minskar mängden kod du behöver för att skriva . Automatisera processen och ytterligare minska kodningskrav med en CURSOR FOR rec loop till loop igenom och hämta flera databasposter . Instruktioner
1
Skapa eller förklara markören som vanligt genom att ge den ett unikt namn , binda det till en gemensam SELECT och sedan bifoga det till deklarationen avsnitt av din funktion eller process . SELECT-uttrycket kan vara enkelt eller kan vara mer komplicerad , såsom en SELECT /VAR /GROUPBY uttalande . Om du till exempel vill använda en markör av REC slinga för att hämta den aktuella månadslönen för alla dina anställda och sedan totalt dessa belopp kommer deklarationsprogramsatsen visas som :
Skapa eller ersätta Funktion SalaryExpense ( name_in IN varchar2 ) RETURN varchar2IStotal_val nummer ( 6 ),
FÖRKLARA markören salary_cursor isselect monthly_salaryfrom employeeswhere name = name_in ;
BEGIN
( referens 1 - sidan 6 , 7 och hänvisning 2 )
2
Skriv en looping uttalande som automatiskt öppnar markören , åtkomst varje anställd rekord , extraherar månadslön information du behöver för att räkna ut din månadslön bekostnad och lägger varje värde till en löpande summa . När öglan når den sista posten , stängs den automatiskt markören :
total_monthy_salary : = 0 ;
FOR employee_rec i salary_cursorLOOPtotal_monthy_salary : = total_monthy_salary + employee_rec.monthly_salary , END LOOP ;
Billiga 3
visa resultaten och avsluta funktionen eller process :
RETURN total_monthy_salary , END , Addera