Rabu, 12 Februari 2014

Salam hangat,
kali ini saya akan memposting tentang trigger atau SQL.
meskipun masih cukup dasar semoga ini bermanfaat buat semua agan-agan yang pada kece.
langsung saja.
 
 
 
SQL4

EMBEDDED QUERY

 

Bahasa Definisi Data

DDL (Data Definition Languange) dalam SQL mengijinkan tidak hanya spesifikasi tentang relasi tetapi juga informasi tentang relasi termasuk

·          Skema untuk setiap realasi

·         Rnah nilai (domain) yang berasosiasi dengan tiap atribut

·         Batasan integrasi

·         Indek untuk mempercepat aksesa

·         Imformasi keamanan dan informasi otorisasi untuk setiap relasi

·         Struktur fisik tempat penyimpanan untuk setiap relasi

Ranah nilai dalam SQL

SQL standar mendukung berbagai tipe seperti tipe data yang akan di bahas di bawah ini :

·         Char (n) : String dengan panjang karakter tetap di gunakan yang dispesifikasi dengan n bentuk lengkap character yang di gunakan

·         Varchar (n) : string dengan pnjang karakter bervariasi dengan panjang maksimum n bentuk lengkap character varying adalah ekivalen

·         int : bilangan bulat (panjangnya sangan di pengaruhi oleh computer yang digunakan) bentuk lengkapnya sering di gunakan

