Sabtu, 08 Januari 2011

Sejarah Database

PENGANTAR DATA BASE

Pemrosesan basis data dapat mempercepat pemerolehan informasi, meningkatkan pelayanan kepada pelanggan sehingga perusahaan memeperoleh keuntungan daya saing terhadap perusahaan lain. Beberapa contoh yang dapat memberikan gambaran seberapa jauh penerapan basis data:
Sistem perpustakaan
Memepermudah pengunjung untuk mencari informasi mengenai buku yang dibutuhkan, sehingga meringankan petugas perpustakaan dalam melayani pengunjung.
Sistem perbankan
Memepermudah nasabah dalam bertransaksi seperti menabung, manarik uang dari cabang manapun saja.

Sebelum masalah basis data dibahas maka istilah data dan informasi harus dimengerti terlebih dahulu, karena seringkali kedua istilah ini dipertukarkan atau dianggap sama. Data adalah fakta mengenai objek, orang, dan lain-lain. Data dinyatakan dengan nilai (angka, deretan karakter atau symbol). Sedangkan informasi adalah hasil analisis dan sintesis terhadap data. Atau dapat dikatakan informasi adalah sebagai data yang telah diorganisasikan kedalam bentuk yang sesuai dengan kebutuhan seseorang.

SEJARAH DATA BASE

Menurut sejarah, system pemrosesan basis data terbentuk setelah masa system pemrosesan manual dan system pemrosesan berkas. Sistim pemrosesan manual (berbasis kertas) merupakan bentuk pemrosesan yang menggunakan dasar berupa setumpuk rekaman yang disimpan pada rak-rak berkas. Jika berkas-berkas tersebut diperlukan, berkas tersebut harus dicari pada rak-rak tersebut.Sistem pemrosesan berkas merupakan system komputer, dimana sekelompok rekaman disimpan pada sejumlah berkas secara terpisah. Perancangan system ini didasarkan pada kebutuhan individual pengguna, bukan kebutuhan sejumlah pengguna. Sehingga setiap aplikasi menuliskan data tersendiri, alhasil ada kemungkinan data yang sama terdapat pada berkas-berkas lain yang digunakan oleh program aplikasi lain.

Konkretnya sistem pemrosesan berkas memiliki kekurangan dalam hal :
Kemubajiran data
Keterbatasan berbagi data
Ketidak konsistenan dan kurangnya integritas
Ketidak luwesan

penjelasan data Mahasiswa dengan menggunakan My SQL




Di sini saya menggunakan tabel ‘mahasiswa’ dengan struktur sbb:

view source
print
?
1.
CREATE TABLE `mahasiswa` (
2.
`nim` varchar(5),
3.
`nama` varchar(20),
4.
`alamat` text,
5.
`sex` varchar(1),
6.
`tgllahir` date,
7.
PRIMARY KEY (`nim`)
8.
);

serta beberapa buah data sebagai sampelnya.
view source
print
?
1.
INSERT INTO `mahasiswa` VALUES ('M0001', 'A', 'SOLO', 'L', '1979-10-20');
2.
INSERT INTO `mahasiswa` VALUES ('M0003', 'B', 'BANDUNG', 'P', '1980-11-07');
3.
INSERT INTO `mahasiswa` VALUES ('M0002', 'D', 'SOLO', 'L', '1981-10-12');
4.
INSERT INTO `mahasiswa` VALUES ('M0004', 'C', 'JAKARTA', 'P', '1980-09-18');
 
ketika kolom NIM diklik maka script akan menjalankan query berikut ini untuk menampilkan datanya view source
print
?
1.
SELECT * FROM mahasiswa ORDER BY nim

Sedangkan bila kolom NAMA MHS diklik, maka query yang dijalankan adalah
view source
print
?
1.
SELECT * FROM mahasiswa ORDER BY nama

Bila kolom ALAMAT diklik, maka query yang dijalankan adalah
view source
print
?
1.
SELECT * FROM mahasiswa ORDER BY alamat

Begitu seterusnya..

OK.. konsep dan ide dah dapat, so… kita bisa action sekarang. Ini dia scriptnya.
view source
print
?
01.
<h1>Data Mahasiswa</h1>
02.

03.
<!-- membuat kolom tabel dan link pengurutan -->
04.
<!-- perhatikan parameter by=... -->
05.

06.
<table border="1">
07.
<tr><th><a href="<?php $_SERVER['PHP_SELF']?>?by=nim">NIM</a></th><th><a href="<?php $_SERVER['PHP_SELF']?>?by=nama">Nama Mhs</a></th><th><a href="<?php $_SERVER['PHP_SELF']?>?by=alamat">Alamat</a></th><th><a href="<?php $_SERVER['PHP_SELF']?>?by=sex">Jenis Kelamin</a></th><th><a href="<?php $_SERVER['PHP_SELF']?>?by=tgl">Tgl Lahir</a></th></tr>
08.

09.
<?php
10.

11.
// koneksi ke mysql
12.
mysql_connect("dbhost", "dbuser", "dbpass");
13.
mysql_select_db("dbname");
14.

15.
// jika yang diklik kolom NIM
16.
if ($_GET['by'] == "nim") $orderBy = "nim";
17.
// jika yang diklik kolom NAMA MHS
18.
else if ($_GET['by'] == "nama") $orderBy = "nama";
19.
// jika yang diklik kolom ALAMAT
20.
else if ($_GET['by'] == "alamat") $orderBy = "alamat";
21.
// jika yang diklik kolom JENIS KELAMIN
22.
else if ($_GET['by'] == "sex") $orderBy = "sex";
23.
// jika yang diklik kolom TANGGAL LAHIR
24.
else if ($_GET['by'] == "tgl") $orderBy = "tgllahir";
25.
// jika tidak ada yang diklik (default)
26.
else $orderBy = "nim";
27.

28.
// query untuk menampilkan data berdasarkan field yang terurut
29.
// sesuai pilihan di atas
30.
$query = "SELECT * FROM mahasiswa ORDER BY ".$orderBy;
31.
$hasil = mysql_query($query);
32.
while ($data = mysql_fetch_array($hasil))
33.
{
34.
// tampilkan data
35.
echo "<tr><td>".$data['nim']."</td><td>".$data['nama']."</td><td>".$data['alamat']."</td><td>".$data['sex']."</td><td>".$data['tgllahir']."</td></tr>";
36.
}
37.

38.
?>
39.
</table>

Data Mahasiswa

MODEL ER

Model data adalah sekumpulan cara / peralatan / tool untuk mendeskripsikan data-data, hubungannya satu sama lain, semantiknya, serta batasan konsistensi.
Ada dua model data, yaitu : Entity Relationship Diagram (ERD) dan model relasional. Keduanya menyediakan cara untuk mendeskripsikan perancangan basis data pada peringkat logika.
  • Model ERD atau Conceptual Data Model (CDM) : model yang dibuat berdasarkan anggapan bahwa dunia nyata terdiri dari koleksi obyek-obyek dasar yang dinamakan entitas (entity) serta hubungan (relationship) antara entitas-entitas itu.
  • Model Relasional atau Physical Data Model (PDM) : model yang menggunakan sejumlah tabel untuk menggambarkan data serta hubungan antara data-data tersebut. Setiap tabel mempunyai sejumlah kolom di mana setiap kolom memiliki nama yang unik.

Bangun sebuah ER-Diagram untuk perusahaan asuransi mobil yang costumer–costumernya masing-masing memiliki satu atau lebih mobil. Setiap mobil memiliki 0 sampai banyak catatan kecelakaan. Serta bangun tabel-tabel untuk ER-diagram!
ERD :
Contoh ERD
Tabel untuk ERD :
Contoh PDM

Jelaskan perbedaan antara weak entity dan strong entity!
  • Strong entity (entitas kuat) : entitas yang mandiri, yang keberadaannya tidak bergantung pada keberadaan entitas yang lainnya. Instansiasi entitas kuat selalu memiliki karakteristik yang unik disebut identifier (sebuah atribut tunggal atau gabungan atribut-atribut yang secara unik dapat digunakan untuk membedakannya dari entitas kuat yang lain).
  • Weak entity (entitas lemah) : entitas yang keberadaannya sangat bergantung pada keberadaan entitas yang lainnya. Entitas lemah tidak memiliki arti apa-apa dan tidak dikehendaki kehadirannya dalam diagram ER tanpa kehadiran entitas di mana mereka bergantung.
