Wat is cursor in orakel
Oracle Gebruikt een werkgebied met de naam Private SQL-gebieden om SQL-statements uit te voeren en informatie op te slaan. Een Oracle Cursor is een PL/SQL-constructie waarmee u deze werkgebieden een naam kunt geven en toegang kunt krijgen tot hun opgeslagen informatie
Typen cursor in Oracle
- Impliciete cursor in Oracle
- Expliciete cursor in Oracle
Expliciete cursors
Expliciete cursors hebben de volgende fasen
1) Declareren:We declareren de naam van de cursor en definiëren de structuur van de query
2) Open:De open-instructie voert de query uit en bindt elke variabele waarnaar wordt verwezen. Rijen die door de query worden geïdentificeerd, worden actieve sets genoemd. En nu is dat beschikbaar om op te halen
Wat is actieve set: De reeks rijen die wordt geretourneerd door een zoekopdracht met meerdere rijen
De grootte is het aantal rijen dat aan uw zoekcriteria voldoet
3) Ophalen:in deze fase worden rijen opgehaald van de cursor en na elke ophaalactie test u de cursor op eventuele resterende rijen. Als er geen rijen zijn, gaat u verder met het sluiten van de cursor
4) Sluiten:de close-instructie geeft de actieve set rijen vrij en we kunnen de cursor opnieuw openen om de verversing van de actieve set op te halen
Stadiums in detail
Een cursor declareren
- Cursornaam
- Structuur van de zoekopdracht
Syntax: CURSOR IS : It includes most of the usual clauses, but INTO Clause is not allowed Example: DECLARE CURSOR cur1 is SELECT address,salary,emp_no,emp_name FROM emp WHERE region=’US’; ……………………………… BEGIN ……………………………… END;
Een cursor openen
Hier wordt het parseren en uitvoeren van query's uitgevoerd. Na het openen van de cursor zijn de rijen die door de query worden geretourneerd, beschikbaar om te worden opgehaald.
Syntax: Open <cursor name> This statement is used within the executable section of the block. It also establishes an active set of the rows Example: OPEN cur1; DECLARE v_salary number; CURSOR cur1 is SELECT salary FROM emp WHERE region=’US’; BEGIN OPEN cur1; LOOP FETCH cur1 into v_salary; EXIT WHEN cur1%NOTFOUND; DBMS_OUTPUT.PUT_LINE (v_salary); END LOOP; CLOSE cur1; END; /
De cursor wijst nu naar de eerste rij in de actieve set.
De rijen ophalen
Nadat de cursor is geopend, wordt de huidige rij in variabelen geladen. De huidige rij is de rij waarnaar de cursor momenteel wijst Het ophalen van gegevens in PL/SQL-variabele of host
De variabele wordt gedaan via de FETCH-instructie
Syntax: FETCH INTO ;
- Voor elke kolomwaarde die wordt geretourneerd door de query die is gekoppeld aan de cursor, moet er een . zijn
overeenkomstige variabele in de INTO-lijst.
- OOK hun datatypes moeten compatibel zijn
EEN CURSOR SLUITEN
Het sluit expliciet de cursor, zodat deze indien nodig opnieuw kan worden geopend.
Syntax: CLOSE <cursor-name>; Example: CLOSE cur1 Example of Using CLOSE <Cursor Name> DECLARE v_address emp.address%TYPE; CURSOR cur1 is select address from emp; BEGIN OPEN cur1; LOOP FETCH cur1 into v_address; EXIT WHEN cur1%NOTFOUND; DBMS_OUTPUT.PUT_LINE(v_address); END LOOP; CLOSE cur1; END; /
Expliciete cursorkenmerken
Kenmerk | Type | Beschrijving |
%ISOPEN | Booleaans | Evalueert naar TRUE als de cursor open is |
%NOTFOUND | Booleaans | Evalueert naar TRUE als de meest recente fetch geen rij retourneert |
%FOUND | Booleaans | Evalueert naar TRUE als de meest recente fetch een rij retourneert |
%ROWCOUNT | NUMBER | Evalueert tot het totale aantal tot nu toe geretourneerde rijen |
Geavanceerd concept met Oracle-cursor
Oracle-cursor en records
1)We hebben al gelezen over PLSQL-records.
2) We kunnen de rijen van de actieve set verwerken door waarden ook op te halen in een PL/SQL-record
3) We kunnen ook een plsql-record definiëren op basis van de geselecteerde lijst met kolommen in de expliciete cursors ook
Voorbeeld
DECLARE CURSOR dept_cursor is Select deptno,dept_name FROM dept; dept_record dept_cursor%rowtype; BEGIN OPEN dept_cursor; LOOP FETCH dept_cursor INTO dept_record; Insert into dept_temp (deptno, deptname) values (dept_record.deptno, dept_record.dept_name); EXIT WHEN dept_cursor%notfound; END LOOP; Commit; CLOSE dept_cursor; END; /
Cursor met parameters/geparametriseerde cursor in orakel
Syntax: CURSOR cursor_name(parameter_name datatype, ) IS Select_statement;
1) Geef parameterwaarden door aan een cursor wanneer de cursor wordt geopend en de query wordt uitgevoerd
2) Open meerdere keren een expliciete cursor met elke keer verschillende actieve sets
Open cursor_name(parameter_value , ……);
Voorbeeld
DECLARE CURSOR cur1(v_deptno number) is Select deptname,dept_loc,dept_pincode from dept where deptno=v_deptno; Dept_record cur1%rowtype; l_deptno number:=111; BEGIN OPEN cur1(112); LOOP FETCH cur1 into dept_record; IF cur1%FOUND THEN Dbms_output.put_line(dept_record.deptname); ELSE Exit; END IF; END LOOP; CLOSE cur1; OPEN cur1(l_deptno); LOOP FETCH cur1 into dept_record; IF cur1%FOUND THEN Dbms_output.put_line(dept_record.deptname); ELSE Exit; END IF; END LOOP; CLOSE cur1; END; /
Gerelateerde artikelen
Hoe te werken met datum in Oracle sql
Oracle PLSQL-tabellen
Alles over Oracle PLSQL-records
Meest gestelde 25 oracle plsql-interviewvragen
Oracle PLSQL-blokstructuur en Oracle PLSQL-variabele
Cursorattributen