Showing posts with label Oracle. Show all posts
Showing posts with label Oracle. Show all posts

Tuesday, January 5, 2010

Dasar - dasar SQL


SQL (Structure Query Language)
*SQL merupakan transform-oriented language dengan 2 komponen utama: DDL & DML
*Mendefinisikan bahasa yang disebut Structured English Query Language (SEQUEL) Standar ISO untuk SQL, membuat bahasa formal & de facto untuk relasional database.

Sejarah SQL
1.IBM System R
2.ANSI SQL89
3.ANSI SQL92 (SQL2)
4.SQL3 – untuk manajemen data berorientasi objek.

Penulisan Perintah SQL
*Statement SQL terdiri dari reserved word & user-defined word.
*Bersifat case insensitive, kecuali untuk data literal karakter. Mudah dibaca dengan pengaturan spasi dan baris. Menggunakan bentuk notasi BNF.

Literal
*Literal merupakan konstanta yang digunakan dalam statemen SQL.
*Semua literal non-numerik dituliskan diantara kutip tunggal
(co : ‘London’).
*Semua literal numerik literals tidak dituliskan diantara kutip
(co : 650.00).

Membuat TABEL
Bentuk Umum :
CREATE TABLE nama tabel (…, kolom_nama type data, …);
Contoh :
CREATE TABLE STAFF (staffNo
VARCHAR(5), lName ARCHAR(15), salary
DECIMAL(7,2));

Menghapus TABEL
Bentuk Umum :
DROP TABLE nama_tabel;
Contoh :
DROP TABLE Staff;

STATEMENT SELECT
Syntax :
SELECT [DISTINCT | ALL]
{* | [columnExpression [AS newName]]
[,...] }
FROM TableName [alias] [, ...]
[WHERE condition]
[GROUP BY columnList]
[HAVING condition]
[ORDER BY columnList]

STATEMENT SELECT cont.
FROM – Menspesifikasikan tabel yang digunakan.
WHERE – Baris filter (kondisi yang harus dipenuhi).
GROUP BY – Bentuk pengelompokkan baris dengan nilai kolom yang sama.
HAVING – Menyeleksi subjek grup untuk beberapa kondisi.
SELECT – Menspesifikasikan kolom mana yang akan ditampilkan.
ORDER BY – Menspesifikasikan order pada output.

Tampilkan seluruh detail staff :
SELECT * FROM Staff;
atau
SELECT staffNo, fName, lName, address, position, sex, DOB, salary, branchNo FROM Staff;

Menggunakan Distinct
Tampikan nomor properti dari seluruh properti yang pernah dilihat.

SELECT DISTINCT propertyNo FROM Viewing;

SELECT…FROM…WHERE…;
Tampilkan seluruh staff yang mempunyai gaji lebih dari 10,000.

SELECT staffNo, fName, lName, position, salary FROM Staff WHERE
salary > 10000;

Perbandingan Gabungan Kondisi
Tampilkan alamat seluruh kantor cabang yang berada di London atau
Glasgow.

SELECT * FROM Branch WHERE city = ‘London’ OR city = ‘Glasgow’;

Ordering Kolom Tunggal
Tampilkan daftar gaji seluruh staf, disusun secara descending berdasarkan salary.

SELECT staffNo, fName, lName, salary FROM Staff ORDER BY salary DESC;

SELECT Statement – Aggregate
COUNT – Mengembalikan angka dari nilai yang terdapat dalam kolom.
SUM – Mengembalikan jumlah dari nilai yang terdapat dalam kolom
AVG – Mengembalikan rata-rata dari nilai yang ada dalam kolom
MIN – Mengembalikan nilai terkecil dari nilai yang terdapat dalam kolom
MAX – Mengembalikan nilai terbesar dari nilai yang terdapat dalam kolom

Kegunaan COUNT dan SUM
Tampilkan jumlah manager dan jumlah gaji mereka.

SELECT COUNT(staffNo) AS count, SUM(salary) AS sum FROM Staff WHERE position = ‘Manager’;

Kegunaan MIN, MAX, AVG
Carilah minimum, maximum, dan average gaji staff.

SELECT MIN(salary)
AS min, MAX(salary)
AS max, AVG(salary)
AS avg FROM Staff;

