PL/SQL Subprograms

8.10.1. Trade-Off untuk Performa Lebih Baik dengan NOCOPY

NOCOPY mengijinkan kita untuk mendapatkan keuntungan dari semantik-semantik exception yang terdefinisi dengan baik untuk performa lebih baik. Penggunaannya mempengaruhi exception handling dengan cara-cara sebagai berikut:

Penggunaan NOCOPY meningkatkan kemungkinan pengaliasan parameter. Hal ini akan kita bahas dalam bab tersendiri.

8.10.2. Batasan-batasan NOCOPY

Dalam kasus-kasus berikut ini, PL/SQL compiler mengabaikan hint NOCOPY dan menggunakan metode pelewatan-parameter berdasarkan-nilai (tidak ada error yang dihasilkan):

8.11. Menggunakan Nilai-nilai Default untuk Parameter-parameter Subprogram

Seperti ditunjukkan oleh contoh di bawah ini, kita dapat menginisialiasai parameter-parameter IN ke nilai-nilai default. Dengan begitu, kita dapat melewatkan jumlah parameter-parameter aktual yang berbeda ke sebuah subprogram, menerima atau menolak nilai-nilai default sesuai yang kita kehendaki. Lebih jauh lagi, kita dapat menambahkan parameter-parameter formal baru tanpa harus mengubah setiap pemanggilan ke subprogram tersebut.

PROCEDURE create_dept (
new_dname VARCHAR2 DEFAULT 'TEMP',
new_loc VARCHAR2 DEFAULT 'TEMP') IS
BEGIN
  INSERT INTO dept
  VALUES (deptno_seq.NEXTVAL, new_dname, new_loc);
  ...
END;

Jika sebuah parameter aktual tidak dilewatkan, nilai default dari parameter formal terkaitnya yang akan digunakan. Mari kita perhatikan pemanggilan terhadap create_dept berikut ini:

create_dept;
create_dept('MARKETING');
create_dept('MARKETING', 'NEW YORK');

Pemanggilan pertama tidak melewatkan parameter-parameter aktual, sehingga kedua nilai default digunakan. Pemanggilan kedua melewatkan satu parameter aktual, sehingga nilai defualt untuk new_log digunakan. Pemanggilan ketiga melewatkan dua parameter-parameter aktual, sehingga tidak ada nilai default yang digunakan.

Biasanya, kita dapat menggunakan notasi posisi untuk menolak nilai default dari parameter-parameter formal. Namun, kita tidak dapat melompati sebuah parameter formal bendan meninggalkan parameter aktualnya. Sebagai contoh, pemanggilan berikut ini secara salah menghubungkan parameter aktual ‘NEW YORK’ dengan parameter formal new_dname:

create_dept('NEW YORK'); -- salah

Kita tidak dapat menyelesaikan masalah dengan meninggalkan sebuah placeholder untuk parameter aktual tersebut. Sebagai contoh, pemanggilan berikut ini tidak diperbolehkan:

create_dept(, 'NEW YORK'); -- tidak diperbolehkan

Dalam kasus seperti ini, kita harus menggunakan notasi bernama, seperti contoh berikut ini:

create_dept(new_loc => 'NEW YORK');

Kita juga tidak dapat memberikan sebuah null ke parameter formal tak terinisialisasi dengan meninggalkan parameter aktualnya. Sebagai contoh deklarasi berikut ini

DECLARE
FUNCTION gross_pay (
emp_id IN NUMBER,
st_hours IN NUMBER DEFAULT 40,
ot_hours IN NUMBER) RETURN REAL IS
BEGIN
  ...
END;

pemanggilan function berikut ini tidak memberikan sebuah null ke ot_hours:

IF gross_pay(emp_num) > max_pay THEN ... -- tidak diperbolehkan

Sebaliknya, kita harus melewatkan null tersebut secara eksplisit, seperti di dalam

IF gross_pay(emp_num, ot_hour => NULL) > max_pay THEN ...

atau kita dapat menginisialisasi ot_hours ke NULL, seperti berikut

ot_hours IN NUMBER DEFAULT NULL;

Akhirnya, ketika menciptakan sebuah stored procedure, kita tidak dapat mengunakan host variables (bind variables) di dalam klausa DEFAULT. Contoh SQL*Plus berikut ini menyebabkan sebuah error bad bind variable karena pada saat penciptaan, num hanya merupakan sebuah placeholder dimana nilainya dapat berubah:

SQL> VARIABLE num NUMBER
SQL> CREATE FUNCTION gross_pay (emp_id IN NUMBER DEFAULT :num, ...

 

Pages: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

 

Buku ini membahas berbagai macam tip dan trik yang sangat berguna bagi Anda pembaca pengguna database Oracle. Pemula, mahasiswa, programmer, maupun database administrator yang mengharapkan solusi cepat dalam menangani permasalahan-permasalahan dalam penggunaan database Oracle dapat membaca buku ini. Anda tidak harus membaca buku ini secara urut karena buku ini di susun berdasarkan topik permasalahan, dan Anda dapat membaca topik-topik yang sesuai dengan permasalahan yang Anda hadapi.
Dapat di beli di toko buku Gramedia, Gunung Agung, Uranus, Karisma dsb. Harga Rp. 24.800,- (157 halaman)

 

Related Articles

 

Comments

[…] PL/SQL Subprograms | Hastinapura […]

[…] Silahkan melanjutkan membaca pembahasan PL/SQL Subprograms […]

[…] Klausa AUTHID menentukan apakah seluruh subprogram-subprogram ter-package dijalankan dengan privileges dari definer (default) atau invoker-nya, dan apakah referensi tak terkualifikasi dari mereka terhadap schema objects ditetapkan di dalam schema dari definer atau invoker tersebut. Untuk informasi lebih, kita dapat membaca kembali pembahasan PL/SQL Subprograms. […]

[…] Dynamic SQLPL/SQL Object TypesPL/SQL PackagesPL/SQL SubprogramsInteraksi PL/SQL dengan […]

Leave a comment

(required)

(required)


*
To prove you're a person (not a spam script), type the security word shown in the picture. Click on the picture to hear an audio file of the word.
Click to hear an audio file of the anti-spam word