You are on page 1of 28

--slip1

create table branch(


bid int primary key,
brname char(30),
brcity char(10)
);
insert into branch values(1,'mg Road','pune');
insert into branch values(2,'deccan','mumbai');
insert into branch values(3,'aundh','solapur');
insert into branch values(4,'swarget','nagpur');
insert into branch values(5,'parvati','konkan');
create table customer(
cno int primary key,
cname char(20),
caddr char(35),
city char(20)
);
insert into customer values(101,'raj','satara road','pune');
insert into customer values(102,'shreya','nagar road','solapur');
insert into customer values(103,'jaya','sahakar nagar','konkan');
insert into customer values(105,'sunny','kothrud','pune');
insert into customer values(106,'joya','swarget','Nagpur');
insert into customer values(107,'taran','parvati','konkan');
insert into customer values(108,'neha','aundh','solapur');
create table loan_application(
lno int primary key,
lamtrequired numeric(10,2),
lamtapproved numeric(10,2),
l_date date
);
insert into loan_application values(1111,300000,250000,'2019-01-02');
insert into loan_application values(2222,400000,300000,'2019-12-15');
insert into loan_application values(3333,200000,200000,'2019-05-23');
insert into loan_application values(4444,10000,15000,'2020-02-02');
insert into loan_application values(5555,900000,900000,'2018-01-01');
create table ternary(
bid int references branch(bid)
on delete cascade on update cascade,
cno int references customer(cno)
on delete cascade on update cascade,
lno int references loan_application(lno)
on delete cascade on update cascade
);
insert into ternary values(1,101,1111);
insert into ternary values(2,103,3333);
insert into ternary values(3,102,5555);
insert into ternary values(4,105,4444);
insert into ternary values(5,101,2222);
select * from branch;
select * from customer;
select * from loan_application;
select * from ternary;
--view
create view v1 as select * from customer where cno=(select cno from ternary where
bid=(select bid from branch where brcity='pimpri'));
select * from v1;

create view v2 as select cname from customer,branch where city=brcity;


select * from v2;

--trigger
create or replace function f1() returns trigger as
$$
begin
if old.cno<>new.cno then
raise exception 'you cant updarte customer number';
else
return new;
end if;
end;
$$
language plpgsql;

create trigger check_cno before update on customer for each row execute procedure
f1();
update customer set cno=2 where cno=101;

--funciotn
create or replace function f2(br_name varchar(20)) returns void as
$$
declare
rec record;
begin
for rec in select * from loan_application where lno=(select lno from ternary where
bid=(select bid from branch where brname=br_name))
loop
raise notice '%',rec;
end loop;
end;
$$
language plpgsql;

select f2('deccan');
--slip 2
create view v3 as select cname from customer where cno=(select cno from ternary
where lno=(select lno from loan_application where lamtrequired=500000));
select * from v3;

create view v4 as select * from loan_application where lno=(select lno from ternary
where bid=(select bid from branch where brcity='Aundh'));
select * from v4;

--trigger
create or replace function f3() returns trigger as
$$
begin
if new.lamtapproved>=new.lamtrequired then
raise exception 'loan amout should be less then required';
else
return new;
end if;
end;
$$
language plpgsql;

create trigger check_amount before insert on loan_application for each row execute
procedure f3();
insert into loan_application values(7777,300000,300000,'2019-01-02');

--function
create or replace function f4(branch_name text)
returns integer as $$
declare
brid integer;
customer_count integer;
begin
select bid into brid from branch where brname = branch_name;

if not found then


raise exception 'Invalid branch name';
end if;

select count(*) into customer_count from customer where cno = (select cno from
ternary where bid=brid);

return customer_count;
end;
$$
language plpgsql;

select f4('deccan');
--slipp 3
create view v5 as select cname from customer where cno=some(select cno from ternary
where lno=some(select lno from loan_application where lamtrequired>200000));
select * from v5;
drop view v5;

create view v6 as select cname,brname from customer,branch,ternary where


customer.cno=ternary.cno and branch.bid=ternary.bid order by brname;
select * from v6;
drop view v6;

--trigger
create or replace function f5() returns trigger as
$$
begin
if new.cno<=0 then
raise exception 'customer number should not be less than or zero';
else
return new;
end if;
end;
$$
language plpgsql;

create trigger check_cnos before insert on customer for each row execute procedure
f5();

insert into customer values(0,'sunny','kothrud','pune');

