Menentukan Variable Saat Runtime

Hingga sejauh ini, report yang kita hasilkan melalui berbagai macam jenis query yang telah kita pelajari sebelumnya, sama sekali tidak interaktif. Pengguna menjalankan report tanpa ada pertanyaan mengenai data yang akan ditampilkan. Data yang akan dilaporkan ditentukan telah ditentukan sejak awal pada klausa WHERE yang tetap pada script SQL*Plus. Namun, SQL*Plus memungkinkan kita untuk menciptakan report yang mampu menanyakan kepada user agar memberikan nilai yang mereka inginkan untuk membatasi data-data yang akan ditampilkan.

Report Interaktif

Untuk menciptakan report yang interaktif, kita dapat melekatkan substitution variable di dalam command file atau perintah SQL tunggal. Variable dapat dianggap sebagai tempat menyimpan nilai sementara.

7.1. Substitution Variables

Dalam SQL*Plus, kita dapat menggunakan single ampersand substitution variable (&) untuk menyimpan nilai secara sementara.

Kita dapat menentukan variables dalam SQL*Plus dengan menggunakan perintah-perintah ACCEPT atau DEFINE. ACCEPT membaca baris yang diinputkan user dan menyimpannya didalam variable. DEFINE menciptakan dan menempatkan nilai ke dalam variable.

Contoh Jangkauan Data Terbatas

Efek-efek Interaktif Lain

Efek-efek interaktif tidak dibatasi kepada interaksi user secara langsung didalam klausa WHERE. Prinsip yang sama dapat digunakan untuk mendapatkan hasil yang lain, sebagai contoh:

SQL*Plus tidak mendukung cek validasi terhadap input user. Pastikan bahwa permintaan nilai kepada user yang anda tulis sederhana dan tidak rancu.

7.2. Single Ampersand Substitution Variables

Ketika menjalankan report, user seringkali ingin membatasi data yang dihasilkan secara dinamis. SQL*Plus menyediakan fleksibilitas dengan menggunakan user variables. Gunakan single ampersand (&) untuk mengidentifikasi setiap variable didalam SQL statement. Kita tidak perlu mendefinisikan nilai dari setiap variable.

&user_variable: Mengindikasikan variable didalam SQL statement; jika variable tidak ada, SQL*Plus akan meminta user menginputkan nilainya. SQL*Plus membuang variable baru sekali ia telah digunakan

Contoh:

Menciptakan statement untuk meminta user mengisikan nilai kode department saat runtime. Report akan berisi kode, nama dan gaji karyawan.

SELECT id, last_name, salary
FROM employee
WHERE dept_id = &department_number;

Dengan single ampersand, user akan ditanya setiap kali perintah dieksekusi.

SET VERIFY Command

Untuk mengkonfirmasi perubahan pada SQL statement, gunakan perintah SET VERIFY. Mengeset SET VERIFY menjadi ON akan memaksa SQL*Plus untuk menampilkan teks dari perintah sebelumnya dan setelah ia mengganti substitution variable dengan sebuah nilai.

7.2.1. Menentukan Nilai Karakter dan Tanggal dengan Substitution Variables

Kita harus ingat bahwa didalam klausa WHERE, nilai bertipe character dan date harus ditutup dengan tanda petik tunggal. Aturan yang sama juga berlaku untuk substitution variables.

Untuk menghindari mengetik tanda petik tunggal pada saat runtime, tutup variable dengan tanda petik tunggal pada SQL statement itu sendiri.

Contoh:

Tuliskan query untuk menampilkan kode, nama, dan gaji karyawan berdasarkan jabatan yang diinputkan oleh user.

SELECT id, last_name, salary
FROM employee
WHERE title = ‘&job_title’;

Enter value for job_title: Stock Clerk

7.2.2. Menentukan Nama Kolom, Ekspresi, dan Teks saat Runtime

Kita tidak hanya dapat menggunakan substitution variables didalam klausa WHERE pada SQL statement, namun variable-variable ini juga dapat digunakan untuk menggantikan nama kolom, ekspresi dan teks.

Contoh:

Menampilkan kode, dan kolom-kolom lainnya, dan kondisi tertentu dari sebuah penjualan. Cobalah beberapa variasi dari nama kolom dan kondisi untuk mempelajari hasilnya.

SELECT id, &column_name
FROM orders
WHERE &condition;

Enter value for column_name: total
Enter value for condition: payment_type=’CASH’

SELECT id, &column_name
FROM orders
WHERE &condition;

Enter value for column_name: date_ordered
Enter value for condition: total > 300000

Jika kita tidak menginputkan nilai untuk substitution variable, maka kita akan menerima pesan kesalahan ketika kita mengeksekusi perintah diatas.

7.3. Mendefinisikan User Variables

Kita dapat mendefinisikan user variables sebelum mengeksekusi perintah SELECT. SQL*Plus menyediakan dua perintah untuk mendefinisikan dan mengeset user variables. DEFINE dan ACCEPT.

