0% found this document useful (0 votes)
31 views

PLSQL Exercises

The document demonstrates how to create and use various PL

Uploaded by

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

PLSQL Exercises

The document demonstrates how to create and use various PL

Uploaded by

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

--Íá äçìéïõñãçèåß ìéá function ðïõ èá Ý÷åé óáí ðáñÜìåôñï ôïí êùäéêü åíüò ÷ñÞóôç

--êáé èá õðïëïãßæåé ôï óýíïëï ôùí ùñþí ðïõ åñãÜóôçêå óå üëá ôï project


create function EmpHours (@id char(8)) returns decimal(3,1) as
begin
declare @hr decimal(3,1)
set @hr = (select isnull(sum(hours), 0) from works_on where emp_id = @id )
return @hr
end
----------------
declare @h decimal(3,1)
begin
exec @h=emphours 'G276548'
print convert(char(10), @h)
end
--Íá ãñÜøåôå Ýíá ìðëïê êþäéêá ðïõ èá åìöáíßæåé üëïõò ôïõò åñãáæüìåíïõò (êùäéêü, ðëÞñåò üíïìá).
-- Ãéá êÜèå åñãáæüìåíï èá ÷ñçóéìïðïéåß ôçí function EmpHours ãéá íá õðïëïãßóåé êáé åìöáíßóåé ôéò þñåò ðïõ åñãÜæåôáé
-- óôá projects
declare c1 cursor for
select emp_id, lastname + ' ' + firstname
from employee
declare @id char(8), @fullname char(30), @hours decimal(3,1)

begin
open c1
fetch c1 into @id, @fullname
while @@fetch_status = 0
begin
exec @hours = EmpHours @id
print @id + ' ' + @fullname + ' '+ convert(char(10), @hours)
fetch c1 into @id, @fullname
end
close c1
deallocate c1
end

--Íá äçìéïõñãçèåß ìéá procedure ShowDept ìå ðáñÜìåôñï ôïí êùäéêü åíüò ôìÞìáôïò (dnumber)
--êáé èá åìöáíßæåé ôï üíïìá ôìÞìáôïò, ôï ðëÞñåò üíïìá ôïõ ìáíáôæåñ êáé ôá
--ïíüìáôá ôùí project óôá ïðïßá óõììåôÝ÷åé.

create procedure ShowDept @dn int as


declare @dnm varchar(15), @mname varchar(30)
declare pr cursor for
select pname from project where dnumber=@dn
declare @pn varchar(30)

begin
select @dnm=d.dname, @mname=e.lastname+' '+e.firstname
from department d, employee e
where d.dnumber=e.dnumber
and d.dnumber = @dn
print @dnm + ' ' + @mname
print '--------------------'
open pr
fetch pr into @pn
while @@fetch_status = 0
begin
print @pn
fetch pr into @pn
end
close pr
deallocate pr
end

exec ShowDept 6
--procedure EmpSalray
--Íá õðïëïãéóôåß ôï ðëÞèïò ôùí projects ðïõ óõììåôÝ÷åé ï êÜèå åñãáæüìåíïò.
--Áí åßíáé ðÜíù áðü 2 ôüôå íá áõîÜíåôáé ï ìéóèüò ôïõ êáôÜ 2%
create procedure EmpSalary as
set nocount on
declare e1 cursor for
select emp_id, count(*)
from works_on
group by emp_id
declare @id char(8), @p1 int
begin

open e1
FETCH e1 INTO @id, @p1
WHILE @@FETCH_STATUS = 0 --Ýëåã÷ïò ãéá ôï ôÝëïò ôïõ cursor
Begin
print @id + convert(varchar(10),@p1)
if @p1>2
begin
update employee
set salary=1.02*salary
where emp_id=@id
print '------¸έãéíå áýîçóç óôïí' + @id
end
FETCH e1 INTO @id, @p1
End
CLOSE e1
DEALLOCATE e1
end

--exec EmpSalary

--Íá ãñáöåß ôìÞìá êþäéêá ðïõ èá åìöáíßæåé ôïí êùäéêü êáé ôï ïíïì/ìï ôïõ supervisor
--êáèþò êáé ôï ðëÞèïò ôùí õðáëëÞëùí ðïõ ðñïßóôáôáé
declare e1 cursor for
select e1.emp_id, e1.lastname+' ' +e1.firstname supname, count(*)
plithos_emp
from employee e1, employee e2
where e1.emp_id = e2.supervisor_id
group by e1.emp_id, e1.lastname+' ' +e1.firstname
declare @id char(8), @sn char(20), @pl int
begin
open e1
FETCH e1 INTO @id, @sn, @pl
WHILE @@FETCH_STATUS = 0 --Ýëåã÷ïò ãéá ôï ôÝëïò ôïõ cursor
Begin
print @id + ' ' + @sn + ' ' + convert(varchar(10), @pl)
FETCH e1 INTO @id, @sn, @pl
end
close e1
deallocate e1
end

Υπολογίζοντας τον μέσο μισθό όλων των εργαζομένων και όσο είναι κάτω από 900 να κάνετε συνολική
αύξηση μισθών κατά την τιμή της μεταβλητής @extra_money. Η ενέργεια θα επαναλαμβάνεται όσο ο
μέγιστος μισθός είναι πάνω από 3000.

Declare @extra_money money, @max_salary float


set @extra_money=100
WHILE (SELECT AVG(Salary) FROM employee) < 900
BEGIN
UPDATE employee
SET Salary = Salary + @extra_money
set @max_salary = (SELECT MAX(salary) FROM employee)
IF (@max_salary) > 3000
BREAK
ELSE
CONTINUE
END

You might also like