0% found this document useful (0 votes)
10 views

PL SQL LAB

The document provides an overview of PL/SQL, including variable scope, data types, control statements, loops, and cursors. It explains local and global variables, various data types, and demonstrates control structures such as IF statements and loops with examples. Additionally, it covers the use of explicit cursors and their attributes in PL/SQL programming.

Uploaded by

avoynath2005
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
10 views

PL SQL LAB

The document provides an overview of PL/SQL, including variable scope, data types, control statements, loops, and cursors. It explains local and global variables, various data types, and demonstrates control structures such as IF statements and loops with examples. Additionally, it covers the use of explicit cursors and their attributes in PL/SQL programming.

Uploaded by

avoynath2005
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 26

Programming Language/Structured Query

Language
PL/SQL
Two types of Variable Scope
Local Variable
Available only in inner block
Global variable
It is declared in outermost block and available
in all blocks.
DECLARE
a integer := 40;
b integer := 10;
c integer;
f real;
BEGIN
c := a + b;
dbms_output.put_line('Value of c: ' || c);
f := 25.0/3.0;
dbms_output.put_line('Value of f: ' || f);
END;
DECLARE
temp varchar(20);

BEGIN
SELECT g_id into temp from geeks where g_name='GeeksforGeeks';

exception
WHEN no_data_found THEN
dbms_output.put_line('ERROR');
dbms_output.put_line('there is no name as');
dbms_output.put_line(‘Desired');
end;
DECLARE
num1 number := 95;
num2 number := 85;
BEGIN
dbms_output.put_line('Outer Variable num1: ' || num1);
dbms_output.put_line('Outer Variable num2: ' || num2);
DECLARE
num1 number := 195;
num2 number := 185;
BEGIN
dbms_output.put_line('Inner Variable num1: ' || num1);
dbms_output.put_line('Inner Variable num2: ' || num2);
END;
END;
S.No Data Type & Description

CHAR
1
Fixed-length character string with maximum size of 32,767 bytes
VARCHAR2
2
Variable-length character string with maximum size of 32,767 bytes

RAW
3
Variable-length binary or byte string with maximum size of 32,767 bytes, not interpreted by PL/SQL

NCHAR
4
Fixed-length national character string with maximum size of 32,767 bytes

NVARCHAR2
5
Variable-length national character string with maximum size of 32,767 bytes

LONG
6
Variable-length character string with maximum size of 32,760 bytes

LONG RAW
7
Variable-length binary or byte string with maximum size of 32,760 bytes, not interpreted by PL/SQL
Using %Type for defining Variable

Declare
v_name employee.lastname%TYPE;

v_dep number; v_min_dep v_dep%TYPE:=31;

Begin
select lastname into v_name from EMPLOYEE where
DEPARTMENTID=v_min_dep;

DBMS_OUTPUT.PUT_LINE('v_name: '||v_name);
end;
Various Control Statements

(1) IF condition THEN statements END IF;

Samples
IF new_balance < minimum_balance THEN overdrawn := TRUE; ELSE
overdrawn := FALSE; END IF;

DECLARE
PROCEDURE p ( sales NUMBER, quota NUMBER, emp_id NUMBER )
IS
bonus NUMBER := 0;
updated VARCHAR2(3) := 'No’;
BEGIN IF sales > (quota + 200)
THEN
bonus := (sales - quota)/4; UPDATE employees SET salary = salary +
bonus
WHERE employee_id = emp_id;
updated := 'Yes’;

END IF; DBMS_OUTPUT.PUT_LINE ( 'Table updated? ' || updated || ', '


|| 'bonus = ' || bonus || '.' ); END p; BEGIN p(10100, 10000, 120);
p(10500, 10000, 121); END; /
(2) IF condition THEN statements ELSE else_statements END IF;

DECLARE PROCEDURE p
( sales NUMBER, quota NUMBER, emp_id NUMBER )
IS
bonus NUMBER := 0;
BEGIN
IF sales > (quota + 200)
THEN bonus := (sales - quota)/4;
ELSE bonus := 50;
END IF;
DBMS_OUTPUT.PUT_LINE('bonus = ' || bonus);
UPDATE employees
SET salary = salary + bonus WHERE employee_id = emp_id;
END p;
BEGIN p(10100, 10000, 120);
p(10500, 10000, 121);
END; /
3.Nested IF-THEN-ELSE Statement
DECLARE
PROCEDURE p ( sales NUMBER, quota NUMBER, emp_id NUMBER )
IS
bonus NUMBER := 0;
BEGIN
IF sales > (quota + 200) THEN
bonus := (sales - quota)/4;
ELSE
IF sales > quota THEN
bonus := 50;
ELSE
bonus := 0;
END IF;
END IF;
DBMS_OUTPUT.PUT_LINE('bonus = ' || bonus);
UPDATE employees SET salary = salary + bonus
WHERE employee_id = emp_id;
END p;
BEGIN
p(10100, 10000, 120);
p(10500, 10000, 121);
p(9500, 10000, 122);
END; /
4.Nested IF-THEN-ELSE Statement

IF THEN ELSIF Statement


IF condition_1
THEN statements_1
ELSIF condition_2
THEN statements_2
[ ELSIF condition_3 THEN statements_3 ]...
ELSE else_statements ]
END IF;
5. IF THEN ELSIF Statement