Perintah Deskripsi
DEFINE variable=value Menciptakan user variable bertipe data CHAR dan memberikan nilai kepadanya
DEFINE variable Menampilkan variable, nilai, dan tipe datanya
DEFINE Menampilkan seluruh user variables beserta nilai dan tipe datanya
ACCEPT Membaca baris yang diinputkan user dan meyimpannya kedalam variable

Sintaks

ACCEPT variable [datatype] [FORMAT][PROMPT text][HIDE]

dimana:
variable nama variable yang menyimpan nilai. Jika tidak ada, SQL*Plus akan menciptakannya.
datatype tipe data NUMBER, CHAR, atau DATE. CHAR memiliki nilai maksimum 240 bytes. DATE mengecek format model, dan tipe datanya adalah CHAR.
FOR[MAT] menentukan format model, sebagai contoh A10 atau 9.999
PROMPT text text menampilkan text sebelum user menginputkan sebuah nilai
HIDE menyembunyikan apa yang diinputkan user, sebagai contoh password

Catatan

Jangan mengawali SQL*Plus substitution parameter dengan ampersand (&) ketika mereferensikan substitution parameter didalam perintah ACCEPT.

Aturan

  • Memberikan prompt yang dapat diatur ketika menerima input dari user. Jika tidak, maka kita akan melihat prompt default “Enter the value for variable.”
  • Secara eksplisit definisikan variable bertipe data NUMBER dan DATE
  • Sembunyikan input user untuk alasan keamanan

Contoh:

Menampilkan kode dan nama daerah untuk nama departemen tertentu. Ciptakan file skrip dengan nama 17prompt.sql, dan gunakan perintah ACCEPT untuk menanyakan user dengan pesan yang kita atur sendiri.

SET ECHO OFF
ACCEPT p_dname PROMPT ‘Provide the department name: ‘
SELECT d.name, r.id, r.name “REGION NAME”
FROM department, region
WHERE d.region_id = r.id
AND UPPER(d.name) LIKE UPPER (‘%p_dname%’)
/
SET ECHO ON

START 17prompt
Provide the department name: sales

SET ECHO Command

Variable ECHO mengontrol apakah perintah-perintah START dan @ akan menampilkan setiap perintah di dalam command file setiap perintah dieksekusi. Mengeset variable ECHO menjadi ON menampilkan perintah, dan mengesetnya menjadi OFF menghilangkannya.

Variable dedefinisikan hingga kita:

Ketika kita melakukan undefine terhadap variable, kita dapat memverifikasi perubahannya dengan perintah DEFINE. Ketika kita keluar dari SQL*Plus, variable yang telah didefinisikan selama session tersebut akan hilang. Untuk mendefinisikan variable-variable tersebut untuk setiap session, kita dapat mengubah file login.sql sehingga variable-variable tersebut akan diciptakan saat startup.

Contoh:

Menciptakan variable yang menyimpan nama departemen. Menampilkan nama departemen sesuai nilai yang telah diberikan terhadap variable.

DEFINE dname = sales
DEFINE dname
SELECT name
FROM department
WHERE lower(name) = ‘&dname’;
UNDEFINE dname
DEFINE dname

7.3.1. Melewatkan Nilai Ke Dalam File Script

Sebuah parameter merupakan nilai yang dapat kita lewatkan ke dalam report melalui command line. Untuk menciptakan dan menjalankan report yang memiliki parameter, kita dapat mengikuti langkah-langkah berikut ini:

  1. Kita ciptakan file script yang berisi SQL statement
  2. Pada SELECT statement, kita gunakan notasi &number pada setiap variable yang diacu
  3. Pada saat menjalankan script, sebutkan nama file. Gunakan spasi untuk memisahkan nilai

Contoh:

Ciptakan file script dengan nama 17param.sql, untuk menghasilkan report berdasarkan jabatan karyawan. Dibandingkan harus menanyakan jabatan melalui prompt, kita dapat menginputkan jabatan dalam command line ketika kita memanggil file script tersebut.

SET ECHO OFF
SELECT id, last_name, salary
FROM employee
WHERE title = ‘&’
/
SET ECHO ON
START 17param President

Aturan

Oracle MagazineOracle Magazine contains technology strategy articles, sample code, tips, Oracle and partner news, how to articles for developers and DBAs, and more. Oracle (NASDAQ: ORCL) is the world’s largest enterprise software company.

For more information about Oracle, please visit their Web site at http://www.oracle.com. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.

Get Free Oracle Magazine

7.4. Latihan

1. Tampilkan kode, nama belakang dan gaji bulanan pegawai yang bekerja pada departemen tertentu, dengan catatan kode departemen tempat pegawai tersebut bekerja diinputkan secara interaktif melalui keyboard.

SELECT id, last_name, salary
FROM employee
WHERE dept_id = &department_number;

