Solution:
SQL> create table plan(plan_no int primary key,plan_name varchar(10),nooffreecalls varchar(10),freecalltime varchar(10),fix_amt varchar(10));
SQL> insert into plan values(1,'monthly','61','12:00','10000');
SQL> create table cust(cno int primary key,cname varchar(10),mbno int,plan_no int);
SQL> insert into cust values(1,'aaa',2345678,1);
1)Write a procedure to display the plan having minimum response.
SQL> set serveroutput on
SQL> create or replace procedure p1(y in varchar)as cursor c1 is select nooffreecalls,plan_name from plan,cust where plan.plan_no=cust.plan_no;
2 c c1%rowtype;
3 begin
4 open c1;
5 dbms_output.put_line('nooffreecalls'||''||'plan_name');
6 loop
7 fetch c1 into c;
8 exit when c1 %notfound;
9 if(c.plan_name=y)then
10 dbms_output.put_line(c.nooffreecalls||''||c.plan_name);
11 end if;
12 end loop;
13 close c1;
14 end;
15 /
Procedure created.
SQL> begin
2 p1('monthly');
3 end;
4 /
nooffreecallsplan_name
61monthly
--------------------
SQL> set serveroutput on
SQL> create or replace procedure p5(n in varchar) as min_nooffreecalls plan.nooffreecalls %type;
2 begin
3 select min(nooffreecalls) into min_nooffreecalls from plan,cust where plan.plan_no=cust.plan_no;
4 if(min_nooffreecalls > 0) then
5 dbms_output.put_line('min nooffreecalls='||min_nooffreecalls);
6 else
7 dbms_output.put_line('plan does not exists');
8 end if;
9 end p5;
10 /
Procedure created.
SQL> execute p5('61');
min nooffreecalls=50
PL/SQL procedure successfully completed.
2)Write a trigger which will fire before insert or update on mobile number having length less than or greater than10. (Raise user defined exception and give appropriate message)
SQL> Set serveroutput on
SQL> Create or replace trigger t5 before insert or update on cust
2 for each row
3 begin
4 if(:new. mbno <=10) then
5 raise_application_error(-20001, mbno >10');
6 end if;
7 end;
8 /
0 Comments