database-l4-sql-plsql
database-l4-sql-plsql
Introduction
• To process an SQL statement, ORACLE needs to create
an area of memory known as the context area.
• Context area
• is a memory area inside the PGA.
• helps Oracle server in processing an SQL statement by
holding the important information about that statement.
• contains information about
• rows returned by a query
• the number of rows processed by a query
• a pointer to the parsed query in the shared pool
2
Solution?
SELECT name
This solution is not valid
INTO v_name because it can not assign
FROM Pilot multiple values into a single
WHERE sal> 2200; variable.
Cursors
• All UPDATE and DELETE statements have cursors that identify the
set of rows that will be affected by the operation.
BEGIN
UPDATE Pilot
SET Sal= 10 000
WHERE name LIKE 'B%';
DBMS_OUTPUT.PUT_LINE(SQL%ROWCOUNT);
END;
7
Declare
Open
Fetch
Close 9
Example
DECLARE
CURSOR C1 IS 11
SELECT name FROM pilot WHERE sal<1200 ;
Example
DECLARE
CURSOR C2 (psal NUMBER(8,2), pcom NUMBER(8,2))
IS SELECT name
12
FROM pilot
WHERE sal<psal AND comm> pcom ;
DECLARE
CURSOR pilot_nice IS
SELECT nopilot, name, sal
FROM pilot
WHERE address='Nice';
Pnum pilot.nopilot%TYPE;
Pname pilot.name%TYPE;
Psalary pilot.sal%TYPE;
BEGIN
OPEN pl_nice;
LOOP
FETCH pilot_nice INTO Pnum, Pname, Psalary;
...
EXIT WHEN sal > 10 000; 16
END LOOP;
END
DECLARE
CURSOR pilot_nice IS
SELECT nopilot, name, sal
FROM pilot
WHERE address='Nice';
Pnum pilot.nopilot%TYPE;
Pname pilot.name%TYPE;
Psalary pilot.sal%TYPE;
BEGIN
OPEN pilot _nice;
LOOP
FETCH pilot_nice INTO Pnum, Pname, Psalary;
...
EXIT WHEN Psalary > 10 000;
END LOOP; 18
CLOSE pilot _nice;
END
19
20
DECLARE
CURSOR C3 IS SELECT name, sal FROM pilot WHERE sal>2200;
V_name pilot.name%TYPE;
V_sal pilot.sal%TYPE;
BEGIN
OPEN C3;
LOOP
FETCH C3 INTO v_name, v_sal;
EXIT WHEN C3%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(‘Pilot name: ' || v_name||' Salary :' || v_sal);
END LOOP;
CLOSE C3;
21
END;
DECLARE
TYPE t_pilot IS RECORD (v_name pilot.name%TYPE, v_sal pilot.sal%TYPE);
rec_pilot t_pilot;
CURSOR C3 IS SELECT name,sal FROM pilot WHERE sal>2200;
BEGIN
OPEN C3;
LOOP
FETCH C3 INTO rec_pilot;
EXIT WHEN C3%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(‘Pilot name: ' || rec_pilot.v_name||'
Salary: ' || rec_pilot.v_sal);
END LOOP; 22
CLOSE C3;
END;
Downloaded by DJ ELECT P ([email protected])
lOMoARcPSD|53448331
DECLARE
i BINARY_INTEGER ;
CURSOR C3 IS
SELECT name,sal FROM pilot WHERE sal>2200;
V_name pilot.name%TYPE;
V_sal pilot.sal%TYPE;
BEGIN
FOR i IN C3 ;
LOOP
FETCH C3 INTO V_name,V_sal;
DBMS_OUTPUT.PUT_LINE(‘Pilot name: ' || v_name||' Salary :' || v_sal);
END LOOP;
26
END