·         Smallint : bilangan bulat yang lebioh kecil dari int (panjang sesungguhnya di tentukan oleh 3tipe computer serta system operasi yang di gunakan pada computer yang di gunakan

·         Numeric (p,d) : bilangan real dengan tingkat ketelitian yang di tentukan oleh pengguna

·         Real,double precision : penyimpang bilangan pecahan yang bergantung kepada tipe computer yang di gunakan

·         Float (n) : bilangan pecahan dengan ketelitian paling sedikitr n dijit.

·         date : menyimpan data waktu yang mengandung 4dijit yaitu tahun, bulan hari

·         Time : menyimpan data waktu yaitu menit, jam dan detik

·         Timestamp : kombinasi dari date and time variannya timesstam (p) dapat digunakan jumlah pecahan (nilai default adalah6)

Nilai null merupakan isi dari ranah nilai (domain) perubah untuk beberapa atribut tentu saja mungkin null tidak sesuai.


 

Definisi Skema dalam SQL

MENDEFINISIKAN RELASI sql menggunakan perintang create table sebagai berikut:

Create table r (A1,D1,A2,D2,.....,AN DN,

(batasan integrasi -1),

(batasan integrasi-2),

.......

(batasan integrasi-k)

Batas integrasi yang diijinkan meliputi :

·         Primary key (A1,A2......An) spesifikasi PRIMARY KEY MENGATAKAN BAHWA ATRIBUT a1,a2,,,,,an berfungsi sebagai kunci primer untuk relasi yang bersangkutan

·         Check (p): klausa check menspesifikasi predikat p yang harus di penuhi oleh setiap oleh setiap rekaman pada relasi

Create table nasabah

            {nama_nasabah           char(20),

            Jalan_nasabah             char(30),

            Kota_nasabah             char(30),

            Primary key     (nama_nasabah)}

Create table cabang

            (nama_cabang             char(15),

            Kota_cabang               char(30,.

            Aset                             intenger

            Primary key (nama_cabang),

             Check (aset >= 0},

Create table rekening

            (no_rekening               char(10),

            Nama_cabang             char(30),

            saldo                            intenger,

            Primary key (no_rekening),

            Check (saldo >= 0)}

Create table penabung

            (nama_nasabah            char(20),

            Np_rekening               char(10),

            Primary key (nama_nasabah, no_rekening)}

Rekaman yang di sisipkan atau nilai null yang sah setiap atribut kecuali dispesifikasikan dengan not null suatu atribut dapat dideklarasikan sebagai not null suatu atribut dapat dideklarasikan sebagai not null dengan cara berikut:

            No_rekening char (10) not null                                

SQL juga mendukung batasan integrasi berikut

            Unique (A1,A2,....An)

Contoh di atas menggunakan klausa check untuk mentimulasi sesuatu yang terbilang salah satu nilai S-1,S-2,S3

Prosedur tertanam dan triggers

Prosedur yang tertanam (stored procedure) dan triggers adalah sangat berdaya guna sebab mereka tersimpan di basis data dan dikendalikan oleh DBMs maka kode yang dibutuhkan untuk menciptakan kemungkinan data pengguna dalam basis data tersimpan triggers memiliki 3 bagian:

Create triggers ORDER_ID_BIR

Before insert on ORDER_T

For eash row

Begin

Select ID_SEQUENCE.NEXTVAL:

Into : NEW.ORDER_ID

FROM DUAL

End ORDER_ID_BIR

Triggers akan secara otomatis terpicu dan menyisipkan nomor pesanan kapan pun pesanan baru di tambahkan BIR adalah konversi nama triggers dan before insert row  (sebelum seuatu baris disisipkan) triggers memungkinkan terjadi entah sebelum atau sesudah peryataan yang menimbulkan triggers di eksekusi. Mereka mungkin akan muncul kata seperti INSERT, UPDATE, DELETET pada kasus yang kita tulis di atas triggers akan menyisipkan nomor pesanan sebelum setiap pesanan ditambahkan.


 

SQL TERTANAM (EMBEDDED SQL)

SQL menyediakan bahasa query deklaratif sangat berdaya guna query dengan SQL lebih mudah bandingkan dengan menulis kode untuk mencari data dihendaki dengan bahasa pemogram seperti C/C++,  java, pascal dll pemogram karena alasan :

1.      Tidak semua query dapat diekspresikan dengan SQL, karena SQL tidak menyediakan sesuatu secara ekspresif seperti pemogram serbaguna, katakanlah ,C/C++. Dengan kata lain, ada bentuk query yang dapat di ekspresikan dengan SQL, untuk mendapatkan hasil yang diinginkan, kita menanam (embed0 SQL dalam bahasa yang lebig berguna.

2.      aksi non_deklaratif seperti mencetak laporan, interaksi dengan pengguna atau mengirimkan hasil query ke antar muka grafis (GUI - Graphical User Interface) tidak dapat dikerjakan dengan SQL. Aplikasi biasanya memiliki komponen dan pencairan data (query) serta data hanya merupakan salah satu komponen, komponen yang lain ditulis dengan bahasa pemograman. Untuk aplikasi integrasi, ditulis dengan bahasa pemograman harus dapat mengakses basis data.

SQL standar mendefinisikan SQL tertanam dalam berbagai bahasa pemoraman seperti C/C++, COMBOL, Pascal, Java, PL/I, Fortan, hingga ke bahasa generasi IV seperti Visual BASIC, serta Dhelpi bahasa query dapat ditanamkandi rusjuk sebagai host language SQL yang diijinkan dalam host language dinamakan embedded SQL (SQL Tertanam).

Program SQL Tertanam harus diproses dengan preprosesor khusus sebelum kompilasi. Preprosesor menggantikan permintaan SQL tertanam dengan deklarasi host language dan pemanggilan prosedur yang mengijinkan eksekusi dari akses-akses basis data. Sehingga, program dikompilasi oleh compiler milik host language. Untuk mengidentifikasi permintaan SQL ke preprosesor dapat menggunakan pernyataan EXEC SQL yang memiliki bentuk sebagai berikut:

EXEC SQL <pernyataan SQL tertanam> END EXEC

Sintak untuk SQL tertanam biasanya bergantung pada pemograman yang menjadi host languagenya. Sebagai contoh, tanda titik koma ( ; ). Digunakan untuk menggantikna END EXEC.

#SQL { <pernyataan SQL tertanam> };

Kita  menempatkan  peryataan  SQL INCLUDE  pada  program  untuk mengidntifikasi tempat propesor dapat menyisipkan perubahan yang di gunakan untuk komunikasi antar program dengan system basis data.

Menulis query relasional, kita menggunakan pernyataan declare-cursor. Hasil query belum dihitung. Lebih jauh program harus menggunakan perintah open dan fetch untuk mendapatkan rekaman-rekaman hasil.

Pertimbangan skema bank, asumsikan kita memiliki perubahan host language yang bernama jumlah, dan kita bertahap untuk menemukan nama_nasabah dan kota_nasabah tempat nasabah-nasabah yang memiliki saldo rekening lebih besar dari nilai jumlah. Kita bisa menulis query sebagai berikut :

EXEC SQL

Declare c sursor for

Select nama_nasabah, kota_nasabah

From penabung. Nasabah, rekening

Where penabung, nama_nasabah=nasabah. Nama_nasabah

And

Rekening.no_rekening = penabung.No_rekening and rekening.saldo > jumlah

END EXEC

Perubahan c pada  ekspresi di atas dinamakan cursor untuk query. Kita menggunakan perubahan ini untuk mengidentifikasi query pada pernyataan open, yang mengakibatkan query dievaluasi. Dan pada pernyataan fetch yang menyebabkan nilai dari satu rekaman ditempatkan pada perubahan yang dimiliki oleh host language.

Pernyataan open pada contoh kita di atas adalah sebagai berikut :

EXEC SQL open c END EXEC

Pernyataan di atas mengakibatkan system basis data mengeksekusi query dan menyimpan hasilnya dalam relasi sementara (temporer). Program SQL tertanam mengeksekusi urutan dari pernyataan fetch untuk menerima rekaman-rekaman hasil. Untuk contoh query kita di atas, kita membutuhkan satu perubahan untuk menampung nilai nama_nasabah dan satu perubahan lagi untuk menampung nilai kota_nasabah misalkan :

EXEC SQL fetch c into :cn, :cc END EXEC

Menghasilkan rekaman-rekaman dari relasi hasil. Program kemudian dapat memanipulasi mengubah cn dan cc. menggunakan fitur-fitur bahasa pemograman yang menjadi host languagenya.

Suatu petnyataan fetch tunggal hanya menghasilkan suatu rekaman setiap saat. Untuk mendapatkan suatu rekaman program harus melakukan interasi sepanjang semua rekaman. SQL tertanam membantu pemrogram dalam pengelolaan iterasi meskipun relasi secara konseptual, himpunan rekaman-rekaman yang merupakan hasil sebuah query ada dalam urutan fisik tertentu. Saat program mengeksekusi pernyataan open pada cursor, cursor diatur untuk berada pada rekaman pertama. Saat tidak ada lagi rekaman yang harus diproses, peubah SQLSTATE diatur menjadi ‘02000’ (artinya tidak ada data). Sehingga kita dapat menggunakan iterasi while (atau loop/kalang yang ekivalen). Untuk memproses setiap rekaman pada hasilnya.

Pernyataan close digunakan untuk menyatakan pada system basis data untuk menghapus relasi sementara yang menampung hasil dari suatu query. Berikut contohnya :

EXEC SQL close c END EXEC     

Ekspresi SQL tertanam untuk di modifikasi basis data (update, insert, delete) tidak mengembalikan hasil sehingga lebih sederhana untuk di ekspresikan modifikasi basis data memiliki bentuk;

EXEC SQL

<pernyataan_pernyataan yang sah dari update, insert,dlete>

END EXEC

Perubahan-perubahan host language selalu dimulai dengan titik-dua ( : ).

 Jika kondisi kesalahan muncul pada eksekusi pernyataan, maka ia di simpan di SQLCA.

Jika kita ingin menambah Rp.100.000 ke atribut saldo setiap rekening yang ada di cabang cilacap, kita bisa mendeklarasi cursor sebagai berikut :

Declare c cursor for for

Select*

From rekening where nama_cabang=’cilacap’

For update

Kemudian kita dapat melakukan iterasi sepanjang rekaman dengan melaksanakan operasi fetch pada cursor, setelah melakukan operasi fetch pada setiap rekaman kita mengeksekusi kode di bawah ini :

Update rekening

Sat saldo = saldo+100000

Where current of c

SQL tertanam mengijinkan program yang dibuat dengan host language untuk mengakses basis data, tetapi tidak menyediakan bantuan untuk pembuatan laporan.

SQL DINAMIS

Komponen SQL dinamis mengijinkan pemogram untuk mengontruksi  dan mengirim query SQL saat program aplikasi di jalankan. Menggunakan SQL dinamis, program dapat menciptakan query-query SQL sebagai string saat program dijalankan (misalnya saat menerima masukan dari pengguna).

Char* sqlprog =*update rekening set saldo=saldo*1.05 where no_rekening=?*

EXEC SQL prepare dynprog from :sqlprog;

Char rekening [10]= *A-101”;

EXEC SQL execute dynprog using :rekening;

Konsep dari sesi SQL. Pengguna atau aplikasi terhubung ke server SQL, memelihara sesi mengeksekusi urutan pernyataan kemudian terakhir memutus sesi sehingga semua aktivitas pengguna atau aplikasi adalah dalam konteks sesi SQL. Sebagai tambahan perintah SQL yang biasa, sesi juga dapat memuat perintah untuk melanjutkan serta membatalkan transaksi.

Int ODBCexample ( )

{

 RETCODE error;

 HENV env; /* environment */

 HDBC conn;  /*koneksi basis data */

 SQLALLocEn(&cnv)

SQLALLocConnect(env. &com):

SQLConnect(conn, “itb.lab.com”,SQL_NTS,”avi”,

 SQL_NTS,”pass”,SQL_NTS);

{

Char nama_cabang[75]:

Float saldo;

Int outl, out2;

HSTMT stmt;

SQLALLoc(conn, &stmt);

Char* sqlquery= “select nama_cabang, sum(saldo)

         From rekening

         Group by nama_cabang”;

Error=SQLExecDirect(stmt, sqlquery, SQL_NTS);

If (error==SQL_SUCCESS)

{

SQLBindcol(stmt,1,SQL_C.CHAR,nama_cabang,80,&out1);

SQLBindcol(stmt,2,SQL_C.CHAR,nama_cabang,0,&out2);

While (SQLFetch(stmt) >= SQL_SUCCESS)

{

           Print (“&g\n”, nama_cabang, saldo)

}

}

}

/*perintah-perintah untuk mengakhiri hubungan ke basis data*/

SQLFreeStmt(stmt, SQL_DROP);

SQLDisconnect(conn);

SQLFreeConnect (conn);

SQLFreeEnv(env);}

ODBC (OPEN DATABASE CONNECTIVITY)

ODBC adalah standar yang mendefinisikan cara bagaimana program aplikasi bekomunikasi dengan server habis data. ODBC mendefinisikan API (Aplication Program Interface) yang merupakan modul aplikasi yang dapat di gunakan untuk pembuka hubungan dengan basis data, mengirim query dan pembaharuan , dan mengirimkan kembali hasil aplikasi seperti anatarmuka pengguna grafis.

Setiap system basis data yang mendukung ODBC menyediakan pustaka-pustaka yang harus digabungkan dengan program peminta. Saat program peminta pembuat pemanggilan ODBC API, kode pada pustaka berkomunikasi dengan server untuk mendapatkan aksi yang diminta.

Langkah pertama menggunakan ODBC untuk berkomunikasi dengan server adalah mengatur koneksi dengan server. Untuk mengerjakannyaprogram pertama kali mengalokasikan lingkungan SQL (SQL Envirotment) kemudian koneksi basis data di tangani. ODBC mendefinisikan HENV, HDBC dan RECODE program kemudian membuka koneksi basis data menggunakan SQLConnect.pemanggilan menghasilkan beberapa meter termasuk penangan koneksi server mana yang terhubung.

Setelah koneksi di tetapkan program dapat mengirim perintah SQL ke basis data menggunakan perubahan bahasa c yaitu SQLExecDirect yang dapat terikat k atribut itu di simpan dari hasil query. Pad sesi akhir program membebaskan pengendalian terhadap pernyataan-pernyataan memutuskan program dari basis data, serta membebaskan koneksi dan lingkungan SQL.

JDBC (JAVA DATABASE CONNECTIVITY)

JDBC (JAVA DATABASE CONNECTIVITY) standar mendefinisikan suatu API dimana program java dapat menggunakan untuk terhubung ke server basis data. Lihatlah contoh di bawah ini:

Public static void JDBCExp(string dbit,string userid, string Pwd)

{

Try

{

Class.forName9”oracle.hdbc.driver.ocacleDriver"

Connection con=DriverManager.getConnection

(“jdbc:oracle:thin;@itb.labs.com:2000:bankdb”,

Userid, pwd);

Statement stmt = conn.createStatement();

Try

{

Stmt.executeUpdate(

“insert into rekening values(‘A_1234’,’Bandung’,10000”);

}catch (SQLException sqlw)

{

System.out.printin(“tidak dapat dilakukan penyisipan”+sqlw);

}

Resultset reset = stmt. executeQuery (“select nama_cabang.avg (saldo)

From rekening

Group by nama_cabang”);

While (rset.next() {

System.out.printin(rset.getString(“nama_cabang) +*”

Rset.getFloat(2));

}

Stmt.close();

Conn.close();

}

Catch (SQLExceptionStype)

(

System.outprintin(“SOLEException : “ + sqle);         }

}

Program diatas pertama kali harus membuka koneksi ke basis data, dan kemudian dapat mengeksekusi peryataan-pernyataan SQL. Driver JDBC dapat mendukung berbagai protocol dan kita harus menpesifikasi baik basis data maupun drivernya.

Program kemudian menciptakan penangan pernyataan pada koneksi dan menggunakan untuk mengeksekusi peryataan SQL dan mengembalikan hasilnya.

Konstruksi pernyataan pembaharuan. Konstruksi rty ( … ) catch ( … ) mengijinkan kita untuk mengendalikan kesalahan yang terjadi. Program yang dapat mengeksekusi query dengan menggunakan stmt.executeQuery. Ia mengambil baris dan memasukannya ke Resultset dan mengambilnya satu persatu menggunakan fungsi next(). Dalam hal ini, kita juga dapat menyiapkan peryataan untuk mengisinya dengan nilai sebenarnya dengan tanda ”?”. Kita kemudian dapat mengkompilasi query setelah ia disiapkan dan setiap kali ia mengeksekusi (dengan nilai yang baru), basis data dapat  menggunakan-ulang bentuk terkompilasinya.
 
 
cukup dulu postingan dari saya.
terima kasih :)
 
mohon kritik dan sarannya ya :)