0% found this document useful (0 votes)
7 views71 pages

DBMS-II Practical Solutions

Uploaded by

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

DBMS-II Practical Solutions

Uploaded by

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

Assignment No.

1
Person-Area Database

person_area=# create table area(ano int primary key,aname text, atype


text);
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "area_pkey"
for table "area"
CREATE TABLE

person_area=# create table person(pno int primary key,pname text,bdate


date,income int,ano int references area(ano));
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index
"person_pkey" for table "person"
CREATE TABLE

person_area=# insert into area values(411020,'aundh road','urban');


INSERT 0 1

person_area=# select *from area;


ano | aname | atype
----------+-----------------+------
411020 | aundh road | urban
411018 | pimpri | urban
411043 | baramati | rural

person_area=# insert into person values(105,'rahul','10-06-


1973',27000,411043);
INSERT 0 1

person_area=# select * from person;

pno | pname | bdate | income | ano


-----+---------+-----------+-------+-------
105 | rahul | 1973-06-10 | 27000 | 411043
103 | ghansham | 1969-05-12 | 67000 | 411018
104 | ghansham | 1971-05-10 | 47000 | 411043
100 | ram | 1975-02-12 | 50000 | 411018
101 | sham | 1972-02-12 | 59000 | 411018
107 | papu | 1976-12-05 | 26000 | 411020
112 | ajay | 1976-12-05 | 26000 | 411043
(7 rows)

A)
1]person_area=# select pname from person,area where area.ano=person.ano and
aname='pimpri';
pname
----------
ghansham
ram
sham

2]person_area=# select pname,pno,bdate,income from person where pname like 'r%';


pname | pno | bdate | income
-------+----+-----------+-------
rahul | 105 | 1973-06-10 | 27000
ram | 100 | 1975-02-12 | 50000

3]person_area=# select pname,pno,bdate,income from person where income


betperson_areaen 30000 and 60000;
pname | pno | bdate | income
----------+----+-----------+-------
ghansham | 104 | 1971-05-10 | 47000
ram | 100 | 1975-02-12 | 50000
sham | 101 | 1972-02-12 | 59000

4]person_area=# select distinct (pname) from person where to_char(bdate,'mon')='may';


pname
----------
ghansham

6]person_area=# select aname, count(*) from person,area where area.ano=person.ano


group by aname;

aname count
------- --------
aundh road 1
pimpri 3
baramati 2
B)
person_area=# create or replace function se()
person_area-# returns text as'
person_area'# declare
person_area'# c1 cursor for select pname from person,area where area.ano=person.ano
and atype=''urban'';
person_area'# name text;
person_area'# te text;
person_area'# begin
person_area'# open c1;
person_area'# loop
person_area'# fetch c1 into name;
person_area'# update person set income=income + income*01 where pname=name;
person_area'# exit when not found;
person_area'# te:=''updated'';
person_area'# raise notice '' % '',te;
person_area'# end loop;
person_area'# close c1;
person_area'# return null;
person_area'# end;'
person_area-# language 'plpgsql';
CREATE FUNCTION

person_area=# select se();


NOTICE: updated
NOTICE: updated
NOTICE: updated
NOTICE: updated

Person_area=# select * from person;

C)
1]person_area=# create or replace view v_p as
person_area-# select person.* from person order by pname ;
CREATE VIEW

person_area=# select *from v_p;

pno | pname | bdate | income | ano


-----+---------+-----------+-------+-------
103 | ghansham | 1969-05-12 | 67000 | 411018
104 | ghansham | 1971-05-10 | 47000 | 411043
107 | papu | 1976-12-05 | 26000 | 411018
105 | rahul | 1973-06-10 | 27000 | 411043
100 | ram | 1975-02-12 | 50000 | 411018
101 | sham | 1972-02-12 | 59000 | 411018
(6 rows)

2]person_area=# create or replace view v_pers as


person_area-# select person.* from person where to_char(bdate,'mon')='may';
CREATE VIEW

person_area=# select *from v_pers;


pno | pname | bdate | income | ano
-----+---------+-----------+-------+-------
103 | ghansham | 1969-05-12 | 67000 | 411018
104 | ghansham | 1971-05-10 | 47000 | 411043

D)
person_area=# create or replace function pet()
person_area-# returns opaque as'
person_area'# begin
person_area'# if(old.ano=411018)then
person_area'# raise exception '' person of this area cannot be deleted'';
person_area'# end if;
person_area'# return new;
person_area'# end;'
person_area-# language 'plpgsql';
CREATE FUNCTION

person_area=# create trigger trig_pet


person_area-# before delete on person
person_area-# for each row
person_area-# execute procedure pet();
WARNING: changing return type of function pet from "opaque" to "trigger"
CREATE TRIGGER

person_area=# delete from person where ano=411018;


ERROR: person of this area cannot be deleted

E)
person_area=# create or replace function peq()
person_area-# returns int as'
person_area'# declare
person_area'# cnt int;
person_area'# begin
person_area'# select into cnt count (pno) from person where bdate=''12-5-1976'';
person_area'# return cnt;
person_area'# end;'
person_area-# language 'plpgsql';
CREATE FUNCTION
person_area=# select *from peq();
peq
-----
2
(1 row)

ASignment-2
Movie- Actor Database
movie=# create table movies(m_name varchar(25) primary key,release_year int,budget
integer);
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index
"movies_pkey" for table "movies"
CREATE TABLE

movie=# insert into movies values('Aatma',2013,93000);


INSERT 0 1

movie=# select * from movies;

m_name | release_year | budget


------------+-------------+-------
Aatma | 2013 | 93000
Alone | 2015 | 86000
kick | 2014 | 150000
bhoothnath | 2014 | 150000
(4 rows)

movie=# create table actor(a_name char(30) primary key,role char(30),charges


integer,address varchar(30));
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "actor_pkey"
for table "actor"
CREATE TABLE
movie=#

movie=# insert into actor values('bipasha','main',140000,'mumbai');


INSERT 0 1

movie=# select * from actor;


a_name | role | charges | address
--------------------------------+-------------------------------+--------+--------
bipasha | main | 140000 | mumbai
karan | main | 210000 | punjab
salman | main | 320000 | galaxy
amitabh | villan | 12000 | thane
(4 rows)

movie=#
movie=# create table producer(p_id int primary key,name char(30),padd varchar(30));
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index
"producer_pkey" for table "producer"
CREATE TABLE
movie=#

movie=# insert into producer values(1,'karan','mumbai');


INSERT 0 1

movie=# select* from mo_ac;


m_name | a_name
------------+-------------------------------
Alone | karan
kick | salman
kick | karan
bhoothnath | amitabh
kick | amitabh
(5 rows)

movie=# select * from producer;


p_id | name | padd
------+-------------------------------+-------
1 | karan | mumbai
2 | farah | dadar
3 | sajid | satara
(3 rows)

movie=# create table prod_mo(m_name varchar(25) references movies(m_name),p_id int


references producer(p_id));
CREATE TABLE
movie=#
movie=# insert into prod_mo values('Alone',3);
INSERT 0 1

movie=# select * from prod_mo;


m_name | p_id
--------+-----
Alone | 3
Alone | 1
kick | 1
kick | 3
(4 rows)

A)
1. select mo_ac.a_name,mo_ac.m_name from actor,movies,mo_ac where
actor.a_name=mo_ac.a_name and movies.m_name= mo_ac.m_name and mo_ac.m_name
IN(select m_name from mo_ac where mo_ac.a_name='salman');

a_name | m_name
--------------------------------+-------
salman | kick
karan | kick
amitabh | kick
(3 rows)

2.
movie=# select m_name,budget from movies where budget=(select max(budget) from
movies);
m_name | budget
------------+-------
kick | 150000
bhoothnath | 150000
(2 rows)

3.
movie=# select actor.a_name,charges,movies.m_name,release_year from
movies,actor,mo_ac where movies.m_name=mo_ac.m_name and
actor.a_name=mo_ac.a_name and charges(select max(charges) from actor);

a_name | charges | m_name | release_year


--------------------------------+--------+-------+-------------
salman | 320000 | kick | 2014
(1 row)

4.
movie=# select m_name,release_year from movies where release_year>2000;
m_name | release_year
------------+-------------
Alone | 2015
kick | 2014
bhoothnath | 2014
(3 rows)

5.
movie=# select a_name from actor where role='villan';
a_name
--------------------------------
amitabh
(1 row)

6.
movie=# select count(budget),sum(budget) from movies where release_year=2014;
count | sum
-------+-------
2 | 300000
(1 row)

B)

movie=# create or replace function no_act()


movie-# returns text as'
movie'# declare
movie'# aname text;
movie'# cnt int;
movie'# max_cnt int;
movie'# c1 cursor for select a_name, count(*) from mo_ac group by a_name having
count(*)>=all (select count(*) from mo_ac group by a_name);
movie'# begin
movie'# open c1;
movie'# loop
movie'# fetch c1 into aname,cnt;
movie'# raise notice '' %'',aname;
movie'# exit when not found;
movie'# end loop;
movie'# close c1;
movie'# return null;
movie'# end;'
movie-# language 'plpgsql';
CREATE FUNCTION

movie=# select no_act();


NOTICE: amitabh
NOTICE: karan

no_act
--------

(1 row)

c)
1.
movie=# create view vprod as select distinct(producer.name) from producer,prod_mo
where producer.p_id=prod_mo.p_id and m_name in(select movies.m_name from
movies,producer,prod_mo where movies.m_name=prod_mo.m_name and
producer.p_id=prod_mo.p_id and name='karan' );
CREATE VIEW

O/P:-
movie=#
movie=# select * from vprod;
name
--------------------------------
sajid
karan
(2 rows)

2)
movie=# create view v_add as select a_name,address from actor where address NOT
IN(select address from actor where address='punjab' or address='thane');
CREATE VIEW

o/p:-
movie=# select * from v_add;
a_name | address
--------------------------------+--------
bipasha | mumbai
salman | galaxy

(2 rows)

D)
movie=# create or replace function movie_nm(text)
movie-# returns text as'
movie'# declare
movie'# pname alias for $1;
movie'# aname actor.a_name%type;
movie'# mname movies.m_name%type;
movie'# cnt int;
movie'# c1 cursor for select movies.m_name from movies,producer,prod_mo where
movies.m_name=prod_mo.m_name and producer.p_id=prod_mo.p_id and name=pname;
movie'# begin
movie'# select into cnt count(movies.m_name)from movies,producer,prod_mo where
movies.m_name=prod_mo.m_name and producer.p_id=prod_mo.p_id and name=pname;
movie'# if cnt=0 then
movie'# raise exception''producer name is invalid'';
movie'# else
movie'# open c1;
movie'# loop
movie'# fetch c1 into mname;
movie'# exit when not found;
movie'# raise notice''%'',mname;
movie'# end loop;
movie'# close c1;
movie'# end if;
movie'# return null;
movie'# end;'
movie-# language 'plpgsql';
CREATE FUNCTION
O/P:----------
movie=# select movie_nm('karan');
NOTICE: Alone
NOTICE: kick
movie_nm
----------
(1 row)

