PL/SQL Subprograms
8.13.1. Batasan-batasan Overloading
Hanya subprogram-subprogram lokal atau terpaket, atau type methods, yang dapat di-overload-kan. Dengan demikian, kita tidak dapat meng-overload-kan standalone subprograms. Kita juga tidak dapat meng-overload-kan dua subprogram jika parameter-parameter formal mereka hanya berbeda dalam nama atau mode. Sebagai contoh, kita tidak dapat meng-overload-kan dua procedure berikut ini:
DECLARE ... PROCEDURE reconcile (acct_no IN INTEGER) IS BEGIN ... END; PROCEDURE reconcile (acct_no OUT INTEGER) IS BEGIN ... END;
Kita tidak dapat meng-overload-kan dua subprogram jika parameter-parameter formal mereka hanya berbeda dalam tipe data dan tipe-tipe data berbeda tersebut berada di dalam keluarga yang sama. Sebagai contoh, kita tidak dapat meng-overload-kan procedures berikut ini karena tipe data INTERGER dan REAL berada di dalam keluarga yang sama:
DECLARE ... PROCEDURE charge_back (amount INTEGER) IS BEGIN ... END; PROCEDURE charge_back (amount REAL) IS BEGIN ... END;
Demikian juga, kita tidak dapat meng-overload-kan dua subprogram jika parameter-parameter formal mereka berbeda hanya dalam subtype dan subtype-subtype yang berbeda tersebut berbasis pada type-type di dalam keluarga yang sama. Sebagai contoh, kita tidak dapat meng-overload-kan procedures berikut ini karena basis tipe CHAR dan LOG berada dalam satu keluarga:
DECLARE SUBTYPE Delimiter IS CHAR; SUBTYPE Text IS LONG; ... PROCEDURE scan (x Delimiter) IS BEGIN ... END; PROCEDURE scan (x Text) IS BEGIN ... END;
Akhirnya kita tidak dapat meng-overload-kan dua functions yang berbeda hanya dalam tipe hasil (tipe data dari nilai yang dihasilkan) bahkan jika tipe-tipe tersebut berada dalam keluarga yang berbeda. Sebagai contoh, kita tidak dapat meng-overload-kan functions berikut ini:
DECLARE ... FUNCTION acct_ok (acct_id INTEGER) RETURN BOOLEAN IS BEGIN ... END; FUNCTION acct_ok (acct_id INTEGER) RETURN INTEGER IS BEGIN ... END;
8.14. Bagaimana Pemanggilan Subprogram Ditetapkan
Gambar 8-1 menunjukkan bagaimana PL/SQL compiler menetapkan pemanggilan-pemanggilan subprogram. Ketika compiler bertemu sebuah pemanggilan procedure atau function, ia berusaha menemukan sebuah deklarasi yang sesuai dengan pemanggilan tersebut. Compiler mencari pertama kali di dalam scope terkini dan kemudian, jika diperlukan, di dalam enclosing scopes secara berturut-turut. Compiler berhenti mencari jika ia menemukan satu atau lebih deklarasi subprogram dimana nama subprogram sesuai dengan nama dari pemanggilan subprogram.
Untuk menetapkan sebuah pemanggilan diantara kemungkinan adanya nama subprogram yang mirip pada level yang sama dari sebuah scope, compiler harus menemukan yang benar-benar tepat diantara parameter-parameter aktual dan formalnya. Yaitu, mereka harus tepat dalam jumlah, urutan, dan tipe data (kecuali beberapa parameter-parameter formal diberikan nilai-nilai default). Jika tidak menemukan kesesuaian atau jika menemukan lebih dari satu yang sesuai, compiler membangkitkan sebuah semantic error.
Dalam contoh berikut ini, kita memanggil enclosing procedure swap dari dalam function reconcile. Namun, compiler membangkitkan error karena tidak ada deklarasi dari swap di dalam scope terkini yang sesuai dengan pemanggilan procedure:
PROCEDURE swap (n1 NUMBER, n2 NUMBER) IS num1 NUMBER; num2 NUMBER; FUNCTION balance (...) RETURN REAL IS PROCEDURE swap (d1 DATE, d2 DATE) IS BEGIN ... END; PROCEDURE swap (b1 BOOLEAN, b2 BOOLEAN) IS BEGIN ... END; BEGIN ... swap(num1, num2); RETURN ... END balance; BEGIN ... END;

Gambar 8-1 Bagaimana PL/SQL Compiler Menetapkan Pemanggilan
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, Uranus dsb. |


