SELECT Statement – Grouping
Tampilkan nomor staff pada setiap cabang dan total gaji masing-masing.

SELECT branchNo, COUNT(staffNo) AS count, SUM(salary) AS sum FROM Staff GROUP BY branchNo ORDER BY branchNo;

Penggunaan INSERT
Syntax : INSERT INTO TableName
[ (columnList) ] VALUES (dataValueList);

Masukkan baris baru ke dalam tabel Staff untuk seluruh kolom
contoh:
INSERT INTO Staff VALUES (‘SG16’, ‘Alan’, ‘Brown’, ‘Assistant’, ‘M’, Date‘1957-05-25’, 8300, ‘B003’);

INSERT dengan Default
Masukkan baris baru ke dalam table staff untuk kolom-kolom tertentu.

INSERT INTO Staff (staffNo, fName, lName, position, salary, branchNo) VALUES (‘SG44’, ‘Anne’, ‘Jones’, ‘Assistant’, 8100, ‘B003’);
atau
INSERT INTO Staff VALUES (‘SG44’, ‘Anne’,
‘Jones’, ‘Assistant’, NULL, NULL, 8100, ‘B003’);

Penggunaan UPDATE
Syntax :
UPDATE TableName SET columnName1
= dataValue1 [, columnName2 =
dataValue2...] [WHERE searchCondition]

Berikan pada seluruh staff kenaikan sebesar 3%

UPDATE Staff SET salary = salary*1.03;

Penggunaan UPDATE cont.

Berikan seluruh manager kenaikan sebesar 5%

UPDATE Staff SET salary = salary*1.05
WHERE position = ‘Manager’;

Naikan jabatan David Ford (staffNo=‘SG14’) menjadi Manager dan ubah gajinya menjadi £18,000.

UPDATE Staff SET position = ‘Manager’,
salary = 18000 WHERE staffNo = ‘SG14’;

Penggunaan DELETE
Syntax :
DELETE FROM TableName [WHERE
searchCondition];

DELETE baris tertentu (Hapus seluruh viewings yang terkait dengan properti PG4)

DELETE FROM Viewing WHERE
propertyNo = ‘PG4’;

Penggunaan DELETE cont.
Hapus seluruh record dari tabel Viewing

DELETE FROM Viewing;

Pengelompokkan terbatas
HAVING clause Untuk setiap cabang dengan staff lebih dari 1, tampilkan nomor staff pada setiap cabang tersebut dan jumlah gaji mereka.

SELECT branchNo,
COUNT(staffNo) AS count,
SUM(salary) AS sum FROM
Staff GROUP BY branchNo
HAVING COUNT(staffNo) > 1
ORDER BY branchNo;

Sunday, August 12, 2007

Links Belajar Oracle


Bagi Yang ingin bergabung untuk belajar Oracle, bisa anda buka di Situsnya langsung di bawah ini:

1. indo-oracle.blogspot.com

2. indooracle.wordpress.com

Mudah - mudahan bermanfaat untuk anda semua

Sunday, July 22, 2007

Fungsi Terbilang untuk oracle dev


Fungsi terbilang, ex: -101 terbilangnya "minus seratus satu"

create or replace function ORACLE_TERBILANG(angka number) return varchar2 is

strJmlHuruf number;
terbilang varchar2(32767);
intPecahan varchar2(32767);
strPecahan varchar2(32767);
urai varchar2(32767);
sMinus varchar2(32767);
strTot varchar2(32767);
x varchar2(32767);
y integer;
z integer;
Bil1 varchar2(32767);
Bil2 varchar2(32767);
pNumber varchar2(32767);

begin

/*Cek Panjang input Angka*/
pNumber :=length(angka);

if substr(angka,1,1) <> '-' then
if 16 <= pNumber then terbilang := ''; return(terbilang); end if;
Else
if 17 <= pNumber then terbilang := ''; return(terbilang); end if;
End If;

/*Cek Awal NOL*/
If angka is Null or angka =0 Then terbilang := 'NOL';
return(terbilang);
End If;

strJmlHuruf := LTrim((angka)); intPecahan := 0;

/*Cek Awal Minus*/
If InStr(strJmlHuruf, '-') > 0 Then
sMinus := 'MINUS ';
terbilang := FC_Right(strJmlHuruf, length(strJmlHuruf) - 1);
strTot := terbilang; strJmlHuruf := terbilang;
End If;

