sql >> Database teknologi >  >> RDS >> Oracle

Hvad er markør i oracle

Hvad er markør i Oracle

Oracle Bruger et arbejdsområde kaldet Private SQL-områder til at udføre SQL-sætninger og gemme information. En Oracle Cursor er en PL/SQL-konstruktion, der giver dig mulighed for at navngive disse arbejdsområder og få adgang til deres lagrede information

Typer af markør i Oracle

  • Implicit markør i Oracle
  • Eksplicit markør i Oracle

Eksplicitte markører

Eksplicitte markører har følgende trin

1) Erklær:Vi erklærer navnet på markøren og definerer strukturen af ​​forespørgslen

2) Åbn:  Open-sætningen udfører forespørgslen og binder enhver variabel, der refereres til. Rækker identificeret af forespørgslen kaldes aktive sæt. Og nu er den tilgængelig til at hente

Hvad er aktivt sæt: Det sæt af rækker, der returneres af en forespørgsel med flere rækker

Dens størrelse er antallet af rækker, der opfylder dine søgekriterier

3) Hent:På dette trin hentes rækker fra markøren, og efter hver hentning tester du markøren for eventuelle resterende rækker, hvis der ikke er nogen rækker, fortsætter du for at lukke markøren

4) Luk:Luk-erklæringen frigiver det aktive sæt af rækker, og vi kan igen åbne markøren for at hente genopfrisk aktive sæt

Stadier i detaljer

Erklæring af en markør

  • Markørnavn
  • Forespørgslens 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;

Åbning af en markør

Her udføres parsing og forespørgsel. Efter åbning af markøren er rækkerne, der returneres af forespørgslen, tilgængelige for hentning.

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 vil nu pege på den første række i det aktive sæt.

Henter rækkerne

Efter at markøren er åbnet, indlæses den aktuelle række i variabler. Den aktuelle række er den række, som markøren i øjeblikket peger på. Hentning af data til PL/SQL-variabel eller vært

Variablen udføres gennem FETCH-sætningen

Syntax: 
 FETCH  INTO ;
  • For hver kolonneværdi, der returneres af den forespørgsel, der er knyttet til markøren, skal der være en

tilsvarende variabel i INTO-listen.

  • OG deres datatyper skal være kompatible

LUKNING AF EN MARKØR

Den lukker eksplicit markøren, så den kan genåbnes, hvis det kræves.

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;
 /

Eksplicitte markørattributter

Attribut Type Beskrivelse
%ISOPEN Boolesk Vurderer til SAND, hvis markøren er åben
%NOTFOUND Boolesk Evalueres til TRUE, hvis den seneste hentning ikke returnerer en række
%FOUND Boolesk Evalueres til TRUE, hvis den seneste hentning returnerer en række
%ROWCOUNT NUMBER Evaluerer til det samlede antal rækker, der er returneret indtil videre

Avanceret koncept med Oracle-markør

Oracle Cursor og Records

1)Vi har allerede læst om PLSQL-poster.

2) Vi kan også behandle rækkerne af det aktive sæt ved at hente værdier ind i en PL/SQL Record også

3) Vi kan også definere en plsql-record baseret på den valgte liste over kolonnerne i de eksplicitte markører

Eksempel

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 parametre/parameteriseret markør i Oracle

Syntax: 
 CURSOR cursor_name(parameter_name datatype,  )
 IS
 Select_statement;

1) Send parameterværdier til en markør, når markøren åbnes, og forespørgslen udføres

2) Åbn en eksplicit markør flere gange med forskellige aktive sæt hver gang

Open cursor_name(parameter_value , ……);

Eksempel

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;
 /

 Relaterede artikler

Sådan arbejder du med dato i Oracle sql
Oracle PLSQL-tabeller
Alt om Oracle PLSQL-poster
De oftest stillede 25 oracle plsql-interviewspørgsmål
Oracle PLSQL-blokstruktur og Oracle PLSQL-variabel
Markørattributter


  1. Hvordan kan jeg ændre standard Mysql-forbindelsestimeout, når jeg opretter forbindelse gennem python?

  2. sql grupper efter kun rækker, der er i rækkefølge

  3. Brug af MySQL med Oracle Heterogene Services

  4. Hvad er MySQL-ækvivalenten til SQL Servers CHOOSE()-funktion?