movie=# select movie_nm('ram');


ERROR: producer name is invalid
movie=#

E)
movie=# create or replace function mcharges()
movie-# returns text as'
movie'# declare
movie'# mname movies.m_name%type;
movie'# cost actor.charges%type;
movie'# c1 cursor for select movies.m_name,charges from movies,actor,mo_ac where
movies.m_name=mo_ac.m_name and actor.a_name=mo_ac.a_name
movie'# and actor.a_name=''amitabh'' order by m_name;
movie'# begin
movie'# open c1;
movie'# loop
movie'# fetch c1 into mname,cost;
movie'# exit when not found;
movie'# raise notice'' % %'',mname,cost;
movie'# end loop;
movie'# close c1;
movie'# return null;
movie'# end;'
movie-# language 'plpgsql';
CREATE FUNCTION
O/P:-
movie=# select mcharges();
NOTICE: bhoothnath 12000
NOTICE: kick 12000
mcharges
----------

(1 row)
…………………….

Asignment 3
Database :- Bank

bank=# create table branch


bank-# (bid integer primary key,
bank(# brname char(30),
bank(# brcity char (10));
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "branch_pkey"
for table "branch"
CREATE TABLE

bank=# insert into branch values(101,'Aundh','pune');


INSERT 0 1

bank=# select * from branch;


bid | brname | brcity
-----+-------------------------------+-----------
101 | Aundh | pune
102 | Deccan | pune
103 | M.G. road | mumbai
104 | Sadashiv Peth | pune
(4 rows)

bank=# create table customer


bank-# (cno integer primary key,
bank(# cname char(20),
bank(# caddr char(35),
bank(# city char(20));
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index
"customer_pkey" for table "customer"
CREATE TABLE

bank=# insert into customer values (201,'Vishal','pimpri','pune');


INSERT 0 1

bank=# select * from customer;


cno | cname | caddr | city
-----+---------------------+------------------------------------+----
201 | Vishal | pimpri | pune
202 | Vikas | kalyan | mumbai
203 | Amar | Dadar | mumbai
204 | Ashish | nigdi | pune
(4 rows)
bank=# create table loan_application
bank-# (lno integer primary key,
bank(# lamtrequired integer,
bank(# lamtapproved integer,
bank(# l_date date);
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index
"loan_application_pkey" for table "loan_application"
CREATE TABLE

bank=# insert into loan_application values (301,500000,250000,'07/22/2013');


INSERT 0 1

bank=# select * from loan_application;


lno | lamtrequired | lamtapproved | l_date
-----+-------------+-------------+-----------
301 | 500000 | 250000 | 2013-07-22
302 | 30000 | 8000 | 2014-06-16
303 | 400000 | 400000 | 2014-07-22
304 | 50000 | 45000 | 2013-09-12
305 | 60000 | 60000 | 2013-08-12
306 | 500000 | 500000 | 2013-09-22
307 | 500000 | 450000 | 2013-09-25
(7 rows)

bank=# create table bcl


bank-# (bno integer references branch(bid),
bank(# cno integer references customer(cno),
bank(# lno integer references loan_application(lno));
CREATE TABLE

bank=# insert into bcl values (101,201,301);


INSERT 0 1

bank=# select * from bcl;


bno | cno | lno
-----+----+----
101 | 201 | 301
101 | 203 | 302
102 | 202 | 303
103 | 201 | 304
102 | 204 | 305
103 | 202 | 306
104 | 202 | 307
(7 rows)

1)
bank=# select customer.*, brname from branch,customer,bcl where branch.bid=bcl.bno
and customer.cno=bcl.cno and brname='Aundh';
cno | cname | caddr | city | brname
-----+---------------------+------------------+------------
201 | Vishal | pimpri | pune | Aundh
203 | Amar | Dadar | mumbai | Aundh
(2 rows)

2)
bank=# select cname,lamtrequired,lamtapproved from customer, loan_application,bcl
where customer.cno=bcl.cno and loan_application.lno=bcl.lno and lamtapproved <
lamtrequired ;
cname | lamtrequired | lamtapproved
----------------------+-------------+-------------
Vishal | 500000 | 250000
Amar | 30000 | 8000
Vishal | 50000 | 45000
Vikas | 500000 | 450000
(4 rows)

3.
bank=# select cname, brname,l_date from branch, customer,loan_application,bcl where
customer.cno=bcl.cno and branch.bid=bcl.bno and loan_application.lno=bcl.lno
and to_char(l_date,'month')='september';
cname | brname | l_date
----------------------+-------------------------------+---------
Vishal | M.G. road | 2013-09-12
Vikas | M.G. road | 2013-09-22
Vikas | Sadashiv Peth | 2013-09-25
(3 rows)

4.
bank=# select customer.*,lamtrequired from customer,loan_application,bcl where
bcl.cno=customer.cno and bcl.lno=loan_application.lno and lamtrequired >100000;
cno | cname | caddr | city | lamtrequired
-----+---------------------+-----------------------------------
201 | Vishal | pimpri | pune | 600000
202 | Vikas | kalyan | mumbai | 480000
202 | Vikas | kalyan | mumbai | 600000
202 | Vikas | kalyan | mumbai | 600000
(4 rows)

5.
bank=# select max(lamtapproved) from loan_application;
max
--------
720000
(1 row)

6.
bank=# select customer.*,brcity from customer, branch,bcl where bcl.bno=branch.bid and
bcl.cno=customer.cno and city=brcity;
cno | cname | caddr | city | brcity
-----+---------------------+------------------------------------
201 | Vishal | pimpri | pune | pune
204 | Ashi | nigdi pune | pune
202 | Vikas | kalyan | mumbai | mumbai
(3 rows)

B)
bank=# create or replace function total_cust()
bank-# returns integer as'
bank'# declare
bank'# cnt integer;
bank'# tot_loan_approved integer;
bank'# c1 cursor for select count(distinct(cno)), sum(lamtapproved) from
loan_application,bcl where loan_application.lno=bcl.lno ;
bank'# begin
bank'# open c1;
bank'# loop
bank'# fetch c1 into cnt,tot_loan_approved;
bank'# exit when not found;
bank'# raise notice ''% %'',cnt,tot_loan_approved;
bank'# end loop;
bank'# close c1;
bank'# return null;
bank'# end;'
bank-# language 'plpgsql';
CREATE FUNCTION

O/P:-
bank=# select total_cust();
NOTICE: 4 2466720
total_cust
------------

(1 row)

C) 1)
bank=# create view v_account as select cname,branch.* from customer, branch,bcl where
customer.cno=bcl.cno and branch.bid=bcl.bno order by cname;
CREATE VIEW

bank=# select * from v_account;


cname | bid | brname | brcity
----------------------+----+-------------------------------+---
Amar | 101 | Aundh | pune
Ashish 102 | Deccan | pune
Vikas | 103 | M.G. road | mumbai
Vikas 104 | Sadashiv Peth | pune
Vikas 102 | Deccan | pune
Vishal | 103 | M.G. road | mumbai
Vishal 101 | Aundh pune
(7 rows)

2)
bank=# create or replace view v_loan_apply as select loan_application.* from
loan_application,branch,bcl
bank-# where branch.bid=bcl.bno and loan_application.lno=bcl.lno and
brname='Sadashiv Peth';
CREATE VIEW

O/P :--
bank=# select * from v_loan_apply;
lno | lamtrequired | lamtapproved | l_date
-----+-------------+-------------+-----------
307 | 600000 | 648000 | 2013-09-25
(1 row)

D)

bank=# create or replace function lamt()


bank-# returns opaque as'
bank'# begin
bank'# if (new.lamtapproved > new.lamtrequired) then
bank'# raise exception ''loan amount approved should be less then loan amount
required'';
bank'# end if;
bank'# return new;
bank'# end;'
bank-# language 'plpgsql';
CREATE FUNCTION

bank=# create trigger trig_lamt


bank-# before insert or update on loan_application
bank-# for each row
bank-# execute procedure lamt ();
WARNING: changing return type of function lamt from "opaque" to "trigger"
CREATE TRIGGER

O/P:-
bank=# insert into loan_application values(308,600000,650000,'2013-08-12');
ERROR: loan amount approved should be less then loan amount required
bank=#

E)
bank=# create or replace function tot_cust(text)
bank-# returns integer as'
bank'# declare
bank'# bname alias for $1;
bank'# cnt integer;
bank'# begin
bank'# select into cnt count(*) from bcl,branch where branch.bid=bcl.bno and
brname=bname;
bank'# return cnt;
bank'# end;'
bank-# language 'plpgsql';
CREATE FUNCTION
O/P:-
bank=# select tot_cust ('Deccan');
tot_cust
----------
2
(1 row)

………………………

Asignment 4

Student-Teacher Database

sybcs=# create table student(sno int primary key,sname text,class text,add text);
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index
"student_pkey" for table "student"
CREATE TABLE

sybcs=# insert into student values(1,'ram','s.y.bcs','pune');


INSERT 0 1

sybcs=# select *from student;


sno | sname | class | add
-----+---------+--------+-----
1 | ram | s.y.bcs | pune
2 | sham | s.y.bcs | pune
3 | ghansham | s.y.bcs | pune
(3 rows)

sybcs=# create table teacher(tno int primary key,tname text,qualification text,experience


int);
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index
"teacher_pkey" for table "teacher"
CREATE TABLE

sybcs=# insert into teacher values(10,'mr shah','Phd',5);


INSERT 0 1

sybcs=# select *from teacher;


tno | tname | qualification | experience
-----+------------+--------------+-----------
10 | mr shah | Phd | 5
11 | mr patil | Msc | 3
12 | mrs sonawne | Mtech | 4
13 | mrs sonawne | btech | 2
(4 rows)

sybcs=# create table stuteach(sno int references student(sno),tno int references


teacher(tno),subject text);
CREATE TABLE

sybcs=# insert into stuteach values(1,10,'maths');


INSERT 0 1

sybcs=# select *from stuteach;


