Latihan PostgreSQL - 1

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 4

Soal No 1

---------

Buat fungsi rekursif JUMLAH(n) untuk menghitung jumlah


bilangan 1,2,3,4,...,n

create or replace function jumlah (int4) returns int4 as $$


begin
if ( $1 = 1) then
return 1;
else
return $1+jumlah($1-1);
end if;
end;
$$ language plpgsql;

select jumlah(4);

Soal 2
------

Buat fungsi JUMLAHLAHIR(kota) untuk mendapatkan


jumlah mahasiswa yang lahir di kota tsb.

create function jumlahlahir (text)


returns int4 AS $$
declare
hasil int;
begin
select count (*) into hasil from mhs where tmplhr =$1;
return (hasil);
end;
$$ language plpgsql;

create table mhs (


nrp char (10)not null,
tmplhr char (10),
primary key (nrp)
);
select*from mhs;

insert into mhs values ('5206057','sby');


insert into mhs values ('5206037','kaltim');
select jumlahlahir('sby');

create or replace function jumlahlhr(text) returns void as $$


begin
select count (*) from mhs where tmplhr =$1;
end;
$$ language plpgsql;

select jumlahlhr('sby');
ERROR: query has no destination for result data

Soal 3
------

Buat prosedur untuk menhitung jumlah SKS ambil dan


rata-rata nilai. Hasil disimpan ke tabel
MHS(nrp, sksambil, reratanilai)

Tabel yang digunakan :


FRS(kodekul, nrp, nilaiangka)
MATKUL(kodekul, sks)

create table FRS(


kodekul char(3),
nrp char(10),
nilaiangka int
);

create table MATKUL(


kodekul char(3),
sks int,
primary key(kodekul)
);

alter table mhs add SKSambil int;


alter table mhs add reratanilai int;

select * from mhs

insert into MATKUL values('A35',3);


insert into MATKUL values('A45',4);
insert into MATKUL values('A55',3);

insert into FRS values('A35','5206057',80);


insert into FRS values('A35','5206037',85);
insert into FRS values('A45','5206057',70);
insert into FRS values('A55','5206057',78);

-- nrp 5206057 sksambil 10, rata nilai (80*3+70*4+78*3)/10 --


create or replace function hitungnilai(text)
returns void as $$
declare
jumsks int4;
ratanilai int4;
rekord record;
begin
jumsks := 0;
ratanilai :=0;
For rekord IN select * from FRS, MATKUL
where FRS.kodekul=MATKUL.kodekul and FRS.nrp = $1
LOOP
jumsks := jumsks + rekord.sks;
ratanilai := ratanilai + (rekord.nilaiangka*rekord.sks);
end LOOP;
ratanilai := ratanilai/jumsks;
delete from mhs where nrp = $1;
insert into mhs values ($1,'',jumsks,ratanilai);
end;
$$ language plpgsql;

select hitungnilai('5206057');
select * from mhs;

SELECT (80*3+70*4+78*3)/10;

create or replace function hitungnil(text)


returns void as $$
declare
jumsks int4;
ratanilai int4;
cari int;
rekord record;
begin
jumsks := 0;
ratanilai :=0;

select SUM(MATKUL.SKS) INTO jumsks from FRS, MATKUL


where FRS.kodekul=MATKUL.kodekul and FRS.nrp = $1;

select sum(FRS.nilaiangka*MATKUl.sks)/sum(MATKUL.sks) INTO ratanilai


from FRS, MATKUL
where FRS.kodekul=MATKUL.kodekul and FRS.nrp = $1;

select count(*) into cari from mhs where nrp=$1;


if (not found) then
insert into mhs values ($1,'',jumsks,ratanilai);
else
update mhs set SKSambil = jumsks, reratanilai=ratanilai
where nrp=$1;
end if;

end;
$$ language plpgsql;

select * from mhs;

select hitungnil('5206037')

You might also like