--function
create or replace function f6() returns void as $$
declare
cur cursor for select customer.cno, customer.cname, loan_application.lamtapproved
from customer,ternary,loan_application where customer.cno=ternary.cno and
loan_application.lno=ternary.lno;
rec record;
begin
open cur;
loop
fetch cur into rec;
exit when not found;

raise notice '%',rec;


end loop;

close cur;
end;
$$ language plpgsql;

select f6();
select customer.cno, customer.cname, loan_application.lamtapproved from
customer,ternary,loan_application where customer.cno=ternary.cno and
loan_application.lno=ternary.lno;

--slip 4
create table route
(
route_no int primary key,
source varchar(20),
destination varchar(20),
no_of_stations int
);
insert into route values(1,'aundh','warje',3);
insert into route values(2,'deccan','katraj',2);
insert into route values(3,'pashan','sangvi',2);
insert into route values(4,'kothrud','deccan',1);
insert into route values(5,'kothurd','deccan',1);
select * from route;

create table bus


(
bus_no int primary key,
bus_cap int NOT NULL,
dep_name varchar(20),
route_no int,
foreign key (route_no) references route(route_no)
);
insert into bus values(101,30,'aundh',1);
insert into bus values(102,20,'katraj',2);
insert into bus values(103,32,'deccan',3);
insert into bus values(104,25,'kothrud',4);
insert into bus values(105,15,'kothurd',5);
select * from bus;
drop table driver;
create table driver
(
d_no int primary key,
d_nm char(20),
lic_no int unique,
address char(20),
d_age int,
sal float
);
insert into driver values(100,'arun',10,'pune',40,15000.00);
insert into driver values(200,'bob',20,'pune',60,25000.00);
insert into driver values(300,'karan',30,'pune',30,5000.00);
insert into driver values(400,'ram',40,'pune',53,7000.00);
select * from driver;

create table bus_driver


(
bus_no int references bus(bus_no),
d_no int references driver(d_no),
route_no int references route(route_no),
date_of_duty date,
shift integer CHECK(shift in (1,2))
);
insert into bus_driver values(101,100,1,'2020-07-20',1);
insert into bus_driver values(102,200,2,'2020-06-20',2);
insert into bus_driver values(103,300,3,'2020-07-20',2);
insert into bus_driver values(104,400,4,'2020-06-02',2);
select * from bus_driver;

create view v1 as select * from driver where driver.d_no=(select bus_driver.d_no


from bus_driver where shift=1);
select * from v1;

create view v2 as select * from driver where sal>20000;


select * from v2;

--trigers
CREATE OR REPLACE FUNCTION check_driver_age()
RETURNS TRIGGER AS $$
BEGIN
IF NEW.d_age < 18 OR NEW.d_age > 35 THEN
RAISE EXCEPTION 'Invalid input: Driver age must be between 18 and 35';
END IF;
RETURN NEW;
END;$$
language plpgsql;

CREATE TRIGGER check_driver_age_trigger BEFORE INSERT ON driver FOR EACH ROW


EXECUTE PROCEDURE check_driver_age();
insert into driver values(800,'sham',80,'pune',50,50000);

create or replace function fun2(route_source varchar(20),route_destination


varchar(20)) returns void as
$$
declare
rec record;
begin
for rec in select * from bus where bus.route_no=
(select route.route_no from route where route.source=route_source and
route.destination=route_destination) loop
raise notice '%',rec;
end loop;
end;
$$
language plpgsql;

select fun2('aundh','warje');

--slip 5
--same database
create view v3 as select * from bus,driver where driver.d_no=(select
bus_driver.d_no from bus_driver where bus_driver.bus_no=101) and bus.bus_no=101;
drop view v3;
select * from v3;

create view v4 as select * from route where route.route_no=(select route_no from


bus where bus_cap=30);
select * from v4;

CREATE OR REPLACE FUNCTION check_salary()


RETURNS TRIGGER AS $$
BEGIN
IF NEW.sal<=0 THEN
RAISE EXCEPTION 'Invalid input: salary cannot be negatuive or xero';
END IF;
RETURN NEW;
END;$$
language plpgsql;

CREATE TRIGGER check_salary_trigger BEFORE INSERT ON driver FOR EACH ROW EXECUTE
PROCEDURE check_salary();

insert into driver values(900,'sham',90,'pune',20,0);

drop function dates();