sno | tno | subject
-----+----+-----------
1 | 10 | maths
1 | 11 | computer
1 | 11 | eletronics
1 | 13 | eletronics
2 | 11 | maths
3 | 11 | maths
3 | 12 | english
(7 rows)

A.
1.
stud_teacher=# select count(*) from teacher where qualification='Phd';
count
-------
1
(1 row)

2)
stud_teacher=# select distinct(sname) from student,teacher,stuteach where
student.sno=stuteach.sno and teacher.tno=stuteach.tno and tname='mr patil';
sname
----------
sham
ghansham
ram
(3 rows)
3.
stud_teacher=# select tname,subject,count(*) from student,teacher,stuteach where
student.sno=stuteach.sno and teacher.tno=stuteach.tno group by tname,subject;
tname | subject | count
-------------+-----------+------
mrs sonawne | eletronics | 1
mr patil | computer | 1
mr shah | maths | 1
mr patil | eletronics | 1
mr patil | maths | 2
mrs sonawne | english | 1
(6 rows)

4.
stud_teacher=# select count(*) from student where add='pune' group by add;
count
-------
3
(1 row)

5.
stud_teacher=# select distinct(tname) from teacher,stuteach where
teacher.tno=stuteach.tno and subject='maths';
tname
----------
mr shah
mr patil
(2 rows)

6.
stud_teacher=# select sname,tname from teacher,student,stuteach where
teacher.tno=stuteach.tno and stuteach.sno=student.sno and experience=(select
max(experience) from teacher);
sname | tname
-------+--------
ram | mr shah
(1 row)
B)
stud_teacher=# create or replace function stud_details(text)
stud_teacher-# returns text as'
stud_teacher'# declare
stud_teacher'# stud_name alias for $1;
stud_teacher'# stud_no integer;
stud_teacher'# stud_class text;
stud_teacher'# address text;
stud_teacher'# c1 cursor for select * from student where sname=stud_name;
stud_teacher'# begin
stud_teacher'# open c1;
stud_teacher'# loop
stud_teacher'# fetch c1 into stud_no,stud_class,address;
stud_teacher'# exit when not found;
stud_teacher'# raise notice ''% % %'',stud_no,stud_class,address;
stud_teacher'# end loop;
stud_teacher'# close c1;
stud_teacher'# return null;
stud_teacher'# end;'
stud_teacher-# language 'plpgsql';
CREATE FUNCTION

O/P :-
stud_teacher=# select stud_details('sham');
NOTICE: 2 sham s.y.bcs
stud_details
--------------

(1 row)

C)
1.)
stud_teacher=# create view v1 as select tname from teacher where experience = (select
min(experience) from teacher);

o/p:-
stud_teacher=# select * from v1;
tname
-------------
mrs sonawne
(1 row)

2)
stud_teacher=# create view v2 as select tname,subject from teacher,stuteach where
stuteach.tno=teacher.tno order by tname;

o/p:-
stud_teacher=# select * from v2;

tname | subject
-------------+-----------
mr patil | maths
mr patil | computer
mr patil | eletronics
mr patil | maths
mr shah | maths
mrs sonawne | eletronics
mrs sonawne | english
(7 rows)

D)

stud_teacher=# create or replace function exp()

stud_teacher-# returns opaque as'


stud_teacher'# begin
stud_teacher'# if (new.experience < 2 ) then
stud_teacher'# raise exception ''Teachers experience should be minimum 2 years'';
stud_teacher'# end if;
stud_teacher'# return new;
stud_teacher'# end;'
stud_teacher-# language 'plpgsql';
CREATE FUNCTION

stud_teacher=# create trigger trig_exp


stud_teacher-# before insert or update on teacher
stud_teacher-# for each row
stud_teacher-# execute procedure exp ();
WARNING: changing return type of function exp from "opaque" to "trigger"
CREATE TRIGGER
O/P:-
stud_teacher=# insert into teacher values(14,'Mr.Dange','MSc',1);
ERROR: Teachers experience should be minimum 2 years
stud_teacher=#

E)
stud_teacher=# create or replace function teach_nm(text)
stud_teacher-# returns text as'
stud_teacher'# declare
stud_teacher'# stud_name alias for $1;
stud_teacher'# teacher_nm text;
stud_teacher'# c1 cursor for select distinct(tname) from teacher,student,stuteach where
teacher.tno=stuteach.tno and stuteach.sno=student.sno and sname=stud_name;
stud_teacher'# begin
stud_teacher'# open c1;
stud_teacher'# loop
stud_teacher'# fetch c1 into teacher_nm ;
stud_teacher'# exit when not found;
stud_teacher'# raise notice ''% '',teacher_nm;
stud_teacher'# end loop;
stud_teacher'# close c1;
stud_teacher'# return null;
stud_teacher'# end;'
stud_teacher-# language 'plpgsql';
CREATE FUNCTION
O/P:-
stud_teacher=# select teach_nm('ram');
NOTICE: mr shah
NOTICE: mr patil
NOTICE: mrs sonawne
teach_nm
----------

(1 row)

…………………………

Asignment no. 5

