4.5.4. USERENV(option)
Fungsi USERENV() digunakan untuk menampilkan environment pengguna. Perhatikan
contoh berikut ini:
SELECT USERENV(’LANGUAGE’) “Language”, USERENV(’TERMINAL’) “Terminal”
FROM dual;
Termina
Language
l
AMERICAN_AMER HASTI
ICA.WE8MSWIN12 NAPUR
52 A
4.5.5. VSIZE()
Fungsi VSIZE(expr) digunakan untuk menampilkan jumlah byte dalam representasi internal
dari expr.
SELECT last_name “Name”, VSIZE(last_name) “Bytes”
FROM employee;
Name Bytes
Velasquez 9
Ngao 4
Nagayama 8
Interpretasi Tanggal
Kita perlu berhati-hati jika bekerja dengan data bertipe tanggal, karena Oracle
menginterpretasikan tahun sesuai dengan tahun pada tanggal sistem.
Tahun
Data Interpretasi
Sistem
01-OCT-01 >=2000 01-OCT-2001
01-OCT-01 < 2000 01-OCT-1901
Perhatikan contoh berikut:
CREATE TABLE tanggal( tanggal DATE );
Pastikan berapa sesungguhnya tahun sistem sekarang dengan menggunakan fungsi
TO_CHAR. Kemudian satu data ke dalam tabel TANGGAL, tahun yang kita maksud disini
adalah 1974, bukan 2074.
INSERT INTO tanggal VALUES(‘01-OCT-74′);
SELECT TO_CHAR(TANGGAL,’DD-MON-YYYY’)
FROM coba;
TANGGAL
01-OCT-2074
Oracle menginterpretasikan tahun 74 yang kita inputkan menjadi 2074 bukannya 1974.
Mengapa demikian? Perhatikan kembali penjelasan pada tabel mengenai interpretasi tanggal.
Kita dapat menggunakan dua alternatif pemecahan untuk mengatasi permasalahan ini:
1. Mengubah tanggal sistem dari sistem operasi sehingga memiliki tahun < 2000 (tidak
disarankan)
2. Menggunakan fungsi TO_DATE
Pada dasarnya kita harus memberitahukan kepada Oracle dengan jelas berapa sesungguhnya
tahun yang kita maksud, 1974 atau 2074, agar data dapat diinterpretasikan dengan benar.
Perhatikan perintah insert yang sudah dimodifikasi berikut:
INSERT INTO tanggal VALUES(TO_DATE(‘01-OCT-1974′,’DD-MON-YYYY’);
SELECT TO_CHAR(TANGGAL,’DD-MON-YYYY’)
FROM tanggal;
TANGGAL
01-OCT-1974
Format Tanggal
SCC atau CC : Abad.
YYYY atau SYYYY : Tahun dalam empat digit.
YYY atau YY atau Y : Tiga, dua, atau satu digit terakhir dari tahun.
Y,YYY : Tahun dengan koma pada posisi tersebut.
SYEAR atau YEAR : Tahun dalam ejaan.
Q : Kwartal dari tahun.
MM : Bulan dalam dua digit.
MONTH : Bulan dalam ejaan.
MON : Bulan dalam ejaan tiga huruf.
RM : Bulan dalam angka romawi.
WW atau W : Minggu ke sekian dalam tahun yang bersangkutan, dalam dua atau satu digit.
DDD atau DD atau D : Hari ke sekian dalam tahun, bulan atau minggu yang bersangkutan.
DAY : Hari dalam ejaan.
DY : Hari dalam ejaan tiga huruf.
Format Waktu
AM atau PM (A.M. atau P.M.) : Indikator meridian.
HH atau HH12 atau HH24 : Jam kesekian dalam hari yang bersangkutan, jam(1 - 12), atau
jam (0 - 23)
MI : Menit (0 - 59).
SS : Detik (0 - 59).
SSSSS : Detik ke sekian setelah tengah malam (0 - 86399).
Format Lain
/ . , : Memisahkan hasil konversi sesuai tampilan yang diinginkan.
” of the ” : Menambahkan karakter string ke dalam tampilan hasil konversi.
Akhiran
TH : Menampilkan urutan nomor (contoh, DDTH untuk 4 TH).
SP : Nomor dalam ejaan (contoh, DDSP untuk FOUR)
SPTH atau THSP : Menampilkan urutan nomor dalam ejaan (contoh, DDSPTH untuk
FOURTH).
Format Angka
9 : Posisi numerik (jumlah angka 9 menunjukkan maksimal panjang data yang dapat
ditampilkan). Contoh 999999 untuk hasil 1234
0 : Menambahkan awalan 0. Contoh 099999 untuk hasil 01234
$ : Menambahkan awalan dollar. Contoh $999999 untuk hasil $1234
L : Menambahkan simbol local currency. Contoh L999999 untuk hasil L1234
. : Menambahkan titik pada posisi tertentu. Contoh 999999.99 untuk hasil 1234.00
, : Menambahkan koma pada posisi tertentu. Contoh 999,999 untuk hasil 1,234
MI : Menambahkan tanda negatif di sebelah kanan angka. Contoh 999999MI
untuk hasil 1234-
PR : Contoh 999999PR untuk hasil <1234>
EEEE : Notasi untuk operasi scientific. Contoh 99.999EEEE untuk hasil 1,234E+03
V : Mengalikan dengan 10 n kali (n menunjukkanjumlah angka 9 setelah V). Contoh
9999V99 untuk hasil 123400
B : Menampilkan nilai nol sebagai blank. Contoh B9999,99 untuk hasil 1234,00
4.6. Latihan
Tampilkan nama lengkap pegawai dengan huruf kecil, inisial pegawai dengan huruf depan
kapital, dan jabatan pegawai dengan huruf kapital, khusus untuk pegawai dengan jabatan vice
president. Tampilkan nama lengkap pegawai dengan judul VP, inisial pegawai dengan judul
USERID, dan jagatan pegawai dengan judul TITLE.
SELECT LOWER(first_name | | ‘ ‘ | | last_name) VP, INITCAP(userid) USERID,
UPPER(title) TITLE
FROM employee
WHERE title LIKE ‘VP%’;
Tampilkan nama depan dan nama belakang pegawai yang memiliki nama belakang PATEL.
SELECT first_name, last_name
FROM employee
WHERE UPPER(last_name) = ‘PATEL’;
Tampilkan nama dan negara pelanggan dengan nilai kredit GOOD. Tampilkan nama dan
negara pelanggan dalam satu kolom dipisahkan spasi, beri judul CUSTOMER.
SELECT CONCAT(name, country) CUSTOMER
FROM customer;
Tampilkan nama produk dan panjang dari nama produk tersebut untuk produk yang tiga
huruf pertamanya adalah “Ace”.
SELECT name, LENGTH(name)
FROM product
WHERE SUBSTR(name,1,3) = ‘Ace’;
Tampilkan nama produk dan panjang dari nama produk tersebut untuk produk yang tiga
huruf terakhirnya adalah “Bar”.
SELECT name, LENGTH(name)
FROM product
WHERE SUBSTR(name,-3) = ‘Bar’
Ketikkan perintah berikut ini dan amatilah hasilnya.
SELECT ROUND(45.923,2), ROUND(45.923,1), ROUND(45.923,0), ROUND(45.923,-1),
ROUND(45.923,-2)
FROM SYS. DUAL;
Ketikkan perintah berikut ini dan amatilah hasilnya.
SELECT TRUNC(45.923,2), TRUNC(45.923,1), TRUNC(45.923,0), TRUNC(45.923,-1),
TRUNC(45.923,-2)
FROM SYS. DUAL;
Tampilkan nama belakang, jabatan pegawai dan kode departemen dimana pegawai tersebut
bekerja khusus untuk pegawai yang bekerja pada departemen dengan kode genap.
SELECT last_name, title, dept_id
FROM employee
WHERE MOD(dept_id,2) = 0;
Tampilkan tanggal sistem.
SELECT sysdate
FROM sys.dual;
Tampilkan nama belakang dan masa kerja pegawai yang bekerja pada departemen dengan
kode 43, dengan ketentuan bahwa masa kerja adalah tanggal sejak pegawai tersebut bekerja
hingga sekarang. Tampilkan masa kerja tersebut dalam hitungan minggu dan beri judul
dengan WEEKS. Tampilkan urut berdasarkan nama belakang pegawai.
SELECT last_name, (SYSDATE - start_date) / 7 WEEKS
FROM employee
WHERE dept_id = 43;
Tampilkan kode pegawai, tanggal pegawai tersebut mulai bekerja, lama pegawai tersebut
bekerja hingga sekarang dalam hitungan bulan dengan judul TENURE, dan enam bulan
berikut sejak pegawai tersebut bekerja dengan judul REVIEW, khusus untuk pegawai dengan
masa kerja hingga sekarang lebih dari 100 bulan.
SELECT id, start_date, MONTHS_BETWEEN(SYSDATE, start_date)
TENURE, ADD_MONTHS(start_date,6) REVIEW
FROM employee
WHERE MONTHS_BETWEEN(SYSDATE, start_date) > 100;
Tampilkan kode pegawai, tanggal pegawai tersebut mulai bekerja, hari Jum’at pertama
setelah tanggal pegawai tersebut mulai bekerja, dan tanggal terakhir dari bulan pegawai
tersebut mulai bekerja, khusus untuk pegawai yang memiliki kode genap.
SELECT id, start_date, NEXT_DAY(start_date,’FRIDAY’), LAST_DAY(start_date)
FROM employee
WHERE MOD(id,2) = 0;
Ketikkan perintah berikut ini dan amatilah hasilnya.
SELECT id, start_date,ROUND(start_date,’MONTH’) RM, TRUNC(start_date,’MONTH’)
TM,ROUND(start_date,’YEAR’) RY, TRUNC(start_date,’YEAR’) TY
FROM employee
WHERE start_date LIKE ‘%91′;
Tampilkan nomor order dan tanggal order untuk semua order yang ditangani oleh sales
representative dengan kode 11. Tampilkan tanggal order dengan format MM/YY dan beri
judul ORDERED.
SELECT ID, TO_CHAR(date_ordered,’MM/YY’) ORDERED
FROM orders
WHERE sales_rep_id = 11;
Tampilkan nama belakang pegawai dan tanggal pegawai tersebut mulai bekerja. Untuk
tanggal pegawai mulai bekerja tampilkan dengan format sehingga akan tampak seperti 7 of
February 1991 dan beri judul HIREDATE.
COLUMN HIREDATE FORMAT A50
SELECT last_name, TO_CHAR(start_date,’fmDD “of” Month YYYY’)
HIREDATE
FROM employee
WHERE start_date LIKE ‘%91′;
Tampilkan kembali soal diatas dimana tanggal pegawai mulai bekerja akan tampak seperti
Sevententh of February 1991 08:00:00 AM dan beri judul HIREDATE.
SELECT last_name, TO_CHAR(start_date,’fmDdspth “of” Month YYYY
fmHH:MI:SS AM’) HIREDATE
FROM employee
WHERE start_date LIKE ‘%91′;
Tampilkan pesan yang mengindikasikan nomor dan total order, khusus untuk order yang
dikirimkan pada tanggal 21 September 1992. Tampilkan dengan judul NOTE.
SELECT ‘Order ‘ | | TO_CHAR(id) | | ‘ was filled for a total of ‘ | |
TO_CHAR(total,’fm$99,999,999′) NOTE
FROM orders
WHERE date_shipped = ‘21-SEP-92′;
Tampilkan nomor, total dan tanggal untuk order dengan tanggal September 7, 1992.
Konversilah string tanggal pada soal ini menjadi format tanggal, sehingga dapat dilakukan
pencarian terhadap data yang dimaksud.
SELECT id, total, date_ordered
FROM orders
WHERE date_ordered = TO_DATE(’7 September 1992′,’dd Month YYYY’);
Tampilkan gabungan nama belakang dan jabatan pegawai dengan judul Vice President,
khusus untuk pegawai dengan jabatan vice president, dengan ketentuan nama belakang
ditampilkan dengan huruf kapital. Hilangkan karakter VP pada jabatan.
SELECT CONCAT(UPPER(last_name), SUBSTR(title,3)) “Vice President”
FROM employee
WHERE title LIKE ‘VP%’;
Tampilkan nama belakang dari pimpinan perusahaan, yaitu pegawai yang tidak memiliki
atasan, sehingga akan tampak seperti:
BOSS
——————————-
Velasquez has no manager
SELECT last_name | | ‘ ‘ | | ‘has no manager’ BOSS
FROM employee
WHERE manager_id IS NULL;
Tampilkan tanggal dari hari Jum’at enam bulan berikutnya setelah tanggal order. Hasilnya
akan tampak seperti : Friday, March 12th, 1993. Tampilkan dengan judul New 6 Month
Review, dan urutkan berdasarkan tanggal order.
SELECT TO_CHAR(NEXT_DAY(ADD_MONTHS(date_ordered,6), ‘FRIDAY’), ‘fmDay,
Month ddth, YYYY’) “New 6 Month Review”
FROM orders
ORDER BY date_ordered;
Tampilkan nama belakang dan jabatan pegawai, sehingga tampak seperti berikut:
EMPLOYEE
—————————————————————-
Biri(Warehouse Manager)
Catchpole(Warehouse Manager)
……………………
SELECT last_name | | ‘(’ | | title | | ‘)’ EMPLOYEE
FROM employee
ORDER BY last_name;
Tampilkan nama belakang pegawai, tanggal pegawai tersebut mulai bekerja, tanggal
peninjauan gaji pegawai yang merupakan hari Senin pertama setelah enam bulan seorang
pegawai bekerja. Tampilkan tanggal peninjauan gaji dengan judul REVIEW dan dengan
format seperti Eight of May 1992.
COLUMN REVIEW FORMAT A50
SELECT last_name,start_date, TO_CHAR(NEXT_DAY(ADD_MONTHS(start_date,6),
‘MONDAY’),’fmDdspth “of” Month YYYY’) REVIEW
FROM employee
ORDER BY start_date;
Tampilkan nama belakang pegawai, tanggal dan hari pegawai tersebut mulai bekerja.
COLUMN DAY FORMAT A10
SELECT last_name, start_date, TO_CHAR(start_date,’fmDAY’) DAY
FROM employee;
Tampilkan gabungan nama belakang, gaji bulanan, dan gaji impian pegawai dengan judul
Dream Salaries, dengan catatan nama belakang pegawai ditampilkan dalam huruf kapital,
sedangkan gaji bulanan dan gaji impian ditampilkan dalam format $99,999. Gunakan fungsi-
fungsi pada latihan-latihan sebelumnya, dan tampilkan hasil query tersebut dengan format:
<last_name> earns <salary> monthly but wants <3 * salary>
Contoh : ALLEN earns $1,100 monthly but wants $3,300.
SELECT upper(last_name) | | ‘ earns ‘ | | TO_CHAR(salary,’fm$9,999′) | |
‘ but wants ‘ | | TO_CHAR(salary*3,’fm$9,999′) “Dream Salaries”
FROM employee;