CREATE OR REPLACE PROCEDURE procedure_name
(parameter1 mode1 datatype1,
parameter2 mode2 datatype2,. . .)
IS
Daftar variabel lokal jika ada
BEGIN
…
END;
/
Note:
Tidak wajib ada, sesuaikan dengan kebutuhan
Daftar parameter tidak wajib ada, sesuaikan dengan kubutuhan
Pilihan mode: IN atau OUT atau IN OUT, defaultnya adalah IN
Selain IS boleh juga pake AS.
CONTOH dengan Parameter:
create or replace procedure proc1 (x in number)
is
BEGIN
FOR i in reverse 1..x LOOP
If mod(i,2) = 1 then
DBMS_OUTPUT.PUT_LINE( 'Tes' || i );
exit when x = 1;
End if;
End loop;
END;
/
exec proc1 (5);output: tes 5
tes 3
tes 1
CONTOH tanpa Parameter:
CREATE OR REPLACE PROCEDURE add_dept IS
dept_id departments.department_id%TYPE;
dept_name departments.department_name%TYPE;
BEGIN
dept_id:=280;
dept_name:='ST-Curriculum';
INSERT INTO departments (department_id,department_name)
VALUES(dept_id,dept_name);
DBMS_OUTPUT.PUT_LINE(' Berhasil menginsert'||
SQL%ROWCOUNT ||' baris ');
END;
/
exec add_dept(...);
SYSNTAX FUNCTION
CREATE OR REPLACE FUNCTION function_name
(argument1 mode1 datatype1,
argument2 mode2 datatype2,
. . .) RETURN datatype
IS
Daftar variabel lokal jika ada
BEGIN
…
RETURN …. ;
END;
/
Note:
Tidak wajib ada, sesuaikan dengan kebutuhan
Daftar argumen tidak wajib ada, sesuaikan dengan kubutuhan
Pilihan mode: IN atau OUT atau IN OUT, defaultnya adalah IN
Selain IS boleh juga pake AS .
CONTOH Function:
create or replace function bilangan(x in number) return varchar is
begin
if (x>0) and (x mod 2 = 1) then
return 'ini angka ganjil positif';
elsif (x>0) and (x mod 2 = 0) then
return 'ini angka genap positif';
elsif (x<0) then
return 'ini angka negatif';
elsif (x=0) then
return 'ini angka nol';
end if;
end;
/
select bilangan(25) from dual;
(inputan angka 25 bisa diganti inputan angka yang lain)
output ganjil positif;
Contoh dengan Parameter:
CREATE OR REPLACE FUNCTION check_sal(empno employees.employee_id%TYPE)
RETURN Varchar IS
dept_id employees.department_id%TYPE;
sal employees.salary%TYPE;
avg_sal employees.salary%TYPE;
BEGIN
SELECT salary,department_id INTO sal,dept_id
FROM employees WHERE employee_id=empno;
SELECT avg(salary) INTO avg_sal FROM employees
WHERE department_id=dept_id;
IF sal > avg_sal THEN
RETURN 'Gaji Di Atas Rata-Rata';
ELSE
RETURN 'Gaji Di Bawah Rata-Rata';
END IF;
EXCEPTION
WHEN no_data_found THEN
RETURN 'ID Karyawan tidak ditemukan';
END;
/
Tag yang berhubungan : DML-data manipulation language


Tidak ada komentar:
Posting Komentar