Entitas di mana entitas lemah bergantung dinamakan identifying owner. Entitas lemah tidak memiliki identifier sendiri. Secara umum, dalam diagram ER entitas lemah memiliki atribut yang berperan sebagai partial identifier (identifier yang berfungsi secara sebagian).

Jelaskan konsep dari agregasi dan berikan contoh yang memakai konsep ini!
Agregasi adalah suatu keadaan di mana suatu relasi hanya dapat direalisasikan setelah relasi yang lain ada terlebih dahulu. Relasi yang bertipe agregasi tidak dimungkinkan ada jika relasi yang menjadi prasyaratnya tidak terealisasi.
Contoh agregasi :
Sesungguhnya agregasi dapat dipandang sebagaimana relasi pada umumnya (yang menghubungkan 2 entitas). Karena relasi ini dibentuk dari relasi lain (relasi prasyarat) yang secara kronologis lebih dulu terbentuk, maka pengimplementasiannya juga harus dilakukan setelah relasi prasyarat tersebut terimplementasikan. Selanjutnya kita tinggal meninjau derajat relasi dari relasi agregasinya.

Bagaimana jika terdapat set entitas yang sama muncul beberapa kali dalam satu set ER-Diagram? Mengapa hal ini harus dihindari? Jelaskan!
  • Untuk menghindari redundancy
  • Menghemat penyimpanan (storage) data
  • Mengurangi efektifitas dan kecepatan akses
  • Untuk menghindari terjadinya asinkronisasi data pada saat diupdate

Desain sebuah generalisasi – spesialisasi hirarki untuk sebuah perusahaan kendaraan bermotor. Perusahaan menjual sepeda motor, passenger car, van, dan bis. Tentukan penempatan atribut Anda pada setiap level hirarki.
 PBD Modul 1 - Generalisasi Spesialisasi

Jelaskan perbedaan antara total constraint dan partial constraint!
  • Total constraint adalah constraint yang mana data dalam entitas yang memiliki constraint tersebut terhubung secara penuh ke dalam entitas dari relasinya.
  • Constraint partial adalah constraint yang mana data dalam entitas yang memiliki constraint  tersebut terhubung ke dalam entitas dari relasinya.

Apa yang Anda ketahui dari relasi-relasi berikut? Serta buatlah contoh kasus dari relasi-relasi di atas!
PBD Modul 1 - Relasi 1
Relasi satu :
  • Entity 1 to entity 2 : kardinalitas : one to many dengan detail minimal 0 dan maksimalnya banyak. Dependensi : entitas 1 dan entitas 2 tidak saling ketergantungan.
  • Entity 2 to entity 1 : kardinalitas : many to one dengan detail minimal 1 dan maksimalnya 1. Dependensi : entitas 1 dan entitas 2 tidak saling ketergantungan.
Contoh kasus :
PBD Modul 1 - Contoh relasi 1
Keterangan : tabel Pembeli dan Mobil dengan relasi membeli. Pembeli boleh tidak membeli mobil, tetapi juga boleh membeli banyak mobil. Satu mobil boleh tidak ada yang membeli, tapi seandainya ada yang membeli, maksimal hanya ada satu orang pembeli.
 PBD Modul 1 - Relasi 2
Relasi dua :
  • Entity 3 to entity 4 : kardinalitas : one to many dengan detail  minimal 0 maksimalnya banyak. Dependensi : entitas 3 dan entitas 4  tidak saling ketergantungan.
  • Entity 4 ke entity 3 : kardinalitas : many to one dengan detail minimal 1 maksimal 1. Dependensi : entitas 4 dan entitas 3 tidak saling ketergantungan.
Contoh kasus :
 PBD Modul 1 - Contoh relasi 2
Keterangan : tabel Dosen dan Mahasiswa dengan relasi perwalian. Satu dosen bisa mempunyai banyak mahasiswa wali, bisa pula tidak punya. Satu mahasiswa harus mempunyai satu dosen wali.
PBD Modul 1 - Relasi 3
Relasi tiga
  • Entity 5 to entity 6 dan Entity 6 to entity 5 : kardinalitas : one to one dengan detail  minimal 0 maksimalnya 1. Dependensi : entitas 5 dan entitas 6  tidak saling ketergantungan.
Contoh kasus :
PBD Modul 1 - Contoh relasi 3
Keterangan : tabel Cowok dan Cewek dengan relasi menikah. Cowok tidak harus menikah, tapi boleh menikah hanya dengan satu cewek. Cewek boleh tidak menikah, tapi boleh menikah hanya dengan satu cowok. Diasumsikan tidak diperbolehkan adanya poligami.
PBD Modul 1 - Relasi 4
Relasi empat
  • Entity 7 to entity 8 : kardinalitas : one to one dengan detail  minimal 0 maksimalnya 1. Dependensi : entitas 7 dan entitas 8  tidak saling ketergantungan.
  • Entity 8 ke entity 7 : kardinalitas : one to one dengan detail minimal 1 maksimal 1. Dependensi : entitas 8 dan entitas 7 tidak saling ketergantungan.
Contoh kasus :
PBD Modul 1 - Contoh relasi 4
Keterangan : tabel Pegawai dan Departemen dengan relasi mengepalai. Pegawai tidak harus mengepalai departemen, tetapi hanya boleh mengepalai satu departemen saja. Masing-masing departemen harus mempunyai satu orang atasan.
PBD Modul 1 - Relasi 5
Relasi lima
  • Entity 9 to entity 10 : kardinalitas : many to many dengan detail  minimal 0 maksimalnya banyak. Dependensi : entitas 9 dan entitas 10 tidak saling ketergantungan.
  • Entity 10 ke entity 9 : kardinalitas : many to many dengan detail minimal 1 maksimal banyak. Dependensi : entitas 10 dan entitas 9 tidak saling ketergantungan.
Contoh kasus :
PBD Modul 1 - Contoh relasi 5
Keterangan : tabel Mata Kuliah dan Mahasiswa dengan relasi diambil. Mata kuliah tidak harus diambil oleh mahasiswa, tapi boleh diambil oleh banyak mahasiswa. Satu mahasiswa minimal mengambil satu mata kuliah dan boleh mengambil banyak mata kuliah. Namun pada kenyataannya, relasi many to many akan dijadikan sebuah tabel baru.
PBD Modul 1 - Relasi 7
Relasi tujuh
  • Entity 13 to entity 14 : kardinalitas : one to many dengan detail  minimal 0 maksimalnya banyak. Dependensi : entitas 13  menjadi parent dari  entitas 14.
  • Entity14 ke entity 13 : kardinalitas : many to one dengan detail minimal 1 maksimal 1. Dependensi : entitas 14 tergantung kepada  entitas 13.
Contoh kasus :
PBD Modul 1 - Contoh relasi 7
Keterangan : tabel Customer dan Asuransi dengan relasi mempunyai. Customer boleh tidak mempunyai asuransi, dan boleh mempunyai banyak asuransi. Satu asuransi harus dimiliki oleh satu orang customer.

Sebutkan tahapan–tahapan normalisasi serta penjelasannya! Dan apa perbedaan  antara 1 NF dan BCNF?
Normalisasi adalah proses penyusunan data untuk mengurangi terjadinya duplikasi dan inkonsistensi.
  • First Normal Form (1NF) : tidak boleh ada kelompok yang berulang pada tabel, penguraian atribut multivalued dan composit.
  • Second Normal Form (2NF) : atribut bukan kunci tidak boleh bergantung pada sebagian primary key, artinya atribut bukan kunci harus bergantung pada semua atribut yang termasuk primary key –> functional dependency pada primary key.
  • Third Normal Form (3NF) : tidak boleh ada atribut bukan kunci yang bergantung pada atribut selain primary key.
  • Boyce-Codd Normal Form (BCNF) : atribut yang ditentukan bukan bagian dari key attribute.
Perbedaan antara tahap 1NF dengan tahap BCNF :
  • 1NF :  tahap normalisasi dasar, yang mana masih belum sampai pada tingkat efektifitas maksimal, masih banyak kemungkinan terjadinya redundancy data atau duplikasi data.
  • BCNF : tahap normalisasi setelah 3NF , yang mana efektifitas telah mencapai maksimal, kemungkinan terjadinya redundancy data dan duplikasi data lebih kecil daripada 1NF.

PERBEDAAN SQL DAN PLSQL

