3.
Sequential control:
create database l;
use l;
delimiter **
create procedure prg()
begin
declare no int;
set no=0;
label:loop
set no=no+1;
select no;
if no=5 then leave label;
end if ;
end loop label;
select no;
end **
mysql> DELIMITER ;
mysql> CALL prg;
output:
+------+
| no |
+------+
| 1|
+------+
1 row in set (0.00 sec)
+------+
| no |
+------+
| 2|
+------+
1 row in set (0.00 sec)
+------+
| no |
+------+
| 3|
+------+
1 row in set (0.00 sec)
+------+
| no |
+------+
| 4|
+------+
1 row in set (0.01 sec)
+------+
| no |
+------+
| 5|
+------+
1 row in set (0.01 sec)
+------+
| no |
+------+
| 5|
+------+
1 row in set (0.01 sec)
Query OK, 0 rows affected (0.02 sec)
4.exception handling
Create database he;
Use he;
Create table s(id int primary key,title varchar(40),author varchar(90));
Insert into s values(1,”java”,”james”),(2,”c”,”pavi”);
Create table h(id int primary key,title varchar(40),author varchar(90));
DELIMITER **
CREATE PROCEDURE ext()
begin
DECLARE done INT DEFAULT 0;
DECLARE sid integer;
DECLARE sbkname,sautname varchar(20);
DECLARE syop integer;
DECLARE cur CURSOR FOR SELECT * FROM s;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN cur;
label: LOOP
FETCH cur INTO sid,sbkname,sautname,syop;
INSERT INTO h values( sid,sbkname,sautname,syop);
IF done = 1 THEN LEAVE label;
END IF;
END LOOP;
CLOSE cur;
end **
Query OK, 0 rows affected (0.01 sec)
DELIMITER ;
CALL ext;
5.Implicit and explicit cursor
create database cur;
use cur;
create table p(id int,name varchar(90));
insert into p values(1,"pavi"),(2,"kavi");
select * from p;
delimiter **
create procedure li(INOUT namer varchar(4000))
begin
declare is_done integer default 0;
declare s_name char(80) default " ";
declare stud_cursor cursor for
select name from v;
declare continue handler for not found set is_done=1;
open stud_cursor;
g:loop
fetch stud_cursor into s_name;
if is_done =1 then leave g;
end if;
set namer=CONCAT(s_name,";",namer);
end loop g;
close stud_cursor;
end **
set @namer=" ";
call li(@namer);
select @namer;
end **
Query OK, 0 rows affected (0.00 sec)
Output:
mysql> select * from h;
+------+------+
| id | name |
+------+------+
| 1 | pavi |
| 2 | kavi |
+------+------+
2 rows in set (0.00 sec)
+-------------+
| @namer |
+-------------+
| kavi;pavi; |
+-------------+
6.trigger
Create database tr;
Use tr;
create table h(id int,name varchar(67),salary int);
insert into h values(1,"pavi",90200),(2,"savi",40000);
select * from h;
delimiter **
create trigger s
before insert on h for each row
begin
if new.salary<15000 then set new.salary=0;
end if;
end **
insert into h values(3,"pavi",90200),(4,"savi",4000);
select * from h;
end **
output:
+------+------+-------+
| id | name | salary |
+------+------+-------+
| 1 | pavi | 90200 |
| 2 | savi | 40000 |
+------+------+-------+
+------+------+-------+
| id | name | salary |
+------+------+-------+
| 1 | pavi | 90200 |
| 2 | savi | 40000 |
| 3 | pavi | 90200 |
| 4 | savi | 0|
+------+------+-------+
7.program for in out parameter
mysql> create database par;
mysql> use par;
mysql> create table aut(id int primary key,name char(90),gender char(90));
mysql> create table bk(id int unique,ISBN int ,name char(90),price int,pages int);
mysql> insert into aut values(1,"pavi","female"),(2,"ravi","male");
mysql> insert into bk values(1,001,"c",2000,289),(2,002,"java",4000,489),
(3,003,"rdbms",7000,1289);
mysql> delimiter **
mysql> create procedure up(in t_isbn char(10),in new_price integer)
-> begin
-> update bk set price =new_price where isbn=t_isbn;
-> end **
mysql> select * from bk;
-> end **
+------+------+-------+-------+-------+
| id | ISBN | name | price | pages |
+------+------+-------+-------+-------+
| 1| 1|c | 2000 | 289 |
| 2 | 2 | java | 4000 | 489 |
| 3 | 3 | rdbms | 7000 | 1289 |
+------+------+-------+-------+-------+
3 rows in set (0.00 sec)
mysql> delimiter ;
mysql> call up(001,1890);
Query OK, 1 row affected (0.01 sec)
mysql> select * from bk;
+------+------+-------+-------+-------+
| id | ISBN | name | price | pages |
+------+------+-------+-------+-------+
| 1| 1|c | 1890 | 289 |
| 2 | 2 | java | 4000 | 489 |
| 3 | 3 | rdbms | 7000 | 1289 |
+------+------+-------+-------+-------+
3 rows in set (0.00 sec)
mysql> delimiter **
mysql> create procedure maxi(out highprice int)
-> begin
-> select max(price) into highprice from bk;
-> end **
Query OK, 0 rows affected (0.01 sec)
mysql> delimiter ;
mysql> call maxi(@m);
Query OK, 1 row affected (0.00 sec)
mysql> select @m;
+------+
| @m |
+------+
| 7000 |
+------+
1 row in set (0.00 sec)
mysql> delimiter **
mysql> create procedure gen(inout gend int,in mtgender char(8))
-> begin
-> select count(*) from aut where gender=mtgender;
-> end **
Query OK, 0 rows affected (0.01 sec)
mysql> delimiter ;
mysql> call gen(@m,"male");
+----------+
| count(*) |
+----------+
| 1|
+----------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
mysql> call gen(@f,"female");
+----------+
| count(*) |
+----------+
| 1|
+----------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.01 sec)
8.pl/sql records and tables
Set serveroutput on;
SQL>CREATE TABLE customers (
id INT NOT NULL,
name VARCHAR(90),
address VARCHAR(90),
salary BINARY_DOUBLE
);
SQL>set define off;
SQL> INSERT INTO customers VALUES(1, 'riya', 'delhi', 2000.0);
SQL> INSERT INTO customers VALUES(2, 'priya', 'delhi', 1500.0);
SQL>INSERT INTO customers VALUES(3, 'viya', 'delhi', 6500.0);
SQL> COMMIT;
SQL>SELECT * FROM customers;
SQL>DECLARE
c_idcustomers_id customers.id%TYPE := 8;
c_name customers.name%TYPE;
c_addr customers.address%TYPE;
BEGIN
SELECT name, address INTO c_name, c_addr FROM customers WHERE id = c_idcustomers_id;
DBMS_OUTPUT.PUT_LINE('Address:' || c_addr);
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('No such customer!');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Error!');
END;
Output:
ID
----------
NAME
---------------------------------------------------------------------------
-----
ADDRESS
---------------------------------------------------------------------------
-----
SALARY
----------
1
riya
delhi
2.0E+003
ID
----------
NAME
---------------------------------------------------------------------------
-----
ADDRESS
---------------------------------------------------------------------------
-----
SALARY
----------
2
priya
delhi
1.5E+003
ID
----------
NAME
---------------------------------------------------------------------------
-----
ADDRESS
---------------------------------------------------------------------------
-----
SALARY
----------
3
viya
delhi
6.5E+003
No such customer!
PL/SQL procedure successfully completed.
9. package:
CREATE OR REPLACE PACKAGE simple_pkg AS
FUNCTION get_square(num IN NUMBER) RETURN NUMBER;
END simple_pkg;
CREATE OR REPLACE PACKAGE BODY simple_pkg AS
FUNCTION get_square(num IN NUMBER) RETURN NUMBER IS
BEGIN
RETURN num * num;
END get_square;
END simple_pkg;
BEGIN
DBMS_OUTPUT.PUT_LINE('Square of 4:'|| simple_pkg.get_square(4));
END;
output;
Square of 4:16
PL/SQL procedure successfully completed.
10.function:
Create database fn;
Use fn;
create table student (Name varchar(100),maths int,english int,science int,history int);
insert into student values("rihana",95,89,85,81),("rifana",90,87,86,81),("rizwana",90,85,86,81),
("riyana",null,null,null,null);
select * from student;
delimiter **
create function tbl_update(s_name varchar(50),m1 int,m2 int,m3 int,m4 int)
returns int
deterministic
begin
update student set maths=m1,english=m2,science=m3,history=m4 where name = s_name;
return 1;
end **
delimiter ;
select tbl_update("riyana",85,69,75,82);
select * from student;