Professional Documents
Culture Documents
--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;
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;
--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();
--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;
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;
--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;
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 TRIGGER check_salary_trigger BEFORE INSERT ON driver FOR EACH ROW EXECUTE
PROCEDURE check_salary();
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=# ^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=#
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
same database
create trigger check_age after insert on passenger for each row execute procedure
fun1();
insert into passenger values(204,'omkar','delhi',30,'male');
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);
-- 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);
-- 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);
--views;
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 trigger t1 before insert on project for each row execute procedure f1();
select f2('erp');
--slip10
--same database;
--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();
--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;
--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();
--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();
--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;
-- 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();
--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);
--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;
--trigger
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');
--slip 17
create view v5 as select * from students where s_name like 'a';
select * from v5;
--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 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();
--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 trigger check_budget before insert on movie_actor for each row execute
procedure f3();
--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 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();