Project-Employee
project=# create table PROJECT
project-# (PNO INTEGER primary key,
project(# P_NAME CHAR(30),
project(# PTYPE CHAR(20),
project(# DURATION INTEGER);
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index
"project_pkey" for table "project"
CREATE TABLE

project=# insert into project values (101, 'banking','application',3);


INSERT 0 1

project=# select * from project;


pno | p_name | ptype | duration
-----+-------------------------------+---------------------+---------
101 | banking | application | 3
102 | Robotics | system | 7
103 | medical | application | 2
(3 rows)

project=# create table EMPLOYEE


project-# (ENO INTEGER primary key,
project(# E_NAME CHAR (20),
project(# QUALIFICATION CHAR (15),
project(# JOINDATE DATE);
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index
"employee_pkey" for table "employee"
CREATE TABLE

project=# insert into employee values(2000,'Amar','BE','2/10/2010');


INSERT 0 1

project=# select * from employee;


eno | e_name | qualification | joindate
------+---------------------+----------------+-----------
2000 | Amar | BE | 2010-02-10
2001 | Sandeep | MCS | 2012-04-01
2002 | Ajay | MCA | 2010-01-22
(3 rows)
project=# create table proj_emp
project-# (pno integer references project(pno),
project(# eno integer references employee (eno),
project(# start_date date,
project(# no_of_hours_worked integer);
CREATE TABLE

project=# insert into proj_emp values(101,2000,'05/30/2012',20);


INSERT 0 1

project=# select * from proj_emp;


pno | eno | start_date | no_of_hours_worked
-----+-----+-----------+-------------------
101 | 2000 | 2012-05-30 | 20
102 | 2002 | 0201-04-01 | 50
102 | 2000 | 2013-04-01 | 30
103 | 2001 | 2012-07-16 | 25

(4 rows)

A.
1
tejaswini=# select e_name from employee order by e_name;
e_name
----------------------
Amar
radha
Rakesh
sanjay
(4 rows)

2
tejaswini=# select employee.eno,e_name from employee,project,proj_emp
tejaswini-# where project.pno=proj_emp.pno and employee.eno=proj_emp.eno and
p_name='system';
eno | e_name
------+---------------------
2001 | Rakesh
(1 row)
3.
tejaswini=# select e_name,p_type,p_name from employee,project,proj_emp
tejaswini-# where project.pno=proj_emp.pno and employee.eno=proj_emp.eno and
e_name like'A%';

e_name | p_type | p_name


----------------------+---------------------+--------------------
Amar | banking | application
(1 row)

4.
tejaswini=# select e_name from employee,proj_emp where employee.eno=proj_emp.eno
and no_of_hours_worked>20;
e_name
----------------------
Rakesh
sanjay
(2 rows)

5
tejaswini=# select project.* from project where p_type='robotics';
pno | p_name | p_type | duration
-----+-------------------------------+---------------------+-
102 | system | robotics | 7
(1 row)

6.
tejaswini=# select e_name from employee,proj_emp where employee.eno=proj_emp.eno
and qualification='M.Tech' and start_date='1/1/2014';
e_name
----------------------
Amar
(1 row)

B)

tejaswini=# create or replace function join_date(date)


tejaswini-# returns text as'
tejaswini'# declare
tejaswini'# jdate alias for $1;
tejaswini'# ename employee.e_name%type;
tejaswini'# c1 cursor for select e_name from employee where
joindate=jdate;
tejaswini'# begin
tejaswini'# open c1;
tejaswini'# loop
tejaswini'# fetch c1 into ename;
tejaswini'# exit when not found;
tejaswini'# raise notice''%'',ename;
tejaswini'# end loop;
tejaswini'# close c1;
tejaswini'# return null;
tejaswini'# end;'
tejaswini-# language 'plpgsql';
CREATE FUNCTION

O/P :-
tejaswini=#
tejaswini=# select join_date(‘2010-04-12’);
Rakesh
join_date
-----------

(1 row)

C.
1
tejaswini=# create view v_emp
tejaswini-# as select e_name from employee where(now()::date-joidate)>3;
CREATE VIEW

O/P:-
Select * from v_emp;
e_name
----------------------
Amar
Rakesh
sanjay
radha
(4 rows)
C.2
tejaswini=# create view v_noemp
as select employee.eno from employee,project,proj_emp where
project.pno=proj_emp.pno and employee.eno=proj_emp.eno and p_type!='robotics';
CREATE VIEW
tejaswini=# select * from v_noemp;
eno
------
2000
2002
2003
(3 rows)

D)

tejaswini=# create or replace function pro_emp()


tejaswini-# returns opaque as'
tejaswini'# begin
tejaswini'# if(new.no_of_hours_worked<=0) then
tejaswini'# raise exception''no of hours worked should be greater than zero'';
tejaswini'# end if;
tejaswini'# return new;
tejaswini'# end;'
tejaswini-# language 'plpgsql';
CREATE FUNCTION

tejaswini=# create trigger trig_pro_emp


tejaswini-# before insert or update on proj_emp
tejaswini-# for each row
tejaswini-# execute procedure pro_emp();
WARNING: changing return type of function pro_emp from "opaque" to "trigger"
CREATE TRIGGER

O/P :-
tejaswini=# insert into proj_emp values(104,2000,'1/1/2014',-1);
ERROR: no of hours worked should be greater than zero

E)

sybcs=# create or replace function emp()


sybcs-# returns integer as'
sybcs'# declare
sybcs'# empno int;
sybcs'# c1 cursor for select distinct(eno) from proj_emp where pno in (select pno from
proj_emp where eno=2000);
sybcs'# begin
sybcs'# open c1;
sybcs'# loop
sybcs'# fetch c1 into empno;
sybcs'# exit when not found;
sybcs'# raise notice ''% '',empno;
sybcs'# end loop;
sybcs'# close c1;
sybcs'# return null;
sybcs'# end;'
sybcs-# language 'plpgsql';
CREATE FUNCTION

O/P:-
sybcs=# select emp();
NOTICE: 2000
NOTICE: 2002
emp
-----

(1 row)
………………………..

Assignment-6

Business Trip database

business=# create table dept


business-# ( deptno varchar(10) primary key,
business(# dept_name char(20));
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "dept_pkey"
for table "dept"
CREATE TABLE
business=# insert into dept values (10,'computer');
INSERT 0 1

business=# select * from dept;


deptno | dept_name
--------+---------------------
10 | computer
20 | western
30 | maths
(3 rows)

business=# create table salesman


business-# (sno integer primary key,
business(# s_name char(30),
business(# start_year integer,
business(# deptno varchar(10) references dept(deptno));
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index
"salesman_pkey" for table "salesman"
CREATE TABLE

business=# insert into salesman values(101,'Amit',2008,10);


INSERT 0 1

business=# select *from salesman;


sno | s_name | start_year | deptno
-----+-------------------------------+-----------+-------
101 | Amit | 2008 | 10
102 | Vishal | 2010 | 20
103 | Ajay | 2010 | 10
104 | Mr. Patil | 2008 | 30
105 | Raju | 2005 | 20
(5 rows)

business=# create table trip


business-# (tno integer primary key,
business(# from_city char(20),
business(# to_city char(20),
business(# dparture_date date,
business(# return date,
business(# sno integer references salesman(sno));
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "trip_pkey"
for table "trip"
CREATE TABLE

business=# insert into trip values (1,'pune','mumbai','07/22/2008','07/25/2008',102);


INSERT 0 1

business=# select * from trip;


tno | from_city | to_city | dparture_date | return | sno
-----+---------------------+---------------------+--------------+-----------+----
1 | pune | mumbai | 2008-07-22 | 2008-07-25 | 102
2 | pune | banglore | 2012-09-12 | 2012-09-14 | 101
3 | nashik | calcutta | 2014-06-25 | 2014-06-29 | 102
4 | pune | calcutta | 2014-07-15 | 2014-07-20 | 103
5 | pune | mumbai | 2014-07-15 | 2014-07-20 | 104
6 | pune | Nashik | 2014-08-12 | 2014-08-15 | 105
(6 rows)

business=# create table expense


business-# (eid integer primary key,
business(# amount money);
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index
"expense_pkey" for table "expense"
CREATE TABLE

business=# insert into expense values (1,'$12000');


INSERT 0 1

business=# select * from expense;


eid | amount
-----+-----------
1 | $12,000.00
2 | $20,000.00
3 | $9,000.00

A)
1.
business=# select trip.*,amount from trip,expense where tno=eid and amount > '$10000';

tno | from_city | to_city | dparture_date | return | sno | amount


-----+----------------------+----------------------+------------
1 | pune | mumbai | 2008-07-22 | 2008-07-25 | 10 | $12,000.00
2 | pune | banglore | 2012-09-12 | 2012-09-14 | 101 | $20,000.00
4 | pune | Calcutta | 2014-07-15 | 2014-07-20 | 103 | $14,000.00
5 | pune | mumbai | 2014-07-15 | 2014-07-20 | 104 | $16,000.00
6 | pune | Nashik | 2014-08-12 | 2014-08-15 | 105 | $15,000.00
(5 rows)

2.
business=# update expense set amount=amount+'$5000';
UPDATE 6

o/p:-
business=# select * from expense;
eid | amount
-----+------------
1 | $17,000.00
2 | $25,000.00
3 | $14,000.00
4 | $19,000.00
5 | $21,000.00
6 | $20,000.00
(6 rows)

4)
business=# select * from salesman where start_year<2008;
sno | s_name | start_year | deptno
-----+--------------------------------+------------+--------
105 | Raju | 2005 | 20
(1 row)

5.
business=# select * from salesman where s_name like 'A%';
sno | s_name | start_year | deptno
-----+--------------------------------+------------+--------
101 | Amit | 2008 | 10
103 | Ajay | 2010 | 10
(2 rows)

6.
business=# select dept_name,count(*) from dept,salesman,trip where
dept.deptno=salesman.deptno and salesman.sno=trip.sno
group by dept_name having count(*) >=all (select count(*) from dept,salesman,trip
where dept.deptno=salesman.deptno and salesman.sno=trip.sno group by dept_name);
dept_name | count
----------------------+-------
western | 3
(1 row)

B)
business=# create or replace function salesman_info()
business-# returns text as'
business'# declare
business'# sales_nm text;
business'# trno integer;
business'# tr_frm_cty text;
business'# tr_to_cty text;
business'# tr_dp_date date;
business'# tr_return date;
business'# amt money;
business'# c1 cursor for select s_name, tno, from_city, to_city, dparture_date,
return,amount from salesman,trip,expense where salesman.sno=trip.sno
and trip.tno=expense.eid;
business'# begin
business'# raise notice '' salesman trip No from city to city
departure date return amount'';
business'# raise notice '' ................................ '';
business'# open c1;
business'# loop
business'# fetch c1 into sales_nm,trno,tr_frm_cty,tr_to_cty,tr_dp_date,tr_return,amt;
business'# exit when not found;
business'# raise notice ''% % % % % %
%'',sales_nm,trno,tr_frm_cty,tr_to_cty,tr_dp_date,tr_return,amt;
business'# end loop;
business'# close c1;
business'# return null;
business'# end;'
business-# language 'plpgsql';
CREATE FUNCTION

O/P:-
business=# select salesman_info();
NOTICE: salesman trip Nofrom city to city departure_date return amount
NOTICE: .................................................
NOTICE: Vishal 1 pune mumbai 2008-07-22 2008-07-25 $12,000.00
NOTICE: Amit 2 pune banglore 2012-09-12 2012-09-14 $20,000.00
NOTICE: Vishal 3 nashik calcutta 2014-06-25 2014-06-29 $9,000.00
NOTICE: Ajay 4 pune calcutta 2014-07-15 2014-07-20 $14,000.00
NOTICE: Mr.Patil 5 pune mumbai 2014-07-15 2014-07-20 $16,000.00
NOTICE: Raju 6 pune Nashik 2014-08-12 2014-08-15 $15,000.00
salesman_info
---------------

(1 row)

c)
1.

business=# create view v1 as select dept_name,count(*) from dept,salesman,trip where


dept.deptno=salesman.deptno and salesman.sno=trip.sno group by dept_name having
count(*) >=all (select count(*) from dept,salesman,trip where
dept.deptno=salesman.deptno and salesman.sno=trip.sno group by dept_name);
CREATE VIEW

business=# select * from v1;

dept_name | count
----------------------+-------
western | 3
(1 row)

2.
business=# create view v2 as select sum(amount) from salesman,trip,expense where
salesman.sno=trip.sno and trip.tno=expense.eid and s_name='Vishal';
CREATE VIEW

business=# select * from v2;


sum
------------
$31,000.00
(1 row)

D)
B)
business=# create or replace function dept_salesman(text)
business-# returns text as'
business'# declare
business'# dname alias for $1;
business'# sales_nm text;
business'# cnt integer;
business'# c1 cursor for select s_name,count(*) from dept,salesman,trip where
dept.deptno=salesman.deptno and salesman.sno=trip.sno and dept_name=dname group
by s_name;
business'# begin
business'# open c1;
business'# loop
business'# fetch c1 into sales_nm,cnt;
business'# exit when not found;
business'# raise notice ''% % '',sales_nm,cnt;
business'# end loop;
business'# close c1;
business'# return null;
business'# end;'
business-# language 'plpgsql';
CREATE FUNCTION

O/P:-
business=# select dept_salesman('western');
NOTICE: Raju 1
NOTICE: Vishal 2
dept_salesman
---------------

(1 row)

c)
business=# create or replace function salesman_calcutta()
business-# returns text as'
business'# declare
business'# s_no integer;
business'# sales_nm text;
business'# cnt integer;
business'# c1 cursor for select salesman.sno,s_name from salesman,trip where
salesman.sno=trip.sno and to_city=''calcutta'';
business'# begin
business'# open c1;
business'# loop
business'# fetch c1 into s_no,sales_nm;
business'# exit when not found;
business'# raise notice ''% % '',s_no,sales_nm;
business'# end loop;
business'# close c1;
business'# return null;
business'# end;'
business-# language 'plpgsql';
CREATE FUNCTION

O/P:-
business=# select salesman_calcutta();
NOTICE: 102 Vishal
NOTICE: 103 Ajay
salesman_calcutta

(1 row)

Assignment-7

Warehouse

Create Table

sybcs=# select * from cities;


city | state
--------+------
pune | ms
mumbai | ms
(2 rows)

sybcs=# select * from warehouses;


wid | wname | location | city
-----+----------+---------+-------
101 | vtrans | akurdi | pune
102 | v-elect | dadar | mumbai
103 | u_courier | nigdi | pune
(3 rows)

sybcs=# select *from store;


sid | sname | lcity | wid
-----+-------+-------+----
1 | deep | pune | 101
2 | roy | mumbai | 102
3 | pankaj | pune | 103
4 | renuka | pune | 101
5 | renuka | mumbai | 101
(5 rows)

sybcs=# select * from items;


itemno | description | weight | cost
--------+------------+-------+------
1 | sugar | 50.00 | 20.00
2 | Rice | 80.00 | 40.00
3 | Wheat | 120.00 | 32.00
(3 rows)

^
sybcs=# select * from customer;
cno | cname | caddr | city
-----+---------------------+--------------------------
201 | Vishal | pimpri | pune
202 | Vikas | kalyan | mumbai
203 | Amar | Dadar | mumbai
(3 rows)

A) Queries

B)
sybcs=# create or replace function city_ware(text)
sybcs-# returns text as'
sybcs'# declare
sybcs'# cty alias for $1;
sybcs'# ware_nm text;
sybcs'# c1 cursor for select wname from cities, warehouses where
cities.city=warehouses.city and warehouses.city=cty;
sybcs'# begin
sybcs'# open c1;
sybcs'# loop
sybcs'# fetch c1 into ware_nm;
sybcs'# exit when not found;
sybcs'# raise notice ''% '',ware_nm;
sybcs'# end loop;
sybcs'# close c1;
sybcs'# return null;
sybcs'# end;'
sybcs-# language 'plpgsql';
CREATE FUNCTION

O/P :-
sybcs=# select city_ware('pune');
NOTICE: vtrans
NOTICE: u_courier
city_ware
-----------

(1 row)

C)View

D)
sybcs=# create or replace function del_state()
sybcs-# returns opaque as'
sybcs'# begin
sybcs'# if (old.state=''ms'') then
sybcs'# raise exception ''can not delete city from Maharashtra
state'';
sybcs'# end if;
sybcs'# return new;
sybcs'# end;'
sybcs-# language 'plpgsql';
CREATE FUNCTION
sybcs=# create trigger trig_del_state
sybcs-# before delete on cities
sybcs-# for each row
sybcs-# execute procedure del_state();
WARNING: changing return type of function del_state from
"opaque" to "trigger"
CREATE TRIGGER

O/P :-
sybcs=# delete from cities where state='ms';
ERROR: can not delete city from Maharashtra state
sybcs=#

E)

sybcs=# create or replace function ware_pune()


sybcs-# returns text as'
sybcs'# declare
sybcs'# s_nm text;
sybcs'# c1 cursor for select sname from store, warehouses where
warehouses.wid=store.wid and wname=''vtrans'' and lcity=''pune'';
sybcs'# begin
sybcs'# open c1;
sybcs'# loop
sybcs'# fetch c1 into s_nm;
sybcs'# exit when not found;
sybcs'# raise notice ''% '',s_nm;
sybcs'# end loop;
sybcs'# close c1;
sybcs'# return null;
sybcs'# end;'
sybcs-# language 'plpgsql';
CREATE FUNCTION

O/P :-
sybcs=# select ware_pune();
NOTICE: deep
NOTICE: renuka

ware_pune
-----------

(1 row)

Assignment-8

tejaswini=# create table train


(train_no int primary key,
train_name varchar(20),
depart_time time,
Arrival_time time,
source_stn varchar(20),
dest_stn varchar(20),
No_of_res_bogies int,
bogie_capacity int);
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index
"train_pkey" for table "train"
CREATE TABLE

tejaswini=# insert into train


values(101,'hawara','8:30:00','8:50:00','pune','mumbai',10,50);
INSERT 0 1
tejaswini=# select * from train;
train_no | train_name | depart_time | arrival_time | source_stn | dest_stn |
n
o_of_res_bogies | bogie_capacity
----------+------------+------------+-------------+-----------+---------+-
----------------+---------------
101 | hawara | 08:30:00 | 08:50:00 | pune | mumbai |
10 | 50
102 | shatabdi | 07:00:00 | 07:30:00 | mumbai | pune |
20 | 40
103 | yamuna fast | 08:30:00 | 09:00:00 | mumbai | pune |
30 | 60
104 | hawara | 11:00:00 | 11:30:00 | nagpur | satara |
15 | 40
105 | shatabdi | 07:45:00 | 07:30:00 | mumbai | pune |
21 | 30
(5 rows)

tejaswini=# create table passanger(passanger_id int primary


key,passanger_name varchar(20),address varchar(30),age int,gender char);
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index
"passanger_pkey" for table "passanger"
CREATE TABLE

tejaswini=# insert into passanger values(1,'vishal','pimpri',25,'M');


INSERT 0 1

Select * from Passenger;

passanger_id | passanger_name | address | age | gender


--------------+---------------+--------+----+-------
1 | vishal | pimpri | 25 | M
2 | radhika | nigadi | 30 | F
3 | kunal | bhosari | 21 | M
4 | ramesh | dadar | 31 | M
5 | swati | pimpri | 21 | F
(5 rows)

tejaswini=# create table ticket


(train_no int references train(train_no),
passanger_id int references passanger(passanger_id),
ticket_no int,
bogie_no int,
no_of_berths int,
date date,
ticket_amt decimal(7,2),
status char,
primary key(train_no,passanger_id,ticket_no));
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index
"ticket_pkey" for table "ticket"
CREATE TABLE

tejaswini=# insert into ticket


values(101,1,5001,8,23,'5/13/2009',2000,'c');
INSERT 0 1

tejaswini=# select * from ticket;


train_no | passanger_id | ticket_no | bogie_no | no_of_berths | date |
ti
cket_amt | status
----------+-------------+----------+---------+-------------+-----------+--
---------+-------
101 | 1 | 5001 | 8 | 23 | 2009-05-13 |
2000.00 | c
103 | 3 | 5003 | 10 | 15 | 2009-12-15 |
5000.00 | w
104 | 4 | 5004 | 11 | 3 | 2009-04-03 |
4000.00 | c
102 | 2 | 5002 | 9 | 27 | 2009-11-09 |
3000.00 | c
105 | 5 | 5005 | 10 | 22 | 2009-11-09 |
5000.00 | c
(5 rows)
QUERIES
A.1
select passanger_name from passanger,train,ticket where
train.train_no=ticket.train_no and
passanger.passanger_id=ticket.passanger_id and
no_of_berths > 4 and train_name='hawara';

passanger_name
----------------
vishal
(1 row)

A.2 /* not working */


delete passanger_name from passanger,train,ticket where
train.train_no=ticket.train_no and
passanger.passanger_id=ticket.passanger_id and train_name='yamuna
fast' and date='12/15/2009' and passanger_name='kunal';

A.3
tejaswini=# select train_name from train where
no_of_res_bogies=30 and source_stn='mumbai' and dest_stn='pune';
train_name
-------------
yamuna fast
(1 row)

A.4
tejaswini=# select count(ticket.passanger_id) from
passanger,train,ticket where train.train_no=ticket.train_no and
tejaswini-# passanger.passanger_id=ticket.passanger_id and
train_name='hawara';
count
-------
2
(1 row)

A.5
tejaswini=# update ticket set status='c'from train,passanger
where train.train_no=ticket.train_no and
passanger.passanger_id=ticket.passanger_id and
train_name='shatabdi' and date='11/09/2009';
UPDATE 1
tejaswini=# select * from ticket;
train_no | passanger_id | ticket_no | bogie_no | no_of_berths | date |
ticket_amt | status
----------+-------------+----------+---------+-------------+-----------
+-----------+-------
101 | 1 | 5001 | 8 | 23 | 2009-05-13 |
2000.00 | c
103 | 3 | 5003 | 10 | 15 | 2009-12-15 |
5000.00 | w
104 | 4 | 5004 | 11 | 3 | 2009-04-03 |
4000.00 | c
102 | 2 | 5002 | 9 | 27 | 2009-11-09 |
3000.00 | c
(4 rows)

A.6)
tejaswini=# select passanger_name from passanger,train,ticket
where train.train_no=ticket.train_no and
passanger.passanger_id=ticket.passanger_id and
source_stn='mumbai' and dest_stn='pune' and date between
'4/3/2009' and '12/15/2009';
passanger_name
----------------
radhika
kunal
swati
(3 rows)

B)