/*Sementara Tdak ada pecahan :D*/
If (intPecahan = 0) Then strPecahan := ''; End If;

X := 0;
Y := 0;
Urai := '';

/*::::::::::::LOOP::::::::::::*/
While (X < length(strJmlHuruf)) Loop
X := X + 1;
strTot := FC_MID(strJmlHuruf, X, 1);
Y := Y + (strTot);
z := length(strJmlHuruf) - X + 1;

/*::::::::::::::::::::::::::Select Case Val(strTot)::::::::::::::::::::::::::*/
if (strTot) = 1 then

/*:::::::::::::::::::::::::::*/
If (z = 1 Or z = 7 Or z = 10 Or z = 13) Then Bil1 := 'SATU ';

ElsIf (z = 4) Then
If (X = 1) Then Bil1 := 'SE';
Else Bil1 := 'SATU ';
End If;

ElsIf (z = 2 Or z = 5 Or z = 8 Or z = 11 Or z = 14 ) Then
X := X + 1;
strTot := FC_Mid(strJmlHuruf, X, 1);
z := length(strJmlHuruf) - X + 1;
Bil2 := '';

if strTot = 0 then Bil1 := 'SEPULUH ';
ElsIf strTot = 1 then Bil1 := 'SEBELAS ';
ElsIf strTot = 2 then Bil1 := 'DUA BELAS ';
ElsIf strTot = 3 then Bil1 := 'TIGA BELAS ';
ElsIf strTot = 4 then Bil1 := 'EMPAT BELAS ';
ElsIf strTot = 5 then Bil1 := 'LIMA BELAS ';
ElsIf strTot = 6 then Bil1 := 'ENAM BELAS ';
ElsIf strTot = 7 then Bil1 := 'TUJUH BELAS ';
ElsIf strTot = 8 then Bil1 := 'DELAPAN BELAS ';
else Bil1 := 'SEMBILAN BELAS ';
end if;
else
Bil1 := 'SE';
end if;
/*:::::::::::::::::::::::::::*/

elsif strTot = 2 then Bil1 := 'DUA ';
elsif strTot = 3 then Bil1 := 'TIGA ';
elsif strTot = 4 then Bil1 := 'EMPAT ';
elsif strTot = 5 then Bil1 := 'LIMA ';
elsif strTot = 6 then Bil1 := 'ENAM ';
elsif strTot = 7 then Bil1 := 'TUJUH ';
elsif strTot = 8 then Bil1 := 'DELAPAN ';
elsif strTot = 9 then Bil1 := 'SEMBILAN ';
else Bil1 := '';
end if;
/*::::::::::::::::::::::::::END Select Case Val(strTot)::::::::::::::::::::::::::*/

If ((strTot) > 0) Then
If (z = 2 Or z = 5 Or z = 8 Or z = 11 Or z = 14) Then Bil2 := 'PULUH ';
ElsIf (z = 3 Or z = 6 Or z = 9 Or z = 12 Or z = 15) Then Bil2 := 'RATUS ';
Else Bil2 := '';
End If;
Else Bil2 := '';
End If;

If (Y > 0) Then
/*::::::Select Case z:::::::*/
if z = 4 then Bil2 := Bil2||'RIBU '; Y := 0;
elsif z = 7 then Bil2 := Bil2||'JUTA '; Y := 0;
elsif z = 10 then Bil2 := Bil2||'MILYAR '; Y := 0;
elsif z = 13 then Bil2 := Bil2||'TRILYUN ';Y := 0;
end if;
End If;

Urai := Urai||Bil1||Bil2;
end loop;
/*::::::::::::END LOOP::::::::::::*/

Urai := sMinus||Urai||strPecahan;
If (intPecahan = 0) Then
Terbilang := Urai||'RUPIAH ';
End If;
return(terbilang);

end ORACLE_TERBILANG;



CREATE OR REPLACE FUNCTION fC_RIGHT(CStr IN VARCHAR2, LEN IN INTEGER) RETURN VARCHAR2 IS
iRight VARCHAR2(32767);
BEGIN
IF ( len >= LENGTH(CStr) ) THEN
RETURN( CStr );
END IF;
iRight := SUBSTR(CStr, LENGTH(CStr) - LEN+1, len);
RETURN ( iRight );
END;


