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

Sådan opretter du PL/SQL SYS_REFCURSOR i Oracle-databasen

PL/SQL SYS_REFCURSOR i Oracle-databasen

Som vi lærte i introduktionen til ref-markøren, er der tre typer PL/SQL-ref-markører i Oracle Database.

  1. Stærk ref-markør
  2. Svag ref markør og
  3. SYS_REFCURSOR

Indtil videre i denne serie har vi dækket begreberne stærk såvel som svag ref markør. Den eneste type markør, der stadig er uberørt, er PL/SQL SYS_REFCURSOR i Oracle Database. Hvilket vi vil lære i denne blog.

Hvad er PL/SQL SYS_REFCURSOR?

SYS_REFCURSOR er en foruddefineret svag ref-markør, som er indbygget i Oracle-databasesoftwaren.

Hvordan hjælper det os at være en foruddefineret ref-markør?

SYS_REFCURSOR er en foruddefineret svag ref-markør, hvilket betyder, at vi ikke behøver at definere den i vores kode, som vi gjorde med den eksplicitte svage ref-markør i den forrige tutorial. Som vi lærte i den tutorial, at oprettelse af en svag ref-markør er en to-trins proces. Først skal du oprette den "svage ref-markørtype", og derefter skal du oprette "en markørvariabel" ved hjælp af den ref-markør.

Når du bruger SYS_REFCURSOR, skal du blot oprette en markørvariabel og intet andet. SYS_REFCURSOR minimerer fuldstændigt det første trin, hvor du opretter den svage ref-markørtype.

Så Sys_Refcursor er en indbygget ref-markør, hvor kan vi finde dens definition?

Du kan finde ud af definitionen af ​​PL/SQL SYS_REFCURSOR i et script med navnet "stdspec.sql". Du kan finde dette script i den mappe, hvis sti er som følger. 

%ORACLE_HOME% \RDBMS\ADMIN\stdspec.sql

SYS_REFCURSOR definition vil se nogenlunde sådan ud:

Hvilken type Ref Cursor er en SYS_REFCURSOR?

Som nævnt ovenfor i definitionen er en SYS_REFCURSOR en svag referencemarkør.

Nu hvor du har fjernet næsten al tvivl om SYS_REFCURSOR. Jeg vil lige stille dig et sidste spørgsmål.

Info:Der er ingen mellemrum mellem REF og CURSOR. Det er et enkelt ord "RefCursor".
Forkert:SYS_REF CURSOR
Korrekt:SYS_REFCURSOR

Hvorfor ville nogen erklære en svag ref-markør, når vi allerede har en foruddefineret en?

Det er faktisk et meget godt spørgsmål. Svaret på dette spørgsmål er Nej, vi behøver ikke udtrykkeligt at oprette en svag ref-markør. Oracle minimerede behovet for at oprette en svag ref-markør ved at sende SYS_REFCURSOR som en del af standardpakken siden Oracle Database 9i, selvom muligheden for at oprette en stadig er tilgængelig.

Det er ligesom et personligt valg, hvis nogen vil oprette en svag ref-markør, så kan de det. Hvis ikke, så har de SYS_REFCURSOR altid til deres rådighed. Min kære ven Steven Feuerstein lavede et meget godt blogindlæg, der besvarede dette spørgsmål, som du kan læse her.

Lad os se et meget nemt eksempel, der viser, hvordan man bruger en PL/SQL SYS_REFCURSOR i Oracle Database.

Eksempel:Hvordan opretter man PL/SQL SYS_REFCURSOR i Oracle-databasen?

SET SERVEROUTPUT ON;
DECLARE
    --Declare cursor variable of SYS_REFCURSOR type
    cur_var SYS_REFCURSOR;
    
    --Declare variables for holding data
    f_name  employees.first_name%TYPE;
    emp_sal employees.salary%TYPE;
BEGIN
OPEN cur_var FOR SELECT first_name, Salary FROM employees WHERE employee_id = 100;
    FETCH cur_var INTO f_name, emp_sal;
    CLOSE cur_var;
    DBMS_OUTPUT.PUT_LINE(f_name ||' '||emp_sal);
END;
/

Du kan se videovejledningen på YouTube-kanalen for en detaljeret forklaring af ovenstående kode.

Håber du nød at læse og lærte noget nyt. Del venligst denne blog på dine sociale medier med dine venner. Tak og god dag.


  1. psycopg2 svarende til mysqldb.escape_string?

  2. Hvad er markør i oracle

  3. Sådan fungerer SHOW COLLATION i MariaDB

  4. Flytning af data fra SQL Server til Oracle gentagne gange