C)
C.1

create view v_pas as


select passanger_name from passanger,train,ticket
where train.train_no=ticket.train_no and
passanger.passanger_id=ticket.passanger_id and
train_name='shatabdi' and status='w' and date='11/09/2009';
CREATE VIEW

tejaswini=# select * from v_pas;


passanger_name
----------------
radhika
(1 row)

C.) 2
create view v_travel
as select passanger_name from passanger,train,ticket
where train.train_no=ticket.train_no and
passanger.passanger_id=ticket.passanger_id and source_stn='pune'
and dest_stn='mumbai';
CREATE VIEW

passanger_name
----------------
vishal
(1 row)

D)
tejaswini=# create or replace function arrive_dept()
tejaswini-# returns opaque as'
tejaswini'# begin
tejaswini'# if(new.Arrival_time>new.depart_time) then
tejaswini'# raise exception''arrival time should be less than
departure time'';
tejaswini'# end if;
tejaswini'# return new;
tejaswini'# end;'
tejaswini-# language 'plpgsql';
CREATE FUNCTION

tejaswini=# create trigger trig_arrive_dept


tejaswini-# before insert or update on train
tejaswini-# for each row
tejaswini-# execute procedure arrive_dept();
WARNING: changing return type of function arrive_dept from
"opaque" to "trigger"
CREATE TRIGGER

O/P :-
tejaswini=# insert into train values
(104,'hawara','12:00:00','12:30:00','nagpur','satara',15,40);
ERROR: arrival time should be less than departure time

E)
tejaswini=# create or replace function ticket_amt(text,date)
tejaswini-# returns decimal as'
tejaswini'# declare
tejaswini'# train_nm for $1;
tejaswini'# t_date alias for $2;
tejaswini'# tamt decimal;
tejaswini'# begin
tejaswini'# select into tamt sum(ticket_amt) from ticket,train
where train.train_no=ticket.train_no and train_name=train_nm and
date=t_date;
tejaswini'# return tamt;
tejaswini'# end;'
tejaswini-# language 'plpgsql';
CREATE FUNCTION

O/P:-
tejaswini=# select ticket_amt(‘shatabdi’,'11/09/2009');
ticket_amt
------------
8000.00
(1 row)

Assignment-9
bus=# create table route(route_no int primary key,source
char(20),destination char(20),no_of_stations int );
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index
"route_pkey" for table "route"
CREATE TABLE

bus=# insert into route values(1,'pune','nigdi',13);


INSERT 0 1

bus=# select * from route;


route_no | source | destination | no_of_stations
----------+---------------------+---------------------+---------------
1 | pune | nigdi | 13
2 | khed | dehu | 18
3 | pune | chinchwad | 20
4 | pimpri | wakad | 22
5 | pune | alandi | 16
6 | pimpri | hadapsar | 20
(6 rows)
bus=# create table bus(bus_no int primary key,capacity int NOT
NULL,depot_name varchar(20),route_no int references route(route_no)ON
DELETE CASCADE);
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "bus_pkey"
for table "bus"
CREATE TABLE

bus=# insert into bus values(10,40,'pune',5);


INSERT 0 1

bus=# select * from bus;


bus_no | capacity | depot_name | route_no
--------+---------+-----------+---------
10 | 40 | pune | 5
11 | 35 | pimpri | 6
12 | 9 | chinchwad | 3
13 | 45 | pune | 1
14 | 35 | khed | 2
15 | 45 | pimpri | 4
16 | 40 | pune | 3
(7 rows)

bus=#create table driver(driver_no int primary key,driver_name


char(20),license_no int UNIQUE ,address char(20),d_age int ,salary float);
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index
"driver_pkey" for table "driver"
NOTICE: CREATE TABLE / UNIQUE will create implicit index
"driver_license_no_key" for table "driver"
CREATE TABLE

bus=# insert into driver


values(1,'satish',125478,'sambhaji_nagar',30,15000.00);
INSERT 0 1

