PL/SQL Subprograms

8.15.3. Apa itu Pipelined Table Functions?

Data disebut menjadi pipelined jika ia dikonsumsi oleh sebuah pemakai (transformation) segera setelah pembuat/producer (transformation) membuatnya, tanpa dtempatkan di dalam tables atau sebuah cache sebelum menjadi input untuk transformation berikutnya.

Pipelining memungkinkan sebuah table function menghasilkan baris-baris data secara lebih cepat dan dapat menekan jumlah memory yang dibutuhkan untuk meng-cache hasil-hasil dari sebuah table function.

Sebuah pipelined table function dapat menghasilkan kumpulan hasil dari table function di dalam subsets. Collection yang dihasilkan berlaku seperti sebuah aliran yang dapat di-fetch berdasarkan kebutuhan. Hal ini memungkinkan untuk menggunakan sebuah table function seperti halnya sebuah virtual table.

Pipelined table functions dapat diimplementasikan dalam dua cara:

Dalam sisa dari pembahasan kali ini, istilah table function digunakan untuk mereferensi kepada sebuah pipelined table function – yaitu, sebuah table function yang menghasilkan sebuah collection di dalam sebuah iterative, cara pipelined.

8.15.4. Menggunakan Pipelined Table Functions untuk Transformations

Sebuah pipelined table function dapat menerima suatu argumen yang biasa diterima oleh function-function pada umumnya. Sebuah table function dapat menerima sebuah REF CURSOR seperti halnya argumen dapat bertindak sebagai sebuah transformation function. Yaitu, ia dapat menggunakan REF CURSOR untuk melakukan fetch baris-baris data yang diinputkan, melakukan beberapa transformation terhadapnya, dan melakukan pipeline hasilnya keluar (baik dengan menggunakan pendekatan interface maupun native PL/SQL).

Sebagai contoh, kode berikut ini menguraikan secara terperinci deklarasi-deklarasi yang mendefinisikan function StockPivot. Function ini mengkonversi sebuah baris data dari type (Ticker, OpenPrice, ClosePrice) ke dalam dua baris data dengan bentuk (Ticker, PriceType, Price). Pemanggilan StockPivot untuk baris data (“ORCL”, 41, 42) menghasilkan dua baris data: (“ORCL”, “O”, 41) dan (“ORCL”, “C”, 42).
Input data untuk table function tersebut dapat berasal dari sebuah sumber seperti table StockTable:

CREATE TABLE StockTable (
ticker VARCHAR(4),
open_price NUMBER,
close_price NUMBER
);

Berikut ini adalah deklarasi-deklarasi tersebut. Silahkan melihat ”Mengembalikan Hasil-hasil dari Table Functions” untuk tubuh-tubuh function.

-- Menciptakan types untuk output collection dan
-- collection elements dari table function
CREATE TYPE TickerType AS OBJECT
(
ticker VARCHAR2(4),
PriceType VARCHAR2(1),
price NUMBER
);
CREATE TYPE TickerTypeSet AS TABLE OF TickerType;
-- Mendefinisikan the ref cursor type
CREATE PACKAGE refcur_pkg IS
TYPE refcur_t IS REF CURSOR RETURN StockTable%ROWTYPE;
END refcur_pkg;
/
-- Menciptakan table function
CREATE FUNCTION StockPivot(p refcur_pkg.refcur_t) RETURN TickerTypeSet
PIPELINED ... ;
/

Berikut ini adalah sebuah contoh dari query yang menggunakan table function StockPivot:

SELECT * FROM TABLE(StockPivot(CURSOR(SELECT * FROM StockTable)));

Dalam query diatas, pipelined table function StockPivot mengambil baris-baris data dari CURSOR subquery SELECT * FROM StockTable, melakukan transformasi, dan melakukan pipeline (menyalurkan) hasil-hasilnya kembali ke user sebagai sebuah table.

Function tersebut memproduksi output baris data (collection elements) untuk setiap input baris data.

Perlu diingat bahwa ketika sebuah CURSOR subquery dilewatkan dari SQL ke sebuah argumen function REF CURSOR seperti dalam contoh diatas, cursor yang direferensi telah terbuka ketika function mulai dieksekusi.

 

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