Cursor-ul în PL/SQL

Referat
6/10 (1 vot)
Conține 1 fișier: doc
Pagini : 13 în total
Cuvinte : 2241
Mărime: 18.83KB (arhivat)
Publicat de: Rozalia Nicoară
Puncte necesare: 7
Academia de Studii Economice Facultatea de Cibernetică, Statistică şi Informatică Economică

Extras din referat

ORACLE foloseşte arii de lucru private SQL, arii care execută declaraţii SQL şi care memorează informaţii de procesare. Cursorul este o construcţie PL/SQL, care iţi permite să denumeşti aceste arii de lucru şi care accesează informaţia.

Există două tipuri de cursor:

- Cursor implicit - este declarat de PL/SQL implicit pentru toate comenzile de manipulare a datelor (INSERT, UPDATE, DELETE);

- dacă o instrucţiune LMD nu afectează nici o linie a tabelei nu se generează eroare, însă excepţia trebuie tratată folosind atributele speciale ale cursorilor;

- Cursor explicit - se foloseşte pentru a procesa individual fiecare linie (înregistrare) returnată de o instrucţiune SELECT ce returnează mai multe înregistrări.

- mulţimea înregistrărilor returnate de o instructiune SELECT este numită mulţime rezultat.

- cursorul păstrează un pointer către linia curentă în cadrul unei mulţimi rezultat.

Atribute ale cursorului implicit:

SQL%ROWCOUNT

SQL%FOUND

SQL%NOTFOUND

Exemplu: Folosirea atributului SQL%FOUND

CREATE TABLE dept_temp AS SELECT * FROM departments;

DECLARE

dept_no NUMBER(4) := 270;

BEGIN

DELETE FROM dept_temp WHERE department_id = dept_no;

IF SQL%FOUND THEN --daca stergerea s-a efectuat cu succes

INSERT INTO dept_temp VALUES (270, 'Personnel', 200, 1700);

END IF;

END;

%NOTFOUND

%NOTFOUND este atributul opus lui %FOUND. %NOTFOUND este TRUE daca INSERT, UPDATE sau DELETE nu afecteaza nici o inregistrare din baza de date sau SELECT INTO nu returneaza nici o inregistrare.Altfel este FALSE.

- %ROWCOUNT

%ROWCOUNT returneaza numarul de inregistrari afectate de una din comenzile INSERT, UPDATE, sau DELETE sau numarul de inregistrari afectate de SELECT INTO. %ROWCOUNT este 0 daca comanda INSERT, UPDATE, sau DELETE nu afecteaza nici o inregistrae, sau SELECT INTO nu returneaza nici o inregistrare.

Exemplu: Folosirea SQL%ROWCOUNT

DECLARE

mgr_no NUMBER(6) := 122;

BEGIN

DELETE FROM angajati WHERE manager_id = mgr_no;

DBMS_OUTPUT.PUT_LINE( ‘nr de angajati stersi este: ’ || TO_CHAR(SQL%ROWCOUNT));

END;

Valoarea atributului SQL%ROWCOUNT se refera la cea mai recenta comanda SQL executata in PL/SQL.

Controlul explicit al cursorului – pe paşi

Cursorul explicit poate fi controlat prin 4 tipuri separate de acţiuni:

DECLARE

Numeşte cursorul, şi defineşte structura interogării care să fie efectuate cu el. La acest nivel, interogarea este parcursă (coloane, tabele, etc) dar nu este executată.

Instrucţiunea CURSOR

Este folosită pentru a declara un cursor explicit. Parametrii pot fi definiţi pentru a permite substituţia valorilor în interogare când cursorul este OPEN. Variabilele pot fi deasemeni referite în interogare, dar trebuie să fie declarate înaintea instrucţiunii CURSOR.

Sintaxa:

CURSOR identificator [(parameter details)] IS query-expression;