bus=# select * from driver;


driver_no | driver_name | license_no | address |
d_age | salary
-----------+---------------------+-----------+---------------------+------
+-------
1 | satish | 125478 | sambhaji_nagar |
30 | 15000
2 | ram | 225863 | pimpri |
28 | 13500
3 | ganesh | 365894 | khed |
35 | 15000
4 | ashok | 254896 | sant_tukaram_nagar |
32 | 15200
5 | sachin | 254863 | ganesh_nagar |
28 | 11000
6 | ashish | 658952 | pune |
25 | 10000
(6 rows)

bus=# create table bus_driver(bus_no int references bus(bus_no)ON DELETE


CASCADE,driver_no int references driver(driver_no)ON DELETE CASCADE,date
date,shift int);
CREATE TABLE

bus=# insert into bus_driver values(10,1,'03/13/2015',1);


INSERT 0 1

bus=# select * from bus_driver;


bus_no | driver_no | date | shift
--------+----------+-----------+------
10 | 1 | 2015-03-13 | 1
13 | 1 | 2015-03-13 | 2
11 | 6 | 2015-03-10 | 2
14 | 6 | 2015-03-10 | 1
10 | 3 | 2015-03-17 | 1
16 | 5 | 2015-03-10 | 1
12 | 2 | 2015-03-15 | 1
(7 rows)

1. Find out the name of the driver having maximum salary.


ANS:-

bus=# select driver_name,salary from driver where salary=(select


max(salary) from driver);
driver_name | salary
----------------------+-------
ashok | 15200
(1 row)

2.Delete the record of bus having capacity<10

bus=# delete from bus where capacity<10;


DELETE 1

A) Print the names of drivers working in both shifts on 13/10/2014

ANS :-
bus=# (select driver.driver_no,driver_name from driver,bus_driver where
driver.driver_no=bus_driver.driver_no and shift=1 and date='03/10/2015' )
intersect(select driver.driver_no,driver_name from driver,bus_driver
where driver.driver_no=bus_driver.driver_no and shift=2 and
date='03/10/2015');
driver_no | driver_name
-----------+---------------------
6 | ashish
(1 row)

/* table names and column names and output rows are different from above table,
but queries are correct.*/

4.
rv167=# update driv set sal=sal+sal*0.5 where dage>40;
UPDATE 1
rv167=#
rv167=# select * from driv;
dno | drname | lic | addr | dage | sal
-----+--------+-----+--------+------+-------
21 | karu | 101 | pimp | 30 | 15000
23 | sharma | 103 | fcrd | 40 | 25000
24 | patil | 104 | mjrd | 25 | 20000
22 | raj | 102 | chinch | 45 | 37500
(4 rows)

5:
rv167=# select rou.* from bus,rou where rou.rno=bus.rno and cap=20;
rno | src | dest | nos
-----+-------+------+-----
20 | nasik | mum | 5
(1 row)

6:
rv167=# (select driv.dno,drname from driv,bd1 where driv.dno=bd1.dno and
shift=1 and dod='1990/01/30')intersect(select driv.dno,drname from
driv,bd1 where driv.dno=bd1.dno and shift=2 and dod='1990/01/30');

dno | drname
-----+--------
21 | karu
(1 row)
B) Write a stored function using cursors to display the ditails
of driver. (Accept driver name as input parameter).

bus=# create or replace function driver_details(text)


bus-# returns text as'
bus'# declare
bus'# dr_name alias for $1;
bus'# r driver%rowtype;
bus'# c1 cursor for select * from driver where
driver_name=dr_name ;
bus'# begin
bus'# open c1;
bus'# loop
bus'# fetch c1 into r;
bus'# exit when not found;
bus'# raise notice ''% % % % % % '',
r.driver_no,r.driver_name,r.license_no,r.address,r.d_age,r.salary
;
bus'# end loop;
bus'# close c1;
bus'# return null;
bus'# end ;'
bus-# language 'plpgsql';
CREATE FUNCTION

O/P :-
bus=# select driver_details('ashok');
NOTICE: 4 ashok 254896 sant_tukaram_nagar 32 15200
driver_details
----------------

(1 row)

C) create a view

1) which cantains details of bus no 10 along with details of


all drivers who have driven that bus.

bus=# create or replace view driven_driver_details as select


driver.* from driver,bus_driver where
driver.driver_no=bus_driver.driver_no and bus_no=10;
CREATE VIEW

bus=# select * from driven_driver_details;


driver_no | driver_name | license_no | address | d_age | salary
-----------+---------------------+-----------+---------------------+------
+----
1 | satish | 125478 | sambhaji_nagar | 30 | 15000
3 | ganesh | 365894 | khed | 35 | 15000
(2 rows)

2)To display the details of the buses that run on route 1 or 2.

bus=# create or replace view bus_details as


bus-# (select bus.* from bus ,route where
bus.route_no=route.route_no and route.route_no=1 )UNION(select
bus.* from bus ,route where bus.route_no=route.route_no and
route.route_no=2) ;
CREATE VIEW

O/P :-
bus=# select * from bus_details;
bus_no | capacity | depot_name | route_no
--------+---------+-----------+---------
13 | 45 | pune | 1
14 | 35 | khed | 2
(2 rows)

D)
sybcs=# create or replace function driver_age()
sybcs-# returns opaque as'
sybcs'# begin
sybcs'# if (new.d_age<18 or new.d_age >50) then
sybcs'# raise exception '' Drivers age should be between 18 and 50'';
sybcs'# end if;
sybcs'# return new;
sybcs'# end;'
sybcs-# language 'plpgsql';
CREATE FUNCTION

sybcs=# create trigger trig_driver_age


sybcs-# before insert or update on driver
sybcs-# for each row
sybcs-# execute procedure driver_age();
WARNING: changing return type of function driver_age from "opaque" to
"trigger"
CREATE TRIGGER

sybcs=# insert into driver values (14,'ashish',2004,'pimpri',14,5000);


ERROR: Drivers age should be between 18 and 50
sybcs=#

sybcs=# update driver set d_age=55 where dno=13;


ERROR: Drivers age should be between 18 and 50
sybcs=#
E) / here column names and table names are different but program is correct */
rv167=# create or replace function d(int,date)
rv167-# returns text as'
rv167'# declare
rv167'# bid alias for $1;
rv167'# dat alias for $2;
rv167'# driver text;
rv167'# begin
rv167'# select into driver drname from bus,driv,bd1 where bus.bno=bd1.bno
and driv.dno=bd1.dno and dod=dat;
rv167'# return driver;
rv167'# end;'
rv167-# language 'plpgsql';
CREATE FUNCTION

o/p :-
select d(12,’2015-03-15’);

Assignment-10

company-person

s9=# create table comp(cname text primary key,add text,city text,phone


varchar(10),sharev int);
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "comp_pkey"
for table "comp"
CREATE TABLE

s9=# insert into comp


values('techmahindras','chinchawad','pimpri','8621294300',20000);
INSERT 0 1
s9=# insert into comp
values('bajaj','dadar','mumbai','8721984300',250000);
INSERT 0 1
s9=# insert into comp values('tcs','nasik','nasik','9921294300',150000);
INSERT 0 1
s9=# insert into comp
values('infosis','hinjawadi','pune','9921345670',50000);
INSERT 0 1
s9=# insert into comp values('wipro','mg road','pune','9011378520',25000);
INSERT 0 1

s9=# select * from comp;


cname | add | city | phone | sharev
---------------+-----------+-------+-----------+-------
techmahindras | chinchawad | pimpri | 8621294300 | 20000
bajaj | dadar | mumbai | 8721984300 | 250000
tcs | nasik | nasik | 9921294300 | 150000
infosis | hinjawadi | pune | 9921345670 | 50000
wipro | mg road | pune | 9011378520 | 25000
(5 rows)

/*person*/
s9=# create table per(pid int primary key,pname text,pcity text);
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "per_pkey"
for table "per"
CREATE TABLE

s9=# insert into per values(1,'pooja','pune');


INSERT 0 1
s9=# insert into per values(2,'raj','mumbai');
INSERT 0 1
s9=# insert into per values(3,'jaya','bhosari');
INSERT 0 1
s9=# insert into per values(4,'pratiksha','goa');
INSERT 0 1
s9=# insert into per values(5,'sneha','nashik');
INSERT 0 1
s9=# insert into per values(6,'madhuri','pune');
INSERT 0 1

s9=# select * from per;


pid | pname | pcity
-----+----------+--------
1 | pooja | pune
2 | raj | mumbai
3 | jaya | bhosari
4 | pratiksha | goa
5 | sneha | nashik
6 | madhuri | pune
(6 rows)

/*cp*/
s9=# create table cp(cname text references comp(cname),pid int references
per(pid),nos int);
CREATE TABLE

s9=# insert into cp values('tcs',6,450);


INSERT 0 1
s9=# insert into cp values('wipro',4,650);
INSERT 0 1
s9=# insert into cp values('infosis',5,750);
INSERT 0 1
s9=# insert into cp values('infosis',1,50);
INSERT 0 1
s9=# insert into cp values('techmahindras',3,850);
INSERT 0 1
s9=# insert into cp values('bajaj',2,150);
INSERT 0 1
s9=# insert into cp values('techmahindras',5,850);
INSERT 0 1
s9=# insert into cp values('wipro',3,200);
INSERT 0 1

s9=# select * from cp;


cname | pid | nos
---------------+----+----
tcs | 6 | 450
wipro | 4 | 650
infosis | 5 | 750
infosis | 1 | 50
techmahindras | 3 | 850
bajaj | 2 | 150
techmahindras | 5 | 850
wipro | 3 | 200
(8 rows)

/*A-QUERRY*/

1]
s9=# select cname from comp where cname like 't%';
cname
---------------
techmahindras
tcs
(2 rows)

2]
s9=# select pname,pcity from per where pcity='pune';
pname | pcity
---------+------
pooja | pune
madhuri | pune
(2 rows)

3]

s9=# select pname,sharev from comp,per,cp


s9-# where per.pid=cp.pid
s9-# and comp.cname=cp.cname
s9-# and sharev=(select max(sharev) from comp);
pname | sharev
-------+-------
raj | 250000
(1 row)
4]

s9=# select pname,sharev from comp,per,cp


s9-# where per.pid=cp.pid
s9-# and comp.cname=cp.cname
s9-# and sharev=(select min(sharev) from comp);
pname | sharev
-------+-------
(0 rows)

5]
Select pcity, comp.cname, per.pname
from comp,per,cp
where per.pid=cp.pid
and comp.cname=cp.cname
order by pcity desc;

6.