CREATE OR REPLACE FUNCTION datee(driver_name VARCHAR(20)) RETURNS table(date_driven
date) AS $$
DECLARE
date_driven date;
-- driver_no integer;
cur cursor FOR
SELECT date_of_duty
FROM bus_driver
WHERE d_no = (select d_no from driver where d_nm=driver_name);
BEGIN
-- SELECT d_no INTO driver_no FROM driver WHERE d_nm = driver_name;
OPEN cur;
LOOP
FETCH cur INTO date_driven;
EXIT WHEN NOT FOUND;
return next;
END LOOP;
CLOSE cur;
END;
$$ LANGUAGE plpgsql;
select datee('ram');

CREATE OR REPLACE FUNCTION dat(driver_name VARCHAR) RETURNS void AS $$


DECLARE

d_sal float;
cur CURSOR FOR
select sal from driver where d_nm=driver_name;
BEGIN
-- SELECT d_no INTO driver_no FROM driver WHERE d_nm = driver_name;
OPEN cur;
LOOP
FETCH cur INTO d_sal;
EXIT WHEN NOT FOUND;
raise Notice '%',d_sal;
END LOOP;
CLOSE cur;
END;
$$ LANGUAGE plpgsql;

select dat('ram');
SELECT d.date_of_duty
FROM bus_driver AS d
WHERE d.d_no = (select d_no from driver where d_nm='ram');

SELECT date_of_duty
FROM bus_driver
WHERE d_no = (select d_no from driver where d_nm='ram');

--slip 7
postgres=# create database railway_reservation;
CREATE DATABASE
postgres=# create table train(train_no integer primary key,train_name
varchar(20),depart_time time,arrival_time time,source_stn varchar(20),dest_stn
varchar(20),no_of_res_bogies integer,bogie_capacity integer);
CREATE TABLE
postgres=# create table passenger(passenger_id integer primary key,passenger_name
varchar(20),address varchar(20),age integer,gender varchar(20));
CREATE TABLE
postgres=# create table ticket(train_no integer references
train(train_no),passenger_id integer references passenger(passenger_id),ticket_no
integer primary key,bogie_no integer,no_of_berths integer,tdate date,ticket_amt
numeric(7,2),ticket_status varchar(20) check(ticket_status in ('w','c')));
CREATE TABLE
postgres=# insert into train
values(101,'rajdhani','10:00:00','10:20:00','delhi','pune',5,2);
INSERT 0 1
postgres=# insert into train
values(102,'express','11:00:00','1:20:00','mumbai','pune',5,2);
INSERT 0 1
postgres=# insert into train
values(103,'bullet_train','11:00:00','1:20:00','amhendabad','pune',5,2);
INSERT 0 1
postgres=# insert into passenger values(201,'priya','delhi',30,'female');
INSERT 0 1
postgres=# insert into passenger values(202,'aditya','delhi',20,'male');
INSERT 0 1
postgres=# insert into passenger values(203,'pankaj','amritsar',19,'male');
INSERT 0 1
postgres=# insert into ticket values(101,201,301,1,2,'2023-06-06',50000.00,'c');
INSERT 0 1
postgres=# insert into ticket values(101,202,302,1,2,'2023-06-06',40000.00,'w');
INSERT 0 1
postgres=# insert into ticket values(102,203,303,2,3,'2023-07-09',35000.00,'c');
INSERT 0 1
postgres=# select * from ticket;
train_no | passenger_id | ticket_no | bogie_no | no_of_berths | tdate |
ticket_amt | ticket_status
----------+--------------+-----------+----------+--------------+------------
+------------+---------------
101 | 201 | 301 | 1 | 2 | 2023-06-06 |
50000.00 | c
101 | 202 | 302 | 1 | 2 | 2023-06-06 |
40000.00 | w
102 | 203 | 303 | 2 | 3 | 2023-07-09 |
35000.00 | c
(3 rows)

postgres=# select * from passenger;


passenger_id | passenger_name | address | age | gender
--------------+----------------+----------+-----+--------
201 | priya | delhi | 30 | female
202 | aditya | delhi | 20 | male
203 | pankaj | amritsar | 19 | male
(3 rows)

postgres=# select * from train;