PL/SQL (Procedural Language/Structured Query Language) merupakan sebuah penggabungan antara bahasa pemrograman prosedural (PL) dan SQL syntax. PL/SQL adalah fasilitas yang disediakan Oracle sehingga pengguna dapat memanfaatkan konsep pemrograman. Dalam PL/SQL dapat digunakan perintah untuk memanipulasi data yang ada dalam database Oracle. PL/SQL membentuk pemrograman terstruktur dalam memproses data.
Beberapa kelebihan PL/SQL dalam database Oracle :
· PL/SQL dapat digunakan di server sehingga client hanya dapat mengakses didalam
server.
· Penggunaan PL/SQL mudah dimengerti oleh setiap pengguna.
· PL/SQL dapat didesain khusus untuk database Oracle dalam menggunakan program
aplikasi.
Struktur PL/SQL
Struktur PL/SQL mirip dengan struktur bahasa pascal atau delphi yang menggunakan struktur blok, sehingga akan mempermudah pengertian dalam pemrograman dengan PL/SQL. Struktur Blok berisi perintah SQL dengan kondisi yang berbeda. Perintah PL/SQL dapat menangani kesalahan saat dijalankan. Setiap pengetikan dengan menggunakan PL/SQL dalam SQL*Plus selalu diakhiri dengan tanda /(slash). Sintaks penggunaan PL/SQL adalah sebagai berikut :
- Declare
- Begin
- Exception
- End
Pemanggilan PL/SQL :
· Langsung dari SQL Plus
· Dari Aplikasi
· Dari PL/SQL lainnya
Aturan penulisan:
· Dapat ditulis dalam beberapa baris (tidak harus dalam satu baris perintah
· Dapat berupa nested blok
· Karakter dan literal diapit oleh tanda kutip
· Setiap perintah/blok diakhiri dengan titik koma(;)
· Komentar diawali dengan tanda min dua kali(--) atau diapit dengan tanda /*…*/
· Pemberian nilai menggunakan :=
· Dapat menggunakan Bind Variable
· Tanda garis miring(/) berarti “run”
Contoh PL/SQL :
Sub Program :
a. Nama dari blok PL/SQL yang dapat menerima parameter dan dapat dipanggil terdapat
dua jenis:
· Sebuah prosedur yang digunakan untuk melakukan suatu kegiatan tertentu
· Sebuah fungsi yang digunakan untuk menghitung suatu nilai
b. Menggunakan struktur blok PL/SQL standart
c. Modular dapat dipergunakan berulang-ulang, ditingkatkan/dikembangkan dan mudah
dalam perawatan.
Struktur diatas dapat dijelaskan sebagai berikut :
1. Bagian Judul (Header)
Bagian ini hanya digunakan jika PL/SQL diberikan nama,misalnya untuk prosedur atau fungsi. Bagian ini berisi nama blok,daftar parameter, dan pengembalian hasil (return) jika blok adalahfungsi.
2. Bagian Deklarasi (declaration)
Bagian ini untuk membuat deklarasi mengenai semua variable dan konstanta yang direferensikan dalam pernyataan PL/SQL. Bagian deklarasi ini dimulai dengan perintah DECLARE. Jika tidak ada variable atau konstanta yang ingin dideklarasikan bagian ini boleh dihilangkan, bersifat optional.
3. Bagian Eksekusi (Execution)
Bagian ini memuat pernyataan-pernyataan PL/SQL yang akan ditulis. Bagian eksekusi ini harus dimulai dengan perintah BEGIN.
4. Bagian Perkecualian (Exception)
Bagian ini memuat cara menangani kesalahan-kesalahan (error) pada waktu eksekusi program PL/SQL, bersifat optional. Jika program tidak memuat cara menangani kesalahan, bagian ini boleh dihilangkan.Setiap pernyataan PL/SQL harus diakhiri dengan tanda titik koma(;) dan semua program PL/SQL harus diakhiri dengan perintah END.
Bentuk Umum Struktur PL/SQL
DECLARE
variabel tipe_data;
konstanta CONSTANT tipe_data := nilai;
...
BEGIN
statement_1;
statement_2;
...
EXCEPTION
WHEN nama_eksepsi THEN statement_untuk_mengatasi_error;
...
END;

Contoh Program (dengan exception):
SQL>SET SERVEROUTPUT ON
SQL>DECLARE
X Integer;
BEGIN
X := „Belajar Oracle‟;
DBMS_OUTPUT.PUT_LINE( TO_CHAR(X) );
EXCEPTION
WHEN VALUE_ERROR THEN
DBMS_OUTPUT.PUT_LINE („Kesalahan pada pengisian nilai‟);
END;

DBMS_OUTPUT
Merupakan paket yang disediakan oleh Oracle PL / SQL dan PUT_LINE merupakan salah satu prosedur yang dikemas. Menampilkan nilai-nilai pada SQL Plus * terminal yang harus diaktifkan dengan SERVEROUTPUT SET ON terlebih dahulu. Untuk menjalankan kode sampel ini, login ke SQL * Plus. PL / SQL blok diakhiri dengan tanda garis miring / atau garis byitself.
Tipe Data
a. Tipe Data dasar :
· Numerik
· NUMBER, BINARY_INTEGER, DEC, DOUBLE PRECISION, INTEGER, INT, NUMERIC.
· Karakter
· VARCHAR2, CHAR, LONG
· DATE
· BOOLEAN
· ROWID
b. Tipe Data tambahan : RECORD, ARRAY
Type data yang dapat dikenali dalam PL/SQL dapat berupa type data SQL dan type data
seperti :
1. BOOLEAN
Dipakai untuk menyatakan data logika, yaitu TRUE(benar), FALSE(salah), dan NULL(kosong).
2. BINARY_INTEGER
Digunakan untuk mendeklarasikan bilangan yang tidak mempunyai angka desimal. Tipe data NATURAL dan POSITIVE merupakan subset dari BINARY_INTEGER. 3. %TYPE Tipe data ini dipakai untuk menandakan bahwa variabelyang deklarasikan sama dengan tipe data dari kolom tabel tertentu.

4. %ROWTYPE
Tipe data ini menandakan bahwa sekelompok variabel adalah sama dengan tipe data
Dari row suatu tabel tertentu.
5. Tabel dan Record
Tipe data komposit untuk pemakaian yang lebih kompleks.
Variabel dan Konstanta
Pada bagian deklarasi ditempatkan variable dan konstanta yang dipakai oleh pernyataan PL/SQL yang dibuat.
· Variabel adalah sebuah peubah yang digunakan untuk menampung sebuah nilai di
memori komputer. Dapat menerima nilai baru atau sebaliknya diubah pada saat program
dieksekusi Bentuk Umum :
variable_name datatype [NOT NULL := value ];
Keterangan :
· Variable_name adalah nama variabel.
· Datatype adalah valid PL / SQL datatype.
· NOT NULL adalah sebuah spesifikasi opsional pada variabel.
· Nilai atau DEFAULT juga merupakan spesifikasi opsional, di mana anda bisa
menginisialisasi variabel.
· Setiap deklarasi variabel adalah pernyataan terpisah dan harus diakhiri dengan titik koma.
Contoh Deklarasi variabel

DECLARE
X integer;
Alamat varchar2(40);
No_induk char(8);
.....
BEGIN
X := 12;
Alamat := „Gelatik Dalam 391, Bandung‟;
No_induk := „DOG29549‟;
END;
Ketika variabel ditetapkan sebagai TIDAK NULL, Anda harus menginisialisasi variable ketika dideklarasikan. Contoh di bawah ini menyatakan dua variabel, salah satunya adalah tidak null.
DECLARE
salary number(4);
dept varchar2(10) NOT NULL := “HR Dept”;
Nilai variabel yang bisa berubah dalam pelaksanaan atau pengecualian bagian PL / SQL Block. Kita dapat menempatkan nilai ke variabel dalam dua cara yang diberikan dibawah ini.
1. Kita dapat langsung memberikan nilai pada variabel. Sintaks Umum adalah:
variable_name:= value;
2. Kita dapat menempatkan nilai ke variabel langsung dari kolom database dengan
menggunakan SELECT… INTO statement. INTO pernyataan.
Sintaks Umum adalah:
SELECT column_name
INTO variable_name
FROM table_name
[WHERE condition];
· Konstanta
Digunakan untuk menyimpan sebuah nilai di memori komputer. Nilai yang disimpan bersifat tetap (konstan). Nilai ditentukan pada saat deklarasi dibuat sehingga nilainya tetap pada saat program dieksekusikan.
Contoh Deklarasi Konstanta :
DECLARE
pi CONSTANT real := 3.14;
lebar CONSTANT integer := 100;
Komentar
· Digunakan untuk memudahkan proses maintenance
· Jenis komentar :

· /* ... */ : untuk beberapa baris komentar
· -- ... : untuk satu bari komentar
Contoh :
/* Ini adalah komentar Oracle */
-- Ini juga komentar Oracle
PL/SQL (Procedural Language/Structure Query Language) adalah suatu blok yang berisi skrip-skrip bahasa prosedural. PL/SQL merupakan bahasa pemrograman procedural. PL/SQL dapat meningkatkan kinerja database
Struktur Blok PL/SQL
• Terdapat tiga bagian :
– Bagian pendeklarasian tipe data (opsional)
– Bagian penulisan perintah
– Bagian eksepsi (opsional)
Khusus bagi oracle, ada istilah PL/SQL. PL/SQL yang merupakan singkatan dari Procedural Language/Structured Query Language merupakan sebuah penggabungan antara bahasa pemrograman prosedural (PL) dan SQL syntax.


SEGERA MELAKSANAKAN.
Oracle Corporation lazim menambah fungsionalitas setiap rilis paket dengan berturut-turut
dari Database Oracle.
<<label>>
DECLARE
TYPE / item / FUNCTION / PROCEDURE declarations
BEGIN
Statements
EXCEPTION
EXCEPTION handlers
END label;
Para <<label>> dan MENYATAKAN dan bagian PENGECUALIAN adalah opsional.
Pengecualian, kesalahan yang timbul selama pelaksanaan kode, memiliki satu dari dua jenis:
1. Predefined pengecualian
2. Ditetapkan pengguna pengecualian.
Tipe data utama dalam PL / SQL termasuk NOMOR, INTEGER, CHAR, VARCHAR2, DATE, TIMESTAMP, dll TEKS. Fungsi di PL / SQL adalah kumpulan SQL dan / PL SQL laporan yang melakukan tugas dan harus mengembalikan nilai ke lingkungan menelepon. fungsi yang didefinisikan pengguna digunakan untuk melengkapi ratusan fungsi yang dibangun oleh Oracle.
Ada dua jenis fungsi dalam PL / SQL. Fungsi tradisional ditulis dalam bentuk:
CREATE OR REPLACE FUNCTION <function_name> [(input/output variable
declarations)] RETURN return_type
[AUTHID <CURRENT USER | DEFINER>] <IS|AS>
[declaration block]
BEGIN
<PL/SQL block WITH RETURN statement>
RETURN <return_value>;
[EXCEPTION
EXCEPTION block]
RETURN <return_value>;
END;
Penulisan funsi tabel :
CREATE OR REPLACE FUNCTION <function_name> [(input/output variable
declarations)] RETURN return_type
[AUTHID <CURRENT USER | DEFINER>] [<AGGREGATE | PIPELINED>] <IS|
USING>
[declaration block]
BEGIN
<PL/SQL block WITH RETURN statement>
PIPE ROW <return type>;
RETURN;
[EXCEPTION
EXCEPTION block]
PIPE ROW <return type>;
RETURN;
END;
· Numeric variables
variable_name NUMBER(P[,S]) := VALUE;
untuk mendefinisikan sebuah variabel numerik, programmer menambahkan para NOMOR tipe variabel dengan definisi nama. Untuk menentukan presisi (opsional) (P) dan skala (opsional) (S), salah satu lebih lanjut dapat menambahkan ini dalam kurung bulat, dipisahkan dengan koma. ("Precision" dalam konteks ini mengacu pada jumlah digit yang variabel dapat menahan, "skala" mengacu pada jumlah digit yang dapat mengikuti titik desimal.) Sebuah pilihan tipe data lain untuk variabel numerik akan mencakup: binary_float, binary_double, Desember, desimal presisi, double, float, integer, int, numerik, nyata, smallint, binary_integer.
Character variables
variable_name VARCHAR2(L) := 'Text'; Untuk mendefinisikan sebuah variabel karakter, programmer biasanya menambahkan para VARCHAR2 tipe variabel dengan definisi nama. Ada berikut dalam kurung jumlah karakter maksimum yang dapat menyimpan variabel.
Tipe data lain untuk variabel karakter meliputi: varchar, char, panjang, mentah, panjang mentah, nchar, nchar2, CLOB, gumpalan, bfile PL / SQL fungsi analogi ke tertanam bahasa prosedural yang terkait dengan database relasional lainnya. Sybase ASE dan Microsoft SQL Server telah Transact-SQL, PostgreSQL memiliki PL / DB2 pgsql (yang mencoba untuk meniru PL / SQL ke mana), dan IBM termasuk SQL prosedural Bahasa, [3] yang sesuai dengan / standar SQL ISO SQL PSM .
Para desainer dari PL / SQL model sintaks pada bahwa Ada. Baik Ada dan PL / SQL memiliki Pascal sebagai nenek moyang yang sama, dan PL / SQL juga menyerupai Pascal dalam berbagai aspek. Struktur paket / PL SQL mirip struktur Pascal program dasar atau unit
Borland Delphi. Pemrogram dapat mendefinisikan data global-jenis, konstanta dan variable statis, publik dan swasta, dalam sebuah paket / PL SQL. PL / SQL juga memungkinkan untuk definisi kelas dan instantiate ini sebagai obyek dalam PL / SQL code. Ini menyerupai penggunaan dalam bahasa pemrograman berorientasi objek seperti Object Pascal, C dan Java. PL / SQL merujuk kepada kelas sebagai suatu "Abstrak Data Type" (ADT) atau "User Defined Type" (UDT), dan mendefinisikan sebagai tipe data SQL Oracle-sebagai lawan jenis / PL SQL yang ditetapkan pengguna, yang memungkinkan yang digunakan baik dalam Engine Oracle SQL dan Oracle PL / SQL engine. Constructor dan metode dari Tipe Data Abstrak ditulis dalam PL / SQL. The Tipe Data Abstrak dihasilkan dapat beroperasi sebagai kelas objek dalam PL / SQL. objek tersebut juga dapat bertahan sebagai nilai-nilai kolom dalam tabel database Oracle. PL / SQL pada dasarnya berbeda dari Transact-SQL, meskipun kesamaan dangkal. Porting kode dari satu ke yang lain biasanya melibatkan kerja non-sepele, bukan hanya karena perbedaan dalam fitur set dari dua bahasa, tetapi juga karena perbedaan yang sangat signifikan dalam cara menangani Oracle dan SQL Server dengan concurrency dan penguncian. Proyek Fyracle bertujuan untuk memungkinkan eksekusi PL / SQL code dalam open-source database Firebird.
Struktur Kontrol PL/SQL
Pembahasan kali ini menunjukkan kepada kita bagaimana menyusun aliran control melalui program PL/SQL. Kita akan mempelajari bagaimana perintah-perintah dihubungkan dengan struktur-struktur kontrol sederhana namun powerful, yang memiliki single entry dan exit point. Secara bersama-sama, struktur-struktur ini dapat menangani berbagai situasi. Penggunaan yang tepat akan menghasilkan program terstruktur yang baik.
Gambaran Struktur Kontrol PL/SQL
Berdasarkan structure theorem, setiap program komputer dapat ditulis menggunakan struktur kontrol dasar yang ditunjukkan dalam Gambar 4-1. Mereka dapat dikombinasikan dalam suatu cara yang diperlukan untuk menjawab permasalahan-permasalahan yang ada
Keuntungan Penggunaan PL/SQL
• Integrasi
– Memungkinkan Aplikasi dan Oracle Server menggunakan Library yang dapat
digunakan bersama-sama dalam bentuk stored procedure
– Peningkatan Kinerja
– Penggunaan PL/SQL, memungkinkan pengiriman perintah secara blok dalam
satu perintah yang secara drastis dapat menurunkan trafik jaringan
– Modular. Bentuk modular memungkinkan banyak kemudahan yang dapat
diperoleh
– Portable. PL/SQL adalah sarana yang asli dimiliki oleh Oracle Server, artinya, program PL/SQL dapat dengan mudah dipindahkan dari satu Oracle Server ke Oracle Server lainnya, meskipun dengan OS atau platform yang berbeda.
– Dapat mendeklarasikan Variable
– Dapat berupa Variable, Constant, Cursor dan Exception
– Penggunaan variable/identifier sangat memudahkan dalam membuat suatu perintah. Misalkan untuk membaca hasil suatu perintah SELECT untuk diproses dan hasilnya digunakan untuk melakukan proses lainnya
– Dapat menggunakan Struktur Kontrol :LOOP, FOR, WHILE
– Dapat menangani Error
– Error bisa dihasilkan/dibangkitkan oleh Oracle
– Server atau bisa dibangkitkan sendiri dengan sengaja
– Untuk mengantisipasi berbagai hal yang barangkali sulit untuk ditangani secara langsung menggunakan kontrol program
Kesimpulan nya perbedaan sql dan sql plus :
SQL
§ Sebuah bahasa
§ Standard ANSI
§ Keyword tidak dapat disingkat
§ Perintah-perintah memanipulasi data dan mendefinisikan didalam database
SQL PLUS
§ Sebuah lingkungan
§ Milik oracle
§ Keyword dapat disingkat
§ Perintah-perintah tidak dapat memanipulasi data di dalam database.

Data Base Desktop Paradox

Database desktop merupakan suatu program “Add-Ins”, yaitu program terpisah yang langsung terdapat pada Borland Delphi. Pada database desktop terdapat beberapa DBMS yang terintegrasi di dalamnya antara lain Paradox 7, Paradox 4, Visual dBase, Foxpro, Ms. SQL, Oracle, Ms. Acces, db2 dan interbase. Dari beberapa DBMS tersebut kita akan memilih salah satu yaitu Paradox yang akan dibahas lebih lanjut, khususnya Paradox 7. Dalam Paradox 7 ini, pada 1 file database hanya mengizinkan 1 tabel, berbeda dengan DBMS lain yang mengizinkan beberapa tabel pada 1 file database seperti pada Ms. Acces.

Struktur field pada Paradox 7 :

1. Field Name
Field Name merupakan nama pengenal kolom pada suatu tabel. Terdapat beberapa aturan dalam penulisan field name antara lain :
Panjang maksimum 25 karakter
Tidak boleh diawai dengan spasi tapi boleh mengandung spasi
Unik, artinya tidak ada nama kolom yang sama
Tidak boleh menggunakan tanda koma (,), tanda pipe (|), dan tanda seru (!)
Hindari kata-kata yang merupakan perintah SQL
2. Type
Digunakan untuk menetukan tipe data yang dapat ditampung dalam field.

3. Size
Merupakan ukuran dari panjang data yang diizinkan untuk suatu field.

4. Key
Dapat berupa primary key sebagai key yang membedakan untuk setiap baris kolom. Syarat untuk primary key adalah unik, artinya tidaka boleh ada data yang memiliki primary key yang sama.

Paradoks adalah sistem manajemen database relasional saat ini diterbitkan oleh Corel Corporation. Awalnya dirilis untuk DOS oleh Ansa Software, tapi versi Windows dirilis oleh Borland pada tahun 1992.

Paradox Untuk DOS
Paradox untuk DOS adalah sistem manajemen database relasional aslinya ditulis oleh Richard Schwartz dan Robert Shostak, dan dirilis oleh perusahaan mereka Ansa Software pada tahun 1985. Pada bulan September 1987, Borland dibeli Ansa Software, termasuk / mereka software DOS Paradox 2.0. versi klasik terkenal adalah 3,5 dan 4,5. Versi sampai 3.5 adalah evolusi dari 1,0. Versi 4.0 dan 4,5 telah retooled di Borland C + + windowing toolkit dan menggunakan skema akses memori yang berbeda diperpanjang.
Paradoks / DOS adalah database berbasis DOS sukses akhir tahun delapan puluhan dan awal tahun sembilan puluhan. Pada waktu itu, dBase dan klon xBase nya (FOxPro, Clipper) mendominasi pasar. pesaing terkenal lainnya adalah Clarion, DataEase, R: Base, dan DataFlex.
Fitur yang membedakan Paradox / DOS adalah:
Sebuah Query visual dengan implementasi Contoh yang didukung oleh mesin AI.
Efektif penggunaan memori (konvensional serta diperpanjang / diperluas) – tabel data caching dan terutama, indeks yang menyebabkan Paradox untuk melaksanakan tugas-tugas yang sangat cepat dalam kontras dengan keterampilan eksplisit diperlukan untuk optimasi kinerja xBase. [1]
Sebuah bahasa pemrograman inovatif Paradox Aplikasi Bahasa (PAL) yang dibaca, kuat, dan dapat direkam dari tindakan keyboard (bukan seperti perekaman makro Lotus 1-2-3).
Lotus menu seperti teks dan jendela yang merupakan antarmuka asli (kontras dengan dBase yang memiliki antarmuka baris perintah dengan menu berlapis di atas).
Khususnya di Paradox 1.0, dan 2.0 pengguna dan manual pemrograman memenangkan penghargaan dibaca [rujukan?] – Deras diilustrasikan mereka, baik meletakkan dan penjelasan ditulis dalam bahasa Inggris umum.

Paradox Untuk Windows
Paradox untuk Windows adalah produk jelas berbeda dihasilkan oleh tim yang berbeda dari pemrogram. Meskipun fitur utama dari produk DOS, QBE dan mesin database, adalah port menjaga kode DOS, ada sebuah terobosan besar dalam kompatibilitas dari PAL ke ObjectPAL dan perpindahan ke metafora desain GUI untuk Formulir dan Laporan. Perubahan ObjectPAL kontroversial tapi terpaksa karena PAL didasarkan pada tindakan merekam keystroke yang tidak setara di Windows. Sebuah bahasa pemrograman berbasis berdasarkan ide dari Hypercard digunakan di tempat merekam keystroke. Bentuk-bentuk dan Laporan desainer digunakan perangkat independen scaling termasuk kemampuan untuk bekerja dalam mode yang diperbesar untuk tata letak rinci. Hak-klik mouse digunakan untuk mengakses Formulir dan properti Laporan, terinspirasi oleh Xerox Alto dan Smalltalk, dengan cara yang sekarang hampir universal untuk program Windows. The ObjectPAL adalah (seperti Hypercard) terkait dengan objek visual – juga mengungkapkan dengan klik kanan. Properti inspeksi dan alat-alat tata letak bisa “ditempelkan up” untuk tinggal di layar, ide yang dipinjam dari NeXT dan sekarang cukup banyak digunakan pada Windows.
Untuk tahun pertama sekitar pembangunan kode berorientasi obyek ditulis dalam C dibantu oleh macro, sampai Turbo C + + yang tersedia di titik mana sisa bagian kode ditulis dalam C + +. Para manajer produk sampai pengiriman versi 1.0 Joe Duncan. Pengembangan dan tim QA berjumlah sekitar 30 orang.
Kedua Paradox untuk Windows dan Quattro Pro untuk Windows, sebuah proyek erat terkait, mulai pembangunan menggunakan versi beta dari Windows 3.0, pada musim semi 1990. Paradoks / Windows berakhir sampai tertunda sekitar satu tahun di luar rencana semula, pengiriman tahun 1993 awal. Alasan yang banyak, tapi tidak sepenuhnya mengejutkan untuk penulisan ulang besar, dalam bahasa OO dengan alat baru, beralih ke paradigma GUI, pada dasarnya apa yang sistem operasi versi pertama. Namun hal ini merupakan masalah besar bagi perusahaan dan Microsoft Access Pengarungan berhasil beberapa bulan menjelang Paradox untuk Windows, pemasaran utama dimenangkan oleh Microsoft.
Pada tahun 1990 Borland juga mulai bekerja pada sebuah tiruan dBASE internal untuk kedua DOS dan Windows, ditulis dalam assembler, yang direncanakan untuk kapal pada tahun 1992. Pada awal tahun 1992 menjadi jelas bahwa Ashton-Tate dalam kesulitan pada pengembangan versi Windows produk mereka dan diaktifkan Borland rencana, bukan mengakuisisi perusahaan dan pengurapan proyek internal mereka sebagai penerus resmi. Bagian dari akuisisi Ashton-Tate adalah database Interbase dan diputuskan bahwa Paradox / W harus dapat bekerja dengan Interbase serta mesin Paradox dan hal ini menyebabkan terciptanya sebuah mesin IDAPI berbasis di sekitar Interbase.
Meskipun padat tindak pada versi dengan perbaikan untuk kegunaan untuk pengguna entry-level, Paradox memudar dari pasar. Tersebut termasuk dalam penjualan produk-produk Borland ke WordPerfect, yang pada gilirannya dijual kembali sebagai WordPerfect masuk ke produk-produk keuangan, dan pada saat saat menulis Paradox untuk Windows, WordPerfect dan Quattro Pro untuk Windows semua dimiliki oleh Corel dan dijual sebagai bagian suite kantor mereka. dBASE untuk Windows datang terlambat untuk menjadi pemain signifikan di pasar Windows, paling dBASE programmer saat itu telah pindah ke Microsoft FoxBASE, alat database yang sangat mirip. Borland sendiri mempertahankan Interbase / server IDAPI dan memfokuskan upaya pada alat nya Delphi yang selama bertahun-tahun memberinya sebuah berpengaruh tapi kecil bagian dari pasar data berorientasi pengembang.

Corel Paradox
Corel memperoleh hak tertentu untuk mengembangkan dan memasarkan Paradox pada pertengahan tahun 90-an dan merilis Corel Paradox 8 pada tahun 1997. Paradoks ini juga dibundel dalam versi profesional yang WordPerfect Office suite. Hal ini telah merilis versi Office Professional Edition 9, 10, 11, 12, X3 dan X4. Versi terbaru dari Paradoks dirilis oleh Corel adalah 11.0.0.663 yang dipaketkan dengan Service Pack 1 X4

Paradox Users
Ada Paradox basis pengguna yang kuat, terutama berpusat di sekitar Komunitas Paradox dan newsgroup yang berhubungan. Banyak yang merasa dikecewakan oleh Borland dan Corel karena mereka percaya bahwa Paradox lebih unggul daripada semua DBMSes desktop lain di sekitar. [Rujukan?]
Meskipun ada banyak penggemar ObjectPAL, bahasa pemrograman untuk Paradox / Windows, PAL / script DOS tidak dapat dengan mudah bermigrasi; model objek dan peristiwa-benar berbeda memaksa pengembang menggunakan PAL untuk menulis ulang sepenuhnya aplikasi database mereka.

FIREBIRD

Menulis UDFS untuk Embedded Firebird SQL Server

      Apa UDFS ?
 fungsi User-defined (UDFS) adalah host-bahasa program untuk melaksanakan tugas sering dibutuhkan, melengkapi built-in fungsi SQL seperti MIN () dan MAX (). UDFS adalah ekstensi untuk server Firebird dan melaksanakan sebagai bagian dari proses server. UDFS kata lain dikompilasi fungsi dan terkait dengan perpustakaan-link secara dinamis.
 Apa yang Anda butuhkan
 Untuk membaca artikel ini secara efektif Anda membutuhkan pengetahuan lanjutan dari C + +, C # dan Firebird SQL. Juga Anda memerlukan memiliki VS 2005 dengan C # dan C + + dipasang untuk membangun sampel. sampel telah memiliki "baterai dalam": semua file yang dibutuhkan untuk Firebird embedded server dan penyedia ADO.NET ditempatkan dalam folder Firebird sampel dan digunakan dalam membangun pasca-acara.
 Contoh struktur proyek
 \ Firebird. - Folder dengan semua file yang dibutuhkan untuk Firebird Embedded SQL Server
 |? \ Meliputi. - Folder dengan *. h file yang dibutuhkan untuk mengkompilasi UDFS
 |? \ Lib - folder. Dengan perpustakaan statis diperlukan untuk menghubungkan UDFS
 \ MainApp. - Sampel dikelola aplikasi
 \ SampleUdf. - UDFS sampel dll
 Tentang sampel
 Proyek sampel menunjukkan bagaimana untuk mentransfer data biner (BLOB) dari satu tabel menggunakan parser UDFS objek berbasis ke meja lain:
 [Kode dari] MainApp. \ \ Batch.sql

CREATE TABLE "RowDataTable" (
 "KUNCI Id" INTEGER NOT NULL PRIMARY
 "Nilai" blob
 )

CREATE TABLE "FSTable" (
 "KUNCI Id" INTEGER NOT NULL PRIMARY
 , "Nama" VARCHAR (256)
 , "FullPath" VARCHAR (256)
 , "CreationTime" TIMESTAMP
 , "Atribut" INTEGER
 , "Ukuran" BIGINT
 ) Menciptakan UDFS berbasis data biner parser
 UDFS Deklarasi
 Firebird SQL memiliki sintaks berikut untuk menyatakan UDF:
 MENYATAKAN FUNGSI EKSTERNAL nama [datatype | CSTRING (int)
[, Datatype | CSTRING (int) ...]]
RETURNS (datatype [DENGAN NILAI] | CSTRING (int)) [FREE_IT]
RETURNS [] n PARAMETER
ENTRY_POINT 'entryname'
MODULE_NAME 'modulename'; Argumen
 Deskripsi
 nama
 Nama UDF untuk digunakan dalam pernyataan SQL, dapat berbeda dari nama
 fungsi tertentu setelah kata kunci ENTRY_POINT
 datatype
 Datatype dari masukan atau kembali parameter
 • Semua parameter masukan diteruskan ke UDF dengan referensi
 parameter Kembali • dapat lulus dengan nilai
 • Tidak bisa sebuah elemen array
 RETURNS
 Menentukan nilai kembali dari fungsi. Perhatikan bahwa sintaks tidak memungkinkan untuk menyatakan bahwa tidak ada yang kembali UDF
 DENGAN NILAI
 Menetapkan bahwa nilai kembali harus dilalui oleh nilai bukan oleh referensi
 CSTRING (int)
 Menentukan UDF yang mengembalikan string int byte null-diakhiri panjang
 FREE_IT
 Membebaskan memori dialokasikan untuk nilai kembali setelah selesai menjalankan UDF. Parameter ini harus digunakan dengan alokasi memori ib_util_malloc dalam pelaksanaan fungsi UDF, It's terkandung dalam:
 Header: Perpustakaan ib_util.h: DLL ib_util_ms.lib: ib_util.dll RETURNS PARAMETER n
 Menentukan bahwa fungsi mengembalikan parameter input ke-n; diperlukan untuk kembali
 Gumpalan
 'Entryname'
 Dikutip string menetapkan nama UDF dalam kode sumber dan disimpan dalam
 UDF library
 'Modulename'
 Dikutip file spesifikasi mengidentifikasi dll yang berisi UDF
 Semua dll dengan UDFS harus ditempatkan ke folder UDF di root aplikasi tempat fbembedded.dll disimpan. Ketika permintaan akan deklarasi untuk mesin Firebird eksekusi tidak memerlukan dll UDF untuk ditempatkan dalam folder UDF pada saat itu. Tapi ketika menjalankan beberapa query disimpan prosedur penciptaan yang berisi mesin panggilan UDF diperlukan akan memeriksa fungsi eksternal dalam dll.
 Berikut adalah beberapa contoh deklarasi UDF dari proyek sampel:
 [Kode dari] MainApp. \ \ Batch.sql

 MENYATAKAN FUNGSI EKSTERNAL CreateParser
 Blob
 RETURNS INTEGER DENGAN NILAI
 MODULE_NAME SampleUdf_CreateParser ENTRY_POINT '' 'SampleUdf'

MENYATAKAN FUNGSI EKSTERNAL DestroyParser
 INTEGER
 RETURNS INTEGER DENGAN NILAI
 MODULE_NAME SampleUdf_DestroyParser ENTRY_POINT '' 'SampleUdf'

MENYATAKAN FUNGSI EKSTERNAL GetName
 INTEGER
 RETURNS CSTRING (256)
 MODULE_NAME SampleUdf_GetName ENTRY_POINT '' 'SampleUdf'

MENYATAKAN FUNGSI EKSTERNAL GetCreationTime
 INTEGER
 RETURNS TIMESTAMP FREE_IT
 MODULE_NAME SampleUdf_GetCreationTime ENTRY_POINT '' 'SampleUdf'

MENYATAKAN FUNGSI EKSTERNAL
GetSize
 INTEGER
 RETURNS BIGINT
 ENTRY_POINT 'SampleUdf_GetSize' MODULE_NAME 'SampleUdf' UDFS pelaksanaan
 Seperti yang Anda tebak, saya menggunakan parameter tipe integer untuk mengirim objek parser yang dibuat dalam tumpukan SampleUdf.dll. Dengan parser segala objek sangat sederhana:
 [Kode dari] main.cpp. SampleUdf \ \
 kelas SampleParser
(
 std:: vector _buffer char ;
 size_t _pathLen;
 char * _name;
publik:
 SampleParser (std:: vector char & buffer)
 (
 _buffer.swap (buffer);
 Char * path = (char *) & _buffer.at (0);
 _pathLen = strlen (path);
 if (_pathLen 1 | | _pathLen = _buffer.size ())
 membuang std:: exception ("Invalid format buffer");
 _name = strrchr (path, '\ \');
 if (_name)! _name path =;
 lain + + _name;
 / / ON_MESSAGE ("- SampleParser dibuat -")
 )
 ~ SampleParser ()
 (
 / / ON_MESSAGE ("- SampleParser hancur -")
 )

 Char * GetName () (return _name;)
Char * GetFullPath () (return (char *) dan _buffer.at (0);)
 __int64 * GetCreationTime () (return (__int64 *) & _buffer.at (_pathLen + 1);)
 int * GetAttributes () (return (int *) & _buffer.at (_pathLen + 1 + sizeof (__int64));)
 __int64 * GetSize () (return (__int64 *) & _buffer.at (_pathLen + 1 +
 sizeof (__int64) + sizeof (int));)
);
UDF berikutnya menunjukkan bagaimana parser dibuat dan juga bekerja dengan data blob:
 extern "C" __declspec (dllexport) SampleParser * SampleUdf_CreateParser
(BLOBCALLBACK data)
(
 mencoba
 (
 std:: vector buffer char (data- blob_total_length);
 ISC_UCHAR * p = (ISC_UCHAR *) & buffer.front ();
 untuk (ISC_LONG i = 0; blob_number_segments i data- ; i + +)
 (
 ISC_USHORT panjang = 0;
 data- blob_get_segment (blob_handle data- , p, data- blob_max_segment, & panjang);
 p + = panjang;
 )
 kembali baru SampleParser (buffer);
 )
 catch (std:: exception & ex)
 (
 ON_ERROR (ex.what ());
 )
 menangkap (...)
 (
 ON_ERROR ("Kesalahan tidak diketahui");
 )
 return 0;
)
Dan sekarang mari kita menunjukkan bagaimana menggunakan objek parser. Fungsi berikut juga menunjukkan cara untuk:
 mengubah struktur FILETIME untuk Firebird TIMESTAMP menggunakan server tertanam alokasi memori, saat Anda mentransfer kepemilikan memori ke database engine extern "C" __declspec (dllexport) ISC_TIMESTAMP * SampleUdf_GetCreationTime (int * ptr)
(
 mencoba
 (
 SampleParser * diri = (SampleParser *) (* ptr);

 FILETIME localtime;
 if (::! FileTimeToLocalFileTime ((* FILETIME const) self- GetCreationTime (), & localtime))
 return 0;
 SYSTEMTIME st;
 if (::! FileTimeToSystemTime (& localtime, & st))
 return 0;

 ISC_TIMESTAMP * timestamp = (ISC_TIMESTAMP *) ib_util_malloc (sizeof (ISC_TIMESTAMP));

 timestamp- timestamp_time = (st.wHour * 3.600.000 st.wMinute + * 60.000
+ St.wSecond * 1000 st.wMilliseconds +) * 10;

 KATA hari = st.wDay;
 KATA bulan = st.wMonth;
 KATA tahun = st.wYear;

 / / Perhitungan sihir dari kode Penyedia ADO.NET
 if (bulan 2)
 bulan -= 3;
 lain
 (
 bulan + = 9;
 tahun -= 1;
 )
 KATA c = tahun / 100;
 KATA ya = tahun - 100 * c;

 timestamp- timestamp_date = ((146.097 * c) / 4 + (1.461 * ya) / 4
+ (153 * bulan + 2) / 5 + hari + 1.721.119-2.400.001);
 kembali timestamp;
 )
 catch (std:: exception & ex)
 (
 ON_ERROR (ex.what ());
 )
 menangkap (...)
 (
 ON_ERROR ("Kesalahan tidak diketahui");
 )
 return 0;
)
Seperti yang Anda bisa melihat semua parameter masukan dan keluaran dalam implementasi UDF adalah petunjuk, kecuali parameter output dinyatakan dengan modifier NILAI OLEH. Tapi pengubah ini tidak dapat digunakan dengan semua jenis data (misalnya itu tidak kompatibel dengan TIMESTAMP, tapi kompatibel dengan BIGINT - perilaku aneh ini untuk jenis ukuran yang sama, bukan?)
 Menggunakan UDFS
 Prosedur tersimpan berikutnya menunjukkan cara menggunakan parser dibuat:
 [Kode dari] MainApp. \ \ Batch.sql
 CREATE PROSEDUR TransferData
RETURNS ("counter" INTEGER)
AS
MENYATAKAN VARIABLE "tmp" INTEGER;
MENYATAKAN VARIABLE "parserPtr" INTEGER;
MENYATAKAN VARIABLE "Nilai" blob;
MENYATAKAN VARIABLE "Nama" VARCHAR (256);
MENYATAKAN VARIABLE "FullPath" VARCHAR (256);
MENYATAKAN VARIABLE "CreationTime" TIMESTAMP;
MENYATAKAN VARIABLE "Atribut" INTEGER;
MENYATAKAN VARIABLE "Ukuran" BIGINT;
BEGIN
 "Counter" = 0;
 UNTUK PILIH "Nilai" FROM "RowDataTable" KE: "Nilai" DO BEGIN
 SELECT CreateParser (: "Nilai") FROM RDB database $ KE: "parserPtr";
 JIKA ("parserPtr" IS NOT NULL) THEN BEGIN
 SELECT GetName (: "parserPtr") FROM RDB $ database KE: "Nama";
 SELECT GetFullPath (: "parserPtr") FROM RDB $ database KE: "FullPath";
 SELECT GetCreationTime (: "parserPtr") FROM RDB $ database KE: "CreationTime";
 SELECT GetAttributes (: "parserPtr") FROM RDB $ database KE: "Atribut";
 SELECT GetSize (: "parserPtr") FROM RDB $ database KE: "Ukuran";

 "Tmp GEN_ID" = ("FSTable_Generator", 1);
 INSERT INTO "FSTable" ("Id" Nama, "", "FullPath", "CreationTime",
"Atribut", "Ukuran")
 VALUES (: "tmp",: "Nama",: "FullPath",: "CreationTime",: "Atribut",: "Ukuran");
 "Counter" = "counter" + 1;

 SELECT DestroyParser (: "parserPtr") FROM RDB $ database KE: "tmp";
 AKHIR
 AKHIR
 Suspend;
AKHIR Tentang aneh bentuk panggilan:
 SELECT UDF_Name ( Parameters_List ) FROM RDB $ database KE Output_parameter Ini satu-satunya cara untuk membuatnya bekerja dalam tertanam dll server:)
 Di luar inisialisasi
 Berkat jendela caching ada kemungkinan untuk me-load dan menginisialisasi UDFS dll sebelum dimuat oleh mesin database Firebird. Dalam sampel saya kemungkinan ini digunakan untuk membuat beberapa callback berguna:
 [Kode dari \ MainApp. \ SampleProvider.cs]
 void delegasi swasta MessageCallbackDelegate (
[MarshalAs (UnmanagedType.LPStr)] pesan string);

 swasta statis MessageCallbackDelegate messageCallback;
 swasta statis MessageCallbackDelegate errorCallback;

 [Dllimport ("UDF / SampleUdf")]
 extern void swasta statis RegisterCallbacks (MessageCallbackDelegate
messageCallback, MessageCallbackDelegate errorCallback);

 statis SampleProvider ()
 (
 messageCallback = MessageCallback;
 errorCallback = ErrorCallback;
 RegisterCallbacks (messageCallback, errorCallback);
 )
[Kode dari] main.cpp. SampleUdf \ \
 typedef void (__stdcall * FCallback) (pesan * const char);
FCallback g_messageCallback = 0;
FCallback g_errorCallback = 0;
//------------------------------------------------ ---------------------------
# Define ON_MESSAGE (berantakan) (if (g_messageCallback) g_messageCallback (mess);)
# Define ON_ERROR (berantakan) (if (g_errorCallback) g_errorCallback (mess);)
//------------------------------------------------ ---------------------------
extern "C" __declspec (dllexport) void RegisterCallbacks (FCallback messageCallback,
FCallback errorCallback)
(
 g_messageCallback = messageCallback;
 g_errorCallback = errorCallback;
)
Dan ketika mesin database Firebird akan mencoba untuk UDFS beban dll itu akan menggunakan Anda sudah diambil dan diinisialisasi perpustakaan.
 Kesimpulan
 Maka dengan ini artikel yang Anda lihat, bagaimana proses berbagi ruang nama alamat memungkinkan Anda untuk menggunakan benda-benda asli atau dikelola UDFS Anda.
 Download source code.

ALJABAR RASIONAL

Bahasa yang dipakai pada model relasional disebut dengan bahasa query. Bahasa Query adalah suatu bahasa yang menyediakan fasilitas bagi user untuk mengakses informasi dari basis data. Pada umumnya level bahasa ini lebih tinggi dari bahasa pemrograman standar. Bahasa query dapat dikategorikan sebagai prosedural & non-prosedural.
Dalam bahasa prosedural, user menginstruksikan ke sistem agar membentuk serangkaian operasi dalam basis data untuk mengeluarkan hasil yang diinginkan. Dalam bahasa non-prosedural, user mendeskripsikan informasi yang diinginkan tanpa memberikan prosedur detail untuk menghasilkan informasi tersebut. Aljabar relasional merupakan bahasa query prosedural, sedangkan kalkulus relasional tupel dan kalkulus relasional domain adalah non-prosedural.
  • Aljabar Relasional
Aljabar relasional adalah sebuah bahasa query prosedural yang terdiri dari sekumpulan operasi dimana masukkannya adalah satu atau dua relasi dan keluarannya adalah sebuah relasi baru sebagai hasil dari operasi tersebut. Operasi-operasi dasar dalam aljabar relasional adalah : select, project, union, set difference, dan cartesian product. Disamping operasi-operasi dasar terdapat beberapa operasi tambahan seperti set intersection, natural join, division dan theta join.
Operasi-operasi Dasar
-       Select
Operasi select berfungsi untuk menyeleksi tuple-tuple yang memenuhi predikat yang diberikan dari sebuah tabel relasi. Simbol sigma “σ” digunakan untuk menunjukkan operasi select. Predikat muncul sebagai subscript dari σ dan kondisi yang diinginkan yang ditulis dalam predikat. Argumen diberikan dalam tanda kurung yang mengikuti σ dan berisi tabel relasi yang dimaksud.
Contoh penggunaan operasi select :
σNPM = 10296832(NILAI)
Perintah diatas berarti memilih tupel-tupel dari tabel NILAI yang memiliki atribut NPM bernilai 10296832. Hasil dari operasi diatas adalah :
10296832
KK021
60
75
10296832
KD132
40
30
-       Project
Operasi project berfungsi untuk memilih nilai atribut-atribut tertentu saja dari sebuah tabel relasi. Simbol phi “Π” digunakan untuk menunjukkan operasi project. Predikat muncul sebagai subscript dari Π dan hanya nama atribut yang diinginkan yang ditulis dalam predikat. Argumen diberikan dalam tanda kurung yang mengikuti Π dan berisi tabel relasi yang dimaksud.
Contoh penggunaan operasi project :
Π KDMK,SKS(MKUL)
Perintah diatas berarti memilih nilai atribut KDMK dan SKS dari tabel MKUL. Hasil dari operasi diatas adalah :
KK021
2
KD132
3
KU122
2
-       Union
Operasi union berfungsi mendapatkan gabungan nilai atribut dari sebuah tabel relasi dengan nilai atribut dari tabel relasi lainnya. Simbol “” digunakan untuk menunjukkan operasi union. Operasi union bernilai benar bila terpenuhi 2 kondisi, yaitu : Derajat dari 2 tabel relasi yang dioperasikan harus sama dan domain dari atribut yang dioperasikan juga harus sama.
Contoh penggunaan operasi union :
Misalkan terdapat 2 tabel relasi bernama ASLABSI dan ASLABTI seperti dibawah :
ASLABSI
NPM
Nama
Kelas
10107591
Eko Putra
3KA07
10107971
Keque Irfan
3KA07
18108012
Riza Rulham
3KA07
ASLABTI
NPM
Nama
Kelas
11107891
M. Ali Nurdin
3KA07
18108012
Riza Rulham
3KA07
11107611
Soli Kurniawan
3KA07
dan dari 2 tabel relasi diatas dilakukan operasi union sebagai berikut :
Π Nama(ASLABSI) Π Nama(ASLABTI)
Perintah diatas berarti menggabungkan hasil dari operasi project terhadap tabel ASLABSI dengan hasil dari operasi project terhadap tabel ASLABTI. Hasil dari operasi diatas adalah :
Eko Putra
Keque Irfan
M. Ali Nurdin
Riza Rulham
Soli Kurniawan
Perhatikan bahwa nama Riza Rulham hanya muncul sekali pada hasil operasi, ini karena relasi adalah set sehingga nilai duplikat dihilangkan.
-       Set Difference
Operasi set difference berfungsi untuk mendapatkan nilai yang ada dalam sebuah tabel relasi, tapi tidak ada dalam tabel relasi lainnya. Simbol “-“ digunakan untuk menunjukkan operasi set difference.
Contoh penggunaan operasi set difference :
Π Nama(ASLABSI) – Π Nama(ASLABTI)
Perintah diatas berarti mendapatkan nilai atribut Nama yang terdapat di tabel ASLABSI, tapi tidak terdapat di tabel ASLABTI. Hasil dari operasi diatas adalah :
Eko Putra
Keque Irfan
-       Cartesian Product
Operasi cartesian product berfungsi untuk mengkombinasikan informasi yang ada dalam 2 tabel relasi dan menghasilkan sebuah tabel relasi yang baru. Simbol “x“ digunakan untuk menunjukkan operasi set difference.
Contoh penggunaan operasi cartesian product :
ASLABTI x MKUL tabel relasi baru
Perintah diatas berarti mengkombinasikan seluruh tupel yang ada pada tabel ASLABTI dengan tabel MKUL. Hasil dari operasi diatas adalah :
11107891
M. Ali Nurdin
3KA07
KK021
P. Basis Data
2
11107891
M. Ali Nurdin
3KA07
KD132
SIM
3
11107891
M. Ali Nurdin
3KA07
KU122
Pancasila
2
18108012
Riza Rulham
3KA07
KK021
P. Basis Data
2
18108012
Riza Rulham
3KA07
KD132
SIM
3
18108012
Riza Rulham
3KA07
KU122
Pancasila
2
11107611
Soli Kurniawan
3KA07
KK021
P. Basis Data
2
11107611
Soli Kurniawan
3KA07
KD132
SIM
3
11107611
Soli Kurniawan
3KA07
KU122
Pancasila
2
Operasi-operasi Tambahan
-       Set Intersection
Operasi set intersection berfungsi untuk mendapatkan nilai yang ada dalam sebuah tabel relasi dan juga ada dalam tabel relasi lainnya. Simbol “∩“ digunakan untuk menunjukkan operasi set intersection.
Contoh penggunaan operasi set intersection :
Π Nama(ASLABSI) ∩ Π Nama(ASLABTI)
Perintah diatas berarti mendapatkan nilai atribut Nama yang terdapat di tabel ASLABSI dan juga terdapat di tabel ASLABTI. Hasil dari operasi diatas adalah :
Riza Rulham
-       Natural Join
Operasi natural join memungkinkan kita untuk menggabungkan operasi select dan cartesian product menjadi hanya 1 operasi saja. Simbol ““ digunakan untuk menunjukkan operasi natural join. Operasi natural join hanya menghasilkan tupel yang mempunyai nilai yang sama pada 2 atribut yang bernama sama pada 2 tabel relasi yang berbeda.
Contoh penggunaan operasi natural join :
Π NPM,KDMK,MID(MHS NILAI)
Perintah diatas berarti mendapatkan nilai dari operasi project dengan predikat NPM, KDMK, dan MID dan argumen hasil dari operasi natural join antara tabel MHS dengan tabel NILAI. Hasil dari operasi diatas adalah :
10296832
KK021
60
10296832
KD132
40
10296126
KD132
70
31296500
KK021
55
41296525
KU122
90
50096487
KD132
80
21196353
KU122
75
-       Division
Operasi division berfungsi untuk query yang memasukkan frase “untuk semua/seluruh”. Simbol “÷“ digunakan untuk menunjukkan operasi division.
Contoh penggunaan operasi division :
Misalkan terdapat 3 tabel relasi bernama ACCOUNT, BRANCH, dan DEPOSITOR seperti dibawah :
acc
dan dari 3 tabel relasi diatas dilakukan operasi division sebagai berikut :
Π customer-name,branch-name(DEPOSITOR ACCOUNT) ÷ Π branch-namebranch-city=”Brooklyn”(BRANCH))
Dengan asumsi operasi project awal adalah relasi r1 dan akhir adalah r2, perintah diatas berarti mendapatkan nama pelanggan yang muncul pada hasil relasi r2 untuk semua nama cabang hasil relasi r1. Hasil dari operasi diatas adalah :
Johnson
-       Theta Join
Operasi theta join berfungsi jika kita ingin mengkombinasikan tupel dari 2 tabel relasi dimana kondisi dari kombinasi tersebut tidak hanya kesamaan nilai dari 2 atribut bernama sama, tetapi kondisi yang diinginkan juga bisa menggunakan operator relasional (≤, <, =, >, ≥). Operasi theta join merupakan ekstensi dari natural join.