B.)
s9=# create or replace function ccpname(text)
s9-# returns int as'
s9'# declare
s9'# ccname alias for $1;
s9'# cnt int;
s9'# c1 cursor for select count(*)
s9'# from comp,cp where comp.cname=cp.cname and comp.cname=ccname;
s9'# begin
s9'# open c1;
s9'# loop
s9'# fetch c1 into cnt;
s9'# exit when not found;
s9'# raise notice ''%'',cnt;
s9'# end loop;
s9'# close c1;
s9'# return null;
s9'# end;'
s9-# language 'plpgsql';
CREATE FUNCTION
s9=#

s9=# select ccpname('tcs');


NOTICE: 1
ccpname
---------

(1 row)
/*C-view*/

1]
s9=# create or replace view ccmp_name as select * from comp where
city='pune';
CREATE VIEW

O/P :-
s9=# select * from comp_name;
cname | add | city | phone | sharev
---------+----------+-----+-----------+-------
infosis | hinjawadi | pune | 9921345670 | 50000
wipro | mg road | pune | 9011378520 | 25000
(2 rows)

2]

s9=# create or replace view v_share as select cname,sharev from comp where
sharev>=50000;
CREATE VIEW

O/P :-
s9=# select * from v_share;
cname | sharev
---------+-------
bajaj | 250000
tcs | 150000
infosis | 50000
(3 rows)

/* D trigger */
s9=# create or replace function share()
s9-# returns opaque as'
s9'# begin
s9'# if(new.sharev<=0)then
s9'# raise exception ''NO OF SHARES CAN NOT BE ZERO'';
s9'# end if;
s9'# return new;
s9'# end;'
s9-# language 'plpgsql';
CREATE FUNCTION

s9=# create trigger trig_share


s9-# before insert or update on cp
s9-# for each row
s9-# execute procedure share();
WARNING: changing return type of function share from "opaque" to
"trigger"
REATE TRIGGER

O/P :-

s9=# insert into cp values('tcs',6,0);


ERROR: NO OF SHARES CAN NOT BE ZERO

/*E-FUNCTION*/
s9=# create or replace function sha()
s9-# returns text as'
s9'# declare
s9'# p_name text;
s9'# tot int;
s9'# c1 cursor for select pname,sum(nos)
s9'# from per,cp where per.pid=cp.pid
s9'# group by pname;
s9'# begin
s9'# open c1;
s9'# loop
s9'# fetch c1 into p_name,tot;
s9'# exit when not found;
s9'# raise notice ''% %'',p_name,tot;
s9'# end loop;
s9'# close c1;
s9'# return null;
s9'# end;'
s9-# language 'plpgsql';
CREATE FUNCTION
s9=# select sha();
NOTICE: raj 150
NOTICE: pooja 50
NOTICE: pratiksha 650
NOTICE: madhuri 450
NOTICE: jaya 1050
NOTICE: sneha 1600
sha
-----

(1 row)

Assignment-11

/student database

create table student(rollno int primary key,name text,address


varchar(20),class text);
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index
"student_pkey" for table "student"
CREATE TABLE

create table subject1(scode text primary key,subject_name text);


NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index
"subject1_pkey" for table "subject1"
CREATE TABLE

104=# create table st_su(rollno int references student(rollno),scode


text references subject1(scode),marks_scored int);
CREATE TABLE

104=# insert into student values(1,'sonal','ahemadnager','sybcs');


INSERT 0 1
104=# insert into student values(2,'pratu','pune','sybcs');
INSERT 0 1
104=# insert into student values(3,'rakesh','pune','sybcs');
INSERT 0 1
104=# insert into student values(4,'pooja','nashik','fybcs');
INSERT 0 1
104=# insert into student values(5,'merin','nashik','fybcs');
INSERT 0 1

104=# insert into subject1 values('s112211','maths');


INSERT 0 1
104=# insert into subject1 values('s112212','rdbms');
INSERT 0 1
104=# insert into subject1 values('c112213','dbms');
INSERT 0 1
104=# insert into subject1 values('c112214','stat');
INSERT 0 1

104=# insert into st_su values('1','s112211',90);


INSERT 0 1
104=# insert into st_su values('2','c112213',40);
INSERT 0 1
104=# insert into st_su values('3','s112212',60);
INSERT 0 1
104=# insert into st_su values('4','c112213',79);
INSERT 0 1
104=# insert into st_su values('5','s112211',85);
INSERT 0 1

104=# select *from student;


rollno | name | address | class
--------+--------+-------------+-------
1 | sonal | ahemadnager | sybcs
2 | pratu | pune | sybcs
3 | rakesh | pune | sybcs
4 | pooja | nashik | fybcs
5 | merin | nashik | fybcs
(5 rows)
104=# select *from subject;
scode | subject_name
-------+--------------
(0 rows)

104=# select *from subject1;


scode | subject_name
---------+--------------
s112211 | maths
s112212 | rdbms
c112213 | dbms
c112214 | stat
(4 rows)

104=# select *from st_su;


rollno | scode | marks_scored
--------+---------+--------------
1 | s112211 | 90
1 | c112213 | 40
3 | s112212 | 60
3 | c112213 | 79
4 | c112213 | 58
5 | s112211 | 85
(5 rows)

1]
104=# select name, sum(marks_scored)from student,st_su where
student.rollno=st_su.rollno group by name having sum(marks_scored)
>=all ( select sum(marks_scored)from student,st_su where
student.rollno=st_su.rollno group by name)

name
-------
rakesh
(1 row)

2]
104=# select distinct subject_name from subject1;
subject_name
--------------
stat
rdbms
dbms
maths
(4 rows)

3]
104=# select class,subject_name, name from subject1,student,st_su
where student.rollno=st_su.rollno and subject1.scode=st_su.scode order
by class,subject_name,name;
class | subject_name | name
-------+--------------|--------
fybcs | dbms
sybcs | rdbms
sybcs | maths
fybcs | maths
sybcs | dbms
(5 rows)

4]
104=# select count(*) from student,subject1,st_su where
student.rollno=st_su.rollno and subject1.scode=st_su.scode and
class='sybcs' and subject_name='rdbms';
count
-------
1
(1 row)

5]
104=# select distinct subject_name from student,subject1,st_su where
student.rollno=st_su.rollno and subject1.scode=st_su.scode and
class='fybcs';
subject_name
--------------
dbms
maths
(2 rows)

B]

104=# create or replace function sdetails(text)


returns text as'
declare
saddr alias for $1;
st_name text;
su_name text;
mark int;
c1 cursor for select name,subject_name,marks_scored from
student,subject1,st_su where student.rollno=st_su.rollno and
subject1.scode=st_su.scode and address=saddr;
begin
open c1;
loop
fetch c1 into st_name,su_name,mark;
exit when not found;
raise notice ''% % %'',st_name,su_name,mark;
end loop;
close c1;
return null;
end;'
language'plpgsql';
CREATE FUNCTION

O/P :-
104=# select sdetails('pune');
NOTICE: pratu dbms 40
NOTICE: rakesh rdbms 60
sdetails
----------

(1 row)

C]

1}
104=# create view v_sname as select name,class,sum(marks_scored)from
student,st_su where student.rollno=st_su.rollno group by name,class
order by name;
CREATE VIEW

O/P :-
104=# select * from v_sname;
name | class | sum
--------+-------+-----
merin | fybcs | 85
pooja | fybcs | 79
pratu | sybcs | 40
rakesh | sybcs | 60
sonal | sybcs | 90
(5 rows)

2}
104=# create view v_marks as select name,subject_name,marks_scored
from student,subject1,st_su where student.rollno=st_su.rollno and
subject1.scode=st_su.scode and marks_scored >40;
CREATE VIEW

O/P :-
104=# select * from v_marks;
name | subject_name | marks_scored
--------+--------------+--------------
sonal | maths | 90
rakesh | rdbms | 60
pooja | dbms | 79
merin | maths | 85
(4 rows)
[D]

teju275=# create or replace function sg()


teju275-# returns opaque as'
teju275'# begin
teju275'# raise exception ''STUDENT RECORD IS BEING DELETED'';
teju275'# return new;
teju275'# end;'
teju275-# language 'plpgsql';
CREATE FUNCTION

teju275=# create trigger sg


teju275-# before delete on student
teju275-# for each row
teju275-# execute procedure sg();
WARNING: changing return type of function sg from "opaque" to
"trigger"
CREATE TRIGGER

O/P :-
teju275=# delete from student where rollno=101;
ERROR: STUDENT RECORD IS BEING DELETED

E]

104=# create or replace function tot_persent()


104-# returns text as'
104'# declare
104'# rno st_su.rollno%type;
104'# total_mks integer;
104'# percentage real;
104'# c1 cursor for select rollno,sum(marks_scored)from st_su group by
rollno;
104'# begin
104'# raise notice ''rollno totalmarks percent'';
104'# open c1;
104'# loop
104'# fetch c1 into rno,total_mks;
104'# percentage:=(100*total_mks)/320;
104'# exit when not found;
104'# raise notice'' % % %'',rno,total_mks,percentage;
104'# end loop;
104'# close c1;
104'# return null;
104'# end;'
104-# language'plpgsql';
CREATE FUNCTION

O/P :-
104=# select tot_persent();
NOTICE: rollno totalmarks percent
NOTICE: 4 79 24
NOTICE: 1 90 28
NOTICE: 5 85 26
NOTICE: 3 60 18
NOTICE: 2 40 12
tot_persent
-------------

Asg-12
rv167=#create table np(name varchar(20) primary key,lang
varchar(20),pub varchar(20),cost money);
NOTICE: CREATE TABLE

rv167=# create table cities1(pc varchar(6) primary key,city


varchar(20),state varchar(20));
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index
"cities1_pkey" for table "cities1"
CREATE TABLE

rv167=# create table nc(name varchar references np(name),pc varchar


references cities1(pc),daily int);
CREATE TABLE

rv167=# select * from np;


name | lang | pub | cost
------+------+-----+------
(0 rows)

rv167=# select * from cities1;


pc | city | state
----+------+-------
(0 rows)

rv167=# select * from nc;


name | pc | daily
------+----+-------
(0 rows)

rv167=# insert into np values('sakal','mara','mr.patil','$100');


INSERT 0 1
rv167=# insert into np values('toi','eng','mr.john','$80');
INSERT 0 1
rv167=# insert into np values('lok','mara','mr.jadav','$150');
INSERT 0 1
rv167=#
rv167=# insert into np values('pm','eng','mr.sures','$50');
INSERT 0 1
rv167=#
rv167=# select * from np;
name | lang | pub | cost
-------+------+----------+---------
sakal | mara | mr.patil | $100.00
toi | eng | mr.john | $80.00
lok | mara | mr.jadav | $150.00
pm | eng | mr.sures | $50.00
(4 rows)