postgres=# select * from train;
postgres=# select * from train;
train_no | train_name | depart_time | arrival_time | source_stn | dest_stn |
no_of_res_bogies | bogie_capacity
----------+--------------+-------------+--------------+------------+----------
+------------------+----------------
101 | rajdhani | 10:00:00 | 10:20:00 | delhi | pune |
5 | 2
102 | express | 11:00:00 | 01:20:00 | mumbai | pune |
5 | 2
103 | bullet_train | 11:00:00 | 01:20:00 | amhendabad | pune |
5 | 2
(3 rows) create view v1 as select passenger_name from passenger where
passenger_id=(select ^[[Dpassenger_id )
postgres-#
postgres-# \gselect * from train;lect passenger_name from passenger where
passenger_id=(select passenger_id )
invalid command \gselect
Try \? for help.
postgres-# \g
ERROR: syntax error at or near "
postgres=# create view v1 as select passenger_name from passenger where
passenger_id=(select passenger_id from ticket where train_no=(select train_no from
train where train_name='rajdhani') and ticket_status='w');
CREATE VIEW
postgres=# select * from v1;
passenger_name
----------------
aditya
(1 row)

postgres=# ^C
postgres=# create view v1 as select passenger_name from passenger where
passenger_id=(select passenger_id from ticket where train_no=(select train_no from
train where train_name='rajdhani') and ticket_status='w' and tdate='2023-06-06');
ERROR: relation "v1" already exists
postgres=# drop view v1;
DROP VIEW
postgres=# create view v1 as select passenger_name from passenger where
passenger_id=(select passenger_id from ticket where train_no=(select train_no from
train where train_name='rajdhani') and ticket_status='w' and tdate='2023-06-06');
CREATE VIEW
postgres=# select * from v1;
passenger_name
----------------
aditya
(1 row)

postgres=# create view v2 as select * from ticket where train_no=(select train_no


from train where train_name='rajdhani') and tdate='2023-06-06' limit 3;
CREATE VIEW
postgres=# select * from v2;
train_no | passenger_id | ticket_no | bogie_no | no_of_berths | tdate |
ticket_amt | ticket_status
----------+--------------+-----------+----------+--------------+------------
+------------+---------------
101 | 201 | 301 | 1 | 2 | 2023-06-06 |
50000.00 | c
101 | 202 | 302 | 1 | 2 | 2023-06-06 |
40000.00 | w
(2 rows)

postgres=#
postgres=# create or replace function fun1() returns trigger as
postgres-# $$
postgres$# declare
postgres$# if new.bogie_capacity>25 then
postgres$# raise exception 'bogie_capacity should not exceed more the 25';
postgres$# else
postgres$# return new;
postgres$# end if;
postgres$# end;
postgres$# $$
postgres-# language plpgsql;
ERROR: syntax error at or near "if"
LINE 4: if new.bogie_capacity>25 then

postgres=# create or replace function fun1() returns trigger as


postgres-# $$
postgres$# begin
postgres$# if new.bogie_capacity>25 then
postgres$# raise exception 'bogie_capacity should not exceed more the 25';
postgres$# else
postgres$# return new;
postgres$# end if;
postgres$# end;
postgres$# $$
postgres-# language plpgsql;
CREATE FUNCTION
postgres=#
postgres=# create trigger trigger_1 before insert on train for each row execute
procedure fun1();
CREATE TRIGGER
postgres=# insert into train
values(104,'express','11:00:00','1:20:00','mumbai','pune',5,50);
ERROR: bogie_capacity should not exceed more the 25
CONTEXT: PL/pgSQL function fun1() line 4 at RAISE
postgres=# insert into train
values(104,'express','11:00:00','1:20:00','mumbai','pune',5,20);
INSERT 0 1

postgres=# create or replace function fun2() returns void as


postgres-# $$
postgres$# declare
postgres$# rec record;
postgres$# cur cursor for select
train_no,train_no,passenger_id,ticket_no,bogie_no,no_of_berths,tdate,ticket_amt,tic
ket_status from ticket where tdate='2023-06-06' and ticket_status='c' order by
train_no ;
postgres$# begin
postgres$# open cur;
postgres$# loop
postgres$# fetch cur into rec;
postgres$# exit when not found;
postgres$# raise Notice '%',rec;
postgres$# end loop;
postgres$# close cur;
postgres$# end;
postgres$# $$
postgres-# language plpgsql;
CREATE FUNCTION
postgres=# select fun2();
NOTICE: (101,101,201,301,1,2,2023-06-06,50000.00,c)
slip 8

same database

postgres=# create view v3 as select passenger_name from passenger where


passenger_id=some(select passenger_id from ticket where ticket_status='c' and
tdate='2023-06-06' and train_no=some(select train_no from train where
train_name='express'));
CREATE VIEW
postgres=# select * from v3;

postgres=# create view v4 as select count(ticket_status) from ticket where


ticket_status='c' and tdate='2023-06-06';
CREATE VIEW
postgres=# select * from v4;
count
-------
1
(1 row)

create or replace function fun1() returns trigger as


$$
begin
if new.age>5 then
raise notice 'passengers obove 5 years will have full fare';
end if;
return new;
end;
$$
language plpgsql;

create trigger check_age after insert on passenger for each row execute procedure
fun1();
insert into passenger values(204,'omkar','delhi',30,'male');

create or replace function fun2() returns void as


$$
declare
rec record;
begin
for rec in select * from ticket where tdate='2023-06-06' and ticket_status='w'
order by train_no
loop
raise notice '%',rec;
end loop;
end;
$$
language plpgsql;

select fun2();

--slip 9
CREATE TABLE project (
pno INTEGER PRIMARY KEY,
pname TEXT NOT NULL,
ptype TEXT NOT NULL,
duration integer
);

-- insert
INSERT INTO project VALUES (0001, 'ERP', 'computer networks', 96);
INSERT INTO project VALUES (0002, 'cloud', 'Accounting', 48);
INSERT INTO project VALUES (0003, 'amazon', 'Sales', 128);

CREATE TABLE EMPLOYEE (


eno INTEGER PRIMARY KEY,
ename TEXT NOT NULL,
qualification TEXT NOT NULL,
joining_date date,
pno integer,
foreign key (pno) references project(pno)
);

-- insert
INSERT INTO EMPLOYEE VALUES (0001, 'Clark', 'MCA', '2002/12/31', 0001);
INSERT INTO EMPLOYEE VALUES (0002, 'Dave', 'Accounting', '2003/11/30', 0002);
INSERT INTO EMPLOYEE VALUES (0003, 'Ava', 'BBA', '2004/10/29', 0003);

CREATE TABLE Ternary (


pno integer,
eno integer,
foreign key (pno) references project(pno),
foreign key (eno) references EMPLOYEE(eno),
start_date date,
no_of_hours_worked integer
);

-- insert
INSERT INTO Ternary VALUES (0001, 0001, '2002/12/31', 20);
INSERT INTO Ternary VALUES (0002, 0002, '2003/11/30', 3000);
INSERT INTO Ternary VALUES (0003, 0003, '2005/10/29', 4000);

select * from ternary;

--views;

create view v1 as select pname,ptype,start_date from project,ternary where


project.pno=ternary.pno order by start_date;
select * from v1;

create view v2 as select * from employee where eno=(select eno from ternary where
pno=(select pno from project where pname='robotics'));
select * from v2;

--trigger

create or replace function f1() returns trigger as


$$
begin
if new.duration<=0 then
raise exception 'duration cannot be zero or less';
else
return new;
end if;
end;
$$
language plpgsql;

create trigger t1 before insert on project for each row execute procedure f1();

INSERT INTO project VALUES (0004, 'cloud', 'Accounting', 0);

create or replace function f2(p_name varchar(20)) returns void as


$$
declare
rec record;
cur cursor for select * from employee where eno=(select eno from ternary where
pno=(select pno from project where pname=p_name));
begin
open cur;
loop
fetch cur into rec;
exit when not found;
raise notice 'sd%',rec;
end loop;
close cur;
end;
$$
language plpgsql;

select f2('erp');

--slip10
--same database;

create view v3 as select * from employee order by joining_date desc;


select * from v3;

create view v4 as select employee.ename,project.pname from employee,project,ternary


where employee.eno=ternary.eno and project.pno=ternary.pno and
no_of_hours_worked<100;
select * from v4;

--trigger
create or replace function fun3() returns trigger as
$$
begin
if new.joining_date>=current_date then
raise exception 'joining date should be less then current date';
else
return new;
end if;
end;
$$
language plpgsql;

create trigger check_join_date before insert on employee for each row execute
procedure fun3();

INSERT INTO EMPLOYEE VALUES (0005, 'Ava', 'BBA', '2023/10/15', 0003);

--funciton
create or replace function fun4(p_name varchar(20)) returns integer as
$$
declare
pcunt integer;
cunt integer;
begin
select count(pno) into pcunt from project where pname=p_name;
select count(eno) into cunt from ternary where pno=(select pno from project where
pname=p_name);
if pcunt<=0 then
raise exception 'invalid name';
else
return cunt;
end if;
end;
$$
language plpgsql;

select fun4('ERP');

--slip 11;

--same database
create view v5 as select * from employee where pno=(select pno from project where
pname='ERP');
select * from v5;

create view v6 as select employee.ename,project.pname from employee,project,ternary


where employee.eno=ternary.eno and project.pno=ternary.pno and
no_of_hours_worked>100;
select * from v6;

--trigger
create or replace function fun5() returns trigger as
$$
begin
raise notice 'record deleted succesfully';
end;
$$
language plpgsql;

create trigger del_rec after delete on project for each row execute procedure
fun5();

delete from project where pno=0003;

--funciton
create or replace function fun6() returns void as
$$
declare
rec record;
begin
for rec in select * from employee where joining_date<'2022/10/03' loop
raise notice '%',rec;
end loop;
end;
$$
language plpgsql;

select fun6();
--slip12
create table student(
s_no int primary key,
s_name varchar(20),
s_class varchar(10) NOT NULL,
s_addr varchar(30));
insert into student values (1,'Avinash','SYBCA','Kothrud');
insert into student values (2,'Yogesh','SYBCS','Pune');
insert into student values (3,'Aaryan','SYBBA-CA','Ravivar Peth');
insert into student values (4,'Atul','SYBCA','Sadashiv Peth');
insert into student values (5,'Ashutosh','SYBCS','Pune');
insert into student values (6,'Gaurav','SYBBA-CA','Nanded City');
create table teacher(
t_no int primary key,
t_name varchar(20),
t_qul varchar(15),
t_exp int
);
insert into teacher values (11,'Suresh','Ph.D.',24);
insert into teacher values (12,'Mukesh','Ph.D.',24);
insert into teacher values (13,'Sanket','MCS',2);
insert into teacher values (14,'Tejas','BCS',3);
insert into teacher values (15,'Tushar','BCA',7);
insert into teacher values (16,'Vaibhav','Ph.D.',12);
create table stu_teach (
s_no int references student(s_no),
t_no int references teacher(t_no),
subject varchar(30));
insert into stu_teach values (1,11,'Java');
insert into stu_teach values (2,12,'RDBMS');
insert into stu_teach values (3,13,'C');
insert into stu_teach values (4,14,'C++');
insert into stu_teach values (5,15,'HTML');
insert into stu_teach values (6,16,'PHP');
insert into stu_teach values (1,16,'PHP');
insert into stu_teach values (2,15,'HTML');
insert into stu_teach values (3,14,'C++');
insert into stu_teach values (4,13,'C');
insert into stu_teach values (5,12,'RDBMS');
insert into stu_teach values (6,11,'Java');
select * from student;
select * from teacher;
select * from stu_teach;

--views
create view v1 as select * from student where s_no=some(select s_no from stu_teach
where t_no=some(select t_no from teacher where t_exp=some(select max(t_exp) from
teacher)));
select * from v1;
create view v2 as select distinct subject,t_name from teacher,stu_teach where
teacher.t_no=stu_teach.t_no order by t_name;
select * from v2;
drop view v2;

--trigger
create or replace function fun1() returns trigger as
$$
begin
if new.s_no<=0 then
raise exception 'invalid input';
else
return new;
end if;
end;
$$
language plpgsql;

create trigger check_stud before insert on student for each row execute procedure
fun1();

insert into student values (0,'Gaurav','SYBBA-CA','Nanded City');


select * from student;

--funciotn
create or replace function fun2(sub_name varchar(20)) returns integer as
$$
declare
cunt integer;
begin
select count(s_no) into cunt from stu_teach where subject=sub_name;
return cunt;
end;
$$
language plpgsql;

select fun2('PHP');

--slip 13

--same database
--views
create view v3 as
select * from teacher where t_qul ='Ph.D.';
select * from v3;

create view v4 as
select * from student where s_addr = 'Pune';
select * from v4;

--trigger
create or replace function fun3() returns trigger as $$
declare
begin
if new.t_exp < 5 then
raise exception 'Experience should be min 5 years' ;
end if;
end;
$$
language plpgsql;

create trigger checkexp


before insert on teacher
for each row execute procedure fun3();

insert into teacher values (17,'Vaibhav','Ph.D.',4);


select * from teacher;

-- funciotn
create or replace function fun4(stud_name varchar(20)) returns void as
$$
declare
rec record;
cur cursor for select * from teacher where t_no=some(select t_no from stu_teach
where s_no=some(select s_no from student where s_name=stud_name));
begin
open cur;
loop
fetch cur into rec;
exit when not found;
raise notice '%',rec;
end loop;
close cur;
end;
$$
language plpgsql;

select fun4('Gaurav');

--slip 14
create view v5 as select * from teacher where t_exp>5;
select * from v5;
create view v6 as select * from teacher where t_name like 'S%';
select * from v6;

--trigger
create or replace function f5() returns trigger as
$$
begin
if new.s_class='' then
raise exception 'class should not be empty';
else
return new;
end if;
end;
$$
language plpgsql;

create trigger trg_update before update on student for each row execute procedure
f5();

update student set s_class='SYBBA' where s_no=1;

--funciton
create or replace function fun6(stud_name varchar(20)) returns integer as
$$
declare
cunt integer;
begin
select count(t_no) into cunt from stu_teach where s_no=(select s_no from student
where s_name=stud_name);
return cunt;
end;
$$
language plpgsql;

select fun6('Gaurav');

--slip 15
create table students(rollno integer primary key,s_name varchar(20),city
varchar(20),class varchar(20));
create table subject(scode varchar(20) primary key,subject_name varchar(20));
create table student_subject(rollno integer references students(rollno),scode
varchar(20) references subject(scode),marks integer);

insert into students values(1,'shivam','pune','SYBBA');


insert into students values(2,'harshal','pune','SYBBA-CA');
insert into students values(3,'aryan','pune','SYBCA');
insert into students values(4,'sahil','pune','FYBCA');
insert into students values(5,'sneha','pune','FYBBA');
insert into students values(6,'sumit','pune','SYBBA');

insert into subject values('s1','DBMS');


insert into subject values('s2','PYTHON');
insert into subject values('s3','JAVA');
insert into subject values('s4','RDBMS');

insert into student_subject values(1,'s1',80);


insert into student_subject values(1,'s2',80);
insert into student_subject values(1,'s3',90);
insert into student_subject values(2,'s1',90);
insert into student_subject values(2,'s4',100);
insert into student_subject values(3,'s1',80);
insert into student_subject values(3,'s2',77);

create view view1 as select * from students where class='FYBCA';


select * from view1;

create view v2 as select s_name,subject_name,marks from


students,subject,student_subject where students.rollno=student_subject.rollno and
subject.scode=student_subject.scode and marks=90;
select * from v2;

--trigger
create or replace function f1() returns trigger as
$$
begin
if new.rollno<=0 then
raise exception 'rollno should not be less than or equal to zero';
else
return new;
end if;
end;
$$
language plpgsql;

create trigger trg_insert before insert on student_subject for each row execute
procedure f1();
insert into students values(0,'sumit','pune','SYBBA');

--funciton
create or replace function f2() returns void as
$$
declare
rec record;
cur cursor for select rollno,sum(marks) from student_subject group by rollno;
begin
open cur;
loop
fetch cur into rec;
exit when not found;
raise notice '%',rec;
end loop;
end;
$$
language plpgsql;

select f2();

--slip 16
create view v3 as select s_name from students where rollno=(select rollno from
student_subject where scode=(select scode from subject where subject_name='DBMS')
and marks>80);
select * from v3;

create view v4 as select * from students where class='TYBCA';


select * from v4;

--trigger

create or replace function f3() returns trigger as


$$
begin
raise exception 'record has been deleted succesfully';
end;
$$
language plpgsql;

create trigger check_stud after delete on students for each row execute procedure
f3();
delete from students where rollno=6;

--funciotn
create or replace function f4(stud_name varchar(20)) returns void as
$$
declare
rec record;
begin
for rec in select * from subject where scode=some(select scode from student_subject
where rollno=some(select rollno from students where s_name=stud_name))
loop
raise notice '%',rec;
end loop;
end;
$$
language plpgsql;
select f4('harshal');

select * from subject where scode=some(select scode from student_subject where


rollno=some(select rollno from students where s_name='harshal'));

--slip 17
create view v5 as select * from students where s_name like 'a';
select * from v5;

create view v6 as select * from students where rollno=(select rollno from


student_subject where marks<40);
select * from v6;

--trigger
create or replace function f5() returns trigger as
$$
begin
if new.marks<0 or new.marks>100 then
raise exception 'marks should mw in th range of 1 to 100';
else
return new;
end if;
end;
$$
language plpgsql;

create trigger check_mark before insert on student_subject for each row execute
procedure f5();

--funciton
create or replace function f6(c_ity varchar(20)) returns void as
$$
declare
rec record;
begin
for rec in select * from students where city=c_ity
loop
raise notice '%',rec;
end loop;
end;
$$
language plpgsql;

select f6('pune');
--slip18 create table Movie
( mname varchar(25) primary key,relyear int not null, mbudget money);
insert into Movie values
('Raid',2017,210000),
('Padmavat',2016,130000),
('kkhh',2009,120000),
('ddlj',2004,150000),
('balh',2002,110000);
create table Actor
(aname char(30) primary key, acity varchar(30));
insert into Actor values
('Ajay','Mumbai'),
('Deepeka','delhi'),
('Kajol','Indore'),
('Khan','Mumbai'),
('Priya','Pune');
create table Producer
(pid int primary key,pname varchar(30),padd varchar(30));
insert into producer values
(01,'Rushi','Pune'),
(02,'Dhruv','Surat'),
(03,'Khashi','delhi'),
(04,'Omkar','ooty'),
(05,'Rushi','Pune');
create table movie_actor
(mname varchar(25) references movie(mname),aname char(20) references
Actor(aname),role varchar(20),charges int);
insert into movie_actor values
('Raid','Ajay','Hero', 500),
('Padmavat','Deepeka','Heroine',600),
('kkhh','Kajol','Villen',300),
('ddlj','Khan','Hero',400),
('balh','Priya','Main',600);
create table movie_pro
(mname varchar(25) references movie(mname),pid int references producer(pid));
insert into movie_pro values
('Raid',01),
('Padmavat',02),
('kkhh',03),
('ddlj',04),
('balh',05);
select * from Movie;
select * from Actor;
select * from Producer;
select * from movie_actor;
select * from movie_pro;

--views

create View v1 as select aname from Actor where acity = 'Mumbai';


select * from v1;

create view view2 as select *,mname from Actor where aname=some(select aname from
movie_actor order by mname);
select * from view2;

--trigger
create or replace function f1() returns trigger as
$$
begin
if new.mbudget<'6000000' then
raise exception 'movie budget should be minimum 60 lakh';
else
return new;
end if;
end;
$$
language plpgsql;

create trigger check_budget before insert on movie for each row execute procedure
f1();

insert into Movie values('uri',2017,'210000');

--funciotn
create or replace function f2(p_name varchar(20)) returns integer as
$$
declare
cunt integer;
begin
select count(mname) into cunt from movie_pro where pid=(select pid from producer
where pname=p_name);
return cunt;
end;
$$
language plpgsql;

select f2('Omkar');

--slip 19
create view v3 as select * from actor where aname=(select aname from movie_actor
where mname='sholey');
select * from v3;

create view v4 as select * from producer where pid=(select pid from movie_pro group
by pid having count(mname)>2);
select * from v4;
--trigger

create or replace function f3() returns trigger as


$$
begin
if new.charges>3000000 then
raise exception 'charge should not exceed 30 lakh';
else
return new;
end if;
end;
$$
language plpgsql;

create trigger check_budget before insert on movie_actor for each row execute
procedure f3();

insert into movie_actor values('Raid','Ajay','Hero',50000000)

--funciotn
create or replace function f4(actor_name varchar(20)) returns void as
$$
declare
m_name varchar(20);
rec record;
begin
select * into rec from actor;
if rec.aname<>actor_name then
raise exception 'invalid actor name';
else
for rec in select * from movie_actor where aname=actor_name
loop
raise notice '%',rec;
end loop;
end if;
end;
$$
language plpgsql;

select f4('Ajay');

--slip 20
--vie \
create view v5 as select mname from movie_pro where pid=(select pid from producer
where pname='mr.subhash ghai');
select * from v5;

create View v6 as select aname from Actor where acity <> 'Mumbai' and acity
<>'Pune';
select * from v6;
drop view v6;
--trigger

create or replace function f5() returns trigger as


$$
begin
if new.relyear>2023 then
raise exception 'release date should not be ggreate then current date';
else
return new;
end if;
end;
$$
language plpgsql;

create trigger check_date before insert on movie for each row execute procedure
f5();
insert into Movie values('om',2024,7000000);

--fucntion
create or replace function f4() returns void as
$$
declare
rec record;
cur cursor for select charges,mname from movie_actor where aname='Amitab bachan'
order by mname;
begin
open cur;
loop
fetch cur into rec;
exit when not found;
raise notice '%',rec;
end loop;
close cur;
end;
$$
language plpgsql;

select f4();

select charges,mname from movie_actor where aname='Ajay' order by mname;


select * from movie_actor;

You might also like