CREATE OR REPLACE FUNCTION FC_MID(CStr IN VARCHAR2, STR IN INTEGER, LEN IN NUMBER DEFAULT 32767) RETURN VARCHAR2 IS
iMID VARCHAR2(32767);
BEGIN
If ( STR > Length(CStr) ) Then
RETURN( NULL );
END IF;
iMID := SUBSTR( CStr, STR, len );
RETURN ( iMID );
END;

Thursday, June 21, 2007

oracle

Hallo Semuanya,

Pernahkah teman mengalami masa dimana aplikasi yang kita buat ketika
dijalankan pertama kali kecepatannya seperti kilat namun ternyata
setelah 3 atau 4 bulan semakin lelet. bahkan seperti keong?

Saya coba share beberapa tip agar kita dapat membuat database dengan
disain yang baik sehingga database yang kita buat bisa mengakomodasi
semua kebutuhan user tanpa mengorbankan performa dari database yang
di disain.

Ada beberapa hal yang perlu diketahui dalam melakukan desain sebuah
database:
1.Setiap database yang dibuat merupakan inherit (turunan) dari
database model. Ini berakibat pada setiap perubahan dari isi
database model akan berpengaruh pada database yang kita create.Kalau dalam database Oracle, selain Log dan Oradata ada juga yang biasa disebut dengan TableSpace. Setiap tabel yang kita buat, akan diassign ke suatu TableSpace. Table Space ini bisa kita buat sendiri atau secara default akan di create oleh system.
2.Untuk keperluan performa, Letak file database dengan letak
file log dari database sebisa mungkin di pisahkan secara fisik (file
MDF dan File LDF disimpan di partisi yang berbeda), contoh :

CREATE DATABASE [JunkDB]
ON PRIMARY
(NAME = N'JunkDBData',
FILENAME = N'C:\JunkDB.MDF',
SIZE = 10, -- kb, mb, gb, tb
FILEGROWTH = 10%, -- kb, mb, gb, tb or %
MAXSIZE = 15) -- kb, mb, gb, tb
LOG ON
(NAME = N'JunkDBLog',
FILENAME = N' D:\JunkDB_Log.LDF ',
SIZE = 10,
FILEGROWTH = 10%
MAXSIZE = UNLIMITED)

3.Default filegrowth adalah 10% dan Default MAXSIZE adalah
UNLIMITED. Untuk kemudahan dalam hal maintenance data hendaknya
lakukan perhitungan capacity planning sehingga didapat ukuran yang
tepat untuk menentukan ukuran database, filegrowth dan maxsize.
Kesalahan penentuan filegrowth akan sangat menggangu performa.

4.Gunakan autogrowth secara minimal. Lebih baik gunakan fix
growth. Sesuai perhitungan capacity planning.

5.Jika anda menggunakan Server dengan disk array maka gunakan
RAID 1+0 dari pada RAID 5 atau RAID 1.

6.Gunakan sp_detach_db dan sp_attach_db untuk melakukan
pemindahan data dari database yang kita buat. Proses ini lebih cepat
jika kita bermaksud menginstall database dari satu server ke server
lain dibandingkan dengan melakukan DTS antara Server.

7.Jika kita ingin mengubah property database yang kita buat
kita bisa lakukan dengan menggunakan ALTER DATABASE

8.Sekali lagi tentukan CAPACITY PLANING dengan benar. Contohnya
a.Tentukan berapa ukuran data dari table master yang akan
disimpan. Misal untuk data karyawan NIP char(10), Nama Char(50) x 50
(Data Jumlah karyawan) maka kita akan dapatkan data ukuran file
karyawan.
b.Ditambah dengan berapa banyak data transaksi yang akan
dilakukan perhari kerja. Dari sini kita bisa tahu dalam setahun
ukuran data kita akan sebesar apa.
c.Perkirakan juga ukuran data yang akan di simpan (tidak boleh
dihapus atau di backup) berapa banyak.
d.Dari sini kita akan bisa memprediksi growth dari database
kita.

Mudah mudahan ini bermanfaat. selain desain database yang baik
tentunya desain table, Query dan Store procedure, index serta coding yang baik dengan memanfaatkan pola-pola design yang sistematis dan tepat guna (Design Patterns) juga harus diperhatikan.