rv167=# insert into cities1 values(411018,'pune','maharashtra');


INSERT 0 1
rv167=#
rv167=# insert into cities1 values(411010,'nasik','maharashtra');
INSERT 0 1
rv167=#
rv167=# insert into cities1 values(411020,'surat','gujrat');
INSERT 0 1
rv167=#
rv167=# select * from cities1;
pc | city | state
--------+-------+-------------
411018 | pune | maharashtra
411010 | nasik | maharashtra
411020 | surat | gujrat
(3 rows)

rv167=# insert into nc values('sakal','411018',100);


INSERT 0 1
rv167=# insert into nc values('lok','411018',80);
INSERT 0 1
rv167=#
rv167=# insert into nc values('toi','411010',90);
INSERT 0 1
rv167=#
rv167=# select * from nc;
name | pc | daily
-------+--------+-------
sakal | 411018 | 100
lok | 411018 | 80
toi | 411010 | 90

QUERIES:

1. rv167=# select name from np;


name
-------
sakal
toi
lok
pm
(4 rows)

2.rv167=# select city from cities1 where city like 'p%';


city
------
pune
(1 row)

3.rv167=# select np.name,pub from np,cities1,nc where np.name=nc.name


and cities1.pc=nc.pc and city='pune';
name | pub
-------+----------
sakal | mr.patil
lok | mr.jadav
(2 rows)

4.rv167=# select count(*) from np,cities1,nc where np.name=nc.name and


cities1.pc=nc.pc and city='pune' and lang='mara';
count
-------
2
(1 row)

5.rv167=# select city from cities1 where pc like '%10';


city
-------
nasik
(1 row)

6.rv167=# select np.name,lang,pub,cost,city from np,cities1,nc where


np.name=nc.name and cities1.pc=nc.pc and daily=(select max(daily) from
nc);
name | lang | pub | cost | city
-------+------+----------+---------+------
sakal | mara | mr.patil | $100.00 | pune
(1 row)
B:
rv167=# create or replace function np2()
rv167-# returns int as'
rv167'# declare
rv167'# tot int;
rv167'# lan text;
rv167'# c1 cursor for select sum(daily),lang from np,nc where
np.name=nc.name group by lang;
rv167'# begin
rv167'# open c1;
rv167'# loop
rv167'# fetch c1 into tot,lan;
rv167'# exit when not found;
rv167'# raise notice''% %'',tot,lan;
rv167'# end loop;
rv167'# close c1;
rv167'# return null;
rv167'# end;'
rv167-# language 'plpgsql';
CREATE FUNCTION

o/p:
rv167=# select np2();
NOTICE: 90 eng
NOTICE: 180 mara
np2
-----
(1 row)

C:VIEW
(1)rv167=# create view v_n as select np.name,lang,pub,cost,daily from
np,nc where np.name=nc.name and np.name='sakal';
CREATE VIEW

o/p:
rv167=# select * from v_n;
name | lang | pub | cost | daily
-------+------+----------+---------+-------
sakal | mara | mr.patil | $100.00 | 100
(1 row)

(2)rv167=# create view v_a as select np.name,state from np,cities1,nc


where np.name=nc.name and cities1.pc=nc.pc and daily>80;
CREATE VIEW
rv167=#
rv167=# select * from v_a;
name | state
-------+-------------
sakal | maharashtra
toi | maharashtra
(2 rows)

D:
rv167=# create or replace function t2()
rv167-# returns opaque as'
rv167'# declare
rv167'# len int;
rv167'# begin
rv167'# select into len length(new.pc) from cities1;
rv167'# if(len>6 or len<6) then
raise exception''PINCODE MUST B OF 6 DIGit'';
rv167'# end if;
rv167'# return new;
rv167'# end;'
rv167-# language 'plpgsql';
CREATE FUNCTION

rv167=# create trigger trig_t2


rv167-# before insert or update on cities1
rv167-# for each row
rv167-# execute procedure t2();
WARNING: changing return type of function t2 from "opaque" to
"trigger"
CREATE TRIGGER

o/p:
rv167=# insert into cities1 values(41101,'mum','maharashtra');
ERROR: PINCODE MUST B OF 6 DIGit

E:
rv167=# create or replace function e2()
rv167-# returns text as'
rv167'# declare
rv167'# c text;
rv167'# pay money;
rv167'# c1 cursor for select city,sum(cost) from np,cities1,nc where
np.name=nc.name and cities1.pc=nc.pc group by city;
rv167'# begin
rv167'# open c1;
rv167'# loop
rv167'# fetch c1 into c,pay;
rv167'# exit when not found;
rv167'# raise notice'' % %'',c,pay;
rv167'# end loop;
rv167'# close c1;
rv167'# return null;
rv167'# end;'
rv167-# language 'plpgsql';
CREATE FUNCTION

o/p:
rv167=# select e2();
NOTICE: pune $250.00
NOTICE: nasik $80.00
e2
----

(1 row)

Asg-13
Item-supplier database

item_sup=# select * from item;


ino | iname | quantity
-----+-------------+---------
1 | keyboard | 28
2 | mouse | 15
(2 rows)

item_sup=# select * from supplier;


sno | sname | address | city
-----+------+--------+-----
11 | Yash | pimpri | pune
12 | Akash | Nigadi | pune
13 | sagar | Thane | Mumbai
(2 rows)

item_sup=# select * from item_sup;


ino | sno | rate | qty
-----+----+-----------+----
2 | 12 | $6,000.00 | 15
1 | 12 | $13,000.00 | 10
1 | 11 | $9,500.00 | 10
1 | 13 | $12,000.00 | 8
(3 rows)

Queries :-

1)
item_sup=# select * from item;
ino | iname | quantity
-----+-------------+---------
1 | keyboard | 28
2 | mouse | 15
(2 rows)

2)
item_sup=# select * from supplier;
sno | sname | address | city
-----+------+--------+-----
11 | Yash | pimpri | pune
12 | Akash | Nigadi | pune
13 | sagar | Thane | Mumbai
(2 rows)

3)
item_sup=# select iname, sname from item,supplier,item_sup where
supplier.sno = item_sup.sno and item.ino = item_sup.ino order by
iname;
iname | sname
--------------+------
keyboard | Akash
keyboard | yash
keyboard | sagar
mouse | Akash
(4 rows)

4)
item_sup=# select * from item where quantity=(select
max(quantity) from item);
ino | iname | quantity
-----+-------------+---------
1 | keyboard | 28
(1 row)

5)
item_sup=# select city,sname from supplier order by city;
city | sname |
-----+------+---+
mumbai | sagar |
pune | Yash |
pune | Akash |

6)
item_sup=# select sname from item_sup, supplier where
item_sup.sno=supplier.sno and rate = (select min(rate) from
item_sup, item where item_sup.ino=item.ino and iname='keyboard');
sname
-------
Yash
(1 row)

B)
item_sup=# create or replace function item_sup_qty()
item_sup-# returns text as'
item_sup'# declare
item_sup'# snm text;
item_sup'# inm text;
item_sup'# quantity integer;
item_sup'# c1 cursor for select sname, iname, qty from
item,supplier,item_sup where supplier.sno = item_sup.sno and
item.ino = item_sup.ino;
item_sup'# begin
item_sup'# open c1;
item_sup'# raise notice '' supp Name Item Name Qty '';
item_sup'# loop
item_sup'# fetch c1 into snm,inm,quantity;
item_sup'# exit when not found;
item_sup'# raise notice ''% % %'',snm,inm,quantity;
item_sup'# end loop;
item_sup'# close c1;
item_sup'# return null;
item_sup'# end;'
item_sup-# language 'plpgsql';
CREATE FUNCTION

O/P :-
item_sup=# select item_sup_qty();
NOTICE: supp Name Item Name Qty
NOTICE: Akash mouse 15
NOTICE: Akash keyboard 10
NOTICE: Yash keyboard 10
NOTICE: Sagar keyboard 8

C)1)
item_sup=# create view v_supp as select supplier.* from
item,supplier,item_sup where supplier.sno = item_sup.sno and
item.ino = item_sup.ino and iname='keyboard';
CREATE VIEW
item_sup=# select * from v_supp;
sno | sname | address | city
-----+------+--------+-----
12 | Akash | Nigadi | pune
11 | Yash | pimpri | pune
13 | sagar | Thane | mumbai
(3 rows)

2)
item_sup=# create or replace view v_item as select
distinct(iname) from item,supplier,item_sup where supplier.sno =
item_sup.sno and item.ino = item_sup.ino and city='pune';
CREATE VIEW

item_sup=# select * from v_item;


iname
--------------
mouse
keyboard
(2 rows)

D:)) /* column names and table names are different for this prog */

rv167=# create or replace function t5(text)


rv167-# returns int as'
rv167'# declare
rv167'# irname alias for $1;
rv167'#
rv167'# srname text;
rv167'# cnt int;
rv167'# c1 cursor for select item.iname,count(supp.sname) from
item,supp,isu2 where item.ino=isu2.ino and supp.sno=isu2.sno group by
item.iname;
rv167'# begin
rv167'# select into cnt count(*) from item,supp,isu2 where
item.ino=isu2.ino and supp.sno=isu2.sno and iname=irname;
rv167'# if(cnt=0)
rv167'# then raise exception ''invalid item name'';
rv167'# else
rv167'# open c1;
rv167'# loop
rv167'# fetch c1 into srname,cnt;
rv167'# exit when not found;
rv167'# raise notice ''% %'',srname,cnt;
rv167'# end loop;
rv167'# close c1;
rv167'# end if;
rv167'# return null;
rv167'# end;'
rv167-# language 'plpgsql';
CREATE FUNCTION
rv167=#
rv167=# select t5('buk');
NOTICE: key 2
NOTICE: buk 1
t5
----

(1 row)

rv167=# select t5('note');


ERROR: invalid item name

E)
item_sup=# create or replace function count_supp(text)
item_sup-# returns int as'
item_sup'# declare
item_sup'# cty alias for $1;
item_sup'# cnt integer;
item_sup'# begin
item_sup'# select into cnt count(*) from supplier where
city=cty;
item_sup'# return cnt;
item_sup'# end;'
item_sup-# language 'plpgsql';
CREATE FUNCTIOn

O/P:-
item_sup=# select count_supp('pune');
count_supp
------------
2
(1 row)
**** End 2015-16 *****

You might also like