unde query-expression este o instrucţiune SELECT care poate include majoritatea clauzelor, dar nu o clauză INTO. Nu trebuie definit NULL ca un obiect SELECT.

Exemplu :

DECLARE

CURSOR c1 IS

SELECT nume, salariul, data_angajare FROM angajati

WHERE id_angajat=200;

OPEN

Execută interogarea, legând orice variabilă care a fost referenţiată. Liniile întoarse de interogare, numită "set-activ" sunt acum disponibile pentru extragere.

Este utilizată în cadrul acţiunilor executabile dintr-un bloc, şi stabileşte un set activ de rânduri.

Sintaxa:

OPEN cursor-identif [(lista argumente)] ;

Exemplu:

OPEN c1;

Cursorul va pointa către primul rând în setul activ, ca de exemplu:

> SCOTT 3000 16-jan-90

FORD 3000 03-dec-81

De observat că excepţiile nu sunt lansate dacă cererea nu întoarce niciun rând când este deschis cursorul. Starea cursorului poate, totuşi, să fie testată după un FETCH.

FETCH

Memorează valorile din linia curentă în variabile. Linia curentă este linia la care cursorul pointează. Fiecare FETCH produce mutarea cursorului să indice la linia următoare în setul activ, şi deci fiecare FETCH va accesa o linie diferită returnată de interogare.

Preview document

Cursor-ul în PL/SQL - Pagina 1
Cursor-ul în PL/SQL - Pagina 2
Cursor-ul în PL/SQL - Pagina 3
Cursor-ul în PL/SQL - Pagina 4
Cursor-ul în PL/SQL - Pagina 5
Cursor-ul în PL/SQL - Pagina 6
Cursor-ul în PL/SQL - Pagina 7
Cursor-ul în PL/SQL - Pagina 8
Cursor-ul în PL/SQL - Pagina 9
Cursor-ul în PL/SQL - Pagina 10
Cursor-ul în PL/SQL - Pagina 11
Cursor-ul în PL/SQL - Pagina 12
Cursor-ul în PL/SQL - Pagina 13

Conținut arhivă zip

  • Cursor-ul in PL-SQL.doc

Te-ar putea interesa și

Proiectarea bazei de date client-server

INTRODUCERE Prin creşterea vitezei de calcul, prin creşterea capacităţii de memorare a datelor, prin adăugarea unor noi componente perfotmante de...

Sistemul de gestiune al bazelor de date

SQL dinamic este o tehnica de programare care permite construirea dinamica a comenzilor la momentul executiei (adica, direct in faza de executie a...

Laboratoare SQL

Obiective • Cunoaşterea capabilităţilor instrucţiunilor SELECT • Executarea unor instrucţiuni SELECT de bază • Cunoaşterea diferenţelor dintre...

Oracle PL-SQL

Introducere în PL/SQL – Procedural Language extension to SQL 1. Caracteristici generale: -Construcţiile PL/SQL conţin structuri de control...

Baze de Date Distribuite

PROIECT BAZE DE DATE DISTRIBUITE 1.) Prezentarea proiectului Tema proiectului este prezentarea modelului distribuit al unei firme de IT,...

Tipuri de date scalare in PL-SQL

PL/SQL include atât instrucþiuni SQL pentru prelucrarea datelor si pentru gestiunea tranzacþiilor, cât si instrucþiuni proprii. PL/SQL extinde SQL...

Tehnologia client-server în arhitectura sistemelor de baze de date modele de arhitectură

1. TEHNOLOGIA CLIENT/SERVER ÎN ARHITECTURA SISTEMELOR DE BAZE DE DATE. MODELE DE ARHITECTURĂ 1.1. Tehnologia client/server în arhitectura SGBD...

Baze de Date

CAPITOLUL I INTRODUCERE IN BAZE DE DATE CURSUL 1 1. Ce este o baza de date? La inceput calculatoarele au fost utilizate numai pentru calcule...

Ai nevoie de altceva?