2. Tampilkan kode dan kolom lainnya dari data order, dengan catatan query tersebut dapat ditampilkan dengan kolom lain dan kondisi sesuai keinginan kita secara interaktif melalui keyboard. Setelah itu coba Anda tampilkan kolom kode dan total order khusus untuk order dengan tipe pembayaran CASH dengan menggunakan query yang baru saja Anda buat tersebut. Coba sekali lagi tampilkan kolom kode dan tanggal order khusus untuk order dengan total lebih besar dari 30000.

SELECT id, &column_name
FROM orders
WHERE &condition;

3. Ketikkan script berikut melalui edit buffer.

SET ECHO OFF
ACCEPT p_dname PROMPT ‘Provide the department name : ‘
SELECT d.name, r.id, r.name “REGION NAME”
FROM department d, region r
WHERE d.region_id = r.id
AND UPPER(d.name) LIKE UPPER(’%&p_dname%’)
/
SET ECHO ON

Setelah selesai keluar dari edit buffer, kemudian simpan script tersebut dengan nama MYSCRIPT.SQL melalui SQL prompt dengan perintah :

SAVE FIRSTSCRIPT;

Kemudian jalankan script yang telah Anda buat tersebut dengan perintah :

START FIRSTSCRIPT;    atau   @ FIRSTSCRIPT;

4. Ketikkan dan amatilah urutan perintah-perintah berikut.

DEFINE dname = sales
DEFINE dname

SELECT name
FROM department
WHERE lower(name) = ‘&dname’;

UNDEFINE dname
DEFINE dname

5. Ketikkan script berikut melalui edit buffer.

SET ECHO OFF
SELECT id, last_name, salary
FROM employee
WHERE title = ‘&1′
/
SET ECHO ON

Setelah selesai keluar dari edit buffer, kemudian simpan script tersebut dengan nama MYSCRIPT.SQL melalui SQL prompt dengan perintah :

SAVE SECONDSCRIPT;

Kemudian jalankan script yang telah Anda buat tersebut dengan perintah :

START SECONDSCRIPT President

6. Buatlah sebuah script dengan nama THIRDSCRIPT.SQL untuk menampilkan kode pengguna, gabungan nama depan dan nama belakang, dan tanggal pegawai mulai bekerja, untuk pegawai yang mulai bekerja pada range tanggal tertentu dengan catatan range tanggal tersebut diinputkan secara interaktif dari keyboard dengan pertanyaan:

Enter the low date range (DD/MM/YY)     : 09/01/91
Enter the hight date range (DD/MM/YY)    : 09/01/92

SET ECHO OFF
ACCEPT lowdate  PROMPT ‘Enter the low date range (MM/DD/YY)  : ‘
ACCEPT highdate PROMPT ‘Enter the high date range (MM/DD/YY) : ‘
SELECT userid, concat(first_name, last_name) EMPLOYEE, start_date
FROM employee
WHERE start_date BETWEEN TO_DATE(’&lowdate’,'MM/DD/YY’)
AND  TO_DATE(’&highdate’,'MM/DD/YY’)
/ SET ECHO ON

7. Buatlah sebuah script dengan nama FOURTHSCRIPT.SQL untuk menampilkan kode dan nama pelanggan dengan kondisi sesuai nama pelanggan yang diinputkan secara interaktif melalui keyboard, dengan catatan bahwa kondisi tersebut dapat menerima berbagai jenis huruf (case-insensitive), atau kata tertentu yang terdapat pada nama pelanggan tersebut.

SET ECHO OFF
ACCEPT custname PROMPT ‘Please enter the customer’’s name : ‘
SELECT id, name “CUSTOMER NAME”
FROM customer
WHERE LOWER(name) LIKE LOWER(’%&custname’)
/
SET ECHO ON

8. Buatlah sebuah script dengan nama FIFTHSCRIPT.SQL untuk menampilkan gabungan nama depan dan nama belakang sales representative, nama pelanggan dan total order untuk setiap pelanggan tersebut khusus untuk pelanggan yang tinggal pada daerah tertentu.

SET ECHO OFF
COLUMN total FORMAT $999,999,999
COLUMN employee FORMAT A30
COLUMN customer FORMAT A30
ACCEPT regionid PROMPT ‘Please enter a region number : ‘
SELECT CONCAT(e.first_name, e.last_name) EMPLOYEE, c.name CUSTOMER, o.total SALES
FROM employee e, department d, customer c, orders o
WHERE e.id = c.sales_rep_id AND o.customer_id = c.id
AND e.dept_id = d.id AND d.region_id = ®ionid
/
SET ECHO ON

Silahkan melanjutkan membaca pembahasan Data Modelling dan Database Design

Catatan:
Untuk mempraktekkan artikel-artikel mengenai Oracle SQL & PL/SQL Anda dapat mendownload script table disini, lalu jalankan sesuai live demo (browser Anda harus mendukung Flash Player).

 

 

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

No comments yet.

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