Vad är markören i Oracle
Oracle Använder ett arbetsområde som kallas Private SQL-områden för att exekvera SQL-satser och lagra information. En Oracle Cursor är en PL/SQL-konstruktion som låter dig namnge dessa arbetsområden och komma åt deras lagrade information
Typer av markör i Oracle
- Implicit markör i Oracle
- Explicit markör i Oracle
Explicita markörer
Explicita markörer har följande steg
1) Deklarera:Vi deklarerar namnet på markören och definierar strukturen för frågan
2) Öppna: Open-satsen kör frågan och binder alla variabler som det refereras till. Rader som identifieras av frågan kallas aktiva uppsättningar. Och nu är det tillgängligt för hämtning
Vad är Active Set: Uppsättningen rader som returneras av en fråga med flera rader
Dess storlek är antalet rader som uppfyller dina sökkriterier
3) Hämta:I detta skede hämtas rader från markören, och efter varje hämtning testar du markören för eventuella återstående rader, om inga rader, fortsätter du för att stänga markören
4) Close:Close-satsen släpper den aktiva uppsättningen rader och vi kan återigen öppna markören för att hämta uppdatera aktiv uppsättning
Stadier i detaljer
Deklarera en markör
- Markörens namn
- Frågans struktur
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;
Öppna en markör
Här utförs analys och frågekörning. Efter att du har öppnat markören är raderna som returneras av frågan tillgängliga för hämtning.
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; /
Markören kommer nu att peka på den första raden i den aktiva uppsättningen.
Hämtar raderna
Efter att markören har öppnats laddas den aktuella raden in i variabler. Den aktuella raden är den rad som markören för närvarande pekar på. Hämtning av data till PL/SQL-variabel eller värd
Variabeln görs genom FETCH-satsen
Syntax: FETCH INTO ;
- För varje kolumnvärde som returneras av frågan som är kopplad till markören måste det finnas en
motsvarande variabel i INTO-listan.
- ÄVEN deras datatyper måste vara kompatibla
STÄNGNING AV EN MARKÖR
Den stänger uttryckligen markören, så att den kan öppnas igen om det behövs.
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; /
Explicita markörattribut
Attribut | Typ | Beskrivning |
%ISOPEN | Boolesk | Utvärderas till TRUE om markören är öppen |
%NOTFOUND | Boolesk | Utvärderas till TRUE om den senaste hämtningen inte returnerar en rad |
%FOUND | Boolesk | Utvärderas till TRUE om den senaste hämtningen returnerar en rad |
%ROWCOUNT | NUMBER | Utvärderar det totala antalet rader som returnerats hittills |
Avancerat koncept med Oracle-markör
Oracle Cursor and Records
1)Vi har redan läst om PLSQL-poster.
2) Vi kan bearbeta raderna i den aktiva uppsättningen genom att hämta värden till en PL/SQL-post också
3) Vi kan också definiera en plsql-post baserat på den valda listan med kolumner i de explicita markörerna också
Exempel
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; /
Markör med parametrar/parameteriserad markör i oracle
Syntax: CURSOR cursor_name(parameter_name datatype, ) IS Select_statement;
1) Skicka parametervärden till en markör när markören öppnas och frågan exekveras
2) Öppna en explicit markör flera gånger med olika aktiva uppsättningar varje gång
Open cursor_name(parameter_value , ……);
Exempel
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; /
Relaterade artiklar
Hur man arbetar med datum i Oracle sql
Oracle PLSQL-tabeller
Allt om Oracle PLSQL-poster
De vanligaste 25 Oracle plsql-intervjufrågorna
Oracle PLSQL-blockstruktur och Oracle PLSQL-variabel
Markörattribut