sql >> Databasteknik >  >> RDS >> Oracle

Vad är markören i oracle

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


  1. Automatisk radering av glömda transaktioner i MS SQL Server

  2. Hur tar jag bort icke-avbrytande blanksteg från en kolumn i SQL-servern?

  3. Hur man listar alla tabeller i Oracle

  4. 5 sätt att kontrollera en kolumns datatyp i SQLite