PL/SQL Subprograms

8.15. Menerima dan Mengembalikan Banyak Baris dengan Table Functions

Bagian ini mempelajari tentang table functions. Juga menjelaskan tentang tipe-tipe data generik ANYTYPE, ANYDATA, dan ANYDATASET, yang kemungkinan besar akan digunakan bersama dengan table functions.

Topik-topik utama yang akan kita bahas adalah:

8.15.1. Pengenalan Table Functions

Table functions adalah functions yang menghasilkan sebuah kumpulan baris data (baik sebuah nested table atau sebuah varray) yang dapat di-query seperti halnya database table atau diberikan kepada sebuah collection variable PL/SQL. Kita dapat menggunakan sebuah table function seperti nama dari sebuah database table, di dalam klausa FROM dari sebuah query, atau seperti sebuah kolom di dalam daftar SELECT dari sebuah query.

Sebuah table function dapat menerima sebuah kumpulan baris data sebagai input. Parameter pengumpul input dapat berupa sebuah collection type (seperti halnya sebuah VARRAY atau sebuah PL/SQL table) atau sebuah REF CURSOR.

Streaming, pipelining, dan parallel execution dari table functions dapat meningkatkan performa:

Gambar 8-2 menunjukkan skenario pemrosesan data yang biasa dilakukan dimana data berjalan melalui beberapa (dalam kasus ini, tiga) transformasi, diimplementasikan oleh table functions, sebelum pada akhirnya di-load ke dalam database. Dalam skenario ini, table functions tidak terparalel, dan seluruh hasil collection harus dikumpulkan dengan menggunakan sebuah table sementara setelah setiap transformasi.

Gambar 8-2 Pemrosesan Data Khas dengan Unparallelized, Unpipelined Table Functions

Secara kontras, Gambar 8-3 di bawah ini, menunjukkan bagaimana streaming dan parallel execution dapat mempersingkat skenario yang sama.

Gambar 8-3 Pemrosesan Data Menggunakan Pipelining dan Parallel Execution

8.15.2. Apa itu Table Functions?

Table functions menghasilkan kumpulan type instance yang merepresentasikan baris-baris data di dalam sebuah table. Mereka dapat di-query seperti halnya sebuah table dengan memanggil function tersebut di dalam klausa FROM pada sebuah query, diapit dengan keyword TABLE. Mereka dapat diberikan ke sebuah PL/SQL collection variable dengan memanggil function tersebut di dalam daftar SELECT pada sebuah query.

Contoh: Melakukan Query Terhadap Sebuah Table Function

Contoh berikut ini menunjukkan sebuah table function Get_Books yang menerima CLOB sebagai input dan menghasilkan sebuah instance dari collection type BookSet_t. Kolom CLOB menyimpan sebuah daftar katalog dari buku-buku di dalam beberapa format (baik proprietary ataupun mengikuti sebuah standard seperti sebagai XML). Table function menghasilkan seluruh katalog-katalog dan daftar-daftar bukunya yang terkait.

Collection type BookSet_t didefinisikan sebagai:

CREATE TYPE Book_t AS OBJECT
( name VARCHAR2(100), author VARCHAR2(30), abstract VARCHAR2(1000));
CREATE TYPE BookSet_t AS TABLE OF Book_t;

CLOBs disimpan di dalam sebuah table Catalogs:

CREATE TABLE Catalogs( name VARCHAR2(30), cat CLOB);

Function GetBooks didefinisikan sebagai berikut:

CREATE FUNCTION GetBooks(a CLOB) RETURN BookSet_t;

Query di bawah ini menghasilkan seluruh katalog-katalog dan daftar-daftar bukunya.

SELECT c.name, Book.name, Book.author, Book.abstract
FROM Catalogs c, TABLE(GetBooks(c.cat)) Book;

Contoh: Memberikan Hasil dari Sebuah Table Function

Contoh berikut ini menunjukkan bagaimana kita memberikan hasil dari sebuah table function kepada sebuah PL/SQL collection variable. Karena table function dipanggil dari daftar SELECT dari query, kita tidak memerlukan keyword TABLE.

create type numset_t as table of number;
/
create function f1(x number) return numset_t pipelined is
begin
  for i in 1..x loop
    pipe row(i);
  end loop;
  return;
end;
/
-- pipelined function dalam klausa from
select * from table(f1(3));
COLUMN_VALUE
------------
1
2
3

3 rows selected.
-- pipelined function dalam daftar select
select f1(3) from dual;
F1(3)
---------------------------------
NUMSET_T(1, 2, 3)
-- Karena function menghasilkan sebuah collection, kita dapat memberikan
-- hasilnya ke sebuah PL/SQL variable.
declare func_result numset_t;
begin
  select f1(3) into func_result from dual;
end;
/

 

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