Set Pada JVM -Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms1536m -Xmx1536m -XX:NewSize=256m -XX:MaxNewSize=256m -XX:PermSize=256m -XX:MaxPermSize=256m -XX:+DisableExplicitGC
JAVA HeapSpace and PergmenSpace
May 25, 2012
Java & Database Leave a comment
Sample StoreProcedure SQL
April 30, 2012
Java & Database Leave a comment
USE [DB01022012]
GO
/****** Object: StoredProcedure [dbo].[SPPostingJournalByType] Script Date: 04/30/2012 15:02:08 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER procedure [dbo].[SPPostingJournalByType]
@yearprd VARCHAR (4),
@monthprd VARCHAR (2),
@journaltypeno VARCHAR (20)
as
declare
@query nvarchar(4000),
@query_db nvarchar(1000),
@query_cd nvarchar(1000),
@column_name_bb VARCHAR (4),
@column_name_db VARCHAR (4),
@column_name_cd VARCHAR (4),
@column_name_eb VARCHAR (4),
@exist_bb numeric,
@exist_db money,
@exist_cd money,
@exist_eb money,
@subledgertype int,
@employeeId int,
@partnerNo VARCHAR (20),
@journalNo VARCHAR (20),
@count int,
@month VARCHAR (2),
@coa_no VARCHAR (20),
@coa_no_parent VARCHAR (20),
@coa_no_parent_old VARCHAR (20),
@amount_db money,
@amount_cd money
–SET @monthprd = ’9′
–SET @yearprd = ’2011′
IF (datalength(@monthprd) = 1)
BEGIN
SET @month = ’0′+@monthprd;
END
SET @column_name_bb = ‘BB’ + @month
SET @column_name_db = ‘DB’ + @month
SET @column_name_cd = ‘CD’ + @month
SET @column_name_eb = ‘EB’ + @month
DECLARE jurnalItemCs CURSOR FOR
SELECT JournalNo, AccountNo, AmountOfDebit, AmountOfCredit, SubLedgerType, CSIEmployeeId, PartnerNo
FROM CSIACJournalEntryItem
WHERE JournalNo IN
(select JournalNo from CSIACJournalEntry where YearPeriod=@yearprd and
MonthPeriod=@monthprd and IsPosted =’false’ and IsClosed = ‘false’
and IsValidated =’true’ and JournalTypeNo=@journaltypeno )
and IsValidated = ‘true’ and IsPosted = ‘false’ and IsClosed = ‘false’
OPEN jurnalItemCs
FETCH jurnalItemCs INTO @journalNo, @coa_no, @amount_db, @amount_cd, @subledgertype, @employeeId, @partnerNo
WHILE (@@Fetch_Status = 0)
BEGIN
SET @exist_bb = 0
SET @exist_db = 0
SET @exist_cd = 0
SET @exist_eb = 0
– Insert ke Ac Ledger
IF((select count(*) from CSIACLedger where YearPeriod = @yearprd and AccountNo = @coa_no) = 0)
BEGIN
SET @exist_eb = abs(@amount_db – @amount_cd)
SET @query =’INSERT INTO CSIACLedger ([yearperiod],[AccountNo],['+@column_name_db+'],['+@column_name_cd+'],
['+@column_name_bb+'],['+@column_name_eb+'],[lastupdated], [lastupdater] )
values
(”’+@yearPrd+”’,”’+@coa_no+”’,'+convert(varchar,@amount_db)+’,'+convert(varchar,@amount_cd)+’,
‘+convert(varchar,@exist_bb)+’, ‘+convert(varchar,@exist_eb)+’,{fn NOW()},1) ‘
EXEC(@query)
END
ELSE
BEGIN
SET @query_db = ‘((SELECT ISNULL(‘+@column_name_db+’,0) FROM CSIACLedger WHERE [YearPeriod]=’+@yearprd+’ and [AccountNo]=’+@coa_no+’)
+ ‘+CONVERT(VARCHAR,@amount_db)+’) ‘
SET @query_cd = ‘((SELECT ISNULL(‘+@column_name_cd+’,0) FROM CSIACLedger WHERE [YearPeriod]=’+@yearprd+’ and [AccountNo]=’+@coa_no+’)
+ ‘+CONVERT(VARCHAR,@amount_cd)+’) ‘
SET @query = ‘UPDATE CSIACLedger set ['+@column_name_db+'] = ‘+@query_db+’,
['+@column_name_cd+'] = ‘+@query_cd+’
where [YearPeriod]=’+@yearprd+’ and [AccountNo]=’+@coa_no+’ ‘
EXEC(@query)
SET @query = ‘UPDATE CSIACLedger set
['+@column_name_eb+'] = abs(['+@column_name_db+'] – ['+@column_name_cd+'])
where [YearPeriod]=’+@yearprd+’ and [AccountNo]=’+@coa_no+’ ‘
EXEC(@query)
END
–Insert Sub Ledger
SET @exist_bb = 0;
SET @exist_db = 0;
SET @exist_cd = 0;
SET @exist_eb = 0;
IF(@subledgertype = 2)
BEGIN
IF((select count(*) from CSIACSubLedgerEmployee where YearPeriod = @yearprd and
AccountNo = @coa_no and CSIEmployeeId = @employeeId) = 0)
BEGIN
SET @exist_eb = abs(@amount_db – @amount_cd)
SET @query =’INSERT INTO CSIACSubLedgerEmployee ([yearperiod],[AccountNo],[CSIEmployeeId],['+@column_name_db+'],['+@column_name_cd+'],
['+@column_name_bb+'],['+@column_name_eb+'],[lastupdated], [lastupdater] )
values
(”’+@yearPrd+”’,”’+@coa_no+”’,'+convert(varchar,@employeeId)+’, ‘+convert(varchar,@amount_db)+’,'+convert(varchar,@amount_cd)+’,
‘+convert(varchar,@exist_bb)+’, ‘+convert(varchar,@exist_eb)+’,{fn NOW()},1) ‘
EXEC(@query)
END
ELSE
BEGIN
SET @query_db = ‘((SELECT ISNULL(‘+@column_name_db+’,0) FROM CSIACSubLedgerEmployee WHERE [YearPeriod]=’+@yearprd+’ and [AccountNo]=’+@coa_no+’
and CSIEmployeeId = ‘+convert(varchar,@employeeId)+’) + ‘+CONVERT(VARCHAR,@amount_db)+’) ‘
SET @query_cd = ‘((SELECT ISNULL(‘+@column_name_cd+’,0) FROM CSIACSubLedgerEmployee WHERE [YearPeriod]=’+@yearprd+’ and [AccountNo]=’+@coa_no+’
and CSIEmployeeId = ‘+convert(varchar,@employeeId)+’) + ‘+CONVERT(VARCHAR,@amount_cd)+’) ‘
SET @query = ‘UPDATE CSIACSubLedgerEmployee set ['+@column_name_db+'] = ‘+@query_db+’,
['+@column_name_cd+'] = ‘+@query_cd+’
where [YearPeriod]=’+@yearprd+’ and [AccountNo]=’+@coa_no+’ and CSIEmployeeId=’+convert(varchar,@employeeId)
EXEC(@query)
SET @query = ‘UPDATE CSIACSubLedgerEmployee set
['+@column_name_eb+'] = abs(['+@column_name_db+'] – ['+@column_name_cd+'])
where [YearPeriod]=’+@yearprd+’ and [AccountNo]=’+@coa_no+’ and CSIEmployeeId=’+convert(varchar,@employeeId)
EXEC(@query)
END
END
IF(@subledgertype = 3)
BEGIN
IF((select count(*) from CSIACSubLedgerPartner where YearPeriod = @yearprd and
AccountNo = @coa_no and PartnerNo = @partnerNo) = 0)
BEGIN
SET @exist_eb = abs(@amount_db – @amount_cd)
SET @query =’INSERT INTO CSIACSubLedgerPartner ([yearperiod],[AccountNo],[PartnerNo],['+@column_name_db+'],['+@column_name_cd+'],
['+@column_name_bb+'],['+@column_name_eb+'],[lastupdated], [lastupdater] )
values
(”’+@yearPrd+”’,”’+@coa_no+”’,”’+@partnerNo+”’, ‘+convert(varchar,@amount_db)+’,'+convert(varchar,@amount_cd)+’,
‘+convert(varchar,@exist_bb)+’, ‘+convert(varchar,@exist_eb)+’,{fn NOW()},1) ‘
EXEC(@query)
END
ELSE
BEGIN
SET @query_db = ‘((SELECT ISNULL(‘+@column_name_db+’,0) FROM CSIACSubLedgerPartner WHERE [YearPeriod]=’+@yearprd+’ and [AccountNo]=’+@coa_no+’
and PartnerNo = ”’+@partnerNo+”’) + ‘+CONVERT(VARCHAR,@amount_db)+’) ‘
SET @query_cd = ‘((SELECT ISNULL(‘+@column_name_cd+’,0) FROM CSIACSubLedgerPartner WHERE [YearPeriod]=’+@yearprd+’ and [AccountNo]=’+@coa_no+’
and PartnerNo = ”’+@partnerNo+’) + ”’+CONVERT(VARCHAR,@amount_cd)+’) ‘
SET @query = ‘UPDATE CSIACSubLedgerPartner set ['+@column_name_db+'] = ‘+@query_db+’,
['+@column_name_cd+'] = ‘+@query_cd+’
where [YearPeriod]=’+@yearprd+’ and [AccountNo]=’+@coa_no+’ and PartnerNo=”’+@partnerNo+”’ ‘
EXEC(@query)
SET @query = ‘UPDATE CSIACSubLedgerPartner set
['+@column_name_eb+'] = abs(['+@column_name_db+'] – ['+@column_name_cd+'])
where [YearPeriod]=’+@yearprd+’ and [AccountNo]=’+@coa_no+’ and PartnerNo=”’+@partnerNo+”’ ‘
EXEC(@query)
END
END
–Ledger for Account Parent
SET @coa_no_parent_old = @coa_no
IF((select (LevelNo-1) from CSIAccount where AccountNo=@coa_no) >= 0)
BEGIN
SET @count = 0
WHILE((select ((LevelNo-1)-@count) from CSIAccount where AccountNo=@coa_no) > 0)
BEGIN
SET @exist_bb = 0;
SET @exist_db = 0;
SET @exist_cd = 0;
SET @exist_eb = 0;
select @coa_no_parent = AccountNoGroup from CSIAccount where AccountNo=@coa_no_parent_old
IF((select count(*) from CSIACLedger where YearPeriod = @yearprd and AccountNo = @coa_no_parent) = 0)
BEGIN
SET @exist_eb = abs(@amount_db – @amount_cd)
SET @query =’INSERT INTO CSIACLedger ([yearperiod],[AccountNo],['+@column_name_db+'],['+@column_name_cd+'],
['+@column_name_bb+'],['+@column_name_eb+'],[lastupdated], [lastupdater] )
values
(”’+@yearPrd+”’,”’+@coa_no_parent+”’,'+convert(varchar,@amount_db)+’,'+convert(varchar,@amount_cd)+’,
‘+convert(varchar,@exist_bb)+’, ‘+convert(varchar,@exist_eb)+’,{fn NOW()},1) ‘
EXEC(@query)
END
ELSE
BEGIN
SET @query_db = ‘((SELECT ISNULL(‘+@column_name_db+’,0) FROM CSIACLedger WHERE [YearPeriod]=’+@yearprd+’ and [AccountNo]=’+@coa_no_parent+’)
+ ‘+CONVERT(VARCHAR,@amount_db)+’) ‘
SET @query_cd = ‘((SELECT ISNULL(‘+@column_name_cd+’,0) FROM CSIACLedger WHERE [YearPeriod]=’+@yearprd+’ and [AccountNo]=’+@coa_no_parent+’)
+ ‘+CONVERT(VARCHAR,@amount_cd)+’) ‘
SET @query = ‘UPDATE CSIACLedger set ['+@column_name_db+'] = ‘+@query_db+’,
['+@column_name_cd+'] = ‘+@query_cd+’
where [YearPeriod]=’+@yearprd+’ and [AccountNo]=’+@coa_no_parent+’ ‘
EXEC(@query)
SET @query = ‘UPDATE CSIACLedger set
['+@column_name_eb+'] = abs(['+@column_name_db+'] – ['+@column_name_cd+'])
where [YearPeriod]=’+@yearprd+’ and [AccountNo]=’+@coa_no_parent+’ ‘
EXEC(@query)
END
select @coa_no_parent_old = AccountNo from CSIAccount where AccountNo = @coa_no_parent
SET @count = @count + 1
END
END
FETCH jurnalItemCs INTO @journalNo, @coa_no, @amount_db, @amount_cd, @subledgertype, @employeeId, @partnerNo
END
CLOSE jurnalItemCs
DEALLOCATE jurnalItemCs
–Update Journal Status
SET @query = ‘update CSIACJournalEntryItem set IsPosted = ”true” where JournalNo = ”’+@journalNo+”’ ‘;
EXEC (@query)
SET @query = ‘update CSIACJournalEntry set IsPosted=”true” where JournalNo = ”’+@journalNo+”’ ‘;
EXEC (@query)
RETURN 1
10 Tips SQL Mempercepat Akses Database
April 17, 2012
Java & Database Leave a comment
(Source : http://www.aageboi.com/2010/03/09/10-tips-sql-mempercepat-akses-database/)
Desain database anda dengan hati-hati
Tip pertama ini mungkin tampak biasa, tetapi pada kenyataannya sebagian besar masalah database berasal dari design struktur tabel yang buruk.
Sebagai contoh, saya telah melihat orang-orang menyimpan informasi seperti info client dan pembayaran info di column database yang sama. Ini bukan hal yang baik bagi database system dan developer yang akan bekerja menggunakannya.
Ketika akan membuat database, selalu simpan informasi berbeda di tabel yang berbeda, gunakan standar penamaan yang jelas dan gunakan primary key.
Source: http://www.simple-talk.com/sql/database-administration/ten-common-database-design-mistakes/
Tahu apa yang harus Anda optimasi
Jika Anda ingin mengoptimasi query tertentu, sangat penting bagi anda untuk bisa melihat informasi dari query yang anda jalankan. Gunakan perintah EXPLAIN, untuk mendapatkan informasi dari query yang anda jalankan, seperti yang ditunjukkan pada contoh di bawah ini:
EXPLAIN SELECT * FROM ref_table, table_lain WHERE ref_table.key_column = table_lain.column;
Source: http://dev.mysql.com/doc/refman/5.0/en/using-explain.html
Query tercepat… Adalah yang tidak pernah anda kirim
Setiap kali Anda mengirimkan query ke database, Anda akan menggunakan sumber daya server Anda. Inilah sebabnya, pada situs dengan traffic tinggi, hal terbaik yang dapat Anda lakukan untuk mempercepat database Anda adalah dengan cache queries.
Ada banyak solusi untuk menggunakan cache query pada server Anda. Berikut adalah salah satunya:
* AdoDB: AdoDB adalah library abstraksi database untuk PHP. Hal ini memungkinkan Anda untuk menggunakan sistem database pilihan Anda (MySQL, PostgreSQL, Interbase, dan lain sebagainya) dan dirancang untuk kecepatan. AdoDB sangat sederhana, namun memiliki sistem caching yang powerful. Dan juga, lisensi AdoDB di bawah BSD, yang berarti Anda dapat menggunakan dengan bebas pada proyek Anda. Sebuah lisensi LGPL juga tersedia untuk proyek-proyek komersial.
* Memcached: memcached adalah sistem caching memori terdistribusi yang sering dipakai untuk mempercepat website berbasis database dinamis dengan meringankan beban database.
* CSQL Cache: CSQL Cache adalah sebuah open-source data caching infrastruktur. Belum diuji secara pribadi, namun tampaknya bisa menjadi alat yang hebat.
Jangan Menampilkan yang tidak perlu
Yang sangat umum untuk mendapatkan data yang diinginkan adalah dengan menggunakan simbol *, yang akan mendapatkan semua kolom dari tabel yang diinginkan:
SELECT * FROM wp_posts;
Sebaliknya, Anda harus benar-benar hanya memilih kolom yang diinginkan, seperti ditunjukkan pada contoh di bawah ini. Pada situs yang sangat kecil dengan, katakanlah, satu pengunjung per menit, yang tidak akan membuat perbedaan. Tapi di situs seperti Tanyasaja.com, menghemat banyak proses untuk database.
SELECT judul, kutipan, pengarang FROM wp_posts;
Gunakan LIMIT
Ini sangat umum yang perlu Anda hanya mendapatkan jumlah record tertentu dari database Anda. Sebagai contoh, sebuah blog yang menampilkan sepuluh entri per halaman. Dalam hal ini, Anda harus benar-benar menggunakan parameter LIMIT, yang hanya menampilkan jumlah record yang diperlukan.
Tanpa LIMIT, jika tabel Anda memiliki 100.000 catatan berbeda, Anda akan ekstrak mereka semua, yang seharusnya tidak perlu dilakukan server Anda.
SELECT judul, kutipan, pengarang FROM wp_posts LIMIT 10;
Hindari queries dalam pengulangan
Bila menggunakan SQL bersama dengan bahasa pemrograman seperti PHP, dapat tergoda untuk menggunakan SQL queries dalam sebuah loop / pengulangan. Tapi hal ini seperti memukul database dengan query Anda.
Contoh ini menggambarkan seluruh masalah “queries dalam loop”:
foreach ($display_order as $id => $urut) (
$sql = “UPDATE SET kategori display_order = $ordinal WHERE id = $id”;
mysql_query ($sql);
)
Berikut adalah apa yang harus Anda lakukan sebagai gantinya:
UPDATE kategori
SET display_order = CASE id
WHEN 1 THEN 3
WHEN 2 THEN 4
WHEN 3 THEN 5
END
WHERE id IN (1,2,3)
Source: http://www.karlrixon.co.uk/articles/sql/update-multiple-rows-with-different-values-and-a-single-sql-query/
Gunakan JOIN bukannya subqueries
Sebagai seorang programmer, subqueries adalah sesuatu yang Anda bisa tergoda untuk menggunakan dan menyalahgunakannya. Subqueries, seperti yang ditunjukkan di bawah ini, dapat sangat berguna:
SELECT a.id,
(SELECT MAX (created)
FROM posts
WHERE author_id = a.id)
AS latest_post FROM authors a
Meskipun subqueries berguna, mereka dapat digantikan dengan JOIN, dan yang jelas akan lebih cepat untuk mengeksekusinya.
SELECT a.id, MAX (p.created) AS latest_post
FROM authors a
INNER JOIN posts p
ON (a.id = p.author_id)
GROUP BY a.id
Source: http://20bits.com/articles/10-tips-for-optimizing-mysql-queries-that-dont-suck/
Hati-hati ketika menggunakan wildcard
Wildcard sangat berguna karena mereka dapat menggantikan satu atau lebih karakter ketika mencari data dalam database. Saya tidak mengatakan bahwa Anda tidak boleh menggunakannya, tetapi sebaliknya, anda harus menggunakannya dengan hati-hati dan tidak menggunakan wildcard penuh ketika awalan atau postfix wildcard dapat melakukan pekerjaan yang sama.
Bahkan, melakukan pencarian wildcard penuh pada satu juta record pasti akan membunuh database Anda.
# Full wildcard
SELECT * FROM table WHERE COLUMN LIKE ‘%halo%’;
# Postfix wildcard
SELECT * FROM TABEL WHERE COLUMN LIKE ‘halo%’;
# Prefix wildcard
SELECT * FROM TABEL WHERE COLUMN LIKE ‘% hello’;
Source: http://hungred.com/useful-information/ways-optimize-sql-queries/
Gunakan UNION daripada OR
Contoh berikut ini menggunakan perintah OR untuk mendapatkan hasilnya:
SELECT * FROM a, b WHERE a.p = b.q OR a.x = b.y;
Pernyataan UNION memungkinkan Anda untuk menggabungkan hasil dari 2 atau lebih queries select. Contoh berikut akan mengembalikan hasil yang sama seperti perintah di atas, tetapi akan lebih cepat:
SELECT * FROM a, b WHERE a.p = b.q
UNION
SELECT * FROM a, b WHERE a.x = b.y
Source: http://www.bcarter.com/optimsql.htm
Menggunakan index
Index database mirip seperti indeks pencarian di perpustakaan: Mereka memungkinkan database untuk menemukan informasi yang diminta lebih cepat, seperti sebuah indeks perpustakaan akan memungkinkan seorang pembaca untuk menemukan apa yang mereka cari tanpa menghabiskan waktu.
Index dapat dibuat pada satu kolom atau kombinasi kolom dalam tabel database. Sebuah index tabel adalah struktur database yang mengatur nilai-nilai dari satu atau lebih kolom dalam tabel database dalam urutan tertentu.
Pernyataan berikut ini akan membuat index pada Model kolom dari tabel Produk. Index disebut idxModel:
CREATE INDEX idxModel ON Product (Model);
Source: http://www.sql-tutorial.com/sql-indexes-sql-tutorial/
Partition on PostgreSql
April 17, 2012
Java & Database Leave a comment
PostgreSQL mendukung fitur partisi pada tabel. Partisi disini mengenai pemecahan atau pembagian sebuah tabel master/tabel utama secara logic menjadi potongan-potongan fisik menjadi lebih kecil.
Partisi dapat memberikan beberapa keuntungan:
1. Kinerja query dalam mengeksekusi perintah dapat ditingkatkan.
2. Update kinerja dapat ditingkatkan juga, karena setiap potongan tabel memiliki indeks yang lebih kecil daripada indeks pada data yang akan mengatur keseluruhan. Ketika indeks tidak cocok lagi, dengan mudah memori membaca dan menulis operasi pada indeks dengan mengambil akses disk lebih progresif.
3. Dalam menghapus data dalam kelompok besar, dapat dicapai hanya dengan menghapus salah satu partisi, jika kebutuhan yang direncanakan dalam desain partisi tabel, DROP tabel jauh lebih cepat daripada DELETE massal.
Manfaat biasanya akan tampak lebih jelas hanya jika tabel dinyatakan dalam jumlah sangat besar.
IMPLEMENTASI RANGE PARTITION
Untuk dapat lebih memahami mengenai partisi tabel pada postgreSQL, mari kita mengelompokkan nama-nama mahasiswa yang mendapat nilai A, B, dan C berdasarkan range nilai.
1. Membuat tabel master
create table mahasiswa(
nim varchar(10) not null primary key,
nama_mahasiswa varchar(50),
nilai_mahasiswa integer
)
2. Membuat partisi tabel
create table mahasiswa_a(
check (nilai_mahasiswa >= 80 and nilai_mahasiswa = 70 and nilai_mahasiswa = 60 and nilai_mahasiswa = 80 and nilai_mahasiswa = 70 and nilai_mahasiswa = 60 and nilai_mahasiswa < 70)
do instead
insert into mahasiswa_c values (new.nim,
new.nama_mahasiswa,
new.nilai_mahasiswa);
4. Insert data:
insert into mahasiswa values (’07560242′, ‘Mudafiq Riyan’, 90);
insert into mahasiswa values (’07560254′, ‘Ivan Prasetya’, 70);
insert into mahasiswa values (’07560412′, ‘Abbi Yudha’, 85);
insert into mahasiswa values (’07560212′, ‘Sagara Pratama’, 67);
Pengecekan:
- Keseluruhan data yang telah diinputkan masuk pada tabel master: mahasiswa
select * from mahasiswa

- Data mahasiswa yang mendapat nilai A
select * from mahasiswa_a

- Data mahasiswa yang mendapat nilai B
select * from mahasiswa_b

- Data mahasiswa yang mendapat nilai C
select * from mahasiswa_c

Kesimpulan: Partisi tabel ini berfungsi untuk memudahkan penganalisaan data berdasarkan golongan-golongan tertentu. Pada kasus di atas, kita bisa lebih mudah menganalisa mahasiswa siapa saja yang mendapat nilai A, B, dan C. Sehingga ketika ada data baru yang diinputkan, secara otomatis, data akan langsung diseleksi dan masuk pada partisi yang ditetapkan.
Disamping dalam bentuk range (Range Partition), dalam postgre juga memungkinkan untuk dilakukan List Partition.
List partition merupakan pembagian tabel yang berdasarkan list yang telah dideklarasikan terlebih dahulu.
Misal pada sebuah kasus, data mengenai kota asal pegawai yang dikelompokkan berdasarkan provinsi. Jawa Timur: Jember, Malang, Surabaya, Banyuwangi, dll. Jawa Barat: Cirebon, Tangerang, Bandung, dll. Jawa Tengah: Solo, Semarang, dll. Jadi list kota dideklarasikan terlebih dahulu, sehingga ketika data diinputkan, maka data pegawai akan dikelompokkan berdasarkan wilayah provinsinya.
IMPLEMENTASI LIST PARTITION
Konsep list partition hampir sama dengan range partition, hanya saja kalau list partition ini mendaftarkan terlebih dahulu apa yang akan dikelompokkan. Pada contoh kasus di atas, harus mendaftarkan terlebih dahulu nama-nama kota ditiap provinsi.
- Membuat tabel pegawai sebagai tabel utama:
create table pegawai (
nip integer not null primary key,
nama_pegawai varchar(50),
kota_asal_pegawai varchar(20),
jabatan_pegawai varchar(20)
) - Membuat list partition tabel untuk kota asal pegawai:
create table pegawai_jatim(
check (kota_asal_pegawai in (‘jember’, ‘malang’, ‘surabaya’, ‘sidoarjo’, ‘bojonegoro’, ‘pasuruan’))
)inherits(pegawai);create table pegawai_jateng(
check (kota_asal_pegawai in (‘semarang’, ‘solo’, ‘salatiga’, ‘blora’, ‘pekalongan’, ‘magelang’))
)inherits(pegawai);create table pegawai_jabar(
check (kota_asal_pegawai in (‘bandung’, ‘cirebon’, ‘tangerang’, ‘bogor’, ‘depok’, ‘purwakarta’))
)inherits(pegawai); - Agar data yang disisipkan/diinputkan masuk pada partisi yang sesuai, maka perlu adanya aturan secara kompleks yang mengatur hal ini. Gunakan query seperti berikut:
create rule kota_asal_pegawai_jatim as
on insert to pegawai where
(kota_asal_pegawai in (‘jember’, ‘malang’, ‘surabaya’, ‘sidoarjo’, ‘bojonegoro’, ‘pasuruan’))
do instead
insert into pegawai_jatim values (new.nip,
new.nama_pegawai,
new.kota_asal_pegawai,
new.jabatan_pegawai);create rule kota_asal_pegawai_jateng as
on insert to pegawai where
(kota_asal_pegawai in (‘semarang’, ‘solo’, ‘salatiga’, ‘blora’, ‘pekalongan’, ‘magelang’))
do instead
insert into pegawai_jateng values (new.nip,
new.nama_pegawai,
new.kota_asal_pegawai,
new.jabatan_pegawai);create rule kota_asal_pegawai_jabar as
on insert to pegawai where
(kota_asal_pegawai in (‘bandung’, ‘cirebon’, ‘tangerang’, ‘bogor’, ‘depok’, ‘purwakarta’))
do instead
insert into pegawai_jabar values (new.nip,
new.nama_pegawai,
new.kota_asal_pegawai,
new.jabatan_pegawai); - Insert data:
insert into pegawai values (1, ‘Mudafiq Riyan’, ‘jember’, ‘direktur utama’);
insert into pegawai values (2, ‘Ivan Prasetya’, ‘surabaya’, ‘kepala bagian’);
insert into pegawai values (3, ‘Dhafiq Sagara’, ‘bandung’, ‘karyawan’);
insert into pegawai values (4, ‘Dwi Sari’, ‘magelang’, ‘karyawan’); - Pengecekan:
Catetan Perihal Tanggal (Date) di Java dan Database
December 14, 2011
Java & Database Leave a comment
1. Java : Sampel untuk mendapatkan tanggal esok hari
String dt = “2008-01-01″; // Start date
SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd”);
Calendar c = Calendar.getInstance();
c.setTime(sdf.parse(dt));
c.add(Calendar.DATE, 1); // number of days to add
dt = sdf.format(c.getTime()); // dt is now the new date
2. PostgreSql : Sampel terkait modifikasi tanggal dengan character
- Untuk memperoleh tanggal esok hari
select now()+’1 days’ , * from tsemployee
- Get Current Date and Time using PostgreSQL now()
select now(); select now()::time; select now()::date;
select mydatefield::timestamp from mytable;
- Get Interval Between Two PostgreSQL Dates
select (now() – date_of_join) as days from employee ;
select (date_of_join – 7) as output from employee;
- Round the interval (above difference) to the nearest day using date_part()
select date_part(‘days’, now() – date_of_join) as days from employee;
- Breakdown the date interval into number of years, months and days using age()
select age(date_of_join) from employee;
- Retrieve any sub-fields from the Timestamp using PostgreSQL extract()
select extract(year from date_of_join) as output from employee;
- Truncate a particular date field using PostgreSQL date_trunc()
select date_trunc(‘month’,date_of_join) as output from employee ;
–> hasilnya : diperoleh tanggal awal bulan yang bersangkutan
- Display Postgresql Date in Various Format using to_char()
select to_char(date_of_join,’mm/dd/yy’) as output from employee;
select to_char(date_of_join, ‘FMMonth FMDDth’) as output from employee;
select to_char(startdate, ‘Dy (Day), Mon (Month)’) as output from employee;
- Convert String to Date using PostgreSQL to_timestamp()
select to_timestamp(’201024June10:12am’, ‘YYYYDDFMMonthHH12:MIam’) as valid_time;
Sample Store Procedure PostgreSql
October 24, 2011
– Function: sppostingjournal(character varying, character varying)
– DROP FUNCTION sppostingjournal(character varying, character varying);
CREATE OR REPLACE FUNCTION sppostingjournal(yearprd character varying, monthprd character varying)
RETURNS integer AS
$BODY$
DECLARE journalitem tsacgeneraljournalitem;
count_item int;
query character varying;
count int;
count_ledger int;
acledger tsacledger;
column_name_bb character varying;
column_name_db character varying;
column_name_cd character varying;
column_name_eb character varying;
exist_bb numeric ;
exist_db numeric ;
exist_cd numeric ;
exist_eb numeric ;
coa tschartofaccounts;
coa_parent tschartofaccounts;
coa_level int;
month_prd character varying;
BEGIN
month_prd := $2;
IF (length(month_prd) = 1) THEN
month_prd := ’0′||$2;
END IF;
column_name_bb = ‘bb’||month_prd;
column_name_db = ‘db’||month_prd;
column_name_cd = ‘cd’||month_prd;
column_name_eb = ‘eb’||month_prd;
query = ‘select * from tsacgeneraljournalitem
where gjno in (select gjno from tsacgeneraljournal where yearperiod=”’ || $1 || ”’ and monthperiod=”’ || $2 || ”’
and isposted=”false” and isclosed=”false”
and isvalidated=”true”)
and isposted=”false” and isclosed=”false” and isvalidated=”true”’;
FOR journalitem in EXECUTE query
LOOP
exist_bb := 0;
exist_db := 0;
exist_cd := 0;
exist_eb := 0;
query = ‘select count(*) from tsacledger where yearperiod=”’ || $1 || ”’ and coano=”’||journalitem.coano||”’ ‘;
EXECUTE query INTO count_ledger;
IF (count_ledger = 0) THEN
query = ‘insert into tsacledger (“yearperiod”,”coano”,”‘||column_name_db||’”,”‘||column_name_cd||’”,”lastupdated”, “updater”)
values (”’ || $1 || ”’,”’||journalitem.coano||”’,'||journalitem.amountofdebit||’,'||journalitem.amountofcredit||’,now(),”ADMIN”) ‘;
EXECUTE query;
ELSE
query = ‘select ‘||column_name_db||’ from tsacledger where yearperiod=”’ || $1 || ”’ and coano=”’||journalitem.coano||”’ ‘;
EXECUTE query INTO exist_db;
query = ‘select ‘||column_name_cd||’ from tsacledger where yearperiod=”’ || $1 || ”’ and coano=”’||journalitem.coano||”’ ‘;
EXECUTE query INTO exist_cd;
select into acledger tsacledger.* from tsacledger where yearperiod=” || $1 || ” and coano=”||journalitem.coano||”;
exist_db := exist_db + journalitem.amountofdebit;
exist_cd := exist_cd + journalitem.amountofcredit;
query = ‘update tsacledger set ‘||column_name_db||’ = ‘||exist_db||’, ‘||column_name_cd||’ = ‘||exist_cd||’ where yearperiod=”’ || $1 || ”’ and coano=”’||journalitem.coano||”’ ‘;
EXECUTE query;
END IF;
select into coa tschartofaccounts.* from tschartofaccounts where coano=”||journalitem.coano||”;
count := coa.levelno – 1;
IF (count > 0) THEN
LOOP
exist_bb := 0;
exist_db := 0;
exist_cd := 0;
exist_eb := 0;
select into coa_parent tschartofaccounts.* from tschartofaccounts where coano=coa.coanogroup;
query = ‘select count(*) from tsacledger where yearperiod=”’ || $1 || ”’ and coano=”’||coa_parent.coano||”’ ‘;
EXECUTE query INTO count_ledger;
IF (count_ledger = 0) THEN
query = ‘insert into tsacledger (“yearperiod”,”coano”,”‘||column_name_db||’”,”‘||column_name_cd||’”,”lastupdated”, “updater”)
values (”’ || $1 || ”’,”’||coa_parent.coano||”’,'||journalitem.amountofdebit||’,'||journalitem.amountofcredit||’,now(),”ADMIN”) ‘;
EXECUTE query;
ELSE
query = ‘select ‘||column_name_db||’ from tsacledger where yearperiod=”’ || $1 || ”’ and coano=”’||coa_parent.coano||”’ ‘;
EXECUTE query INTO exist_db;
query = ‘select ‘||column_name_cd||’ from tsacledger where yearperiod=”’ || $1 || ”’ and coano=”’||coa_parent.coano||”’ ‘;
EXECUTE query INTO exist_cd;
select into acledger tsacledger.* from tsacledger where yearperiod=” || $1 || ” and coano=”||coa_parent.coano||”;
exist_db := exist_db + journalitem.amountofdebit;
exist_cd := exist_cd + journalitem.amountofcredit;
query = ‘update tsacledger set ‘||column_name_db||’ = ‘||exist_db||’, ‘||column_name_cd||’ = ‘||exist_cd||’ where yearperiod=”’ || $1 || ”’ and coano=”’||coa_parent.coano||”’ ‘;
EXECUTE query;
END IF;
count:=count-1;
IF(count>0)THEN
select into coa tschartofaccounts.* from tschartofaccounts where coano=”||coa_parent.coano||”;
ELSE
exit;
END IF;
END LOOP;
END IF;
query = ‘update tsacgeneraljournalitem set isposted = true where gjno = ”’||journalitem.gjno||”’ and gjtranslineid=’||journalitem.gjtranslineid||’ ‘;
EXECUTE query;
query = ‘update tsacgeneraljournal set isposted=true where gjno = ”’||journalitem.gjno||”’ ‘;
EXECUTE query;
END LOOP;
RETURN 1;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION sppostingjournal(character varying, character varying) OWNER TO postgres;
Be stronger sweet-heart
May 13, 2011
Ketika mutiara-mutiara itu terhempas dan terburai pertamakalinya,
Sepanjang diri menemani kokohnya karang,
Tak sangkakan akan sedahsyat itu angin yang dibawa arus panas musiman,
Betapa saat itu gulungan air dan hempasan gelombang menderu deram di raga,
Perairan mutlak dengan hadirnya arus,
Namun tak semua arus hempaskan karang dan hancurkan pantai
Dari kejauhan lautan itu senantiasa tampak tenang
Namun gelombang yang hadir ketepian juga satu penghadir pesona laut
Saatnya kapal mulai berajak berlayar ketengah
Bersama mengayuh dayung
Meski semakin petang, semakin tinggi gelombang yang akan menghadang
Namun gelombang itu juga yang kan menghantar kita, berlayar hingga berlabuh
Untukmu
March 30, 2011
Teman
Jalan yang tengah kau tapaki memang tidaklah mudah
Sungguh begitu banyak ranjau, onak dan duri
Begitu banyak tanjakan tajam dan turunan menukik
Butuh energi yang luar biasa serta kelapangan jiwa untuk menaklukkannya
Tapi, teman
Ingatlah jika dipenghujung jalan itu ada yang tengah menantimu
Dia telah lama menunggu seperti dirimu yang tengah terengah-engah menujunya
Jangan pernah lelah dan putus asa
Teruslah melangkah, teruslah berjuang
Taukah engkau teman
Dia menunggu wajahmu yang penuh senyuman, bukan muka penuh guratan luka lampau
Dia menunggu hatimu yang penuh cinta dan kasih yang utuh, bukan serpihan sisa kisah lama
Dia menunggu dengan sejuta harapan dan suka cita akan hadirnya dirimu yang selalu dipinta dalam doa-doanya
Jangan kecewakan dia
Jangan hempaskan harapannya
Jaga senyum mu selama diperjalanan
Jaga hatimu selagi melangkah
Jaga doa dan harapanmu agar tertaut tepat dengan pinta dan asanya
(keep spirit, keep istoqomah)
Sampel Counting Date Different – SQL Server
March 23, 2011
Java & Database Leave a comment
select MONTH(b.TglEntry) as months, d.Customer, COUNT(b.HelpdeskID) as cases,
AVG (datediff(dd, b.TglEntry, b.FinishDate)) as [average days], a.Description
from HelpdeskStatId a
right join HelpDesk b on a.StatId = b.Status
right join Site c on b.Site = c.idSite
left join Customer d on b.idCustomer = d.idCustomer
group by MONTH(b.TglEntry), d.Customer, a.Description
order by MONTH(b.TglEntry)
Sampel PIVOT – SQL Server
March 17, 2011
Java & Database Leave a comment
DECLARE @cols NVARCHAR(2000)
SELECT @cols = COALESCE(@cols + ‘,[' + kk.Description + ']‘,’[' + kk.Description + ']‘)
FROM
(
select a.Description
from HelpdeskStatId a
) kk
DECLARE @query NVARCHAR(4000)
SET @query = N’SELECT months,customer, cases, [average days], ‘+
@cols +’
FROM
( select aa.months, aa.Customer, bb.cases, bb.[average days], aa.Description, aa.kasus
from(
select MONTH(b.TglEntry) as months, d.Customer, count(b.HelpdeskID) as kasus , a.Description
from HelpdeskStatId a
right join HelpDesk b on a.StatId = b.Status
right join Site c on b.Site = c.idSite
left join Customer d on b.idCustomer = d.idCustomer
where year(b.TglEntry) = 2010
group by MONTH(b.TglEntry), d.Customer, a.Description
) aa
left join(
select MONTH(b.TglEntry) as months, d.Customer, count(b.HelpdeskID) as cases ,
avg(datediff(dd, b.TglEntry, b.FinishDate)) as [average days]
from HelpdeskStatId a
right join HelpDesk b on a.StatId = b.Status
right join Site c on b.Site = c.idSite
left join Customer d on b.idCustomer = d.idCustomer
where year(b.TglEntry) = 2010
group by MONTH(b.TglEntry), d.Customer
)bb on aa.months = bb.months and aa.customer = bb.Customer
) p
PIVOT
(
sum(kasus)
FOR Description IN ( ‘+@cols +’ )
) AS pvt
order by months, customer
‘
EXECUTE(@query )




Recent Comments