DECLARE
PROCEDURE p
(sales NUMBER)
IS
bonus NUMBER := 0;
BEGIN
IF sales > 50000 THEN
bonus := 1500;
ELSIF sales > 35000 THEN
bonus := 500;
ELSE bonus := 100;
END IF;
DBMS_OUTPUT.PUT_LINE ( 'Sales = ' || sales || ', bonus = ' || bonus || '.’ );
END p;
BEGIN
p(55000);
p(40000);
p(30000);
END; /
6. Simple CASE Statement

CASE selector
WHEN selector_value_1 THEN statements_1
WHEN selector_value_2 THEN statements_2 ...
WHEN selector_value_n THEN statements_n
ELSE else_statements
END CASE;

DECLARE
grade CHAR(1);
BEGIN
grade := 'B’;
CASE grade
WHEN 'A' THEN DBMS_OUTPUT.PUT_LINE('Excellent’);
WHEN 'B' THEN DBMS_OUTPUT.PUT_LINE('Very Good’);
WHEN 'C' THEN DBMS_OUTPUT.PUT_LINE('Good’);
WHEN 'D' THEN DBMS_OUTPUT.PUT_LINE('Fair’);
WHEN 'F' THEN DBMS_OUTPUT.PUT_LINE('Poor’);
ELSE DBMS_OUTPUT.PUT_LINE('No such grade’);
END CASE;
END; /
7. Searched CASE Statement
CASE
WHEN condition_1
THEN statements_1
WHEN condition_2
THEN statements_2 ...
WHEN condition_n
THEN statements_n
ELSE else_statements
END CASE;

DECLARE
grade CHAR(1);
BEGIN
grade := 'B’;
CASE
WHEN grade = 'A' THEN DBMS_OUTPUT.PUT_LINE('Excellent’);
WHEN grade = 'B' THEN DBMS_OUTPUT.PUT_LINE('Very Good’);
WHEN grade = 'C' THEN DBMS_OUTPUT.PUT_LINE('Good’);
WHEN grade = 'D' THEN DBMS_OUTPUT.PUT_LINE('Fair’);
WHEN grade = 'F' THEN DBMS_OUTPUT.PUT_LINE('Poor’);
ELSE DBMS_OUTPUT.PUT_LINE('No such grade’);
END CASE;
END;
LOOP Statements

8. Basic LOOP Statement

LOOP
statements
END LOOP ;

Sample

DECLARE
x NUMBER := 0;
BEGIN
LOOP
DBMS_OUTPUT.PUT_LINE ('Inside loop: x = ' || TO_CHAR(x));
x := x + 1;
IF x > 3
THEN EXIT;
END IF;
END LOOP;
DBMS_OUTPUT.PUT_LINE(' After loop: x = ' || TO_CHAR(x));
END;
9. EXIT WHEN Statement
DECLARE
x NUMBER := 0;
BEGIN
LOOP
DBMS_OUTPUT.PUT_LINE('Inside loop: x = ' || TO_CHAR(x));
x := x + 1;
EXIT WHEN x > 3;
END LOOP;
DBMS_OUTPUT.PUT_LINE('After loop: x = ' || TO_CHAR(x));
END;
DECLARE
i PLS_INTEGER := 0;
j PLS_INTEGER := 0;
BEGIN
LOOP
i := i + 1;
DBMS_OUTPUT.PUT_LINE ('i = ' || i);
LOOP
j := j + 1;
DBMS_OUTPUT.PUT_LINE ('j = ' || j);
EXIT WHEN (j > 3);
END LOOP;
DBMS_OUTPUT.PUT_LINE ('Exited inner loop’);
EXIT WHEN (i > 2);
END LOOP;
DBMS_OUTPUT.PUT_LINE ('Exited outer loop’);
END;
10. Continue Statement

DECLARE
x NUMBER := 0;
BEGIN
LOOP
DBMS_OUTPUT.PUT_LINE ('Inside loop: x = ' || TO_CHAR(x));
x := x + 1;
CONTINUE WHEN x < 3;
DBMS_OUTPUT.PUT_LINE ('Inside loop, after CONTINUE: x = ' || TO_CHAR(x));
EXIT WHEN x = 5;
END LOOP;
DBMS_OUTPUT.PUT_LINE (' After loop: x = ' || TO_CHAR(x));
END;
11. For Statement

FOR index IN [ REVERSE ]


lower_bound..upper_bound
LOOP statements
END LOOP ;

BEGIN
DBMS_OUTPUT.PUT_LINE ('lower_bound < upper_bound’);
FOR i IN 1..3
LOOP
DBMS_OUTPUT.PUT_LINE (i);
END LOOP;
DBMS_OUTPUT.PUT_LINE ('lower_bound = upper_bound’);
FOR i IN 2..2
LOOP DBMS_OUTPUT.PUT_LINE (i);
END LOOP;
DBMS_OUTPUT.PUT_LINE ('lower_bound > upper_bound’);
FOR i IN 3..1
LOOP DBMS_OUTPUT.PUT_LINE (i);
END LOOP;
END;
12. WHILE LOOP Statement
WHILE condition
LOOP statements
END LOOP;

DECLARE
done BOOLEAN := FALSE;
BEGIN
WHILE done
LOOP DBMS_OUTPUT.PUT_LINE ('This line does not print.’);
done := TRUE;
END LOOP;
WHILE NOT done
LOOP DBMS_OUTPUT.PUT_LINE ('Hello, world!’);
done := TRUE;
END LOOP;
END;
PL/SQL Cursor

A cursor is a pointer that points to a result of a query.

Two types of cursors:


Implicit cursors
Explicit cursors.
Whenever Oracle executes an SQL statement such as Select , Insert, Update , Delete
It creates an implicit cursor.
Select ;
Explicit Cursor
Explicit Cursor

Declare a cursor
CURSOR cursor_name IS query
Open a cursor
Open Cursor_name
Fetch from a cursor
Fetch cursor_name into variable_list;
Close Cursor_name
Explicit Cursor Attributes
%ISOPEN
When cursor open true
When cursor is not open false

%FOUND
True when successfully record fetched
False when no record found
%NOTFOUND
It’s value is opposite of %FOUND
%ROWCOUNT
number of rows fetched from the cursor
DECLARE
x NUMBER := 100;
BEGIN
FOR i IN 1..10 LOOP
IF MOD(i,2) = 0 THEN
INSERT INTO temp VALUES (i, x, 'i is even');
ELSE
INSERT INTO temp VALUES (i, x, 'i is odd');
END IF;
x := x + 100;
END LOOP ;
COMMIT;
END;
DECLARE
CURSOR c1 is
SELECT ename, empno, sal FROM emp ORDER BY sal DESC;
my_ename VARCHAR2(10);
my_empno NUMBER(4);
my_sal NUMBER(7,2);
BEGIN
OPEN c1;
FOR i IN 1..5
LOOP
FETCH c1 INTO my_ename, my_empno, my_sal;
EXIT WHEN c1%NOTFOUND;
INSERT INTO temp VALUES (my_sal, my_empno, my_ename);
COMMIT;
END LOOP;
CLOSE c1;
END;

You might also like