SQL PL

Tinggalkan komentar

ujuan

PL / SQL adalah teknologi yang memungkinkan SQL Oracle untuk bertindak seperti bahasa prosedural. Menjelang akhir hari ini, Anda harus

  • Memiliki pemahaman dasar PL / SQL
  • Memahami fitur yang membedakan PL / SQL SQL dari standar
  • Memiliki pemahaman tentang elemen dasar dari sebuah program / PL SQL
  • Mampu menulis sederhana PL / SQL program
  • Memahami bagaimana kesalahan ditangani dalam PL / SQL program
  • Menyadari bagaimana PL / SQL digunakan di dunia nyata

Pengenalan

Salah satu cara untuk memperkenalkan PL / SQL untuk memulai dengan menjelaskan standar Structured Query Language, atau SQL. SQL adalah bahasa yang memungkinkan para pengguna database relasional untuk berkomunikasi dengan database secara langsung. Anda dapat menggunakan perintah SQL untuk query database dan mengubah tabel dalam database. Ketika Anda menulis pernyataan SQL, Anda mengatakan database apa yang ingin Anda lakukan, bukan bagaimana melakukannya. The query optimizer memutuskan dengan cara yang paling efisien untuk mengeksekusi pernyataan Anda. Jika Anda mengirim serangkaian pernyataan SQL ke server di SQL standar, server mengeksekusi mereka satu demi satu dalam urutan kronologis.

PL / SQL adalah bahasa prosedural’s Oracle, melainkan terdiri dari standar bahasa SQL dan berbagai macam perintah yang memungkinkan Anda untuk mengontrol eksekusi pernyataan SQL sesuai dengan kondisi yang berbeda. PL / SQL juga dapat menangani error runtime. Pilihan seperti loop dan JIKA ... MAKA memberikan laporan PL / SQL kekuatan-bahasa pemrograman generasi ketiga. PL / SQL memungkinkan Anda untuk menulis interaktif, ramah-program pengguna yang dapat melewati nilai-nilai ke dalam variabel. Anda juga dapat menggunakan beberapa paket yang telah ditetapkan, salah satu yang dapat menampilkan pesan kepada pengguna.

18 hari meliputi fitur-fitur utama dari PL / SQL:

  • Pemrogram dapat mendeklarasikan variabel yang akan digunakan selama proses pernyataan.
  • Pemrogram dapat menggunakan rutin penanganan kesalahan program mencegah dari batal tiba-tiba.
  • Pemrogram dapat menulis program interaktif yang menerima masukan dari pengguna.
  • Membagi fungsi pemrogram dapat menjadi blok-blok logis kode. Teknik pemrograman modular mendukung fleksibilitas dalam pengembangan aplikasi.
  • pernyataan SQL dapat diproses secara simultan untuk performa lebih baik secara keseluruhan.

Jenis data dalam PL / SQL

Sebagian besar data jenis ini jelas mirip, tetapi pelaksanaan masing-masing memiliki penyimpanan yang unik dan persyaratan pemrosesan internal. Saat menulis PL / SQL blok, Anda akan menyatakan variable, yang harus tipe data yang valid. The subbagian berikut dengan singkat menjelaskan jenis data yang tersedia dalam PL / SQL.

Di PL / SQL Oracle menyediakan subtipe dari tipe data. Sebagai contoh, tipe data NUMBER memiliki subtipe disebut INTEGER. Anda dapat menggunakan subtipe di / Program PL SQL Anda untuk membuat tipe data yang kompatibel dengan tipe data dalam program-program lainnya, seperti program COBOL, terutama jika Anda embedding PL / kode SQL pada program lainnya. Subtipe adalah nama alternatif hanya untuk tipe data Oracle dan karena itu harus mengikuti aturan tipe data yang terkait.


CATATAN: Seperti dalam kebanyakan implementasi dari SQL, sensitivitas kasus bukan merupakan faktor dalam sintaks dari pernyataan. PL / SQL memungkinkan baik huruf besar atau huruf kecil dengan perintah tersebut.


Jenis Data String Karakter

Karakter tipe data string dalam PL / SQL, seperti yang mungkin Anda harapkan, yaitu data jenis umum didefinisikan sebagai memiliki nilai alpha-numeric. Contoh karakter string adalah nama-nama, kode, deskripsi, dan nomor seri yang menyertakan karakter.

toko CHAR tetap-panjang karakter string. Panjang maksimum adalah 32.767 byte CHAR, meskipun sulit membayangkan seperangkat nilai-panjang tetap di meja yang begitu lama.

Sintaks:
  CHAR (max_length) 

Subtipe: KARAKTER

VARCHAR2 toko variabel-panjang karakter string. Anda biasanya pengguna VARCHAR2 bukan CHAR untuk menyimpan-panjang data variabel, seperti nama seorang individu. Panjang maksimumVARCHAR2 juga 32.767 byte.

Sintaks:
  VARCHAR2 (max_length) 

Subtipe:, STRING VARCHAR

PANJANG juga menyimpan panjang karakter string-variabel, memiliki panjang maksimum 32760 byte. PANJANG biasanya digunakan untuk menyimpan teks panjang seperti komentar, meskipunVARCHAR2 dapat digunakan juga.

Jenis Data numerik

NOMOR toko semua jenis nomor dalam database Oracle.

Sintaks:
  NOMOR (max_length) 

Anda dapat menentukan presisi data s 'NOMOR dengan sintaks berikut:

  NOMOR (presisi, skala) 

Subtipe:, DECIMAL, DOUBLE PRECISION Desember, INTEGER, INT, numerik, REAL, SMALLINT, Float

PLS_INTEGER mendefinisikan kolom yang mungkin berisi bilangan bulat dengan tanda, seperti nomor negatif.

Jenis Data Biner

Jenis data biner yang menyimpan data dalam format biner, seperti grafik atau foto. Ini tipe data termasuk RAW dan LONGRAW.

The DATE Jenis Data

DATE adalah tipe data Oracle berlaku di mana untuk menyimpan tanggal. Ketika anda mendefinisikan suatu kolom sebagai, DATE Anda tidak menetapkan panjang, karena panjang lapangan DATEtersirat. Format tanggal Oracle adalah, misalnya, 01-Oktober-97.

Boolean

Boolean menyimpan nilai-nilai berikut: TRUE, FALSE, dan NULL. Seperti DATE, Boolean tidak memerlukan parameter ketika mendefinisikan sebagai kolom atau tipe data yang variabel.

ROWID

ROWID adalah pseudocolumn yang ada di setiap tabel dalam database Oracle.. Yang ROWID disimpan dalam format biner dan mengidentifikasi setiap baris dalam tabel menggunakan Indeks ROWID s sebagai pointer ke data.

Struktur SQL / Blok PL

PL / SQL adalah bahasa terstruktur-blok, yang berarti bahwa PL / SQL program dibagi dan ditulis dalam blok logika kode. Dalam SQL / PL blok kode, proses seperti manipulasi data atau query dapat terjadi. Bagian-bagian berikut SQL / blok PL dibahas dalam bagian ini:

  • Bagian MENYATAKAN berisi definisi dari variabel, dan objek lain seperti konstanta dan kursor. Bagian ini adalah bagian opsional SQL / blok PL.
  • Bagian PROSEDUR berisi perintah bersyarat dan pernyataan SQL dan adalah tempat blok dikendalikan. bagian ini adalah wajib hanya sebagian SQL / blok PL.
  • Bagian PENGECUALIAN mengatakan PL / blok SQL bagaimana menangani kesalahan tertentu dan-yang didefinisikan pengguna pengecualian. Bagian ini adalah bagian opsional SQL / blok PL.

CATATAN: blok adalah unit logis dari PL / SQL code, mengandung setidaknya bagian yang opsional PROSEDUR dan MENYATAKAN dan bagian PENGECUALIAN.


Berikut adalah struktur dasar dari PL / SQL block:

Sintaks:
 BEGIN - opsional, menunjukkan awal MENYATAKAN blok - opsional, definisi variabel BEGIN - wajib, menunjukkan awal bagian PENGECUALIAN prosedur - opsional, menunjukkan awal bagian AKHIR pengecualian - wajib, menunjukkan bagian akhir dari prosedur AKHIR - opsional , menunjukkan akhir blok

Perhatikan bahwa hanya bagian-bagian wajib SQL / PL adalah blok BEGIN END kedua dan pertama, yang membentuk bagian PROSEDUR. Tentu saja, Anda akan memiliki laporan di antaranya. Jika Anda menggunakan BEGIN pertama, maka Anda harus menggunakan AKHIR kedua, dan sebaliknya.

Komentar

Apa yang akan program tanpa komentar? bahasa pemrograman menyediakan perintah yang memungkinkan Anda untuk menempatkan komentar dalam kode Anda, dan PL / SQL tidak terkecuali.Komentar setelah setiap baris dalam struktur blok sampel sebelumnya menjelaskan setiap perintah. Komentar diterima di PL / SQL adalah sebagai berikut:

Sintaks:
  - Ini adalah komentar satu baris. 
  / * Ini adalah 
  banyak baris komentar .* / 

CATATAN: PL / SQL secara langsung mendukung Bahasa Manipulasi Data (DML) perintah dan query database. Namun, tidak mendukung Bahasa Kamus Data (DDL) perintah. Anda biasanya dapat menggunakan PL / SQL untuk memanipulasi data dalam struktur database, tetapi tidak untuk memanipulasi struktur-struktur.


MENYATAKAN Bagian

Bagian MENYATAKAN dari sebuah blok PL / SQL kode terdiri dari variabel, konstanta, definisi kursor, dan khusus tipe data. Sebagai SQL / programmer PL, Anda dapat mendeklarasikan semua jenis variabel dalam blok kode Anda. Namun, Anda harus menetapkan tipe data, yang harus sesuai dengan kaidah Oracle dari tipe data tertentu, untuk setiap variabel yang Anda tetapkan. Variabel juga harus sesuai dengan Oracle objek penamaan standar.

Variabel Tugas

Variabel adalah nilai-nilai yang dapat berubah dalam blok / PL SQL. PL / Variabel SQL harus diberi tipe data yang valid pada deklarasi dan dapat diinisialisasi jika perlu. Contoh berikut mendefinisikan suatu set variabel di bagian blok MENYATAKAN:

  MENYATAKAN 
    pemilik char (10); 
    tablename char (30); 
    byte nomor (10); 
    hari ini tanggal; 
ANALISIS:

Bagian MENYATAKAN blok tidak dapat dijalankan dengan sendirinya. Bagian MENYATAKAN dimulai dengan pernyataan MENYATAKAN. Kemudian variabel individu didefinisikan pada baris yang terpisah.Perhatikan bahwa setiap deklarasi variabel diakhiri dengan titik koma.

Variabel dapat juga diinisialisasi pada bagian MENYATAKAN. Sebagai contoh:

  MENYATAKAN 
    char pelanggan (30); 
    fiscal_year nomor (2): = '97 '; 

Anda dapat menggunakan simbol: = untuk menginisialisasi, atau menetapkan nilai awal untuk variabel di bagian MENYATAKAN. Anda harus menginisialisasi variabel yang didefinisikan sebagai NOT NULL.

  MENYATAKAN 
    char pelanggan (30); 
    fiscal_year nomor (2): TIDAK NULL = '97 '; 
ANALISIS:

Klausa NULL TIDAK dalam definisi fiscal_year menyerupai definisi kolom dalam pernyataan CREATE TABLE.

Konstan Tugas

Konstanta didefinisikan dengan cara yang sama bahwa variabel tersebut, tetapi nilai-nilai konstan statis; mereka tidak berubah. Dalam contoh sebelumnya, fiscal_year mungkin konstan.


CATATAN: Anda harus mengakhiri setiap deklarasi variabel dengan titik koma.


Definisi kursor

kursor adalah jenis lain dari variabel dalam PL / SQL. Biasanya ketika Anda memikirkan sebuah variabel, nilai tunggal datang ke pikiran. kursor adalah variabel yang menunjuk ke sebuah baris data dari hasil query. Dalam baris hasil set-ganda, Anda perlu cara untuk menelusuri setiap record untuk menganalisis data. kursor adalah hanya itu. Ketika PL / SQL blok melihat hasil query di blok tersebut, menggunakan kursor menunjuk masing-masing kembali baris. Berikut adalah contoh dari kursor yang ditetapkan dalam PL / SQL block:

INPUT:
  MENYATAKAN 
   employee_cursor kursor adalah 
      pilih * dari karyawan; 

kursor adalah serupa dengan melihat. Dengan menggunakan loop di bagian PROSEDUR, Anda dapat gulir kursor. Teknik ini ditutupi segera.

The JENIS% Atribut

JENIS% adalah atribut variabel yang mengembalikan nilai kolom tertentu meja. Alih-alih keras-kode tipe data di / SQL Anda blok PL, Anda dapat menggunakan JENIS% untuk menjaga konsistensi data jenis dalam blok kode Anda.

INPUT:
  MENYATAKAN 
    employee_cursor kursor adalah 
      emp_id pilih, emp_name dari karyawan; 
    id_num employees.emp_id% TYPE; 
    nama% employees.emp_name JENIS; 
ANALISIS:

Id_num variabel tersebut dinyatakan memiliki tipe data yang sama seperti emp_id pada tabel KARYAWAN.% JENIS menyatakan nama variabel memiliki tipe data sama dengan emp_name kolom dalam tabel KARYAWAN.

The ROWTYPE% Atribut

Variabel tidak terbatas pada nilai-nilai tunggal. Jika Anda mendeklarasikan sebuah variabel yang berhubungan dengan kursor ditetapkan, Anda dapat menggunakan% ROWTYPE atribut untuk menyatakan tipe data dari variabel yang harus sama seperti setiap kolom dalam satu baris seluruh data dari kursor. Dalam leksikon Oracle’s atribut ROWTYPE% menciptakan variabel catatan.

INPUT:
 employee_cursor kursor MENYATAKAN adalah emp_id pilih, emp_name dari karyawan;% employee_cursor employee_record ROWTYPE;
ANALISIS:

Contoh ini menyatakan sebuah variabel yang disebut employee_record. Atribut ROWTYPE% mendefinisikan variabel ini memiliki tipe data yang sama sebagai seluruh baris data dalamemployee_cursor tersebut. Variabel dideklarasikan menggunakan atribut ROWTYPE% disebut juga variabel agregat.

The ROWCOUNT% Atribut

PL / SQL% mempertahankan atribut ROWCOUNT hitungan baris bahwa laporan SQL di blok tertentu telah diakses di kursor.

INPUT:
  MENYATAKAN 
    kursor adalah employee_cursor 
      pilih emp_id, emp_name dari karyawan; 
    : = Employee_cursor records_processed% ROWCOUNT; 
ANALISIS:

Dalam contoh ini variabel records_processed menunjukkan jumlah baris yang saat ini PL / SQL blok diakses di employee_cursor tersebut.


PERINGATAN: Hati-hati penamaan konflik dengan nama tabel ketika mendeklarasikan variabel. Misalnya, jika Anda mendeklarasikan variabel yang memiliki nama sama dengan meja yang Anda coba akses dengan PL / SQL code, variabel lokal akan didahulukan dari nama tabel.


Bagian PROSEDUR

Bagian PROSEDUR adalah wajib hanya sebagian SQL / blok PL. Ini bagian dari blok panggilan variabel dan menggunakan cursors untuk memanipulasi data dalam database,. PROSEDUR Bagian adalah utama bagian blok bersyarat mengandung pernyataan dan perintah SQL.

BEGIN … END

Dalam satu blok, pernyataan BEGIN menunjukkan awal prosedur. Demikian pula, pernyataan END menandai akhir prosedur. Contoh berikut menunjukkan struktur dasar bagian PROSEDUR:

Sintaks:
  BEGIN 
    terbuka kursor; 
    condition1; 
      statement1; 
    condition2; 
      statement2; 
    condition3; 
      statement3; 
  . 
  . 
  . 
    dekat kursor; 
  AKHIR 

Perintah Kontrol kursor

Sekarang bahwa Anda telah belajar bagaimana untuk menentukan kursor dalam SQL / blok PL, Anda perlu tahu bagaimana untuk mengakses kursor didefinisikan. Bagian ini menjelaskan perintah-perintah kontrol kursor dasar: MENYATAKAN, OPEN, FETCH dan CLOSE.

MENYATAKAN

Sebelumnya hari ini Anda belajar bagaimana menentukan kursor di bagian MENYATAKAN blok. Pernyataan MENYATAKAN termasuk dalam daftar perintah kontrol kursor.

BUKA

Sekarang bahwa Anda telah menetapkan kursor Anda, bagaimana Anda menggunakannya? Anda tidak dapat menggunakan buku ini kecuali Anda membukanya. Demikian pula, Anda tidak dapat menggunakan kursor sampai Anda membukanya dengan perintah BUKA. Sebagai contoh:

Sintaks:
  BEGIN 
    employee_cursor terbuka; 
    statement1; 
    statement2; 
    . 
    . 
    . 

  AKHIR 

FETCH

FETCH Mempopulai variabel dengan nilai-nilai dari kursor. Berikut adalah dua contoh menggunakan FETCH: Satu Mempopulai sebuah variabel agregat, dan variabel individu Mempopulai lainnya.

INPUT:
  MENYATAKAN 
    employee_cursor kursor adalah 
      emp_id pilih, emp_name dari karyawan; 
    employee_record% employee_cursor ROWTYPE; 
  BEGIN 
    employee_cursor terbuka; 
    putaran 
      mengambil employee_cursor ke employee_record; 
    loop end; 
    dekat employee_cursor; 
  AKHIR 
ANALISIS:

Contoh sebelumnya menjemput baris saat ini kursor ke employee_record variabel agregat. Menggunakan loop untuk gulir kursor. Tentu saja, blok tersebut tidak benar-benar mencapai apa pun.

  MENYATAKAN 
    employee_cursor kursor adalah 
      pilih emp_id, emp_name dari karyawan; 
    id_num employees.emp_id% TYPE; 
    nama% employees.emp_name JENIS; 
  BEGIN 
    employee_cursor terbuka; 
    putaran 
      mengambil employee_cursor ke id_num, nama; 
    loop end; 
    dekat employee_cursor; 
  AKHIR 
ANALISIS:

Contoh ini menjemput baris kursor sekarang ke dalam id_num variabel dan nama, yang didefinisikan pada bagian MENYATAKAN.

CLOSE

Bila Anda telah selesai menggunakan kursor di blok, Anda harus menutup kursor, seperti biasa menutup buku ketika Anda selesai membacanya. Perintah yang Anda gunakan CLOSE.

Sintaks:
  BEGIN 
    employee_cursor terbuka; 
    statement1; 
    statement2; 
    . 
    . 
    . 
    dekat employee_cursor; 
  AKHIR 
ANALISIS:

Setelah kursor ditutup, set hasil query itu tidak ada lagi. Anda harus membuka kembali kursor untuk mengakses terkait set data.

Laporan Bersyarat

Sekarang kita sampai ke hal yang baik – laporan bersyarat yang memberi Anda kontrol atas bagaimana Anda SQL laporan diproses. Laporan bersyarat dalam PL / SQL mirip dengan dalam bahasa generasi ketiga yang paling.

JIKA … MAKA

The JIKA ... MAKA pernyataan mungkin adalah pernyataan bersyarat paling akrab kebanyakan programmer. The JIKA ... MAKA pernyataan menentukan kinerja tindakan tertentu jika kondisi tertentu terpenuhi. Struktur dari IF ... THEN pernyataan adalah sebagai berikut:

Sintaks:
  Condition1 JIKA KEMUDIAN 
    statement1; 
  END IF; 

Jika Anda memeriksa dua kondisi, Anda dapat menulis laporan Anda sebagai berikut:

Sintaks:
  Condition1 JIKA KEMUDIAN 
    statement1; 
  ELSE 
    statement2; 
  END IF; 

Jika Anda memeriksa lebih dari dua kondisi, Anda dapat menulis pernyataan Anda sebagai berikut:

Sintaks:
  Condition1 JIKA KEMUDIAN 
    statement1; 
  ELSIF condition2 KEMUDIAN 
    statement2; 
  ELSE 
    statement3; 
  END IF; 
ANALISIS:

Contoh terakhir menyatakan: Jika condition1 terpenuhi, kemudian melakukan statement1, jika condition2 terpenuhi, kemudian melakukan statement2; dinyatakan, melakukan statement3. JIKA ... MAKA laporan mungkin juga diulang dalam laporan lain dan / atau looping.

Loop

Loop dalam SQL / blok PL memungkinkan laporan di blok tersebut untuk diproses secara terus menerus selama kondisi tertentu ada. Ada tiga jenis loop.

LOOP adalah infinite loop, yang paling sering digunakan untuk gulir kursor. Untuk mengakhiri jenis loop Anda harus menentukan kapan harus keluar. Sebagai contoh, di bergulir kursor Anda akan keluar loop setelah baris terakhir di kursor telah diproses:

INPUT:
  BEGIN 
  employee_cursor terbuka; 
  LOOP 
    FETCH employee_cursor ke employee_record; 
    EXIT KETIKA% employee_cursor NOTFOUND; 
    statement1; 
    . 
    . 
    . 
  END LOOP; 
  dekat employee_cursor; 
  END, 

NOTFOUND% adalah atribut kursor yang mengidentifikasi bila tidak ada banyak data yang ditemukan di kursor. Pintu keluar contoh sebelumnya loop bila tidak ada banyak data yang ditemukan. Jika Anda menghilangkan pernyataan dari loop, maka loop akan terus selamanya.

The WHILE-LOOP mengeksekusi perintah sementara kondisi tertentu adalah TRUE. Bila kondisi ini tidak lagi benar, loop kembali ke laporan berikutnya.

INPUT:
  MENYATAKAN 
    payment_cursor kursor adalah 
      pilih cust_id, pembayaran, total_due dari payment_table; 
    cust_id% payment_table.cust_id JENIS; 
    pembayaran% payment_table.payment JENIS; 
    total_due% payment_table.total_due JENIS; 
  BEGIN 
    payment_cursor terbuka; 
    <Pembayaran total_due LOOP WHILE 
      FETCH payment_cursor ke cust_id, pembayaran, total_due; 
      EXIT KETIKA% payment_cursor NOTFOUND; 
      masukkan ke underpay_table 
      nilai (cust_id, 'masih berhutang'); 
  END LOOP; 
    dekat payment_cursor; 
  END; 
ANALISIS:

Contoh sebelumnya menggunakan WHILE-LOOP untuk menggulir kursor dan untuk menjalankan perintah dalam loop selama kondisi pembayaran total_due <terpenuhi.

Anda dapat menggunakan FOR-LOOP di blok sebelumnya untuk secara implisit mengambil baris kursor sekarang ke dalam variabel ditetapkan.

INPUT:
  MENYATAKAN 
    payment_cursor kursor adalah 
      pilih cust_id, pembayaran, total_due dari payment_table; 
    cust_id% payment_table.cust_id JENIS; 
    pembayaran% payment_table.payment JENIS; 
    total_due% payment_table.total_due JENIS; 
  MULAI 
    payment_cursor terbuka; 
    Pay_rec UNTUK DI payment_cursor LOOP 
      JIKA pay_rec.total_due <pay_rec.payment KEMUDIAN 
        masukkan ke underpay_table 
        nilai (pay_rec.cust_id, 'masih berhutang'); 
      END IF; 
    END LOOP; 
    dekat payment_cursor; 
  END; 
ANALISIS:

Contoh ini menggunakan FOR-LOOP untuk menggulir kursor. Para FOR-LOOP adalah melakukan suatu FETCH implisit, yang dihilangkan saat ini. Juga, perhatikan bahwa atribut NOTFOUND% telah dihilangkan. Atribut ini tersirat dengan FOR-LOOP, karena itu, ini dan contoh sebelumnya menghasilkan hasil dasar yang sama.

Bagian PENGECUALIAN

Bagian PENGECUALIAN adalah bagian opsional dari setiap SQL / blok PL. Jika bagian ini dihilangkan dan kesalahan ditemui, blok akan dihentikan. Beberapa kesalahan yang mungkin tidak ditemui membenarkan penghentian segera blok, sehingga bagian PENGECUALIAN dapat digunakan untuk menangani error tertentu atau pengecualian didefinisikan pengguna secara teratur. Pengecualian dapat didefinisikan pengguna, meskipun banyak pengecualian yang telah ditetapkan oleh Oracle.

Budidaya Pengecualian

Pengecualian dibesarkan di blok dengan menggunakan perintah RAISE. Pengecualian dapat ditingkatkan secara eksplisit oleh pemrogram, sedangkan kesalahan database internal secara otomatis, atau secara implisit, dibangkitkan oleh database server.

Sintaks:
 MULAI MENYATAKAN exception_name PENGECUALIAN; BEGIN IF kondisi THEN RAISE exception_name; END IF; PENGECUALIAN KETIKA KEMUDIAN exception_name pernyataan; AKHIR; AKHIR;
ANALISIS:

Blok ini menunjukkan dasar-dasar secara eksplisit meningkatkan pengecualian. Pertama exception_name ini dideklarasikan dengan menggunakan pernyataan PENGECUALIAN. Pada bagianPROSEDUR, kecuali ditinggikan menggunakan RAISE jika kondisi tertentu terpenuhi. The RAISE kemudian referensi bagian PENGECUALIAN blok, di mana tindakan yang tepat diambil.

Penanganan Pengecualian

Contoh sebelumnya ditangani pengecualian di bagian PENGECUALIAN blok. Kesalahan dapat dengan mudah ditangani di PL / SQL, dan dengan menggunakan pengecualian, PL / SQL block dapat terus berjalan dengan kesalahan atau mengakhiri anggun.

Sintaks:
  PENGECUALIAN 
    KETIKA KEMUDIAN exception1 
      statement1; 
    KETIKA KEMUDIAN exception2 
      statement2; 
    KETIKA ORANG LAIN KEMUDIAN 
      statement3; 
ANALISIS:

Contoh ini menunjukkan bagaimana bagian PENGECUALIAN akan terlihat jika Anda memiliki lebih dari satu pengecualian. Contoh ini mengharapkan dua pengecualian (exception1 danexception2) ketika menjalankan blok ini. KETIKA ORANG LAIN memberitahu statement3 untuk mengeksekusi jika ada pengecualian lain terjadi pada saat blok sedang diproses. KETIKA ORANG LAIN memberi Anda kontrol atas setiap kesalahan yang mungkin terjadi di blok tersebut.

Mengeksekusi SQL / Blok PL

PL / SQL biasanya dibuat menggunakan editor host dan dieksekusi seperti file skrip SQL normal. PL / SQL menggunakan titik koma untuk mengakhiri setiap pernyataan di blok – dari tugas variabel untuk perintah manipulasi data. Garis miring (/) terutama terkait dengan file script SQL, tapi PL / SQL juga menggunakan garis miring untuk mengakhiri blok dalam sebuah file script. Cara termudah untuk memulai PL / SQL blok dengan mengeluarkan perintah START, disingkat STA atau @.

Anda PL / SQL script file akan terlihat seperti ini:

Sintaks:
  / * File ini disebut * proc1.sql / 
  BEGIN 
    MENYATAKAN 
      ... 
    BEGIN 
      ... 
      laporan; 
      ... 
    PENGECUALIAN 
      ... 
    END; 
  END; 
  / 

Anda jalankan Anda PL / SQL script file sebagai berikut:

  SQL> mulai proc1 atau 
  SQL> sta proc1 atau 
  SQL> @ proc1 

CATATAN: PL / SQL file script dapat dijalankan dengan menggunakan perintah START atau karakter @. PL / SQL file naskah juga dapat disebut dalam lain / PL SQL file, shell script, atau program lainnya.


Menampilkan Output untuk Pengguna yang

Terutama ketika menangani pengecualian, Anda mungkin ingin untuk menampilkan output untuk menjaga pengguna informasi tentang apa yang terjadi. Anda dapat menampilkan output untuk menyampaikan informasi, dan Anda dapat menampilkan pesan kesalahan kustom Anda sendiri, yang mungkin akan lebih masuk akal untuk pengguna dari jumlah kesalahan. Mungkin Anda ingin pengguna untuk menghubungi administrator database jika kesalahan terjadi selama pemrosesan, bukan untuk melihat pesan yang tepat.

PL / SQL tidak menyediakan suatu metode langsung untuk menampilkan output sebagai bagian dari sintaks, tetapi hal itu memungkinkan Anda untuk menelepon sebuah paket yang melayani fungsi ini dari dalam blok. Paket ini disebut DBMS_OUTPUT.

  PENGECUALIAN 
    KETIKA KEMUDIAN zero_divide 
      DBMS_OUTPUT.put_line ('ERROR: pembagi IS ZERO.. ANDA SEE DBA'); 
ANALISIS:

Oracle standar ZERO_DIVIDE adalah pengecualian. Sebagian besar kesalahan umum yang terjadi selama proses program ini akan ditetapkan sebagai pengecualian dan dibesarkan secara implisit (yang berarti bahwa Anda tidak perlu meningkatkan kesalahan pada bagian PROSEDUR blok).

Jika pengecualian ini ditemui selama pemrosesan blok, pengguna akan melihat:

INPUT:
  SQL> @ block1 

  ERROR: pembagi IS ZERO.  LIHAT DBA ANDA. 
  PL / SQL prosedur berhasil diselesaikan. 

Bukankah itu pesan tampak ramah dari:

INPUT / OUTPUT:
  SQL> @ block1 
  mulai 
  * 

  ERROR pada baris 1: 
  ORA-01476: pembagi sama dengan nol 
  ORA-06512: di baris 20 

Kontrol transaksional dalam PL / SQL

Pada 11 Hari, “Pengendalian Transaksi,” dibahas kita perintah kontrol transaksi COMMIT, ROLLBACK, dan SAVEPOINT. Perintah ini memungkinkan pemrogram untuk mengontrol kapan transaksi sebenarnya ditulis ke database, seberapa sering, dan ketika mereka harus dibatalkan.

Sintaks:
  BEGIN 
    MENYATAKAN 
      ... 
    BEGIN 
      laporan ... 
      IF kondisi THEN 
        COMMIT; 
      ELSE 
        ROLLBACK; 
      END IF; 
      ... 
    PENGECUALIAN 
      ... 
    END; 
  END; 

Hal yang baik tentang PL / SQL adalah bahwa Anda dapat mengotomatisasi penggunaan kontrol transaksional perintah daripada terus-menerus memantau transaksi besar, yang bisa jadi sangat membosankan.

Puting Semuanya Bersama

Sejauh ini, Anda telah diperkenalkan kepada PL / SQL, telah menjadi akrab dengan tipe data yang didukung, dan akrab dengan fitur-fitur utama dari SQL / blok PL. Kau tahu bagaimana cara mendeklarasikan variabel lokal, konstanta, dan kursor. Anda juga telah melihat bagaimana menanamkan SQL pada bagian PROSEDUR, memanipulasi kursor, dan menaikkan pengecualian. Ketika kursor telah dibangkitkan, Anda harus memiliki pemahaman dasar tentang bagaimana untuk menangani hal itu di bagian PENGECUALIAN blok. Sekarang Anda siap untuk bekerja dengan beberapa contoh praktis dan membuat blok dari BEGIN ke END. Pada akhir bagian ini, Anda benar-benar harus memahami bagaimana bagian-bagian dari suatu SQL / blok PL berinteraksi satu sama lain.

Contoh Tabel dan Data

Kami akan menggunakan dua meja untuk membuat PL / SQL blok. PAYMENT_TABLE mengidentifikasi pelanggan, berapa banyak ia telah membayar, dan jumlah total yang jatuh tempo.PAY_STATUS_TABLE belum berisi data. Data akan dimasukkan ke dalam PAY_STATUS_TABLE sesuai dengan kondisi tertentu dalam PAYMENT_TABLE.

INPUT:
  SQL> pilih * 
    2 dari payment_table;
OUTPUT:
  PEMBAYARAN PELANGGAN TOTAL_DUE 
  -------- -------- --------- 
  ABC 90,50 150,99 
  AAA 79,00 79,00 
  BBB 950,00 0,00 1000 
  CCC 27,50 27,50 
  DDD 350,00 500,95 
EEE         67.89     67.89
FFF        555.55    455.55
GGG        122.36    122.36
HHH         26.75      0.00
9 rows selected.
INPUT:
 SQL> describe pay_status_table
OUTPUT:
  Name                            Null?  Jenis 
 ------------------------------ --------- ----
 CUST_ID                         NOT NULL CHAR(3)
 STATUS                          NOT NULL VARCHAR2(15)
 AMT_OWED                                 NUMBER(8,2)
 AMT_CREDIT                               NUMBER(8,2)
ANALISIS:

DESCRIBE is an Oracle SQL command that displays the structure of a table without having to query the data dictionary. DESCRIBE and other Oracle SQL*Plus commands are covered on Day 20, “SQL*Plus.”

A Simple PL/SQL Block

This is how the PL/SQL script ( block1.sql ) file looks:

INPUT:
 set serveroutput pada BEGIN MENYATAKAN AmtZero PENGECUALIAN;% JENIS payment_table.cust_id cCustId; fPayment% payment_table.payment JENIS;% JENIS payment_table.total_due fTotalDue; payment_cursor kursor adalah cust_id pilih, pembayaran, total_due dari payment_table, nomor fOverPaid (8,2); fUnderPaid nomor (8,2); BEGIN payment_cursor terbuka; loop fetch payment_cursor ke cCustId, fPayment, fTotalDue; keluar ketika payment_cursor NOTFOUND%, jika (fTotalDue = 0) kemudian meningkatkan AmtZero; berakhir jika, jika (> fTotalDue fPayment) kemudian fOverPaid: = fPayment - fTotalDue; masukkan ke pay_status_table (cust_id, status, amt_credit) nilai (cCustId, 'Lebih', fOverPaid); elsif (fPayment <fTotalDue) kemudian fUnderPaid: = - fTotalDue fPayment Dibayar; masukkan ke pay_status_table (cust_id, status, amt_owed) nilai (cCustId, 'masih berhutang', fUnderPaid); menyisipkan lain ke dalam nilai-nilai pay_status_table (cCustId, 'Disetor Penuh', null, null); akhir jika; loop akhir; payment_cursor dekat; PENGECUALIAN ketika AmtZero kemudian DBMS_OUTPUT.put_line ('ERROR : jumlahnya nol.. Anda Lihat pengawas '); ketika LAIN kemudian DBMS_OUTPUT.put_line (' ERROR: Kesalahan yang tidak diketahui. Lihat DBA '); AKHIR; AKHIR; /
ANALISIS:

Bagian MENYATAKAN enam mendefinisikan variabel lokal, serta kursor yang disebut payment_cursor. Bagian PROSEDUR dimulai dengan pernyataan BEGIN kedua di mana langkah pertama adalah untuk membuka kursor dan mulai loop. Perintah FETCH melewati nilai saat ini di kursor ke dalam variabel-variabel yang didefinisikan dalam bagian MENYATAKAN. Selama loop menemukan catatan di kursor, pernyataan itu membandingkan jumlah yang dibayar oleh pelanggan dengan jumlah yang jatuh tempo. Kelebihan dan kekurangan bayar dihitung sesuai dengan jumlah yang dibayar, dan kami menggunakan yang dihitung jumlah memasukkan nilai-nilai ke dalam PAY_STATUS_TABLE. loop itu berakhir, dan kursor menutup. Bagian PENGECUALIAN menangani kesalahan yang mungkin terjadi selama pemrosesan.

Sekarang jalankan PL / SQL script file dan melihat apa yang terjadi.

INPUT:
  SQL> @ block1
OUTPUT:
  Input dipotong ke 1 karakter 
  ERROR: Zero jumlahnya.  Lihat atasan Anda. 
  PL / SQL prosedur berhasil diselesaikan. 

Sekarang Anda tahu bahwa jumlah yang tidak benar muncul di kolom total karena, Anda dapat memperbaiki jumlah dan menjalankan script lagi.

INPUT / OUTPUT:
  SQL> update payment_table 
    2 set total_due = 26,75 
    3 mana cust_id = 'HHH'; 

  1 baris diperbarui. 

  SQL> commit; 

  Komit lengkap. 

  SQL truncate table> pay_status_table; 

  Meja dipotong. 

CATATAN: Contoh ini memotong PAY_STATUS_TABLE untuk membersihkan meja isi; jangka berikutnya pernyataan itu akan terisi kembali tabel. Anda mungkin ingin menambahkan pernyataan TABLE truncate ke / SQL Anda blok PL.


INPUT / OUTPUT:
  SQL> @ block1 

  Input dipotong ke 1 karakter 
  PL / SQL prosedur berhasil diselesaikan. 

Sekarang Anda dapat memilih dari PAY_STATUS_TABLE dan melihat status pembayaran setiap pelanggan.

INPUT / OUTPUT:
  SQL> pilih * 
    2 dari pay_status_table 
    3 order menurut status; 
  STATUS PELANGGAN AMT_OWED AMT_CREDIT 
  -------- -------------- --------- ----------- 
  FFF Lebih Dibayar 100,00 
  AAA Disetor Penuh 
  CCC Disetor Penuh 
  Eee Disetor Penuh 
  GGG Disetor Penuh 
  HHH Disetor Penuh 
  ABC masih berhutang 60,49 
  DDD masih berhutang 150,95 
  BBB masih berhutang 50,00 

  9 baris yang dipilih. 
ANALISIS:

Sebuah baris dimasukkan ke dalam PAY_STATUS_TABLE untuk setiap baris data yang terdapat dalam PAYMENT_TABLE. Jika pelanggan membayar lebih dari jumlah yang jatuh tempo, maka perbedaan itu masukan ke dalam kolom amt_credit. Jika pelanggan membayar kurang dari jumlah utang, maka sebuah entri dibuat di kolom amt_owed. Jika pelanggan dibayar penuh, maka tidak ada jumlah dolar yang dimasukkan ke dalam salah satu dari dua kolom.

Program lain

Contoh ini menggunakan sebuah tabel yang disebut PAY_TABLE:

INPUT:
  SQL> desc pay_table
OUTPUT:
Name                            Null? Type ------------------------------  -------- ---- NAME                            NOT NULL VARCHAR2(20) PAY_TYPE                        NOT NULL VARCHAR2(8) PAY_RATE                        NOT NULL NUMBER(8,2) EFF_DATE                        NOT NULL DATE PREV_PAY                                 NUMBER(8,2)

First take a look at the data:

INPUT:
  SQL> pilih * 
  2 from pay_table
  3 order by pay_type, pay_rate desc;
OUTPUT:
 NAME                 PAY_TYPE  PAY_RATE  EFF_DATE  PREV_PAY
-------------------- -------- --------- --------- ---------
SANDRA SAMUELS       HOURLY       12.50 01-JAN-97
ROBERT BOBAY         HOURLY       11.50 15-MAY-96
KEITH JONES          HOURLY       10.00 31-OCT-96
SUSAN WILLIAMS       HOURLY        9.75 01-MAY-97
CHRISSY ZOES         SALARY    50000.00 01-JAN-97
CLODE EVANS          SALARY    42150.00 01-MAR-97
JOHN SMITH           SALARY    35000.00 15-JUN-96
KEVIN TROLLBERG      SALARY    27500.00 15-JUN-96
8 rows selected.

Situation: Sales are up. Any individual who has not had a pay increase for six months (180 days) will receive a raise effective today. All eligible hourly employees will receive a 4 percent increase, and eligible salary employees will receive a 5 percent increase.

Today is:

INPUT/OUTPUT:
 SQL> select sysdate
    2 dari dual; 

SYSDATE
--------
20-MAY-97

Before examining the next PL/SQL block, we will perform a manual select from the PAY_TABLE that flags individuals who should receive a raise.

INPUT:
 SQL> select name, pay_type, pay_rate, eff_date,
  2 'YES' due
  3  from pay_table
  4 where eff_date < sysdate - 180
  5 UNION ALL
  6 select name, pay_type, pay_rate, eff_date,
  7   'No' due
  8 from pay_table
  9 where eff_date >= sysdate - 180
 10 order by 2, 3 desc;
OUTPUT:
 NAME                 PAY_TYPE  PAY_RATE EFF_DATE  DUE
-------------------- --------- -------- --------- ---
SANDRA SAMUELS       HOURLY       12.50 01-JAN-97 No
ROBERT BOBAY         HOURLY       11.50 15-MAY-96 YES
KEITH JONES          HOURLY       10.00 31-OCT-96 YES
SUSAN WILLIAMS       HOURLY        9.75 01-MAY-97 No
CHRISSY ZOES         SALARY    50000.00 01-JAN-97 No
CLODE EVANS          SALARY    42150.00 01-MAR-97 No
JOHN SMITH           SALARY    35000.00 15-JUN-96 YES
KEVIN TROLLBERG      SALARY    27500.00 15-JUN-96 YES
8 rows selected.

The DUE column identifies individuals who should be eligible for a raise. Here’s the PL/SQL script:

INPUT:
 set serveroutput on
BEGIN
  DECLARE
    UnknownPayType exception;
    cursor pay_cursor is
      select name, pay_type, pay_rate, eff_date,
             sysdate, rowid
      from pay_table;
    IndRec pay_cursor%ROWTYPE;
    cOldDate date;
    fNewPay number(8,2);
  BEGIN
    open pay_cursor;
    loop
    fetch pay_cursor into IndRec;
    exit when pay_cursor%NOTFOUND;
    cOldDate := sysdate - 180;
    if (IndRec.pay_type = 'SALARY') then
      fNewPay := IndRec.pay_rate * 1.05;
    elsif (IndRec.pay_type = 'HOURLY') then
      fNewPay := IndRec.pay_rate * 1.04;
    else
      raise UnknownPayType;
    end if;
    if (IndRec.eff_date < cOldDate) then
      update pay_table
      set pay_rate = fNewPay,
          prev_pay = IndRec.pay_rate,
          eff_date = IndRec.sysdate
      where rowid = IndRec.rowid;
      commit;
    end if;
    end loop;
    close pay_cursor;
  EXCEPTION
    when UnknownPayType then
      dbms_output.put_line('=======================');
      dbms_output.put_line('ERROR: Aborting program.');
      dbms_output.put_line('Unknown Pay Type for Name');
    when others then
      dbms_output.put_line('ERROR During Processing.  See the DBA.');
    END;
END;
/

Are you sure that you want to give four employees a pay raise? (The final SELECT statement has four Yes values in the DUE column.) Why not…let’s give all four employees a raise. You can apply the appropriate pay increases by executing the PL/SQL script file, named block2.sql :

INPUT/OUTPUT:
 SQL> @block2

Input truncated to 1 characters
PL/SQL procedure successfully completed.

You can do a quick select to verify that the changes have been made to the pay_rate of the appropriate individuals:

INPUT:
  SQL> pilih * 
  2 from pay_table
  3 order by pay_type, pay_rate desc;
OUTPUT:
 NAME                 PAY_TYPE  PAY_RATE EFF_DATE    PREV_PAY
-------------------- --------- -------- -------- -----------
SANDRA SAMUELS       HOURLY       12.50 01-JAN-97
ROBERT BOBAY         HOURLY       11.96 20-MAY-97       11.5
KEITH JONES          HOURLY       10.40 20-MAY-97         10
SUSAN WILLIAMS       HOURLY        9.75 01-MAY-97
CHRISSY ZOES         SALARY    50000.00 01-JAN-97
CLODE EVANS          SALARY    42150.00 01-MAR-97
JOHN SMITH           SALARY    36750.00 20-MAY-97      35000
KEVIN TROLLBERG      SALARY    28875.00 20-MAY-97      27500

8 rows selected.
ANALISIS:

Empat karyawan menerima kenaikan gaji. Jika Anda bandingkan output ini dengan output dari perintah SELECT asli, Anda dapat melihat perubahan. Tingkat membayar saat ini telah diupdate untuk mencerminkan kenaikan gaji, tingkat membayar asli dimasukkan ke dalam kolom membayar sebelumnya, dan tanggal efektif telah diupdate untuk itu tanggal hari ini. Tidak ada aksi diambil pada orang-orang yang tidak memenuhi syarat untuk kenaikan gaji.

Tunggu – Anda tidak mendapatkan kesempatan untuk melihat cara kerja kecuali ditetapkan. Anda dapat menguji bagian PENGECUALIAN dengan menyisipkan sebuah PAY_TYPE valid ke PAY_TABLE.

INPUT:
  SQL> insert ke nilai-nilai pay_table 
    2 ('Jennings', 'JURNAL' JEFF, 71,50, '01-JAN-97 ', NULL);
OUTPUT:
  1 baris dibuat. 

Saat kebenaran:

INPUT / OUTPUT:
  SQL> @ block2 

  Input dipotong ke 1 karakter 
  ======================= 
  ERROR: Membatalkan program. 
  Jenis Unknown Bayar untuk: Jennings JEFF 
  PL / SQL prosedur berhasil diselesaikan. 
ANALISIS:

Pesan kesalahan kepada Anda bahwa JEFF Jennings memiliki Bayar Jenis dengan nilai selain GAJI atau PER JAM. Artinya, perkecualian ditangani dengan pesan kesalahan.

Disimpan Prosedur, Paket, dan Pemicu

Using PL/SQL, you can create stored objects to eliminate having to constantly enter monotonous code. Procedures are simply blocks of code that perform some sort of specific function. Related procedures can be combined and stored together in an object called a package. A trigger is a database object that is used with other transactions. You might have a trigger on a table called ORDERSthat will insert data into a HISTORY table each time the ORDERS table receives data. The basic syntax of these objects follows.

Sample Procedure

SYNTAX:
 PROCEDURE procedure_name IS
  variable1 datatype;
    ... 
  BEGIN 
  statement1;
    ... 
EXCEPTION
  when ...
END procedure_name;

Sample Package

SYNTAX:
 CREATE PACKAGE package_name AS
  PROCEDURE procedure1 (global_variable1 datatype, ...);
  PROCEDURE procedure2 (global_variable1 datatype, ...);
END package_name;
CREATE PACKAGE BODY package_name AS
  PROCEDURE procedure1 (global_variable1 datatype, ...) IS
      BEGIN 
      statement1;
        ... 
    END procedure1;
  PROCEDURE procedure2 (global_variable1 datatype, ...) IS
      BEGIN 
      statement1;
        ... 
  END procedure2;
END package_name;

Sample Trigger

SYNTAX:
   CREATE TRIGGER trigger_name
    AFTER UPDATE OF column ON table_name
    FOR EACH ROW
    BEGIN 
    statement1;
      ... 
    END; 

The following example uses a trigger to insert a row of data into a transaction table when updating PAY_TABLE . The TRANSACTION table looks like this:

INPUT:
 SQL>  describe trans_table
OUTPUT:
  Nama Null?  Jenis 
 ------------------------------  -------- ----
 ACTION                                   VARCHAR2(10)
 NAME                                     VARCHAR2(20)
 PREV_PAY                                 NUMBER(8,2)
 CURR_PAY                                 NUMBER(8,2)
 EFF_DATE                                 DATE

Here’s a sample row of data:

INPUT/OUTPUT:
  SQL> pilih * 
  2 from pay_table
  3 where name = 'JEFF JENNINGS';

NAME                 PAY_TYPE  PAY_RATE EFF_DATE   PREV_PAY
-------------------- -------- --------- -------- ----------
JEFF JENNINGS        WEEKLY       71.50 01-JAN-97

Now, create a trigger:

 SQL> CREATE TRIGGER pay_trigger
  2 AFTER update on PAY_TABLE
  3  FOR EACH ROW
  4 BEGIN
  5 insert into trans_table values
  6 ('PAY CHANGE', :new.name, :old.pay_rate,
  7  :new.pay_rate, :new.eff_date);
  8   END;
  9  /

Trigger created.

The last step is to perform an update on PAY_TABLE , which should cause the trigger to be executed.

INPUT/OUTPUT:
 SQL> update pay_table
  2 set pay_rate = 15.50,
  3  eff_date = sysdate
  4  where name = 'JEFF JENNINGS';

1 row updated.

  SQL> pilih * 
  2 from pay_table
  3 where name = 'JEFF JENNINGS';

NAME                 PAY_TYPE  PAY_RATE EFF_DATE   PREV_PAY
-------------------- -------- --------- -------- ----------
JEFF JENNINGS        WEEKLY       15.50 20-MAY-97

  SQL> pilih * 
  2 from trans_table;

ACTION     NAME                   PREV_PAY   CURR_PAY EFF_DATE
---------- -------------------- ---------- ---------- ---------
PAY CHANGE JEFF JENNINGS              71.5       15.5 20-MAY-97
ANALISIS:

PREV_PAY is null in PAY_TABLE but PREV_PAY appears in TRANS_TABLE . This approach isn’t as confusing as it sounds. PAY_TABLE does not need an entry for PREV_PAY because the PAY_RATE of71.50 per hour was obviously an erroneous amount. Rather, we inserted the value for PREV_PAY in TRANS_TABLE because the update was a transaction, and the purpose of TRANS_PAY is to keep a record of all transactions against PAY_TABLE .


CATATAN: Jika Anda sudah familiar dengan teknologi jaringan, Anda mungkin melihat persamaan antara PL / SQL dan Java disimpan prosedur dicatat. Namun, beberapa perbedaan seharusnya. PL / SQL merupakan pengembangan dari SQL standar, melaksanakan perintah-perintah bahasa prosedural. Jawa, yang jauh lebih maju dari PL / SQL, memungkinkan pemrogram untuk menulis program yang lebih kompleks daripada yang dimungkinkan dengan PL / SQL. PL / SQL didasarkan pada fungsi-intensif database SQL; Jawa lebih cocok untuk program CPU-intensif. Kebanyakan bahasa prosedural, seperti PL / SQL, yang dikembangkan secara khusus untuk platform yang sesuai. Sebagai bahasa prosedural perkembangan teknologi, tingkat lebih tinggi standardisasi akan diterapkan di seluruh platform.


Ringkasan

PL / SQL memperluas fungsionalitas dari SQL standar. Komponen dasar PL / SQL jenis yang sama melakukan fungsi sebagai bahasa generasi ketiga. Penggunaan variabel lokal kode dinamis mendukung, yaitu nilai-nilai dalam blok dapat berubah dari waktu ke waktu sesuai dengan input pengguna, kondisi tertentu, atau isi kursor /. PL SQL menggunakan program bahasa prosedural laporan kontrol standar. JIKA. KEMUDIAN .. laporan dan loop memungkinkan Anda untuk mencari kondisi-kondisi tertentu, Anda juga dapat menggunakan loop untuk menelusuri isi dari kursor didefinisikan.

Kesalahan yang terjadi selama proses dari setiap program yang menjadi perhatian utama. PL / SQL memungkinkan Anda untuk menggunakan pengecualian untuk mengontrol perilaku dari sebuah program yang menemukan kesalahan sintaks salah satu atau kesalahan logis. Banyak pengecualian yang telah ditetapkan, seperti kesalahan-dengan-nol membagi. Kesalahan dapat ditingkatkan setiap saat selama proses sesuai dengan persyaratan yang ditetapkan dan dapat ditangani dengan cara apapun PL / SQL keinginan pemrogram.

18 hari juga memperkenalkan beberapa penggunaan praktis dari PL / SQL. Database benda seperti pemicu, prosedur tersimpan, dan paket dapat mengotomatisasi fungsi pekerjaan yang banyak.itu contoh Hari ini menerapkan beberapa konsep yang tercakup pada hari sebelumnya.

Sumber ; http://www.webbasedprogramming.com

SQL Laporan

Tinggalkan komentar

Tujuan

Hari ini Anda mempelajari konsep di balik menghasilkan satu atau lebih pernyataan dari query SQL. Pada akhir hari Anda harus memahami berikut:

  • Manfaat dari menghasilkan pernyataan SQL query
  • Bagaimana membuat output dari query muncul dalam bentuk lain pernyataan SQL
  • Cara menggunakan kamus data, tabel database, atau keduanya untuk membentuk pernyataan SQL

Tujuan Menggunakan SQL untuk Menghasilkan Laporan SQL

Membangkitkan SQL dari statemen SQL lain hanya berarti menulis pernyataan SQL yang output bentuk lain pernyataan SQL atau perintah. Sampai saat ini, semua pernyataan SQL bahwa Anda telah belajar menulis baik melakukan sesuatu, seperti memanipulasi data dalam sebuah tabel, satu baris pada satu waktu, atau memproduksi beberapa jenis laporan dari query. Hari ini Anda belajar bagaimana menulis sebuah permintaan yang output bentuk lain permintaan atau pernyataan SQL.

Mengapa kau perlu untuk menghasilkan pernyataan SQL dari query? Pada awalnya, itu adalah masalah kesederhanaan dan efisiensi. Anda tidak mungkin perlu  untuk menghasilkan pernyataan SQL, tetapi tanpa pernah melakukan hal itu Anda akan mengabaikan salah satu yang paling kuat fitur SQL, yang terlalu banyak orang tidak menyadari ada.

Membangkitkan SQL jarang wajib karena Anda dapat secara manual membuat dan menerbitkan semua pernyataan SQL, meskipun proses dapat membosankan dalam situasi tertentu. Pada catatan yang sama menghasilkan pernyataan SQL mungkin diperlukan bila Anda memiliki tenggat waktu yang ketat. Misalnya, atasan Anda ingin memberikan akses pada tabel baru untuk semua pengguna di 90 departemen pemasaran (dan Anda ingin pulang untuk makan malam). Karena beberapa pengguna database ini tidak bekerja di bidang pemasaran, Anda tidak bisa hanya memberikan akses pada meja untuk publik. Bila Anda memiliki beberapa kelompok pengguna dengan berbagai jenis akses, Anda mungkin ingin untuk menegakkan peran keamanan, yang merupakan built-in metode untuk mengendalikan akses ke data pengguna. Dalam situasi ini Anda dapat membuat suatu pernyataan SQL yang menghasilkan pernyataan GRANT kepada semua orang di departemen pemasaran, artinya, setiap individu hibah peranan yang tepat (s).

Anda akan menemukan banyak situasi yang menguntungkan untuk menghasilkan pernyataan SQL sebagai output ke laporan lain. Sebagai contoh, Anda mungkin perlu untuk menjalankan pernyataan SQL yang sama banyak sebagai sebuah kelompok atau Anda mungkin perlu untuk menumbuhkan DDL dari kamus data kamus. Ketika memproduksi SQL sebagai output lain dari pernyataan, akan Anda selalu mendapatkan data Anda untuk output baik dari data atau tabel skema dalam database. Gambar 17,1 mengilustrasikan prosedur ini.

Seperti yang dapat Anda lihat pada Gambar 17.1, perintah SELECT dapat dikeluarkan ke database, gambar hasil output yang baik dari kamus data atau dari tabel dalam database aplikasi.Pernyataan Anda dapat mengatur data diambil ke dalam satu atau lebih pernyataan SQL. Misalnya, jika satu baris dikembalikan, Anda akan telah menghasilkan satu pernyataan SQL. Jika 100 baris yang dikembalikan dari pernyataan Anda, Anda akan memiliki 100 dihasilkan pernyataan SQL. Bila Anda berhasil menghasilkan kode SQL dari database, Anda dapat menjalankan kode terhadap database, yang dapat melakukan serangkaian pertanyaan atau tindakan database.

Sisa hari itu dikhususkan untuk contoh yang menunjukkan kepada Anda bagaimana untuk menghasilkan output dalam bentuk pernyataan SQL. Sebagian besar informasi Anda akan datang dari kamus data, sehingga Anda mungkin ingin meninjau’s materi kemarin. (Lihat Hari 16, “Menggunakan Tampilan Informasi Berguna untuk Ambil dari Data Dictionary.”)

Gambar 17,1.

Proses menghasilkan SQL dari database.


CATATAN: Today’s contoh penggunaan pribadi Oracle7. Seperti biasa, Anda harus menerapkan konsep-konsep yang dibahas hari ini untuk sintaks implementasi database tertentu Anda.


Miscellaneous Perintah SQL * Plus

contoh hari ini menggunakan beberapa perintah baru. Perintah-perintah ini, dikenal sebagai perintah SQL * Plus, khusus untuk pribadi Oracle7 dan kontrol format hasil keluaran Anda. (Lihat Hari 20, “SQL * Plus).” SQL * Plus perintah dikeluarkan pada> SQL prompt, atau mereka dapat digunakan dalam file.


CATATAN: Walaupun perintah ini adalah khusus untuk Oracle, perintah sejenis yang tersedia dalam implementasi lain, misalnya, Transact-SQL. (Juga lihat Hari 19, “Transact-SQL: Sebuah Pengantar.”)


set echo on / off

Ketika Anda menetapkan echo, Anda akan melihat laporan SQL Anda saat mereka menjalankan echo. Set off berarti bahwa Anda tidak ingin melihat laporan SQL Anda saat mereka menjalankan – Anda hanya ingin melihat output.

  SET ECHO [ON | OFF] 

umpan balik set on / off

Saran atau masukan adalah jumlah output baris Anda. Misalnya, jika Anda dieksekusi perintah SELECT yang kembali 30 baris data, umpan balik Anda akan

  30 baris yang dipilih. 

KOMENTAR SET ON menampilkan jumlah baris; SET KOMENTAR MATI menghilangkan jumlah baris dari output Anda.

  SET KOMENTAR [ON | OFF] 

menetapkan pos on / off

Judul yang dimaksud di sini adalah judul kolom di output dari perintah SELECT, seperti LAST_NAME, atau CUSTOMER_ID Pos. SET ON, yang menjadi defaultnya, menampilkan judul kolom data Anda sebagai bagian dari output Pos. SET OFF , tentu saja, menghilangkan kolom judul dari output Anda.

  SET pos [ON | OFF] 

spool filename / off

Spooling adalah proses mengarahkan hasil pencarian Anda ke sebuah file. Untuk membuka file spool, Anda masukkan

  spool filename 

Untuk menutup file spool Anda, Anda akan ketik

  spool off 

mulai nama file

Sebagian besar perintah SQL yang telah kita pelajari sejauh ini telah diterbitkan di> SQL prompt. Metode lain untuk mengeluarkan pernyataan SQL adalah untuk menciptakan dan kemudian jalankan file. Di SQL * Plus perintah untuk menjalankan file SQL MULAI FILENAME.

  MULAI FILENAME 

ed nama file

ED adalah perintah Oracle7 pribadi yang membuka file (atau file yang ada). Bila Anda membuka file dengan ed, Anda menggunakan editor layar penuh, yang sering lebih mudah daripada mencoba untuk mengetik sebuah pernyataan SQL yang panjang di> SQL prompt . Anda akan menggunakan perintah ini untuk memodifikasi isi dari file spul Anda. Anda akan menemukan bahwa Anda menggunakan perintah ini sering saat membuat skrip SQL karena Anda mungkin harus mengubah isi dari file untuk kustomisasi. Namun, Anda dapat mencapai kustomisasi terbanyak melalui perintah SQL * Plus.

ED FILENAME

Menghitung Baris di Semua Tabel

Contoh pertama menunjukkan Anda bagaimana untuk mengedit file spool Anda untuk menghapus baris yang tidak relevan dalam kode yang dihasilkan Anda, sehingga memungkinkan pernyataan SQL Anda berjalan tanpa ternoda dengan kesalahan sintaks.


CATATAN: Mencatat teknik editing yang digunakan dalam contoh ini karena kita tidak akan menunjukkan langkah dalam sisa itu contoh hari ini. Kami berasumsi bahwa Anda mengetahui sintaks dasar pernyataan SQL sekarang. Selain itu, Anda dapat memilih untuk mengedit file spool dalam berbagai cara.


Mulailah dengan mengingat fungsi untuk menghitung semua baris dalam tabel: COUNT (*). Anda sudah tahu bagaimana untuk memilih jumlah pada semua baris dalam sebuah tabel tunggal.Sebagai contoh:

INPUT:
  SELECT COUNT (*) 
  DARI TBL1;
OUTPUT:
  COUNT (*) 
  -------- 
        29 

teknik itu berguna, tapi anggaplah Anda ingin mendapatkan jumlah baris pada semua tabel yang Anda miliki atau yang dalam skema Anda. Sebagai contoh, berikut adalah daftar tabel Anda sendiri:

INPUT / OUTPUT:
  SELECT * FROM CAT; 

  TABLE_NAME TABLE_TYPE 
  ------------------------------ ----------- 
  TABEL ACCT_PAY 
  TABEL ACCT_REC 
  TABEL PELANGGAN 
  TABEL KARYAWAN 
  TABEL SEJARAH 
  Faktur TABEL 
  TABEL Pesanan 
  TABEL PRODUK 
  TABEL PROYEK 
  TABEL Vendor 

  10 baris yang dipilih. 
ANALISIS:

Jika Anda ingin mendapatkan jumlah baris pada seluruh tabel Anda, Anda bisa secara manual masalah COUNT (*) Pernyataan di atas meja masing-masing. Umpan balik akan

  10 baris yang dipilih. 

Pernyataan SELECT SELECT berikut membuat laporan lebih untuk mendapatkan jumlah baris pada semua tabel sebelumnya.

INPUT / OUTPUT:
  SQL> SET ECHO OFF 
  SQL> SET OFF KOMENTAR 
  SQL> SET berangkat 
  SQL> spool CNT.SQL 
  SQL> SELECT 'SELECT COUNT (*) FROM' | TABLE_NAME | | | ';' 
    2 DARI CAT 
    3 / 

  SELECT COUNT (*) FROM ACCT_PAY; 
  SELECT COUNT (*) DARI ACCT_REC; 
  SELECT COUNT (*) FROM PELANGGAN; 
  SELECT COUNT (*) FROM KARYAWAN; 
  SELECT COUNT (*) FROM SEJARAH; 
  SELECT COUNT (*) FROM faktur; 
  SELECT COUNT (*) dari pesanan; 
  SELECT COUNT (*) FROM PRODUK; 
  SELECT COUNT (*) DARI PROYEK; 
  pilih count (*) dari vendor; 
ANALISIS:

Tindakan pertama pada contoh sebelumnya adalah dengan menggunakan beberapa perintah SQL * Plus. Menetapkan echo off, umpan balik dari, dan berangkat mengembun output ke apa yang sebenarnya sedang dipilih. Ingat, output tidak digunakan sebagai laporan, tetapi lebih sebagai pernyataan SQL yang siap untuk dijalankan. Langkah selanjutnya adalah dengan menggunakan perintah spool untuk mengarahkan output ke file, yang ditetapkan sebagai cnt.sql. Langkah terakhir adalah untuk mengeluarkan pernyataan SELECT, yang akan menghasilkan output dalam bentuk pernyataan lain. Perhatikan penggunaan tanda kutip tunggal untuk memilih sebuah string literal. Kombinasi tanda kutip tunggal dan gabungan | (|) memungkinkan Anda untuk menggabungkan data aktual dan string literal untuk membentuk pernyataan SQL lain. Contoh ini memilih data dari kamus data. Perintah menutup MATI spool spool file.


TIP: Selalu mengedit output file sebelum menjalankannya untuk menghilangkan perbedaan sintaks dan untuk menyesuaikan lebih lanjut file yang telah Anda buat.


INPUT:
  SQL> spool MATI 
  SQL> ED CNT.SQL
OUTPUT:
  SQL> SELECT 'SELECT COUNT (*) FROM' | TABLE_NAME | ||';' 
    2 DARI CAT; 

  SELECT COUNT (*) FROM ACCT_PAY; 
  COUNT SELECT (*) FROM ACCT_REC; 
  SELECT COUNT (*) FROM PELANGGAN; 
  SELECT COUNT (*) FROM KARYAWAN; 
  SELECT COUNT (*) FROM SEJARAH; 
  SELECT COUNT (*) FROM faktur; 
  SELECT COUNT (*) dari pesanan; 
  SELECT COUNT (*) FROM PRODUK; 
  SELECT COUNT (*) DARI PROYEK; 
  SELECT COUNT (*) dari vendor; 
  SQL> spul MATI 
ANALISIS:

Perintah menutup MATI spool spool file. Maka perintah ED suntingan file. Pada titik ini Anda berada di dalam file yang Anda buat. Anda harus menghapus baris yang tidak perlu dari file, sepertiSELECT, yang digunakan untuk mencapai hasil, dan MATI spool pada akhir file.

Berikut adalah bagaimana file Anda akan terlihat setelah edit. Perhatikan bahwa setiap baris adalah pernyataan SQL yang valid.

  SELECT COUNT (*) FROM ACCT_PAY; 
  SELECT COUNT (*) FROM ACCT_REC; 
  SELECT COUNT (*) FROM PELANGGAN; 
  SELECT COUNT (*) FROM KARYAWAN; 
  SELECT COUNT (*) FROM SEJARAH; 
  SELECT COUNT (*) FROM faktur; 
  SELECT COUNT (*) dari pesanan; 
  SELECT COUNT (*) FROM PRODUK; 
  SELECT COUNT (*) DARI PROYEK; 
  SELECT COUNT (*) FROM Vendor; 

Sekarang, jalankan file:

INPUT / OUTPUT:
  SQL SET> ECHO ON 
  SQL> SET ON pos 
  SQL> START CNT.SQL 

  SQL> SELECT COUNT (*) FROM ACCT_PAY; 

   COUNT (*) 
  --------- 
          7 
  SQL> SELECT COUNT (*) FROM ACCT_REC; 

   COUNT (*) 
  --------- 
          9 
  SQL> SELECT COUNT (*) FROM PELANGGAN; 

   COUNT (*) 
  --------- 
          5 
  SQL> SELECT COUNT (*) FROM KARYAWAN; 

   COUNT (*) 
  --------- 
         10 

  SQL> SELECT COUNT (*) FROM SEJARAH; 

   COUNT (*) 
  --------- 
         26 
  SQL> SELECT COUNT (*) FROM faktur; 

   COUNT (*) 
  --------- 
          0 
  SQL> SELECT COUNT (*) dari pesanan; 

   COUNT (*) 
  --------- 
          0 
  SQL> SELECT COUNT (*) FROM PRODUK; 

   COUNT (*) 
  --------- 
         10 
  SQL> SELECT COUNT (*) FROM PROYEK; 

   COUNT (*) 
  --------- 
         16 
  SQL> SELECT COUNT (*) dari vendor; 

   COUNT (*) 
  --------- 
         22 
  SQL> 
ANALISIS:

Set echo pada memungkinkan Anda untuk melihat setiap pernyataan yang dieksekusi). Tetapkan pos pada menampilkan judul kolom COUNT (* untuk setiap pernyataan SELECT. Jika Anda memasukkan

  set umpan balik 

kemudian

  1 baris yang dipilih. 

akan ditampilkan setelah setiap hitungan. Contoh ini mengeksekusi skrip SQL dengan menggunakan perintah SQL * Plus MULAI. Namun, bagaimana jika Anda sedang berurusan dengan 50 tabel, bukan hanya 10?


CATATAN: Penggunaan yang tepat dari tanda kutip tunggal saat membuat skrip SQL sangat penting. Gunakan kutipan dengan murah hati dan pastikan bahwa Anda termasuk semua elemen yang akan membuat pernyataan yang dihasilkan Anda lengkap. Dalam contoh ini menyertakan tanda kutip tunggal komponen laporan Anda dihasilkan (output) yang tidak dapat dipilih dari meja, misalnya, 'SELECT COUNT (*) FROM' dan ';'.


Keistimewaan Pemberian System untuk Pengguna Multiple

Sebagai database administrator atau individu yang bertanggung jawab untuk menjaga pengguna, Anda akan sering menerima permintaan untuk ID pengguna. Selain memiliki untuk memberikan hak istimewa kepada pengguna yang memungkinkan mereka mengakses database yang tepat, Anda juga harus memodifikasi ‘hak pengguna untuk mengakomodasi perubahan kebutuhan mereka.Anda bisa mendapatkan database untuk menghasilkan laporan GRANT untuk memberikan hak istimewa sistem atau peran untuk banyak pengguna.

INPUT:
  SQL> SET ECHO OFF 
  SQL> SET berangkat 
  SQL> SET OFF KOMENTAR 
  SQL> spool GRANTS.SQL 
  SQL> SELECT 'GRANT CONNECT, RESOURCE ALAM ATAS' | | USERNAME | | ';' 
    2 DARI SYS.DBA_USERS 
    3 WHERE USERNAME TIDAK DI ('SYS', 'SYSTEM', 'SCOTT ",' Ryan ',' PO7 ',' DEMO ') 
    4 /
OUTPUT:
  GRANT CONNECT, RESOURCE ALAM ATAS KEVIN; 
  GRANT CONNECT, RESOURCE ALAM ATAS JOHN; 
  GRANT CONNECT, RESOURCE ALAM ATAS JUDITH; 
  GRANT CONNECT, RESOURCE ALAM ATAS Steve; 
  GRANT CONNECT, RESOURCE ALAM UNTUK RON; 
  GRANT CONNECT, RESOURCE ALAM ATAS MARY; 
  GRANT CONNECT, RESOURCE ALAM ATAS Debra; 
  GRANT CONNECT, RESOURCE ALAM UNTUK CHRIS; 
  GRANT CONNECT, RESOURCE ALAM ATAS CAROL; 
  GRANT CONNECT, RESOURCE ALAM ATAS EDWARD; 
  GRANT CONNECT, RESOURCE ALAM ATAS Brandon; 
  GRANT CONNECT, RESOURCE ALAM ATAS JACOB;
INPUT / OUTPUT:
 SQL> spool off> SQL mulai grants.sql SQL> CONNECT GRANT, RESOURCE ALAM ATAS KEVIN; Grant berhasil>. SQL GRANT CONNECT, RESOURCE ALAM ATAS JOHN; Grant berhasil>. SQL GRANT CONNECT, RESOURCE ALAM ATAS JUDITH, Grant berhasil>. SQL GRANT CONNECT , RESOURCE ALAM ATAS Steve; Grant berhasil>. SQL GRANT CONNECT, RESOURCE ALAM UNTUK RON; Grant berhasil>. SQL GRANT CONNECT, RESOURCE ALAM ATAS MARIA; Grant berhasil>. SQL GRANT CONNECT, RESOURCE ALAM ATAS Debra; Grant berhasil>. SQL GRANT CONNECT, RESOURCE UNTUK CHRIS; Grant berhasil>. SQL GRANT CONNECT, RESOURCE ALAM ATAS CAROL; Grant berhasil>. SQL GRANT CONNECT, RESOURCE ALAM ATAS EDWARD; Grant berhasil>. SQL GRANT CONNECT, RESOURCE ALAM ATAS Brandon; Grant berhasil>. SQL GRANT CONNECT, RESOURCE TO JACOB ; Grant berhasil.
ANALISIS:

Dalam contoh ini Anda disimpan keystrokes membosankan banyak dengan menghasilkan  GRANT laporan menggunakan pernyataan SQL sederhana, daripada mengetik setiap satu secara manual.


CATATAN: Contoh berikut menghilangkan langkah di mana Anda mengedit output file. Anda dapat mengasumsikan bahwa file sudah diedit.


Pemberian Keistimewaan pada Tabel Anda untuk Pengguna lain

Pemberian hak istimewa di atas meja untuk pengguna lain cukup sederhana, seperti memilih jumlah baris di atas meja. Tapi jika Anda memiliki beberapa tabel yang Anda ingin memberikan akses ke peran atau pengguna, Anda dapat membuat SQL menghasilkan script untuk Anda – kecuali jika Anda suka untuk mengetik.

Pertama, tinjauan GRANT sederhana untuk satu meja:

INPUT:
  SQL> GRANT SELECT ON SEJARAH ATAS Brandon;
OUTPUT:
  Grant berhasil. 

Apakah Anda siap beraksi beberapa? Pernyataan selanjutnya membuat pernyataan GRANT untuk masing-masing dari 10 tabel dalam skema Anda.

INPUT / OUTPUT:
  SQL> SET ECHO OFF 
  SQL> SET OFF KOMENTAR 
  SQL> SET berangkat 
  SQL> spool GRANTS.SQL 
  SQL> SELECT 'GRANT SELECT ON' | | TABLE_NAME | | 'ATAS Brandon;' 
    2 DARI CAT 
    3 / 

  GRANT SELECT ON ACCT_PAY ATAS Brandon; 
  GRANT SELECT ON ACCT_REC ATAS Brandon; 
  GRANT SELECT ON NASABAH ATAS Brandon; 
  GRANT SELECT ON KARYAWAN ATAS Brandon; 
  GRANT SELECT ON SEJARAH ATAS Brandon; 
  GRANT SELECT ON faktur kepada Brandon; 
  GRANT SELECT ON perintah untuk Brandon; 
  GRANT SELECT ON PRODUK UNTUK Brandon; 
  SELECT GRANT PADA PROYEK ATAS Brandon; 
  GRANT SELECT ON vendor untuk Brandon; 
ANALISIS:

Pernyataan GRANT telah secara otomatis disiapkan untuk setiap tabel. Brandon adalah memiliki akses Pilih di meja masing-masing.

Sekarang tutup file output dengan perintah spool, dan dengan asumsi bahwa file tersebut telah diedit, file siap dijalankan.

INPUT / OUTPUT:
  SQL> spool MATI 

  SQL SET> ECHO ON 
  SQL> SET ON KOMENTAR 
  SQL> START GRANTS.SQL 

  SQL> GRANT SELECT ON ACCT_PAY ATAS Brandon; 

  Grant berhasil. 

  SQL> GRANT SELECT ON ACCT_REC ATAS Brandon; 

  Grant berhasil. 

  SQL> GRANT SELECT ON NASABAH ATAS Brandon; 

  Grant berhasil. 

  SQL> GRANT SELECT ON KARYAWAN ATAS Brandon; 

  Grant berhasil. 

  SQL> GRANT SELECT ON SEJARAH ATAS brandon; 

  Grant berhasil. 

  SQL> GRANT SELECT ON faktur kepada Brandon; 

  Grant berhasil. 

  SQL> GRANT SELECT ON perintah untuk Brandon; 

  Grant berhasil. 

  SQL> SELECT GRANT PADA PRODUK UNTUK Brandon; 

  Grant berhasil. 

  SQL> GRANT SELECT ON PROYEK ATAS Brandon; 

  Grant berhasil. 

  SQL> SELECT ON GRANT vendor untuk Brandon; 

  Grant berhasil. 
ANALISIS:

Echo ditetapkan dan umpan balik di set pada juga. Setting umpan balik pada laporan Grant ditampilkan berhasil. Pilih hak yang telah diberikan kepada Brandon pada semua 10 meja dengan sedikit usaha yang sangat. Sekali lagi, ingatlah bahwa Anda akan sering berurusan dengan banyak lebih dari 10 tabel.

Menonaktifkan Kendala Tabel Load Data

Ketika memasukkan data ke dalam tabel, Anda kadang harus menonaktifkan kendala pada tabel Anda. Misalkan Anda telah dipotong meja Anda dan Anda memasukkan data ke tabel Anda dari nol. Kemungkinan besar, tabel Anda akan memiliki batasan integritas referensial, seperti kunci asing. Karena database tidak akan membiarkan Anda memasukkan baris data dalam tabel yang lain tabel referensi (jika kolom referensi tidak ada dalam tabel lain), Anda mungkin harus menonaktifkan kendala untuk awalnya beban data Anda. Tentu saja, setelah beban berhasil, Anda akan ingin mengaktifkan kendala.

INPUT:
  SQL> SET ECHO OFF 
  SQL> SET AKTIF KOMENTAR 
  SQL> SET berangkat 
  SQL> spool DISABLE.SQL 
  SQL> SELECT 'ALTER TABLE' | TABLE_NAME | | | 
    2 'DISABLE kendala' | | CONSTRAINT_NAME | | ';' 
    3 DARI SYS.DBA_CONSTRAINTS 
    4 WHERE PEMILIK 'Ryan =' 
    5 /
OUTPUT:
  ALTER TABLE ACCT_PAY kendala FK_ACCT_ID DISABLE; 
  ALTER TABLE DISABLE kendala FK_ACCT_ID ACCT_REC; 
  ALTER TABLE PELANGGAN kendala FK_CUSTOMER_ID DISABLE; 
  ALTER TABLE SEJARAH kendala FK_ACCT_ID DISABLE; 
  ALTER TABLE Faktur kendala FK_ACCT_ID DISABLE; 
  Perintah ALTER TABLE DISABLE FK_ACCT_ID kendala; 
ANALISIS:

Tujuannya adalah untuk menghasilkan serangkaian laporan ALTER TABLE yang akan menonaktifkan kendala pada seluruh tabel yang dimiliki oleh Ryan. titik koma ini concatenated sampai akhir apa yang dipilih menyelesaikan setiap pernyataan SQL.

INPUT / OUTPUT:
SQL> spool MATI SQL> SET ECHO OFF SQL> SET ON KOMENTAR SQL> START DISABLE.SQL Kendala cacat. Kendala cacat. Kendala cacat. Kendala cacat. Kendala cacat. Kendala cacat.
ANALISIS:

Perhatikan bahwa echo diatur ke off, yang berarti bahwa Anda tidak akan melihat laporan individu. Karena umpan balik diatur ke atas, Anda dapat melihat hasilnya.

  Kendala cacat. 

Jika kedua gema dan umpan balik ditetapkan untuk mati, tidak akan ditampilkan. Tidak hanya akan jeda selama yang dibutuhkan untuk menjalankan ALTER TABLE dan kemudian laporan SQL>prompt akan dikembalikan.

Sekarang Anda dapat membuka data anda tanpa perlu khawatir menerima kesalahan yang disebabkan oleh kendala Anda. Kendala yang baik, tetapi mereka dapat hambatan selama data beban.Anda dapat menggunakan ide yang sama untuk mengaktifkan tabel kendala.

Sinonim Membuat Sejumlah dalam Single Bound

Lain dan melelahkan tugas yang membosankan adalah menciptakan banyak sinonim, apakah mereka pemerintah atau swasta. Hanya DBA dapat membuat sinonim publik, tetapi user dapat membuat sinonim pribadi.

Contoh berikut membuat sinonim umum untuk semua tabel yang dimiliki oleh Ryan.

INPUT:
  SQL> SET ECHO OFF 
  SQL> SET KOMENTAR MATI 
  SQL> SET berangkat 
  SQL> spool PUB_SYN.SQL 
  SQL> SELECT 'CREATE sinonim PUBLIK' | | TABLE_NAME | | 'FOR' | | 
    2 PEMILIK | | '. "  | | TABLE_NAME | | ';' 
    3 DARI SYS.DBA_TABLES 
    4 WHERE PEMILIK 'Ryan =' 
    5 /
OUTPUT:
 CREATE ACCT_PAY PUBLIK sinonim untuk RYAN.ACCT_PAY; CREATE ACCT_REC sinonim PUBLIK UNTUK RYAN.ACCT_REC; CREATE PUBLIK UNTUK NASABAH sinonim RYAN.CUSTOMERS; CREATE PUBLIK UNTUK KARYAWAN sinonim RYAN.EMPLOYEES; CREATE SEJARAH sinonim PUBLIK UNTUK RYAN.HISTORY; membuat tagihan sinonim PUBLIK UNTUK RYAN.INVOICES; perintah CREATE sinonim PUBLIK UNTUK RYAN.ORDERS; CREATE PUBLIK UNTUK PRODUK sinonim RYAN.PRODUCTS; CREATE sinonim PROYEK PUBLIK UNTUK RYAN.PROJECTS; CREATE vendor sinonim PUBLIK UNTUK RYAN.VENDORS;

Sekarang jalankan file.

INPUT / OUTPUT:
  SQL> spool MATI 
  SQL> ED PUB_SYN.SQL 
  SQL SET> ECHO ON 
  SQL> SET ON KOMENTAR 
  SQL> START PUB_SYN.SQL 

  SQL> CREATE ACCT_PAY sinonim PUBLIK UNTUK RYAN.ACCT_PAY; 

  Sinonim dibuat. 

  SQL> CREATE ACCT_REC sinonim PUBLIK UNTUK RYAN.ACCT_REC; 

  Sinonim dibuat. 

  SQL> CREATE NASABAH sinonim PUBLIK UNTUK RYAN.CUSTOMERS; 

  Sinonim dibuat. 

  SQL> CREATE KARYAWAN sinonim PUBLIK UNTUK RYAN.EMPLOYEES; 

  Sinonim dibuat. 

  SQL> CREATE SEJARAH sinonim PUBLIK UNTUK RYAN.HISTORY; 

  Sinonim dibuat. 

  SQL> CREATE faktur sinonim PUBLIK UNTUK RYAN.INVOICES; 

  Sinonim dibuat. 

  SQL> CREATE perintah sinonim PUBLIK UNTUK RYAN.ORDERS; 

  Sinonim dibuat. 

  SQL> CREATE PUBLIK UNTUK PRODUK sinonim RYAN.PRODUCTS; 

  Sinonim dibuat. 

  SQL> CREATE sinonim PROYEK PUBLIK UNTUK RYAN.PROJECTS; 

  Sinonim dibuat. 

  SQL> CREATE vendor sinonim PUBLIK UNTUK RYAN.VENDORS; 

  Sinonim dibuat. 
ANALISIS:

Hampir segera, semua pengguna memiliki akses ke database sinonim umum untuk semua tabel yang memiliki Ryan. Sekarang pengguna tidak perlu memenuhi syarat meja ketika melakukan operasi SELECT. (Kualifikasi berarti mengidentifikasi pemilik meja, seperti di RYAN.VENDORS.)

Bagaimana jika nama-muradif publik tidak ada? Misalkan Brandon yang memiliki akses Pilih untuk seluruh tabel yang dimiliki oleh Ryan dan ingin membuat sinonim pribadi.

INPUT / OUTPUT:
  SQL> CONNECT Brandon 
  ENTER PASSWORD: ******* 
  Dihubungi. 

  SQL> SET ECHO OFF 
  SQL> SET OFF KOMENTAR 
  SQL> SET berangkat 
  SQL> spool PRIV_SYN.SQL 
  SQL> SELECT 'CREATE sinonim' | | TABLE_NAME | | 'FOR' | | 
    2 PEMILIK | | '. "  | | TABLE_NAME | | ';' 
    3 DARI ALL_TABLES 
    4 / 

  CREATE SYS.DUAL sinonim DUAL UNTUK; 
  CREATE sinonim AUDIT_ACTIONS UNTUK SYS.AUDIT_ACTIONS; 
  CREATE sinonim USER_PROFILE UNTUK SYSTEM.USER_PROFILE; 
  CREATE sinonim PELANGGAN UNTUK RYAN.CUSTOMERS; 
  CREATE sinonim pesanan untuk RYAN.ORDERS; 
  CREATE sinonim PRODUK UNTUK RYAN.PRODUCTS; 
  CREATE sinonim faktur untuk RYAN.INVOICES; 
  UNTUK MENCIPTAKAN sinonim ACCT_REC RYAN.ACCT_REC; 
  CREATE sinonim ACCT_PAY UNTUK RYAN.ACCT_PAY; 
  CREATE sinonim vendor untuk RYAN.VENDORS; 
  CREATE sinonim KARYAWAN UNTUK RYAN.EMPLOYEES; 
  CREATE sinonim PROYEK UNTUK RYAN.PROJECTS; 
  UNTUK MENCIPTAKAN SEJARAH sinonim RYAN.HISTORY;
INPUT / OUTPUT:
  SQL> spool MATI 
  SQL> 

  SQL> SET ECHO OFF 
  SQL> SET ON KOMENTAR 
  SQL> START PRIV_SYN.SQL 

  Sinonim dibuat. 

  Sinonim dibuat. 

  Sinonim dibuat. 

  Sinonim dibuat. 

  Sinonim dibuat. 

  Sinonim dibuat. 

  Sinonim dibuat. 

  Sinonim dibuat. 

  Sinonim dibuat. 

  Sinonim dibuat. 

  Sinonim dibuat. 

  Sinonim dibuat. 

  Sinonim dibuat. 
ANALISIS:

Dengan hampir setiap usaha, Brandon telah sinonim untuk semua tabel yang dimiliki oleh Ryan dan tidak diperlukan lagi untuk memenuhi syarat nama tabel.

Membuat Tampilan pada Tabel Anda

Jika Anda ingin membuat pemandangan pada kelompok tabel, Anda bisa mencoba sesuatu yang mirip dengan contoh berikut:

INPUT:
  SQL> SET ECHO OFF 
  SQL> SET OFF KOMENTAR 
  SQL> SET berangkat 
  SQL> spool VIEWS.SQL 
  SQL> SELECT 'CREATE VIEW' | TABLE_NAME | | | '_VIEW AS SELECT * FROM' | | 
    2 TABLE_NAME | | ';' 
    3 DARI CAT 
    4 /
OUTPUT:
 CREATE VIEW AS * ACCT_PAY_VIEW SELECT FROM ACCT_PAY; CREATE VIEW AS ACCT_REC_VIEW SELECT * FROM ACCT_REC; CREATE VIEW AS * SELECT CUSTOMERS_VIEW NASABAH; CREATE VIEW AS * EMPLOYEES_VIEW SELECT FROM KARYAWAN; CREATE VIEW AS * SELECT HISTORY_VIEW DARI SEJARAH; CREATE VIEW AS SELECT INVOICES_VIEW * FROM Faktur; CREATE VIEW AS ORDERS_VIEW SELECT * FROM pesanan; CREATE VIEW AS * SELECT PRODUCTS_VIEW DARI PRODUK; CREATE VIEW AS * SELECT PROJECTS_VIEW DARI PROYEK; CREATE VIEW AS * SELECT VENDORS_VIEW dari vendor;
INPUT / OUTPUT:
  SQL> spool MATI 
  SQL> SET ECHO OFF 
  SQL> SET ON KOMENTAR 
  SQL> START VIEWS.SQL 

  Lihat Dibuat. 

  Lihat Dibuat. 

  Lihat Dibuat. 

  Lihat Dibuat. 

  Lihat Dibuat. 

  Lihat Dibuat. 

  Lihat Dibuat. 

  Lihat Dibuat. 

  Lihat Dibuat. 

  Lihat Dibuat. 
ANALISIS:

The views.sql file ini dibuat oleh pernyataan SQL sebelumnya. Output file ini menjadi file lain pernyataan SQL dan berisi laporan untuk menciptakan pandangan pada semua tabel yang ditentukan.Setelah menjalankan views.sql, Anda dapat melihat bahwa pandangan telah diciptakan.

Truncating Semua Tabel dalam sebuah Skema

Truncating tabel adalah suatu peristiwa yang terjadi di lingkungan pengembangan. Untuk secara efektif mengembangkan dan menguji data rutinitas beban dan kinerja pernyataan SQL, data reloaded sering. Proses ini mengidentifikasi dan exterminates bug, dan aplikasi yang dikembangkan atau diuji adalah pindah ke sebuah lingkungan produksi.

Contoh berikut memotong semua tabel dalam skema tertentu.

INPUT:
  SQL> SET ECHO OFF 
  SQL> SET OFF KOMENTAR 
  SQL> SET berangkat 
  SQL> spool TRUNC.SQL 
  SQL> SELECT 'truncate TABLE' | | TABLE_NAME | | ';' 
    2 DARI ALL_TABLES 
    3 WHERE PEMILIK 'Ryan =' 
    4 /
OUTPUT:
  TABEL truncate ACCT_PAY; 
  TABEL truncate ACCT_REC; 
  Truncate TABEL NASABAH; 
  Truncate TABEL KARYAWAN; 
  TABEL truncate SEJARAH; 
  TABEL truncate Faktur; 
  Truncate TABLE pesanan; 
  Truncate TABEL PRODUK; 
  TABEL truncate PROYEK; 
  TABEL truncate Vendor; 

Silakan menjalankan script Anda jika Anda berani.

INPUT / OUTPUT:
  SQL> spool MATI 
  SQL> SET ON KOMENTAR 
  SQL> START TRUNC.SQL 

  Tabel dipotong. 

  Tabel dipotong. 

  Tabel dipotong. 

  Tabel dipotong. 

  Tabel dipotong. 

  Tabel dipotong. 

  Tabel dipotong. 

  Tabel dipotong. 

  Tabel dipotong. 

  Tabel dipotong. 
ANALISIS:

Truncating seluruh tabel yang dimiliki oleh Ryan menghapus semua data dari tabel tersebut. Tabel pemotongan mudah. Anda dapat menggunakan teknik ini jika Anda berencana untuk terisi kembali meja Anda dengan data baru.


TIP: Sebelum melakukan operasi seperti tabel dalam skema truncating, Anda selalu harus memiliki cadangan yang baik dari tabel Anda berencana untuk memotong, bahkan jika Anda yakin bahwa Anda tidak akan memerlukan data lagi. (Anda akan – seseorang yakin meminta Anda untuk mengembalikan data yang lama.)


Menggunakan SQL untuk Menghasilkan Skrip Shell

Anda juga dapat menggunakan SQL untuk menghasilkan bentuk-bentuk lain dari script, seperti skrip shell. Sebagai contoh, sebuah RDBMS server Oracle dapat berjalan di lingkungan UNIX, yang biasanya jauh lebih besar dari lingkungan sistem operasi PC. Oleh karena itu, UNIX memerlukan pendekatan yang lebih terorganisir untuk file manajemen. Anda dapat menggunakan SQL dengan mudah untuk mengelola database file dengan membuat skrip shell.

Skenario berikut tetes tablespace di database. Meskipun tablespace dapat menjatuhkan menggunakan SQL, data sebenarnya file yang berhubungan dengan tablespace ini harus dihilangkan dari sistem operasi terpisah.

Langkah pertama adalah untuk menghasilkan skrip SQL untuk drop tablespace.

INPUT:
  SQL> SET ECHO OFF 
  SQL> SET OFF KOMENTAR 
  SQL> SET berangkat 
  SQL> spool DROP_TS.SQL 
  SQL> SELECT 'DROP Tablespace' | | TABLESPACE_NAME | | 'TERMASUK ISI;' 
    2 DARI SYS.DBA_TABLESPACES 
    3 /
OUTPUT:
  DROP tablespace SISTEM TERMASUK ISI; 
  DROP tablespace RBS TERMASUK ISI; 
  DROP tablespace TEMP TERMASUK ISI; 
  DROP tablespace TERMASUK ALAT ISI; 
  DROP tablespace TERMASUK PENGGUNA ISI; 

Selanjutnya Anda harus membuat script shell untuk menghapus data file dari sistem operasi setelah tablespace telah dijatuhkan.

INPUT / OUTPUT:
  SQL> spool MATI 
  SQL> spool RM_FILES.SH 
  SQL> SELECT 'RM-' | F FILE_NAME | 
    2 DARI SYS.DBA_DATA_FILES 
    3 / 

  rm-f / disk01/orasys/db01/system0.dbf 
  rm-f / disk02/orasys/db01/rbs0.dbf 
  rm-f / disk03/orasys/db01/temp0.dbf 
  rm-f / disk04/orasys/db01/tools0.dbf 
  rm-f / disk05/orasys/db01/users0.dbf 
  SQL> spool off 
  SQL> 
ANALISIS:

Sekarang bahwa Anda telah dihasilkan kedua script, Anda dapat menjalankan script untuk drop tablespace dan kemudian jalankan shell script sistem operasi untuk menghapus file data yang sesuai. Anda juga akan menemukan banyak cara lain untuk mengelola file dan menghasilkan script non-SQL menggunakan SQL.

Tabel Reverse Rekayasa dan Indeks

Meskipun banyak alat KASUS memungkinkan Anda untuk reverse-insinyur tabel dan indeks, Anda selalu bisa menggunakan SQL langsung untuk tujuan ini. Anda dapat mengambil semua informasi yang Anda butuhkan dari kamus data untuk membangun kembali tabel dan indeks, namun hal ini secara efektif adalah sulit tanpa menggunakan bahasa prosedural, seperti PL / SQL atau shell script.

Kami biasanya menggunakan embedded SQL dalam skrip shell. fungsi bahasa prosedural yang diperlukan untuk steker pada bahan yang sesuai sintaks, seperti koma. Script harus cukup pintar untuk tahu mana kolom adalah yang terakhir, sehingga tidak terjadi koma setelah kolom terakhir. Script juga harus tahu di mana menempatkan kurung, dan seterusnya. Carilah alat yang tersedia untuk menumbuhkan objek dari kamus data, apakah Anda menggunakan C, Perl, shell scripts, COBOL, atau PL / SQL.

Ringkasan

Membangkitkan laporan langsung dari database suku cadang pekerjaan Anda membosankan sering coding pernyataan SQL. Terlepas dari lingkup pekerjaan Anda, dengan menggunakan teknik generasi pernyataan SQL membebaskan Anda untuk bekerja pada fase-fase lain proyek Anda.

Apa yang telah Anda pelajari hari ini adalah dasar, dan meskipun contoh-contoh ini menggunakan database Oracle, Anda dapat menerapkan konsep-konsep untuk database relasional. Pastikan untuk memeriksa implementasi spesifik Anda untuk variasi dalam sintaks dan struktur data kamus. Jika Anda tetap berpikiran terbuka, Anda akan terus menemukan cara untuk menghasilkan script SQL, dari pernyataan sederhana untuk sistem manajemen tingkat tinggi yang kompleks.

Sumber ; http://www.webbasedprogramming.com

SQL Kamus data

Tinggalkan komentar

Tujuan

Hari ini kita membahas kamus data, juga dikenal sebagai sistem katalog. Pada akhir hari, Anda harus memiliki pemahaman yang kuat sebagai berikut:

  • Definisi kamus data
  • Jenis informasi berisi kamus data
  • Berbagai jenis tabel di dalam kamus data
  • Cara efektif untuk mengambil informasi yang berguna dari kamus data

Pengantar Data Kamus

Setiap database relasional memiliki beberapa bentuk kamus data, atau sistem katalog presentasi. (Kami menggunakan kedua istilah ini di.) Sebuah kamus data adalah area sistem dalam lingkungan database yang berisi informasi tentang bahan dari database. kamus data meliputi informasi seperti desain database, disimpan kode SQL, statistik pengguna, proses database, pertumbuhan database, dan kinerja statistik database.

Kamus data memiliki tabel yang mengandung informasi desain database, yang dihuni atas penciptaan database dan pelaksanaan Data Definition Language (DDL) seperti perintah CREATE TABLE.Ini bagian dari sistem katalog menyimpan informasi tentang sebuah kolom meja dan atribut, informasi-ukuran meja, hak meja, dan pertumbuhan meja. benda lain yang disimpan dalam kamus data mencakup indeks, memicu, prosedur, paket, dan pandangan.

Pengguna tabel laporan statistik status item seperti informasi konektivitas database dan hak untuk pengguna individu. Privileges tersebut dibagi menjadi dua komponen utama:-tingkat sistem dan hak-hak istimewa tingkat objek. Kewenangan untuk membuat pengguna lain adalah tingkat hak istimewa sistem, sedangkan kemampuan untuk mengakses tabel adalah tingkat keistimewaan objek. Peran juga digunakan untuk menegakkan keamanan dalam database. Informasi ini disimpan juga.

16 hari membentang apa yang Anda pelajari kemarin (15 Hari, “Memperlancar SQL Laporan untuk Peningkatan Kinerja”). Data diambil dari katalog sistem dapat digunakan untuk memantau kinerja database dan untuk mengubah parameter database yang akan meningkatkan kinerja database dan pernyataan SQL.

Kamus data adalah salah satu alat yang paling berguna yang tersedia dengan database. Ini adalah cara untuk menjaga database terorganisir, seperti file persediaan di toko ritel. Ini merupakan mekanisme yang menjamin integritas database. Misalnya, ketika Anda membuat sebuah tabel, bagaimana server database tahu apakah sebuah tabel dengan nama yang sama ada? Bila Anda membuat sebuah query untuk memilih data dari tabel, bagaimana bisa memverifikasi bahwa Anda telah diberi hak istimewa yang tepat untuk mengakses meja? Kamus data adalah jantung dari database, sehingga Anda perlu mengetahui bagaimana menggunakannya.

Pengguna Data Kamus

Akhir pengguna, insinyur sistem, dan administrator database semua menggunakan kamus data, apakah mereka menyadarinya atau tidak. akses mereka bisa baik langsung maupun tidak langsung.

Pengguna akhir, seringkali para pelanggan untuk database yang telah dibuat, akses katalog sistem tidak langsung. Ketika pengguna mencoba untuk log on ke database, kamus data dirujuk untuk memverifikasi bahwa user’s username, password, dan hak istimewa untuk menyambung ke database. database ini juga direferensikan untuk melihat apakah pengguna memiliki hak yang sesuai untuk mengakses data tertentu. Yang umum metode yang paling untuk pengguna akhir untuk mengakses kamus data melalui aplikasi front-end. Banyak antarmuka pengguna grafis (GUI) alat, yang memungkinkan pengguna untuk dengan mudah membangun sebuah pernyataan SQL, telah dikembangkan. Ketika login ke database, aplikasi front-end dapat segera melakukan pilih terhadap kamus data untuk mendefinisikan tabel yang memiliki akses pengguna. The-end aplikasi depan mungkin akan membangun sebuah “lokal” sistem katalog bagi pengguna individu berdasarkan data yang diambil dari kamus data. Pelanggan dapat menggunakan katalog setempat untuk memilih tabel yang spesifik ia ingin query.

Sistem insinyur adalah database pengguna yang bertanggung jawab untuk tugas-tugas seperti model database dan desain, pengembangan aplikasi, dan aplikasi manajemen. (Beberapa perusahaan menggunakan judul lainnya, seperti programer, analis pemrogram, dan modelers data, untuk merujuk Sistem insinyur sistem mereka.) Insinyur menggunakan kamus data secara langsung untuk mengelola proses pembangunan, serta mempertahankan proyek-proyek yang ada. Akses juga dapat dilakukan melalui aplikasi front-end, perangkat pengembangan, dan rekayasa perangkat lunak dibantu komputer (CASE) tools. area umum dari sistem katalog bagi para pengguna query objek-objek di bawah kelompok skema, permintaan terhadap peran aplikasi dan hak istimewa, dan permintaan untuk mengumpulkan statistik pada pertumbuhan skema mungkin. System juga insinyur menggunakan kamus data untuk reverse-engineer objek database dalam ditetapkan skema.

Database administrator (DBAs) yang paling jelas persentase terbesar pengguna langsung dari kamus data. Berbeda dengan kelompok lain dua pengguna, yang kadang-kadang menggunakan sistem katalog secara langsung, DBAs harus secara eksplisit mencakup penggunaan kamus data sebagai bagian dari rutinitas sehari-hari mereka. Akses biasanya melalui sebuah query SQL, tetapi juga dapat melalui alat administrasi seperti Oracle Server Manager. Seorang DBA menggunakan kamus data untuk mengelola informasi pengguna dan sumber daya dan akhirnya untuk mencapai database baik-tuned.

Seperti yang Anda lihat, semua pengguna database harus menggunakan kamus data. Bahkan lebih penting, sebuah database relasional tidak bisa ada tanpa beberapa bentuk kamus data.

Isi Kamus Data

Bagian ini mengkaji sistem katalog dua vendor RDBMS, Oracle dan Sybase. Meskipun kedua implementasi memiliki spesifikasi unik untuk kamus data, mereka melayani fungsi yang sama. Jangan keprihatinan sendiri dengan nama yang berbeda untuk tabel sistem, cukup memahami konsep kamus data dan data di dalamnya.

Kamus Oracle’s Data

Karena setiap meja harus memiliki pemiliknya, pemilik sistem tabel dalam kamus data Oracle adalah SYS. Oracle’s data tabel kamus dibagi menjadi tiga kategori dasar: diakses dilihat pengguna, dilihat DBA, dan tabel performa yang dinamis, yang juga muncul sebagai pandangan. Tampilan yang dapat diakses pengguna memungkinkan pengguna untuk permintaan data kamus untuk informasi tentang account database individu, seperti hak istimewa, atau katalog tabel dibuat. DBA dilihat bantuan dalam tugas sehari-hari dari seorang administrator database, yang memungkinkan DBA untuk mengelola pengguna dan objek dalam database. Tabel kinerja dinamis di Oracle juga digunakan oleh DBA dan menyediakan mendalam melihat lebih untuk memantau kinerja database.Pandangan-pandangan ini memberikan informasi seperti statistik pada proses, penggunaan dinamis segmen rollback, penggunaan memori, dan sebagainya. Tabel performa yang dinamis semua Vawalan $.

Data Sybase’s Dictionary

Seperti di Oracle, pemilik tabel dalam kamus data Sybase adalah SYS. Tabel dalam kamus data dibagi menjadi dua kategori: tabel sistem dan tabel database.

Tabel sistem berisi dengan database master saja. Tabel ini define obyek (seperti tabel dan indeks) yang umum melalui beberapa database kamus yang kedua. Set tabel dalam Sybase SQL Server data adalah tabel database. Tabel ini berkaitan hanya untuk obyek dalam setiap database.

A Look Inside’s Oracle Data Dictionary

Contoh dalam bagian ini menunjukkan cara untuk mengambil informasi dari kamus data dan dapat diterapkan ke database relasional pengguna kebanyakan, yaitu, sistem insinyur, end user, atau DBA. kamus data Oracle memiliki array yang luas dari tabel sistem dan pandangan untuk semua jenis pengguna database, itulah sebabnya mengapa kita memilih untuk mengeksplorasi kamus data Oracle secara lebih mendalam.

Tampilan Pengguna

dilihat pengguna data dilihat kamus yang umum untuk semua pengguna database. Hanya hak pengguna perlu permintaan terhadap pandangan pengguna adalah hak istimewa sistem CREATE SESSION, yang harus umum untuk semua pengguna.

Siapa Anda?

Sebelum merambah ke dalam pengetahuan yang tampaknya tak berujung yang terdapat dalam database, Anda harus tahu persis siapa Anda (dalam hal database) dan apa yang dapat Anda lakukan. Kedua berikut menunjukkan contoh laporan SELECT dari dua tabel: satu untuk mengetahui siapa Anda dan yang lainnya untuk melihat saham lain yang database.

INPUT:
  SQL> SELECT * 
    2 DARI USER_USERS;
OUTPUT:
  USERNAME USER_ID tablespace SEMENTARA DEFAULT_TABLESPACE DIBUAT 
  ---------- ------ -------------------- -------------- -------- ------ 
  JSMITH 29 USERS TEMP 14-MAR-97 

  1 baris yang dipilih. 
ANALISIS:

Tampilan USER_USERS memungkinkan Anda untuk melihat bagaimana Anda Oracle ID didirikan, ketika didirikan, dan ia juga menampilkan lainnya pengguna tertentu, statistik vital. The default tablespace dan tablespace sementara juga ditampilkan. The default tablespace, PENGGUNA, adalah tablespace yang objek akan dibuat di bawah sebagai pengguna tersebut. Sementara itu tablespace adalah tablespace ditujukan untuk digunakan selama jenis besar dan fungsi kelompok untuk JSMITH.

INPUT / OUTPUT:
  SQL> * SELECT 
    2 DARI All_users; 

  USERNAME USER_ID DIBUAT 
  -------------- ------- ------------ 
  SYS 0 01-JAN-97 
  SISTEM 5 01-JAN-97 
  SCOTT 8 01-JAN-97 
  JSMITH 10 14-MAR-97 
  TJONES 11 15-MAR-97 
  VJOHNSON 12 15-MAR-97 

Seperti yang dapat Anda lihat dalam hasil pencarian sebelumnya, Anda dapat melihat semua pengguna yang ada di database dengan menggunakan tampilan All_users. Namun, tampilan All_users tidak menyediakan informasi yang spesifik yang sama seperti tampilan sebelumnya (USER_USERS) disediakan karena tidak ada kebutuhan untuk informasi ini di tingkat pengguna. informasi spesifik lebih lanjut dapat diperlukan pada tingkat sistem.

Keistimewaan Apakah Anda?

Sekarang Anda tahu siapa Anda, akan menyenangkan untuk mengetahui apa yang dapat Anda lakukan. Beberapa pandangan kolektif, mampu untuk memberikan informasi tersebut. Pandangan USER_SYS_PRIVS dan tampilan USER_ROLE_PRIVS akan memberi Anda (pengguna) ide yang baik dari apa kewenangan yang Anda miliki.

Anda dapat menggunakan tampilan USER_SYS_PRIVS hak istimewa untuk memeriksa sistem anda. Ingat, hak istimewa sistem hak istimewa yang memungkinkan Anda untuk melakukan hal-hal tertentu dalam database secara keseluruhan. Privileges tersebut tidak spesifik untuk setiap obyek satu atau sekumpulan objek.

INPUT:
  SQL> SELECT * 
    2 DARI USER_SYS_PRIVS;
OUTPUT:
  USERNAME HAK ISTIMEWA ADM 
  -------- -------------------- --- 
  JSMITH UNLIMITED tablespace NO 
  CREATE JSMITH SESI NO 

  2 baris yang dipilih. 
ANALISIS:

JSMITH telah diberikan dua tingkat hak istimewa sistem, di luar dari setiap peran diberikan. Perhatikan kedua, misalnya CREATE SESSION. CREATE SESI juga terkandung dalam standar Oracle peran, CONNECT, yang tercakup dalam berikutnya.

Anda dapat menggunakan USER_ROLE_PRIVS tampilan untuk melihat informasi tentang peran Anda telah diberikan dalam database. Database peran sangat mirip dengan tingkat hak istimewa sistem. Peran dibuat seperti pengguna dan kemudian diberikan hak istimewa. Setelah peran telah diberikan hak istimewa, peran dapat diberikan kepada pengguna. Ingat bahwa tingkat hak objek juga mungkin terdapat dalam peran.

INPUT / OUTPUT:
  SQL> SELECT * 
    2 DARI USER_ROLE_PRIVS; 

  USERNAME ADM DEF GRANTED_ROLE OS_ 
  ---------------- ------------ --- --- - 
  JSMITH TIDAK YA TIDAK CONNECT 
  JSMITH RESOURCE TIDAK YA TIDAK 

  2 baris yang dipilih. 
ANALISIS:

Tampilan USER_ROLE_PRIVS memungkinkan Anda untuk melihat peran yang telah diberikan kepada Anda. Seperti disebutkan sebelumnya, CONNECT berisi CREATE SESSION privilege sistem, serta hak lainnya. RESOURCE memiliki beberapa keistimewaan tersendiri. Anda dapat melihat bahwa kedua peran telah diberikan peran sebagai’s default user, user tidak dapat memberikan peran kepada pengguna lain, seperti dicatat oleh opsi Admin (ADM), dan peran belum diberikan oleh sistem operasi. (Lihat Hari 12, “Keamanan Database.”)

Apa yang Anda Memiliki Akses Untuk?

Sekarang Anda mungkin bertanya, Apa yang harus saya akses? Aku tahu siapa aku, aku tahu hak saya, tapi dimana saya bisa mendapatkan data saya? Anda dapat menjawab pertanyaan tersebut dengan melihat berbagai pandangan pengguna yang tersedia dalam data kamus. Bagian ini mengidentifikasi beberapa pandangan membantu.

Mungkin pengguna pandangan dasar yang paling adalah USER_CATALOG, yang hanyalah katalog meja, pandangan, sinonim, dan urutan yang dimiliki oleh pengguna saat ini.

INPUT:
  SQL> SELECT * 
    2 DARI USER_CATALOG;
OUTPUT:
  TABLE_NAME TABLE_TYPE 
  ---------- ---------------------------- 
  TABEL MAGAZINE_TBL 
  MAG_COUNTER URUTAN 
  MAG_VIEW VIEW 
  TABEL SPORTS 

  4 baris yang dipilih. 
ANALISIS:

Contoh ini memberikan daftar cepat tabel dan obyek terkait yang Anda miliki. Anda juga dapat menggunakan sinonim publik untuk USER_CATALOG untuk itu demi kesederhanaan: CAT. Artinya, mencoba * pilih dari kucing;.

Pandangan lain yang berguna adalah ALL_CATALOG, yang memungkinkan Anda untuk melihat tabel yang dimiliki oleh orang lain.

INPUT / OUTPUT:
 SQL> SELECT * 2 FROM ALL_CATALOG;
  PEMILIK TABLE_NAME TABLE_TYPE 
  -------------------- ------------------ ---------- 
  SYS DUAL TABEL 
  DUAL PUBLIK sinonim 
  JSMITH MAGAZINE_TBL TABEL  
  JSMITH MAG_COUNTER URUTAN 
  JSMITH MAG_VIEW VIEW 
  SPORTS JSMITH TABEL 
  VJOHNSON test1 TABEL 
  VJOHNSON Hobi TABEL 
  VJOHNSON CLASSES TABEL 
  MAHASISWA VJOHNSON VIEW 

  10 baris yang dipilih. 
ANALISIS:

objek Lebih dari muncul dalam daftar sebelumnya akan dapat diakses oleh Anda sebagai pengguna. (Tabel SISTEM sendiri akan menambah banyak tabel daftar.) Kami telah sekadar dipersingkat.Pandangan ALL_CATALOG sama dengan tampilan USER_CATALOG, tapi menampilkan semua tabel, pandangan, urutan, dan sinonim yang Anda memiliki akses (bukan hanya yang Anda sendiri).

INPUT:
  SQL> SELECT substr (OBJECT_TYPE, 1,15) OBJECT_TYPE, 
    2 substr (OBJECT_NAME, 1,30) OBJECT_NAME, 
    3 DIBUAT, 
    4 STATUS 
    5 DARI USER_OBJECTS 
    6 ORDER BY 1;
OUTPUT:
  OBJECT_NAME OBJECT_TYPE DIBUAT STATUS 
  -------------- -------------------- ------------ ---- - 
  INDEKS MAGAZINE_INX 14-MAR-97 Valid 
  INDEKS SPORTS_INX 14-MAR-97 Valid 
  INDEKS HOBBY_INX 14-MAR-97 Valid 
  TABEL MAGAZINE_TBL 01-MAR-97 Valid 
  TABEL SPORTS 14-MAR-97 Valid 
  TABEL HOBBY_TBL 16-MAR-97 Valid 

  6 baris yang dipilih. 
ANALISIS:

Anda dapat menggunakan tampilan USER_OBJECTS untuk memilih informasi umum mengenai obyek yang dimiliki pengguna, seperti nama, jenis, tanggal dibuat, tanggal dimodifikasi, dan status obyek. Dalam permintaan sebelumnya, kita memeriksa data yang dibuat dan validasi dari tiap objek yang dimiliki.

INPUT / OUTPUT:
  SQL> SELECT TABLE_NAME, INITIAL_EXTENT, NEXT_EXTENT 
    2 DARI USER_TABLES; 

  SEJAUH TABLE_NAME NEXT INITIAL_EXTENT 
  ---------------------------- -------------- -------- --- 
  MAGAZINE_TBL 1048576 540672 
  OLAHRAGA 114688 114688 
ANALISIS:

Jauh lebih data tersedia ketika memilih dari tampilan USER_TABLES, tergantung apa yang ingin Anda lihat. Sebagian data yang terdiri dari informasi penyimpanan.


CATATAN: Perhatikan pada output bahwa nilai awal dan selanjutnya Sejauh mana dalam bytes. Dalam beberapa implementasi anda dapat menggunakan kolom output format untuk membuat Anda lebih mudah dibaca dengan menambahkan tanda koma. Lihat Hari 19, “Transact-SQL: An Introduction,” dan Hari 20, “SQL * Plus.”


Tampilan ALL_TABLES adalah USER_TABLES sebagai tampilan ALL_CATALOG adalah untuk USER_CATALOG. Dengan kata lain, ALL_TABLES memungkinkan Anda untuk melihat semua tabel yang Anda memiliki akses, bukan hanya meja Anda sendiri. Pandangan ALL_TABLES mungkin termasuk tabel yang ada di katalog pengguna lain.

INPUT / OUTPUT:
 SQL SELECT substr> (PEMILIK, 1,15) PEMILIK, 2 substr (TABLE_NAME, 1,25) TABLE_NAME, 3 substr (TABLESPACE_NAME, 1,13) tablespace 4 DARI ALL_TABLES; PEMILIK tablespace --------- TABLE_NAME ----------- ---------------------------- ---------- SYS SISTEM DUAL JSMITH PENGGUNA MAGAZINE_TBL SMITH SPORTS PENGGUNA VJOHNSON test1 Hobi VJOHNSON USERS USERS CLASSES VJOHNSON PENGGUNA
ANALISIS:

Sekali lagi, Anda telah memilih hanya informasi yang diinginkan. Banyak kolom tambahan dalam ALL_TABLES juga mungkin berisi informasi yang bermanfaat.

Sebagai pengguna database, anda bisa memonitor pertumbuhan tabel dan indeks dalam katalog Anda dengan query tampilan USER_SEGMENTS. Seperti namanya, USER_SEGMENTS memberi Anda informasi tentang setiap segmen, seperti informasi penyimpanan dan luasan diambil. Sebuah segmen dapat terdiri dari sebuah tabel, indeks, kembalikan cluster, sementara, atau cache.Contoh berikut ini menunjukkan bagaimana Anda dapat mengambil informasi yang dipilih dari tampilan USER_SEGMENTS.

INPUT / OUTPUT:
 SQL SELECT substr> (SEGMENT_NAME, 1,30) SEGMENT_NAME, 2 substr (SEGMENT_TYPE, 1,8) SEG_TYPE, 3 substr (TABLESPACE_NAME, 1,25) TABLESPACE_NAME, 4 BYTES, luasan 5 DARI USER_SEGMENTS 6 ORDER BY DESC luasan; SEG_TYPE SEGMENT_NAME TABLESPACE_NAME BYTES luasan -------------------- ------------ --------------- ----- ------------ ------- TABEL PENGGUNA MAGAZINE_TBL 4292608 7 PENGGUNA INDEKS SPORTS_INX 573.440 4 TABEL PENGGUNA SPORTS 344.064 2 PENGGUNA INDEKS MAGAZINE_INX 1.589.248 1
  4 baris yang dipilih. 
ANALISIS:

Output dalam permintaan sebelumnya telah disortir oleh luasan dalam urutan; segmen dengan pertumbuhan paling (luasan diambil) muncul pertama dalam hasil.

Sekarang Anda tahu mana tabel Anda memiliki akses ke, Anda akan ingin mengetahui apa yang dapat Anda lakukan untuk setiap tabel. Apakah Anda hanya terbatas pada permintaan, atau dapat Anda memperbarui tabel? Pandangan ALL_TAB_PRIVS daftar semua hak istimewa yang telah Anda sebagai pengguna database pada setiap meja tersedia untuk Anda.

INPUT / OUTPUT:
 SQL> SELECT substr (TABLE_SCHEMA, 1,10) PEMILIK, 2 substr (TABLE_NAME, 1,25) TABLE_NAME, 3 HAK ISTIMEWA 4 DARI ALL_TAB_PRIVS; PEMILIK HAK ISTIMEWA TABLE_NAME ------------ ----- --------------- --------- SYS JSMITH INSERT SELECT DUAL MAGAZINE_TBL JSMITH JSMITH PILIH UPDATE MAGAZINE_TBL MAGAZINE_TBL JSMITH MAGAZINE_TBL SPORTS JSMITH JSMITH DELETE SELECT INSERT UPDATE SPORTS SPORTS JSMITH JSMITH SPORTS VJOHNSON VJOHNSON DELETE SELECT test1 test1 test1 VJOHNSON INSERT UPDATE DELETE VJOHNSON VJOHNSON Hobi test1 CLASSES VJOHNSON SELECT SELECT
ANALISIS:

Seperti yang Anda lihat, Anda dapat memanipulasi data dalam beberapa tabel, sedangkan Anda memiliki akses read-only (SELECT hanya) kepada orang lain.

Bila Anda membuat objek, Anda biasanya perlu tahu di mana untuk menempatkan mereka dalam database, kecuali Anda membiarkan tujuan target Anda untuk mengambil default. Sebuah database Oracle ini dipecah menjadi tablespace, yang masing-masing mampu menyimpan objek. Setiap tablespace dialokasikan sejumlah ruang disk, sesuai dengan apa yang tersedia pada sistem. ruang disk biasanya diperoleh melalui administrator sistem (SA).

Permintaan berikut ini dari pandangan disebut USER_TABLESPACES, yang akan daftar tablespace yang Anda memiliki akses ke, default dan selanjutnya ukuran awal objek diciptakan di dalamnya, dan status mereka.

INPUT / OUTPUT:
 SQL> SELECT substr (TABLESPACE_NAME, 1,30) TABLESPACE_NAME, 2 INITIAL_EXTENT, 3 NEXT_EXTENT, 4 PCT_INCREASE, 5 STATUS 6 DARI USER_TABLESPACES; TABLESPACE_NAME INITIAL_EXTENT ----------------- NEXT_EXTENT STATUS PCT_INCREASE ------------- -------------- ----------- ------------ ------ SISTEM 32768 16384 1 RBS ONLINE 2.097.152 2.097.152 1 ONLINE TEMP 114.688 114.688 1 32.768 16.384 ALAT ONLINE USERS ONLINE 1 32.768 16.384 1 ONLINE
  5 baris yang dipilih. 
ANALISIS:

Jenis permintaan ini sangat berguna ketika Anda membuat objek, seperti tabel dan indeks, yang membutuhkan penyimpanan. Ketika sebuah tabel atau indeks dibuat, jika berikutnya penyimpanan parameter dan awal tidak ditentukan dalam DDL, tabel atau indeks akan mengambil nilai default tablespace’s tersebut. Konsep yang sama berlaku untuk PCT KENAIKAN, yang merupakan parameter Oracle menetapkan persentase ruang yang dialokasikan obyek harus diambil saat itu tumbuh. Jika nilai untuk PCT KENAIKAN tidak ditentukan ketika tabel atau indeks dibuat, database server akan mengalokasikan nilai default yang ditentukan untuk tablespace yang sesuai. Melihat nilai-nilai default memungkinkan Anda untuk menentukan apakah Anda perlu menggunakan klausa penyimpanan dalam pernyataan CREATE.

Kadang-kadang, namun Anda perlu tahu lebih dari yang tablespace Anda dapat mengakses, yaitu, membangun tabel di bawah. Misalnya, Anda mungkin perlu tahu apa batas Anda dalam tablespace sehingga Anda bisa mengatur pembentukan dan ukuran benda-benda Anda. Pandangan USER_TS_QUOTAS menyediakan informasi yang diperlukan. Menampilkan permintaan berikutnya pengguna ruang batas untuk membuat objek dalam database.

INPUT / OUTPUT:
  SQL> substr SELECT (TABLESPACE_NAME, 1,30) TABLESPACE_NAME, 
    2 BYTES, MAX_BYTES 
    3 DARI USER_TS_QUOTAS; 

  TABLESPACE_NAME BYTES MAX_BYTES 
  ------------------------------ ---------- ---------- 
  SISTEM 0 0 
  ALAT 5242880 16384 
  573.440 PENGGUNA -1 

  3 baris yang dipilih. 
ANALISIS:

Hasil sebelumnya khas output dari data Oracle kamus. BYTES mengidentifikasi jumlah byte dalam tablespace yang berkaitan dengan user BYTES. MAX mengidentifikasi maksimum byte yang diberikan kepada pengguna, atau user kuota, di tablespace tersebut. Dua yang pertama nilai dalam kolom ini adalah diri-jelas baris. Para -1 pada ketiga berarti kuota tak terbatas – yaitu, tidak ada batas yang ditempatkan pada user untuk tablespace tersebut.


CATATAN: Fungsi substr banyak muncul dalam permintaan sebelumnya data dilihat kamus. Anda dapat menggunakan banyak fungsi yang Anda pelajari sebelumnya untuk meningkatkan readablility data Anda mengambil. Penggunaan standar penamaan yang konsisten dalam database Anda mungkin mengizinkan anda membatasi ukuran data dalam output Anda, seperti yang telah kita lakukan dalam contoh ini.


Contoh-contoh ini menunjukkan bagaimana semua pengguna database biasa dapat mengekstraksi informasi dari kamus data. Pandangan ini adalah hanya beberapa dari sekian banyak yang ada di kamus’s data Oracle. Penting untuk memeriksa implementasi database Anda untuk melihat apa yang tersedia bagi Anda di kamus data Anda. Ingat, Anda harus menggunakan data kamus untuk mengelola kegiatan database Anda. Meskipun sistem katalog berbeda dengan implementasi, Anda hanya perlu memahami konsep ini dan mengetahui bagaimana untuk mengambil data yang diperlukan untuk melengkapi pekerjaan Anda.

Sistem DBA Tampilan

Pandangan DBA yang berada dalam sebuah kamus data Oracle biasanya yang utama, atau yang paling umum, pandangan bahwa DBA akan akses. Pandangan-pandangan ini tidak ternilai dengan produktivitas dari setiap DBA. Mengambil tabel ini jauh dari DBA akan seperti merampas seorang tukang kayu dari palu.

Seperti yang Anda harapkan, Anda harus memiliki hak istimewa sistem SELECT_ANY_TABLE, yang terkandung dalam peranan DBA, untuk mengakses tabel DBA. Misalnya, Anda JSMITH, yang tidak memiliki hak istimewa yang diperlukan untuk memilih dari tabel DBA.

INPUT:
  SQL> SELECT * 
    2 DARI USER_ROLE_PRIVS;
OUTPUT:
 USERNAME               GRANTED_ROLE            ADM    DEF    OS_
------------------     --------------------    ---    ---    --
JSMITH                 CONNECT                 NO     YES    NO
JSMITH                 RESOURCE                NO     YES    NO
INPUT / OUTPUT:
 SQL> SELECT *
  2 FROM SYS.DBA_ROLES;
FROM SYS.DBA_ROLES;
       * 

  ERROR pada baris 2: 
ORA-00942: table or view does not exist
ANALISIS:

When you try to access a table to which you do not have the appropriate privileges, an error is returned stating that the table does not exist. This message can be a little misleading. Virtually, the table does not exist because the user cannot “see” the table. A solution to the problem above would be to grant the role DBA to JSMITH. This role would have to be granted by a DBA, of course.

Database User Information

The USER_USERS dan dilihat All_users memberikan informasi minimal tentang pengguna.Pandangan DBA disebut DBA_USERS (dimiliki oleh SYS) memberi Anda informasi tentang semua pengguna jika Anda memiliki peran DBA atau hak istimewa SELECT_ANY_TABLE, seperti ditunjukkan pada contoh berikut.

INPUT:
 SQL> SELECT * 2 FROM SYS.DBA_USERS;
OUTPUT:
  USER_ID USERNAME PASSWORD 
  -------------------------------- ------ ------------ ----------------- 
  TEMPORARY_TABLESPACE DEFAULT_TABLESPACE DIBUAT 
  ------------------------------ -------------------- ---------- -------- 
  PROFIL 
  ------------------------------ 
  SYS 0 4012DA490794C16B 
  SISTEM TEMP 06-Juni-96 
  DEFAULT 

  JSMITH 5 A4A94B17405C10B7 
  PENGGUNA TEMP 06-Juni-96 
  DEFAULT 

  2 baris yang dipilih. 
ANALISIS:

Bila Anda memilih semua dari tampilan DBA_USERS, Anda dapat melihat informasi penting pada setiap pengguna. Perhatikan bahwa password dienkripsi. DBA_USERS adalah pandangan utama yang digunakan oleh DBA untuk mengelola pengguna.

Keamanan Database

Tiga kamus data dasar dilihat berurusan dengan keamanan, meskipun pandangan ini dapat dikaitkan dengan-gether dengan pandangan yang terkait lainnya untuk informasi lebih lengkap. Ketiga dilihat berurusan dengan peran database, peran yang diberikan kepada pengguna, dan sistem hak istimewa yang diberikan kepada pengguna. Tiga pandangan yang diperkenalkan di bagian ini adalah DBA_ROLES, DBA_ROLE_PRIVS, dan DBA_SYS_PRIVS. Permintaan contoh berikut menunjukkan bagaimana untuk memperoleh informasi yang berkaitan dengan keamanan database.

INPUT:
  SQL> SELECT * 
    2 DARI SYS.DBA_ROLES;
OUTPUT:
  PERAN PASSWORD 
  ------------------------------ -------- 
  NO CONNECT 
  RESOURCE NO 
  NO DBA 
  NO EXP_FULL_DATABASE 
  NO IMP_FULL_DATABASE 
  NO END_USER_ROLE 

  6 baris yang dipilih. 
ANALISIS:

Tampilan DBA_ROLES daftar semua peran yang telah dibuat di dalam database. Hal ini memberi nama peran dan apakah atau tidak peran memiliki password.

INPUT:
  SQL> SELECT * 
    2 DARI SYS.DBA_ROLE_PRIVS 
    3 WHERE Grantee = 'RJENNINGS'; 

  Penerima beasiswa GRANTED_ROLE ADM DEF 
  ------------------------------ -------------------- ---------- --- --- 
  YA NO CONNECT RJENNINGS 
  YA NO RJENNINGS DBA 
  YA NO RJENNINGS RESOURCE 

  3 baris yang dipilih. 
ANALISIS:

Pandangan DBA_ROLE_PRIVS memberikan informasi tentang peran database yang telah diberikan kepada pengguna. Kolom pertama adalah penerima beasiswa, atau pengguna. Menampilkan kolom kedua peran yang diberikan. Perhatikan bahwa setiap peran yang diberikan kepada user sesuai dengan catatan dalam tabel. ADM mengidentifikasi apakah peran itu diberikan dengan opsi Admin, yang berarti bahwa pengguna dapat memberikan peran yang cocok untuk pengguna lain. Kolom terakhir adalah DEFAULT, menyatakan apakah peran yang cocok peran default untuk pengguna.

INPUT / OUTPUT:
  SQL> SELECT * 
    2 DARI SYS.DBA_SYS_PRIVS 
    3 WHERE Grantee = 'RJENNINGS'; 

  Penerima beasiswa HAK ISTIMEWA ADM 
  ------------------------------ -------------------- -------------------- --- 
  CREATE RJENNINGS SESI NO 
  RJENNINGS UNLIMITED tablespace NO 

  2 baris yang dipilih. 
ANALISIS:

Pandangan DBA_SYS_PRIVS daftar semua level hak istimewa sistem yang telah diberikan kepada pengguna. Pandangan ini mirip dengan DBA_ROLE_PRIVS. Anda dapat menyertakan sistem hak istimewa dalam peran tersebut dengan memberikan hak istimewa sistem untuk peran, karena Anda akan ke pengguna.

Database Objects

Database objek fokus utama lain untuk DBA. Beberapa pandangan dalam kamus data memberikan informasi tentang objek, seperti tabel dan indeks. Pandangan ini dapat berisi informasi umum atau mereka dapat berisi informasi rinci tentang objek yang berada dalam database.

INPUT:
  SQL> SELECT * 
    2 DARI SYS.DBA_CATALOG 
    3 WHERE ROWNUM <5;
OUTPUT:
  PEMILIK TABLE_NAME TABLE_TYPE 
  ------------------------------ -------------------- ---------- ---------- 
  CDEF $ TABEL SYS 
  TAB SYS $ TABEL 
  SYS IND $ TABEL 
  SYS CLU $ TABEL 

  4 baris yang dipilih. 
ANALISIS:

DBA_CATALOG adalah hal yang sama seperti USER_CATALOG, hanya pemilik meja ini disertakan. Sebaliknya, tampilan USER_CATALOG berhubungan semata-mata dengan tabel yang dimiliki pengguna saat ini. DBA_CATALOG adalah pandangan bahwa DBA dapat digunakan untuk mengambil cepat melihat semua tabel.

Permintaan berikut ini menunjukkan jenis objek yang ada di database tertentu.


TIP: Anda dapat menggunakan ROWNUM untuk mempersempit hasil pencarian Anda ke nomor baris tertentu untuk tujuan pengujian panggilan. Oracle ROWNUM sebuah pseudocolumn,.ROWNUM seperti ROWID, dapat digunakan pada setiap tabel database atau melihat.


INPUT / OUTPUT:
 SQL> SELECT DISTINCT(OBJECT_TYPE)
  2  FROM SYS.DBA_OBJECTS;

OBJECT_TYPE
  ------------ 
CLUSTER
DATABASE LINK
  FUNGSI 
INDEX
  PAKET 
PACKAGE BODY
  PROSEDUR 
SEQUENCE
SYNONYM
  TABEL 
TRIGGER
VIEW

12 rows selected.
ANALISIS:

Fungsi berbeda dalam permintaan sebelumnya daftar semua jenis objek yang unik yang ada di database. Query ini adalah cara yang baik untuk mengetahui apa jenis objek database desainer dan pengembang yang menggunakan.

Pandangan DBA_TABLES memberikan informasi spesifik tentang tabel database, kebanyakan tentang penyimpanan.

INPUT / OUTPUT:
 SQL> SELECT SUBSTR(OWNER,1,8) OWNER,
  2       SUBSTR(TABLE_NAME,1,25) TABLE_NAME,
  3 SUBSTR(TABLESPACE_NAME,1,30) TABLESPACE_NAME
  4 FROM SYS.DBA_TABLES
  5  WHERE OWNER = 'JSMITH';

OWNER    TABLE_NAME                TABLESPACE_NAME
-------- ------------------------  --------------------
JSMITH   MAGAZINE_TBL              USERS
JSMITH   HOBBY_TBL                 USERS
JSMITH   ADDRESS_TBL               SYSTEM
JSMITH   CUSTOMER_TBL              USERS

4 rows selected.
ANALISIS:

Semua tabel dalam tablespace USERS kecuali ADDRESS_TBL, yang ada di tablespace SYSTEM. Karena hanya Anda yang pernah tabel harus simpan di tablespace SYSTEM adalah tabel SYSTEM, DBA perlu mengetahui situasi ini. Ini merupakan hal yang baik Anda berlari query ini!

JSMITH harus segera diminta untuk memindahkan mejanya ke tablespace lain yang memenuhi syarat.

Tampilan DBA_SYNONYMS menyediakan daftar semua sinonim yang ada di database.DBA_SYNONYMS memberikan daftar sinonim untuk semua pengguna database, tidak seperti USER_SYNONYMS, yang berisi hanya nama-muradif pribadi pengguna saat ini.

INPUT / OUTPUT:
 SQL> SELECT SYNONYM_NAME,
  2 SUBSTR(TABLE_OWNER,1,10) TAB_OWNER,
  3  SUBSTR(TABLE_NAME,1,30) TABLE_NAME
  4 FROM SYS.DBA_SYNONYMS
  5 WHERE OWNER = 'JSMITH';

SYNONYM_NAME                   TAB_OWNER  TABLE_NAME
------------------------------ ---------- ----------
TRIVIA_SYN                     VJOHNSON   TRIVIA_TBL

  1 baris yang dipilih. 
ANALISIS:

Menunjukkan output sebelumnya bahwa JSMITH memiliki sinonim disebut TRIVIA_SYN di atas meja yang disebut TRIVIA_TBL yang dimiliki oleh VJOHNSON.

Sekarang anggaplah bahwa Anda ingin mendapatkan daftar semua tabel dan indeks mereka milik JSMITH. Anda akan menulis permintaan serupa dengan berikut ini, menggunakan DBA_INDEXES.

INPUT / OUTPUT:
 SQL> SELECT substr (TABLE_OWNER, 1,10) TBL_OWNER, 2 substr (TABLE_NAME, 1,30) TABLE_NAME, 3 substr (INDEX_NAME, 1,30) INDEX_NAME 4 5 WHERE SYS.DBA_INDEXES DARI PEMILIK 'JSMITH =' 6 DAN ROWNUM < 5 7 ORDER BY TABLE_NAME; TBL_OWNER TABLE_NAME INDEX_NAME ---------- ------------------------------ - ----------- JSMITH ADDRESS_TBL ADDR_INX JSMITH CUSTOMER_TBL CUST_INX JSMITH HOBBY_TBL HOBBY_PK JSMITH MAGAZINE_TBL MAGAZINE_INX 4 baris yang dipilih.
ANALISIS:

Sebuah query seperti sebelumnya adalah metode yang mudah dari daftar semua indeks yang termasuk dalam skema dan mencocokkannya dengan tabel terkait mereka.

INPUT / OUTPUT:
 SQL> SELECT substr (TABLE_NAME, 1,15) TABLE_NAME, 2 substr (INDEX_NAME, 1,30) INDEX_NAME, 3 substr (COLUMN_NAME, 1,15) COLUMN_NAME, 4 COLUMN_POSITION 5 DARI SYS.DBA_IND_COLUMNS 6 WHERE TABLE_OWNER 'JSMITH =' 7 DAN <ROWNUM 10 8 ORDER BY 1,2,3; COLUMN_NAME TABLE_NAME INDEX_NAME COLUMN_POSITION -------------- ------------------- ----------- -------------- ADDRESS_TBL ADDR_INX --------------- PERS_ID 1 ADDR_INX NAMA ADDRESS_TBL ADDRESS_TBL ADDR_INX 2 KOTA 3 CUSTOMER_TBL CUST_INX CUST_ID 1 CUSTOMER_TBL CUST_INX CUST_NAME 2 CUSTOMER_TBL CUST_INX CUST_ZIP 3 HOBBY_TBL HOBBY_PK SAKEY 1 MAGAZINE_TBL MAGAZINE_INX ISSUE_NUM 1 MAGAZINE_TBL MAGAZINE_INX EDITOR 2 9 baris yang dipilih.
ANALISIS:

Sekarang Anda telah memilih setiap kolom yang diindeks dalam setiap tabel dan memerintahkan hasil dengan urutan kolom yang muncul dalam indeks. Anda telah belajar tentang meja, tapi apa memegang meja? Tablespace berada pada tingkat yang lebih tinggi daripada objek seperti tabel, indeks dan sebagainya. Tablespace adalah Oracle’s mekanisme untuk mengalokasikan ruang untuk basis data. Untuk mengalokasikan ruang, Anda harus tahu apa tablespace saat ini tersedia. Anda dapat melakukan pilih dari DBA_TABLESPACES untuk melihat daftar semua tablespace dan status mereka, seperti ditunjukkan pada contoh berikut.

INPUT / OUTPUT:
 SQL SELECT TABLESPACE_NAME>, STATUS 2 STATUS TABLESPACE_NAME DARI SYS.DBA_TABLESPACES ------ ------------------------------ SISTEM RBS ONLINE ONLINE ALAT TEMP ONLINE ONLINE USERS ONLINE ONLINE DATA_TS INDEX_TS ONLINE 7 baris yang dipilih.
ANALISIS:

Hasil sebelumnya memberitahu Anda bahwa semua tablespace sedang online, yang berarti bahwa mereka yang tersedia untuk digunakan. Jika sebuah tablespace offline, maka objek database di dalamnya (yaitu, tabel) tidak dapat diakses.

Apakah kuota JSMITH di semua tablespace yang ia memiliki akses? Dengan kata lain, berapa banyak ruang yang tersedia untuk objek database JSMITH’s?

INPUT / OUTPUT:
 SQL> SELECT TABLESPACE_NAME,
  2     BYTES,
  3   MAX_BYTES
  4  FROM SYS.DBA_TS_QUOTAS
  5 WHERE USERNAME = 'JSMITH'

TABLESPACE_NAME                     BYTES  MAX_BYTES
------------------------------  ---------- ----------
DATA_TS                         134111232         -1
INDEX_TS                        474390528         -1

2 rows selected.
ANALISIS:

JSMITH memiliki kuota terbatas di kedua tablespace untuk yang memiliki akses. Dalam hal ini jumlah byte yang tersedia di tablespace tersebut tersedia pada pertama-datang pertama-dilayani. Misalnya, jika JSMITH menggunakan semua ruang bebas di DATA_TS, maka tidak ada orang lain yang dapat membuat objek di sini.

Pertumbuhan Database

Bagian ini membahas dua pandangan bahwa bantuan dalam pengukuran pertumbuhan database: DBA_SEGMENTS dan DBA_EXTENTS. DBA_SEGMENTS menyediakan informasi tentang masing-masing segmen, atau objek dalam database seperti alokasi penyimpanan, ruang digunakan, dan luasan. Setiap kali sebuah tabel atau indeks tumbuh dan harus mengambil lebih banyak tempat seperti yang telah diidentifikasi oleh NEXT_EXTENT, meja mengambil sejauh lain. tabel biasanya menjadi terpecah ketika tumbuh dengan cara ini.DBA_EXTENTS menyediakan informasi tentang masing-masing segmen tingkat.

INPUT:
 SQL> SELECT SUBSTR(SEGMENT_NAME,1,30) SEGMENT_NAME,
  2  SUBSTR(SEGMENT_TYPE,1,12) SEGMENT_TYPE,
  3  BYTES,
  4   EXTENTS,
  5 FROM SYS.DBA_SEGMENTS
  6 WHERE OWNER = 'TWILLIAMS'
  7  AND ROWNUM < 5;
OUTPUT:
 SEGMENT_NAME                   SEGMENT_TYPE      BYTES    EXTENTS
------------------------------ ------------ ---------- ----------
INVOICE_TBL                    TABLE            163840         10
COMPLAINT_TBL                  TABLE           4763783          3
HISTORY_TBL                    TABLE         547474996         27
HISTORY_INX                    INDEX         787244534         31

4 rows selected.
ANALISIS:

Dengan melihat output dari DBA_SEGMENTS, Anda dapat dengan mudah mengidentifikasi tabel yang paling mengalami pertumbuhan dengan mengacu pada jumlah luasan. Kedua HISTORY_TBL dan HISTORY_INXhave tumbuh lebih dari dua tabel lainnya.

Selanjutnya Anda dapat melihat setiap tingkat salah satu meja. Anda bisa mulai dengan INVOICE_TBL.

INPUT / OUTPUT:
SQL> SELECT SUBSTR(OWNER,1,10) OWNER, 2 SUBSTR(SEGMENT_NAME,1,30) SEGMENT_NAME, 3 EXTENT_ID, 4 BYTES 5 FROM SYS.DBA_EXTENTS 6 WHERE OWNER = 'TWILLIAMS' 7 AND SEGMENT_NAME = 'INVOICE_TBL' 8 ORDER BY EXTENT_ID; OWNER      SEGMENT_NAME                    EXTENT_ID     BYTES ---------- ------------------------------ ---------- -------- TWILLIAMS  INVOICE_TBL                            0      16384 TWILLIAMS  INVOICE_TBL                            1      16384 TWILLIAMS  INVOICE_TBL                            2      16384 TWILLIAMS  INVOICE_TBL                            3      16384 TWILLIAMS  INVOICE_TBL                            4      16384 TWILLIAMS  INVOICE_TBL                            5      16384 TWILLIAMS  INVOICE_TBL                            6      16384 TWILLIAMS  INVOICE_TBL                            7      16384 TWILLIAMS  INVOICE_TBL                            8      16384 TWILLIAMS  INVOICE_TBL                            9      16384 10 rows selected.
ANALISIS:

Contoh ini menampilkan setiap tingkat meja, extent_id, dan ukuran sejauh dalam bytes. Setiap tingkat hanya 16K, dan karena ada 10 luasan, Anda mungkin ingin untuk membangun kembali meja dan meningkatkan ukuran initial_extent untuk mengoptimalkan penggunaan ruang.Membangun kembali meja akan memungkinkan semua data tabel untuk masuk ke tingkat satu, dan karenanya, tidak terpecah-pecah.

Ruang yang dialokasikan

Oracle mengalokasikan ruang untuk basis data dengan menggunakan “file data.” Ruang secara logis ada dalam tablespace, tapi file data adalah entitas fisik tablespace. Dalam implementasi lain, data juga akhirnya terdapat dalam file data, meskipun file-file data dapat dirujuk oleh nama lain. Tampilan disebut DBA_DATA_FILES memungkinkan Anda untuk melihat apa sebenarnya dialokasikan untuk sebuah tablespace.

INPUT / OUTPUT:
SQL> SELECT SUBSTR(TABLESPACE_NAME,1,25) TABLESPACE_NAME, 2 SUBSTR(FILE_NAME,1,40) FILE_NAME, 3 BYTES 4 FROM SYS.DBA_DATA_FILES; TABLESPACE_NAME           FILE_NAME                                     BYTES ------------------------- ---------------------------------------- ---------- SYSTEM                    /disk01/system0.dbf                        41943040 RBS                       /disk02/rbs0.dbf                          524288000 TEMP                      /disk03/temp0.dbf                         524288000 TOOLS                     /disk04/tools0.dbf                         20971520 USERS                     /disk05/users0.dbf                         20971520 DATA_TS                   /disk06/data0.dbf                         524288000 INDEX_TS                  /disk07/index0.dbf                        524288000 7 rows selected.
ANALISIS:

Anda sekarang dapat melihat berapa banyak ruang telah dialokasikan untuk setiap tablespace yang ada di database. Perhatikan nama file data sesuai dengan tablespace yang mereka milik.

Space Available

Sebagai contoh berikut menunjukkan, tampilan DBA_FREE_SPACE memberitahu Anda berapa banyak ruang kosong tersedia dalam tablespace masing-masing.

INPUT:
 SQL> SELECT TABLESPACE_NAME, SUM(BYTES)
  2 FROM SYS.DBA_FREE_SPACE
  3 GROUP BY TABLESPACE_NAME;
OUTPUT:
TABLESPACE_NAME                SUM(BYTES) ------------------------------ ---------- SYSTEM                           23543040 RBS                             524288000 TEMP                            524288000 TOOLS                            12871520 USERS                              971520 DATA_TS                            568000 INDEX_TS                          1288000 7 rows selected.
ANALISIS:

The preceding example lists the total free space for each tablespace. You can also view each segment of free space by simply selecting bytes from DBA_FREE_SPACE instead of SUM(bytes) .

Rollback Segments

Sebagai daerah untuk menggulingkan transaksi adalah bagian penting untuk kinerja database, Anda perlu tahu apa segmen rollback yang tersedia.DBA_ROLLBACK_SEGS menyediakan informasi ini.

INPUT:
 SQL> SELECT OWNER,
  2 SEGMENT_NAME
  3  FROM SYS.DBA_ROLLBACK_SEGS;
OUTPUT:
 OWNER  SEGMENT_NAME
------ ------------
SYS    SYSTEM
SYS    R0
SYS    R01
SYS    R02
SYS    R03
SYS    R04
SYS    R05

  7 baris yang dipilih. 
ANALISIS:

Contoh ini melaksanakan pilih sederhana untuk daftar segmen rollback semua nama. Jauh lebih banyak data yang tersedia untuk evaluasi Anda.

Dynamic Performance Views

Oracle DBAs dilihat kinerja sering mengakses dinamis karena mereka memberikan detail yang lebih besar tentang ukuran kinerja internal dari banyak data lainnya dilihat kamus. (Pandangan DBA mengandung beberapa informasi yang sama.)

Pandangan ini melibatkan rincian luas, yang merupakan implementasi khusus. Bagian ini hanya menyediakan tinjauan tentang jenis informasi sebuah kamus berisi data yang diberikan.

Sesi Informasi

Sebuah perintah DESCRIBE V SESI $ dilihat berikut. (DESCRIBE adalah perintah SQL * Plus dan akan dibahas pada Hari 20) Anda bisa melihat detail yang terdapat di dalam view..

INPUT:
 SQL> DESCRIBE V$SESSION
OUTPUT:
 Nama Null? Type ------------------------------  -------  ---- SADDR                                    RAW(4) SID                                      NUMBER SERIAL#                                  NUMBER AUDSID                                   NUMBER PADDR                                    RAW(4) USER#                                    NUMBER USERNAME                                 VARCHAR2(30) COMMAND                                  NUMBER TADDR                                    VARCHAR2(8) LOCKWAIT                                 VARCHAR2(8) STATUS                                   VARCHAR2(8) SERVER                                   VARCHAR2(9) SCHEMA#                                  NUMBER SCHEMANAME                               VARCHAR2(30) OSUSER                                   VARCHAR2(15) PROCESS                                  VARCHAR2(9) MACHINE                                  VARCHAR2(64) TERMINAL                                 VARCHAR2(10) PROGRAM                                  VARCHAR2(48) TYPE                                     VARCHAR2(10) SQL_ADDRESS                              RAW(4) SQL_HASH_VALUE                           NUMBER PREV_SQL_ADDR                            RAW(4) PREV_HASH_VALUE                          NUMBER MODULE                                   VARCHAR2(48) MODULE_HASH                              NUMBER ACTION                                   VARCHAR2(32) ACTION_HASH                              NUMBER CLIENT_INFO                              VARCHAR2(64) FIXED_TABLE_SEQUENCE                     NUMBER ROW_WAIT_OBJ#                            NUMBER ROW_WAIT_FILE#                           NUMBER ROW_WAIT_BLOCK#                          NUMBER ROW_WAIT_ROW#                            NUMBER LOGON_TIME                               DATE LAST_CALL_ET                             NUMBER

To get information about current database sessions, you could write a SELECT statement similar to the one that follows from V$SESSION.

INPUT / OUTPUT:
SQL> SELECT USERNAME, COMMAND, STATUS 2 FROM V$SESSION 3 WHERE USERNAME IS NOT NULL; USERNAME                          COMMAND STATUS ------------------------------ ---------- -------- TWILLIAMS                               3 ACTIVE JSMITH                                  0 INACTIVE 2 rows selected.
ANALISIS:

TWILLIAMS ini login ke database dan melakukan pilih dari database, yang diwakili oleh perintah 3.

JSMITH hanyalah login ke database. sesi-Nya tidak aktif, dan ia tidak melakukan semua jenis perintah. Lihat dokumentasi database anda untuk mengetahui bagaimana perintah yang diidentifikasi dalam kamus data. Perintah termasuk SELECT, INSERT, UPDATE, DELETE, CREATE TABLE, dan DROP TABLE.

Statistik Kinerja

Data statistik mengenai kinerja luar wilayah sesi pengguna juga tersedia dalam data kamus.Jenis data yang lebih spesifik dari implementasi pandangan lain yang dibahas hari ini.

Statistik Kinerja meliputi data seperti membaca / menulis tingkat, hit sukses pada tabel, gunakan sistem area global, penggunaan cache memori, informasi kembalikan segmen rinci, informasi transaksi log rinci, dan kunci meja dan menunggu. Pengetahuan baik tentang hampir tak berdasar.

Rencana Tabel

Tabel Rencana adalah tabel default yang digunakan dengan alat pernyataan Oracle SQL, MENJELASKAN RENCANA. (Lihat Hari 15) Tabel ini. Dibuat oleh Oracle disebut script UTLXPLAN.SQL, yang disalin ke server bila perangkat lunak telah diinstal. Data yang dihasilkan oleh alat RENCANA MENJELASKAN, yang Mempopulai RENCANA meja dengan informasi tentang objek yang sedang diakses dan langkah-langkah dalam rencana pelaksanaan pernyataan SQL.

Ringkasan

Meskipun rincian dari kamus data bervariasi dari satu implementasi ke yang lain, konten tetap konseptual sama pada semua database relasional. Anda harus mengikuti aturan sintaks dan sistem manajemen database, tapi contoh hari ini akan memberikan Anda kepercayaan diri untuk permintaan data kamus Anda dan untuk menjadi kreatif ketika melakukan itu.

Catatan: Menjelajahi kamus data petualangan, dan Anda akan perlu untuk mengeksplorasi untuk belajar untuk menggunakannya secara efektif.

1. Dalam Oracle, bagaimana Anda bisa mencari tahu apa tabel dan tampilan Anda sendiri?
2. Jenis informasi yang disimpan dalam kamus data?
3. Bagaimana Anda bisa menggunakan statistik kinerja?
4. Apa sajakah objek database?

Sumber ; http://www.webbasedprogramming.com

SQL Tuning

Tinggalkan komentar

Definisi

Memperlancar SQL adalah sebagai banyak bagian dari kinerja aplikasi sebagai database merancang dan tuning. Tidak peduli bagaimana menyempurnakan database atau bagaimana suara struktur database, Anda tidak akan menerima hasil query tepat waktu yang diterima kepada Anda, atau bahkan lebih buruk lagi, pelanggan, jika Anda tidak mengikuti beberapa pedoman dasar.Mempercayai kami, jika pelanggan tidak puas, maka Anda bisa bertaruh atasan Anda tidak akan puas baik.

Tujuan

Anda sudah tahu tentang komponen utama dari bahasa database relasional dari SQL dan bagaimana berkomunikasi dengan database, sekarang saatnya untuk menerapkan pengetahuan Anda untuk hidup kinerja keprihatinan-nyata. Tujuan Hari 15 adalah untuk merekomendasikan metode untuk memperbaiki kinerja, atau pelurusan, pernyataan SQL. Pada akhir hari ini, Anda harus

  • Memahami konsep perampingan kode SQL Anda
  • Memahami perbedaan antara beban batch dan pengolahan transaksi dan pengaruhnya terhadap kinerja database
  • Mampu untuk memanipulasi kondisi dalam query Anda untuk mempercepat pengambilan data
  • database Jadilah akrab dengan dasar beberapa elemen yang mempengaruhi seluruh tuning

Berikut analogi untuk membantu Anda memahami frase merampingkan pernyataan SQL: Tujuan dari perenang kompetitif adalah untuk menyelesaikan peristiwa dalam waktu sedikit mungkin tanpa didiskualifikasi. Para perenang harus memiliki teknik yang dapat diterima, dapat torpedo diri mereka sendiri melalui air, dan penggunaan semua sumber daya fisik mereka seefektif mungkin.Dengan setiap stroke dan napas mereka mengambil, perenang kompetitif tetap efisien dan bergerak melalui air dengan sedikit hambatan yang sangat.

Lihatlah query SQL Anda dengan cara yang sama. Anda harus selalu tahu persis apa yang ingin Anda capai dan kemudian berusaha untuk mengikuti jalan sedikit perlawanan. Semakin banyak waktu yang Anda habiskan untuk merencanakan, semakin sedikit waktu Anda harus menghabiskan merevisi nanti. Tujuan Anda harus selalu untuk mengambil data yang akurat dan untuk melakukannya dalam waktu sesedikit mungkin. Seorang pengguna akhir menunggu di lambat permintaan seperti restoran lapar tak sabar menunggu makan lambat. Meskipun Anda dapat menulis permintaan yang paling dalam beberapa cara, susunan komponen dalam permintaan adalah faktor yang membuat perbedaan detik, menit, dan kadang-kadang jam saat Anda mengeksekusi querySQL. Memperlancar adalah proses menemukan pengaturan optimal unsur-unsur dalam permintaan Anda.

Selain perampingan pernyataan SQL Anda, Anda juga harus mempertimbangkan beberapa faktor lain ketika mencoba untuk meningkatkan kinerja database umum, misalnya, transaksi pengguna konkuren yang terjadi dalam database, tabel pengindeksan, dan turun database tuning-dalam.


CATATAN: Today’s contoh penggunaan pribadi Oracle7 dan alat-alat yang tersedia dengan sistem manajemen database relasional Oracle7.3;. Konsep dibahas saat ini tidak terbatas pada Oracle mereka dapat diterapkan untuk lain sistem manajemen database relasional.


Membuat Laporan SQL Anda Readable

Meskipun mudah dibaca tidak mempengaruhi kinerja aktual statemen SQL, praktek pemrograman yang baik panggilan untuk kode dibaca. Keterbacaan terutama penting jika Anda memiliki beberapa kondisi di klausa WHERE. Siapa pun membaca klausul harus dapat menentukan apakah tabel yang bergabung dengan benar dan harus mampu memahami urutan kondisi.

Cobalah untuk membaca pernyataan ini:

  SQL> SELECT EMPLOYEE_TBL.EMPLOYEE_ID, EMPLOYEE_TBL.NAME, EMPLOYEE_PAY_TBL.SALARY, EMPLOYEE_PAY_TBL.HIRE_DATE 
    2 DARI EMPLOYEE_TBL, EMPLOYEE_PAY_TBL 
    3 WHERE EMPLOYEE_TBL.EMPLOYEE_ID = EMPLOYEE_PAY_TBL.EMPLOYEE_ID DAN 
    4 EMPLOYEE_PAY_TBL.SALARY> 30.000 ATAU (ANTARA EMPLOYEE_PAY_TBL.SALARY 25.000 
    5 DAN 30.000 DAN EMPLOYEE_PAY_TBL.HIRE_DATE <SYSDATE - 365); 

Berikut adalah permintaan yang sama diformat ulang untuk meningkatkan mudah dibaca:

 SQL> SELECT EMPLOYEE_ID E., E. NAME, P. GAJI, P. HIRE_DATE 2 DARI EMPLOYEE_TBL E, 3 P EMPLOYEE_PAY_TBL 4 WHERE EMPLOYEE_ID E. = P EMPLOYEE_ID 5 DAN GAJI P> 30.000 6 ATAU (ANTARA GAJI P. 25.000 DAN 30.000 7 DAN P. HIRE_DATE SYSDATE <- 365);

CATATAN: Perhatikan penggunaan alias tabel dalam permintaan sebelumnya. EMPLOYEE_TBL sejalan 2 telah diberi alias E, dan EMPLOYEE_PAY_TBL sejalan 3 telah ditetapkan alias P.Anda dapat melihat bahwa di jalur 4, 5, 6, dan 7, E dan P berdiri untuk nama tabel penuh. Alias kurang mengetik membutuhkan banyak daripada mengeja nama tabel lengkap, dan bahkan lebih penting, query yang menggunakan alias lebih terorganisir dan lebih mudah untuk dibaca daripada permintaan yang penuh dengan nama lengkap tidak perlu meja panjang.


Dua pertanyaan yang identik, tapi yang kedua adalah jelas jauh lebih mudah dibaca. Hal ini sangat terstruktur, yaitu komponen logis dari query telah dipisahkan oleh spasi dan tombol enter konsisten. Anda dapat dengan cepat melihat apa yang sedang dipilih (klausa SELECT), apa tabel sedang diakses (DARI klausa), dan kondisi apa perlu dipenuhi (klausa WHERE).

Tabel-Scan Penuh

Sebuah meja penuh scan terjadi ketika server database membaca setiap catatan dalam tabel dalam rangka untuk menjalankan pernyataan SQL. Kendali-tabel scan biasanya menjadi masalah ketika berhadapan dengan pertanyaan atau pernyataan SELECT. Namun, meja penuh scan juga dapat ikut bermain ketika berhadapan dengan update dan menghapus. Sebuah meja penuh scan terjadi ketika kolom di klausa WHERE tidak memiliki indeks yang terkait dengan mereka. Sebuah meja penuh scan seperti membaca buku dari depan sampai belakang, mencoba mencari kata kunci. Seringkali, Anda akan memilih untuk menggunakan indeks.

Anda dapat menghindari meja penuh scan dengan membuat indeks pada kolom yang digunakan sebagai kondisi di klausa WHERE sebuah pernyataan SQL. Indeks menyediakan jalur langsung ke data dengan cara yang sama suatu indeks dalam sebuah buku pembaca merujuk ke nomor halaman. Menambahkan indeks kecepatan akses data.

Meskipun biasanya programmer mengerut atas meja-scan penuh, mereka kadang-kadang sesuai. Sebagai contoh:

  • Anda sebagian besar memilih baris dari tabel.
  • Anda mengupdate setiap baris dalam sebuah tabel.
  • Meja kecil.

Dalam kasus pertama dua Indeks akan tidak efisien karena database server akan harus merujuk ke indeks, membaca meja, merujuk ke indeks lagi, membaca meja lagi, dan sebagainya. Di sisi lain, indeks yang paling efisien ketika mengakses data Anda adalah persentase kecil, biasanya tidak ada lebih dari 10 hingga 15 persen, dari total data yang terdapat dalam tabel.

Selain itu, indeks yang terbaik digunakan pada tabel besar. Anda harus selalu mempertimbangkan ukuran tabel saat Anda merancang tabel dan indeks. tabel pengindeksan Benar keakraban dengan melibatkan data, mengetahui kolom yang akan diakses paling, dan mungkin memerlukan eksperimen untuk melihat indeks karya terbaik.


CATATAN: Ketika berbicara tentang sebuah meja yang besar “,” besar adalah istilah relatif. Sebuah meja yang sangat besar untuk satu individu mungkin menit ke lain. Ukuran meja relatif ke ukuran tabel lain dalam database, untuk ruang disk yang tersedia, dengan jumlah disk yang tersedia, dan akal sehat sederhana. Jelas, 2GB meja besar, sedangkan meja 16KB kecil. Dalam lingkungan database dimana tabel ukuran rata-rata 100MB, 500MB meja dapat dianggap besar.


Menambahkan Indeks Baru

Anda akan sering menemukan situasi di mana pernyataan SQL sedang berjalan untuk jumlah yang tidak masuk akal waktu, meskipun kinerja laporan lain tampaknya dapat diterima, misalnya, ketika kondisi bagi perubahan pengambilan data atau ketika mengubah struktur tabel.

Kami juga telah melihat jenis perlambatan ketika layar atau jendela baru telah ditambahkan ke akhir aplikasi depan. Salah satu hal pertama yang harus dilakukan ketika Anda mulai memecahkan masalah adalah untuk mengetahui apakah meja target memiliki indeks. Dalam sebagian besar kasus kita lihat, tabel target memiliki indeks, namun salah satu kondisi baru dalam klausul WHEREmungkin kurang indeks. Melihat klausa WHERE dari pernyataan SQL, kita bertanya, Haruskah kita menambahkan indeks lain? Jawabannya mungkin ya jika:

  • Yang membatasi kondisi yang paling (s) mengembalikan kurang dari 10 persen dari baris dalam tabel.
  • Kondisi yang paling restriktif (s) akan sering digunakan dalam pernyataan SQL.
  • Kondisi (s) pada kolom dengan indeks akan kembali nilai-nilai yang unik.
  • Kolom ini sering dirujuk di ORDER BY dan GROUP BY klausa.

Komposit indeks juga dapat digunakan. Sebuah indeks komposit indeks pada dua atau lebih kolom dalam sebuah tabel. Indeks ini dapat lebih efisien daripada-kolom indeks tunggal jika diindeks kolom sering digunakan bersama sebagai kondisi di klausa WHERE dari pernyataan SQL. Apabila kolom diindeks digunakan secara terpisah juga sama, terutama dalam permintaan lain, satu-kolom indeks mungkin lebih sesuai dan. Anda Gunakan pertimbangan menjalankan tes pada data Anda untuk melihat jenis pakaian terbaik indeks database yang mana.

Pengaturan Unsur dalam sebuah Permintaan

Pengaturan terbaik dari unsur-unsur dalam permintaan Anda, khususnya pada klausa WHERE, benar-benar tergantung pada urutan langkah-langkah proses dalam pelaksanaan tertentu. Penyusunan kondisi tergantung pada kolom yang diindeks, serta kondisi yang akan mengambil paling sedikit catatan.

Anda tidak harus menggunakan kolom yang diindeks pada klausa WHERE, tetapi jelas lebih bermanfaat untuk melakukannya. Cobalah untuk mempersempit hasil dari pernyataan SQL dengan menggunakan indeks yang mengembalikan jumlah baris yang paling sedikit. Kondisi yang mengembalikan catatan paling sedikit dalam sebuah tabel dikatakan dalam kondisi yang paling ketat.Sebagai pernyataan umum, anda harus menempatkan membatasi kondisi yang paling terakhir dalam klausa WHERE. (Query optimizer’s Oracle membaca klausa WHERE dari bawah ke atas, sehingga dalam arti tertentu, Anda akan menempatkan pembatasan kondisi yang paling pertama.)

Ketika optimizer membaca membatasi kondisi yang paling pertama, ia mampu mempersempit hasil set pertama sebelum melanjutkan ke kondisi berikutnya. Kondisi berikutnya, bukannya melihat seluruh meja, harus melihat pada subset yang dipilih oleh kondisi yang paling selektif. Akhirnya, data yang diambil lebih cepat. Yang selektif kondisi yang paling mungkin tidak jelas dalam permintaan kompleks dengan kondisi beberapa, subqueries, perhitungan, dan beberapa kombinasi dari DAN, ATAU, dan SEPERTI.


TIP: Selalu cek dokumentasi database Anda untuk melihat bagaimana SQL diproses dalam pelaksanaan Anda.


Tes berikut adalah salah satu dari banyak kami telah menjalankan untuk mengukur perbedaan waktu berlalu antara dua unik diatur query dengan konten yang sama. Contoh-contoh ini menggunakan sistem manajemen database relasional Oracle7.3. Ingat, pengoptimasi dalam implementasi ini membaca klausa WHERE dari bawah ke atas.

Sebelum membuat pernyataan SELECT, kami memilih jumlah baris yang berbeda pada setiap kondisi yang kita rencanakan untuk digunakan. Berikut adalah nilai-nilai yang dipilih untuk setiap kondisi:

Kondisi Nilai yang berbeda
calc_ytd = '-2109490,8' 13.000 +
dt_stmp = '01-September-96 ' 15
output_cd = '001 ' 13
activity_cd = 'IN' 10
status_cd = 'A' 4
function_cd = '060 ' 6

CATATAN: Yang membatasi kondisi yang paling juga kondisi dengan nilai yang paling berbeda.


Pada contoh berikut tempat yang terbatas kondisi yang paling pertama di klausa WHERE:

INPUT:
  SQL> SET WAKTU ON 
    2 SELECT COUNT (*) 
    3 DARI FACT_TABLE 
    4 WHERE CALC_YTD = '-2109490,8' 
    5 DAN DT_STMP = '01-September-96 ' 
    6 DAN OUTPUT_CD = '001 ' 
    7 DAN ACTIVITY_CD = 'IN' 
    8 DAN STATUS_CD = 'A' 
    9 DAN FUNCTION_CD = '060 ';
OUTPUT:
  COUNT (*) 
  -------- 
         8 
  1 baris yang dipilih. 
  Berlalu: 00:00:15.37 

Contoh ini menempatkan membatasi kondisi yang paling terakhir di klausa WHERE:

INPUT / OUTPUT:
  SQL> SET WAKTU ON 
    2 SELECT COUNT (*) 
    3 DARI FACT_TABLE 
    4 WHERE = FUNCTION_CD '060 ' 
    5 DAN STATUS_CD = 'A' 
    6 DAN ACTIVITY_CD = 'IN' 
    7 DAN OUTPUT_CD = '001 ' 
    8 DAN DT_STMP = '01-September-96 ' 
    9 DAN CALC_YTD = '-2109490,8'; 

  COUNT (*) 
  -------- 
         8 
  1 baris yang dipilih. 
  Berlalu: 00:00:01.80 
ANALISIS:

Perhatikan perbedaan waktu berlalu. Cukup mengubah urutan kondisi sesuai dengan tabel statistik yang diberikan, pertanyaan kedua berlari hampir 14 detik lebih cepat dari yang pertama.Bayangkan perbedaannya pada query yang terstruktur buruk yang berlangsung selama tiga jam!

Prosedur

Untuk query yang dijalankan secara teratur, cobalah untuk menggunakan prosedur. Prosedur adalah kelompok berpotensi besar pernyataan SQL. (Lihat Hari 13, “Topik Lanjutan SQL.”)

Prosedur yang dikompilasi oleh mesin database dan kemudian dieksekusi. Tidak seperti pernyataan SQL, database engine tidak perlu mengoptimalkan prosedur sebelum dijalankan,. Prosedur sebagai lawan dari individu banyak pertanyaan, mungkin lebih mudah bagi pengguna untuk memelihara dan lebih efisien untuk database.

Menghindari ATAU

Hindari menggunakan operator OR logis dalam query jika mungkin. ATAU pasti melambat hampir semua query terhadap tabel ukuran besar. Kami menemukan bahwa DI pada umumnya jauh lebih cepat daripada OR. Saran ini tentu saja tidak setuju dengan dokumentasi yang menyatakan bahwa pengoptimalan mengkonversi DI argumen untuk kondisi OR. Namun demikian, di sini adalah contoh query menggunakan OR beberapa s:

INPUT:
 SQL> SELECT * 2 FROM WHERE 3 FACT_TABLE STATUS_CD = 'A' 4 ATAU STATUS_CD 'B =' 5 ATAU STATUS_CD 'C =' 6 OR STATUS_CD = 'D' 7 OR STATUS_CD = 'E' 8 OR STATUS_CD = 'F' 9 ORDER BY STATUS_CD;

Berikut ini adalah permintaan yang sama menggunakan substr dan IN:

INPUT:
  SQL> SELECT * 
    2 DARI FACT_TABLE 
    3 STATUS_CD DI MANA ('A', 'B', 'C', 'D', 'E', 'F') 
    4 ORDER BY STATUS_CD; 
ANALISIS:

Coba uji sesuatu yang serupa untuk diri sendiri. Meskipun buku merupakan sumber yang sangat baik untuk standar dan arah, Anda akan menemukan seringkali berguna untuk datang ke kesimpulan sendiri pada hal-hal tertentu, seperti kinerja.

Berikut ini adalah contoh lain menggunakan substr dan IN. Perhatikan bahwa permintaan pertama SEPERTI menggabungkan dengan OR.

INPUT:
  SQL> SELECT * 
    2 DARI FACT_TABLE 
    3 WHERE PROD_CD LIKE 'AB%' 
    4 ATAU PROD_CD LIKE 'AC%' 
    5 ATAU PROD_CD LIKE 'BB%' 
    6 ATAU PROD_CD LIKE '% BC 
    7 ATAU PROD_CD LIKE '% CC' 
    8 ORDER BY PROD_CD; 
  SQL> SELECT * 
    2 DARI FACT_TABLE 
    3 WHERE substr (PROD_CD, 1,2) IN ('AB', 'AC', 'BB', 'SM', 'CC') 
    4 ORDER BY PROD_CD; 
ANALISIS:

Contoh kedua tidak hanya menghindari OR, tetapi juga menghilangkan kombinasi dari OR dan operator SEPERTI. Anda mungkin ingin mencoba misalnya ini untuk melihat apa perbedaan kinerja waktu-nyata adalah untuk data Anda.

OLTP versus OLAP

Ketika tuning database, Anda harus terlebih dahulu menentukan apa database digunakan untuk. Sebuah pengolahan analisis online (OLAP) database adalah sebuah sistem yang berfungsi untuk menyediakan kemampuan permintaan kepada pengguna akhir untuk tujuan umum informasi dan statistik. Data yang diambil dalam jenis lingkungan sering digunakan untuk laporan statistik yang membantu dalam proses pengambilan keputusan perusahaan. Jenis sistem juga disebut sebagai sistem pendukung keputusan (DSS). Sebuah proses transaksi online (OLTP) database adalah sebuah sistem yang utama berfungsi untuk menyediakan lingkungan bagi-masukan pengguna akhir dan juga mungkin melibatkan query terhadap-hari informasi hari. sistem OLTP digunakan untuk memanipulasi informasi dalam database setiap hari gudang data. dan DSSS mendapatkan data mereka dari database transaksi online dan kadang-kadang dari sistem OLAP lainnya.

OLTP Tuning

Sebuah database transaksional adalah sebuah sistem yang sangat rumit diakses dalam bentuk transaksi dan permintaan terhadap-hari informasi hari. Namun, sebuah OLTP biasanya tidak memerlukan areal yang luas semacam, paling tidak sejauh yang diperlukan dalam lingkungan OLAP. Kebanyakan OLTP transaksi cepat dan tidak melibatkan banyak penyortiran.

Salah satu masalah terbesar dalam database transaksional adalah segmen rollback. Jumlah dan ukuran segmen rollback sangat bergantung pada berapa banyak pengguna secara bersamaan mengakses database, serta jumlah pekerjaan di setiap transaksi. Pendekatan yang terbaik adalah memiliki beberapa segmen rollback di lingkungan transaksional.

Keprihatinan lain di lingkungan transaksi adalah integritas transaksi log, yang ditulis untuk setelah setiap transaksi. Log ini ada untuk tujuan pemulihan. Oleh karena itu, setiap implementasi SQL membutuhkan cara untuk membuat cadangan log untuk digunakan dalam titik “pada waktu pemulihan.” SQL Server menggunakan perangkat sampah; Oracle menggunakan modus database yang dikenal sebagai modus ARCHIVELOG. Transaksi log juga melibatkan pertimbangan kinerja karena back up log membutuhkan overhead tambahan.

OLAP Tuning

OLAP tuning sistem, seperti sebuah gudang data atau mendukung sistem pengambilan keputusan, jauh berbeda dengan tuning database transaksi. Biasanya, diperlukan lebih banyak ruang untuk menyortir.

Karena tujuan dari jenis sistem adalah untuk mengambil keputusan membuat data yang berguna, Anda dapat berharap banyak pertanyaan yang kompleks, yang biasanya melibatkan pengelompokan dan penyortiran data. Dibandingkan dengan database transaksi, sistem OLAP biasanya mengambil lebih banyak tempat untuk area ruang semacam tetapi kurang untuk daerah rollback.

Kebanyakan transaksi dalam sistem OLAP terjadi sebagai bagian dari proses batch. Daripada memiliki beberapa daerah rollback masukan pengguna, Anda mungkin resor untuk satu daerah rollback besar untuk beban, yang dapat diambil offline selama kegiatan sehari-hari untuk mengurangi overhead.

Beban Batch Versus Pengolahan Transaksional

Faktor utama dalam kinerja database dan pernyataan SQL adalah jenis pemrosesan yang terjadi dalam database. Salah satu jenis pengolahan OLTP, dibahas tadi pagi. Ketika kita berbicara tentang proses transaksi, kami akan merujuk ke dua jenis: user input dan beban batch.

input pengguna Reguler biasanya terdiri dari pernyataan SQL seperti INSERT, UPDATE, dan DELETE. Jenis transaksi ini sering dilakukan oleh pengguna akhir, atau pelanggan. Pengguna akhir biasanya menggunakan aplikasi front-end seperti PowerBuilder untuk berinteraksi dengan database, dan karena itu mereka mengeluarkan pernyataan SQL jarang terlihat. Namun demikian, SQL kode telah dihasilkan untuk pengguna akhir oleh aplikasi depan.

Fokus utama Anda saat mengoptimalkan kinerja database harus menjadi pengguna-akhir transaksi. Setelah semua, “pelanggan tidak” sama dengan “ada database,” yang pada gilirannya berarti bahwa Anda berada di luar pekerjaan. Selalu mencoba untuk membuat pelanggan Anda senang, meskipun ekspektasi mereka terhadap sistem / database kinerja kadang-kadang mungkin tidak masuk akal. Salah satu pertimbangan dengan-masukan pengguna akhir adalah jumlah pengguna secara bersamaan. Database pengguna bersamaan yang Anda miliki, semakin besar kemungkinan penurunan kinerja.

Apa yang dimaksud dengan beban batch? Sebuah beban tumpukan batch melakukan transaksi terhadap database sekaligus. Misalnya, Anda tahun pengarsipan’s data terakhir ke tabel sejarah besar. Anda mungkin perlu memasukkan ribuan atau bahkan jutaan, dari baris data ke dalam tabel sejarah Anda. Anda mungkin tidak ingin melakukan tugas ini secara manual, sehingga Anda cenderung untuk menciptakan sebuah pekerjaan batch atau script untuk mengotomatisasi proses ini. (Berbagai teknik tersedia untuk memuat data dalam batch sumber daya. Batch) muatan terkenal untuk database dan sistem perpajakan. Sumber daya ini termasuk akses database meja, katalog mengakses sistem, segmen rollback database, dan area ruang semacam; sumber daya sistem dapat mencakup CPU yang tersedia dan berbagi memori. Banyak faktor lain yang terlibat, tergantung pada sistem operasi Anda dan server database.

Kedua-pengguna akhir transaksi dan beban batch diperlukan untuk database yang paling berhasil, tetapi sistem Anda bisa mengalami masalah kinerja yang serius jika kedua jenis tanduk kunci pengolahan. Oleh karena itu, Anda harus tahu perbedaan antara mereka dan menjaga mereka dipisahkan sebisa mungkin. Misalnya, Anda tidak akan ingin memuat sejumlah besar data ke dalam database ketika aktivitas pengguna tinggi. Tanggapan database sudah mungkin lambat karena jumlah pengguna secara bersamaan. Selalu mencoba untuk menjalankan beban batch ketika aktivitas pengguna adalah minimal. Banyak toko cadangan kali di malam hari atau dini hari untuk memuat data dalam batch untuk menghindari gangguan dengan pemrosesan harian.

Anda harus selalu merencanakan waktu untuk beban batch besar, berhati-hati untuk menghindari penjadwalan mereka saat database ini diharapkan akan tersedia untuk penggunaan normal.Gambar 15,1 melukiskan update batch berat berjalan bersamaan dengan proses beberapa pengguna, semua bersaing untuk sumber daya sistem.

Gambar 15,1.
Sistem sumber daya contention.

Seperti yang Anda lihat, banyak proses yang bersaing untuk sumber daya sistem. Update batch berat yang dilakukan melempar geser monyet dalam perhitungan. Alih-alih sumber daya sistem tersebar agak merata di antara para pengguna, pembaruan batch tampak memonopoli mereka. Situasi ini hanyalah permulaan pertengkaran sumber daya. Sebagai transaksi batch dilanjutkan, akhirnya proses pengguna dapat dipaksa keluar dari gambar. Kondisi ini bukan cara yang baik dalam berbisnis. Bahkan jika sistem hanya memiliki satu pengguna, pendapat yang signifikan untuk itu pengguna bisa terjadi.

Masalah lain dengan proses batch adalah bahwa proses itu mungkin memegang kunci di atas meja seorang pengguna mencoba untuk mengakses. Jika ada kunci di atas meja, pengguna akan menolak akses sampai mengunci dibebaskan oleh proses batch, yang dapat jam. Proses Batch harus dilakukan ketika sumber daya sistem terbaik mereka jika mungkin. Jangan membuat transaksi pengguna bersaing dengan batch. Tidak ada yang memenangkan permainan itu.

Mengoptimalkan Beban Data oleh Dropping Indeks

Salah satu cara untuk mempercepat update batch dengan menjatuhkan indeks. Bayangkan meja sejarah dengan ribuan barisan. Itu tabel sejarah juga cenderung memiliki satu atau lebih indeks.Ketika Anda memikirkan indeks, Anda biasanya memikirkan akses tabel lebih cepat, tetapi dalam hal beban batch, Anda bisa mendapatkan keuntungan dengan menjatuhkan indeks (es).

Ketika data beban Anda ke dalam tabel dengan indeks, Anda biasanya dapat mengharapkan banyak menggunakan indeks, terutama jika Anda memperbarui persentase tinggi baris dalam tabel.Lihatlah dengan cara ini. Jika Anda mempelajari buku dan menyoroti poin-poin penting untuk referensi di masa mendatang, Anda mungkin merasa lebih cepat untuk menelusuri buku dari awal sampai akhir daripada menggunakan indeks untuk mencari poin kunci Anda. (Menggunakan indeks akan efisien jika Anda hanya menyoroti sebagian kecil dari buku itu.)

Untuk memaksimalkan efisiensi beban batch / update yang mempengaruhi persentase tinggi baris dalam sebuah tabel, Anda dapat mengambil tiga langkah dasar untuk menonaktifkan indeks:

1. Drop indeks yang sesuai (es).
2. Load / update data meja.
3. Membangun kembali meja indeks.

A COMMIT Menyimpan Sering DBA yang Jauh

Ketika melakukan transaksi batch, Anda harus tahu seberapa sering untuk melakukan “komit 11.” Seperti yang Anda pelajari pada hari, “Transaksi Pengendalian,” COMMIT finalizes pernyataan transaksi. A COMMIT menyimpan transaksi atau menulis perubahan ke meja yang berlaku (s). Di belakang layar, namun lebih banyak yang terjadi. Beberapa daerah di database dicadangkan untuk menyimpan menyelesaikan transaksi sebelum perubahan benar-benar ditulis ke meja target. Oracle panggilan ini rollback segmen daerah. Ketika Anda mengeluarkan pernyataan COMMIT,transaksi yang terkait dengan sesi SQL Anda di segmen rollback diperbarui dalam tabel target. Setelah update terjadi, isi dari segmen rollback dihapus,. ROLLBACK Perintah di sisi lain, membersihkan isi segmen rollback tanpa memperbarui tabel target.

Seperti yang Anda bisa menebak, jika Anda tidak pernah mengeluarkan perintah COMMIT atau ROLLBACK, transaksi terus membangun dalam segmen rollback. Selanjutnya, jika data Anda yang memuat dalam ukuran lebih besar daripada ruang yang tersedia di segmen rollback, database dasarnya akan berhenti dan larangan aktivitas transaksi lebih lanjut. Tidak mengeluarkan perintahCOMMIT adalah perangkap pemrograman umum; COMMIT reguler s membantu memastikan kinerja yang stabil dari seluruh sistem database.

Manajemen segmen rollback adalah penting database administrator dan kompleks (DBA) tanggung jawab karena mempengaruhi transaksi dinamis segmen rollback, dan pada gilirannya, mempengaruhi kinerja keseluruhan database serta laporan SQL individu. Jadi, ketika Anda yang memuat sejumlah besar data, pastikan untuk mengeluarkan perintah COMMIT secara teratur.Periksa dengan DBA Anda untuk nasihat tentang seberapa sering untuk melakukan saat transaksi batch. (Lihat Gambar 15,2.)

Gambar 15,2.
Daerah rollback.

Seperti yang dapat Anda lihat pada Gambar 15.2, bila pengguna melakukan transaksi, perubahan tersebut disimpan di daerah rollback.

Membangun kembali Tabel dan Indeks dalam Lingkungan Dinamis

Database lingkungan yang dinamis merujuk ke database besar yang berada dalam keadaan konstan berubah. Perubahan yang kita mengacu kepada yang sering update batch dan pengolahan transaksi harian terus-menerus. Dynamic database OLTP biasanya memerlukan sistem yang berat, tetapi juga dapat merujuk pada DSSS atau gudang data, tergantung pada volume dan frekuensi beban data.

Hasil perubahan tinggi volume konstan untuk database adalah pertumbuhan, yang pada gilirannya menghasilkan fragmentasi. Fragmentasi dapat dengan mudah keluar dari tangan jika pertumbuhan ini tidak dikelola dengan baik. Oracle mengalokasikan rupa awal untuk tabel ketika mereka diciptakan. Bila data yang dimuat dan mengisi meja tingkat awal, tingkat berikutnya, yang juga dialokasikan bila meja diciptakan, diambil.

Ukuran tabel dan indeks pada dasarnya adalah sebuah fungsi DBA dan drastis dapat mempengaruhi kinerja pernyataan SQL. Langkah pertama dalam manajemen pertumbuhan adalah proaktif. Biarkan ruang untuk tabel untuk tumbuh dari hari pertama, dalam alasan. Juga berencana untuk defragment database secara teratur, bahkan jika hal itu berarti mengembangkan rutinitas mingguan. Berikut adalah langkah-langkah dasar konseptual yang terlibat dalam defragmenting tabel dan indeks dalam sistem manajemen database relasional:

1. Dapatkan cadangan yang baik dari tabel (s) dan / atau indeks (es).
2. Drop tabel (s) dan / atau indeks (es).
3. Membangun kembali tabel (s) dan / atau indeks (es) dengan alokasi ruang baru.
4. Mengembalikan data ke dalam tabel yang baru dibangun (s).
5. Re membuat indeks (es) jika perlu.
6 pengguna. Memulihkan hak akses peran / di meja jika diperlukan.
7. Simpan cadangan dari meja Anda sampai Anda benar-benar yakin bahwa tabel yang baru dibangun dengan sukses. Jika Anda memilih untuk membuang cadangan dari tabel asli, pertama-tama Anda harus membuat cadangan tabel baru setelah data telah sepenuhnya pulih.

PERINGATAN: Jangan pernah membuang cadangan tabel Anda sampai Anda yakin bahwa tabel baru dibangun dengan sukses.


Contoh berikut menunjukkan penggunaan praktis dari mailing list tabel dalam lingkungan database Oracle.

INPUT:
  CREATE TABLE MAILING_TBL_BKUP AS 
  SELECT * FROM MAILING_TBL;
OUTPUT:
  Tabel Dibuat.
INPUT / OUTPUT:
 mailing_tbl drop tabel; Tabel Turun TABLE. CREATE MAILING_TBL (INDIVIDUAL_ID VARCHAR2 (12) TIDAK NULL, INDIVIDUAL_NAME VARCHAR2 (30) TIDAK NULL, ALAMAT VARCHAR (40) TIDAK NULL, KOTA VARCHAR (25) TIDAK NULL, NEGARA VARCHAR (2) NOT NULL , ZIP_CODE VARCHAR (9) TIDAK NULL,) tablespace TABLESPACE_NAME PENYIMPANAN (AWAL NEW_SIZE, NEXT NEW_SIZE); Tabel dibuat mailing_tbl_bkup. INSERT INTO * MAILING_TBL pilih dari; 93.451 baris INDEKS dimasukkan. CREATE TABLE SURAT MAILING_IDX ON (INDIVIDUAL_ID) tablespace TABLESPACE_NAME PENYIMPANAN (AWAL NEW_SIZE, NEXT NEW_SIZE); Indeks Dibuat.. hibah pilih pada mailing_tbl kepada publik; Grant Pengganti meja mailing_tbl_bkup drop; Tabel Turun.
ANALISIS:

Membangun kembali tabel dan indeks yang telah berkembang memungkinkan Anda untuk mengoptimalkan penyimpanan, yang meningkatkan kinerja secara keseluruhan. Ingatlah untuk drop tabel cadangan hanya setelah Anda memverifikasi bahwa tabel yang baru telah berhasil diciptakan. Juga perlu diingat bahwa Anda dapat mencapai hasil yang sama dengan metode lain. Periksa pilihan yang tersedia bagi Anda di dokumentasi database Anda.

Tuning database

Tuning database adalah proses fine-tuning database kinerja server. Sebagai pendatang baru SQL, Anda mungkin tidak akan terkena tuning database kecuali Anda adalah seorang DBA DBA baru atau pindah ke lingkungan database relasional. Apakah Anda akan mengelola database atau menggunakan SQL pada aplikasi atau program, Anda akan mendapatkan keuntungan dengan mengetahui sesuatu tentang proses tuning-database. Kunci keberhasilan setiap database bagi semua pihak untuk bekerja sama. Beberapa tips umum untuk tuning database ikuti.

  • Minimalkan ukuran keseluruhan yang dibutuhkan untuk database. Ini bagus untuk memungkinkan ruang untuk pertumbuhan ketika mendesain database, tapi jangan pergi ke laut. Jangan mengikat sumber daya yang Anda mungkin perlu untuk mengakomodasi pertumbuhan database.
  • Percobaan dengan variabel waktu-slice proses pengguna. Variabel ini mengatur jumlah waktu database server scheduler mengalokasikan untuk pengguna setiap proses.
  • Optimalkan jaringan paket ukuran yang digunakan oleh aplikasi. Semakin besar jumlah data yang dikirim melalui jaringan, semakin besar ukurannya jaringan paket seharusnya. Tanyakan database dan dokumentasi jaringan untuk rincian lebih lanjut.
  • Store transaksi log pada hard disk yang terpisah. Untuk setiap transaksi yang terjadi, server harus menulis perubahan transaksi log. Jika Anda menyimpan log file-file pada disk yang sama seperti Anda menyimpan data, Anda dapat menciptakan hambatan kinerja. (Lihat Gambar 15.3.)
  • Stripe sangat besar tabel di beberapa disk. Jika pengguna mengakses bersamaan sebuah meja besar yang banyak tersebar di disk, ada kurang banyak kesempatan harus menunggu sumber daya sistem. (Lihat Gambar 15.3.)
  • Toko semacam database daerah, sistem kawasan katalog, dan daerah kembalikan pada hard disk yang terpisah. Ini adalah semua wilayah di database yang paling sering akses pengguna. Dengan menyebarkan daerah-daerah tersebut selama beberapa disk drive, Anda memaksimalkan penggunaan sumber daya sistem 15.3. (Lihat Gambar.)
  • Tambah CPU. Fungsi ini administrator sistem dapat secara drastis meningkatkan kinerja database. Menambahkan CPU dapat mempercepat pemrosesan data karena alasan yang jelas. Jika Anda memiliki beberapa CPU pada mesin, maka Anda mungkin dapat menerapkan strategi pemrosesan paralel,. Database Anda Lihat dokumentasi lebih untuk informasi paralel pada pemrosesan jika tersedia dengan implementasi Anda.
  • Tambah memori.  Secara umum, lebih banyak lebih baik.
  • Toko tabel dan indeks pada hard disk yang terpisah. Anda harus menyimpan indeks dan tabel terkait pada disk drive yang pernah terpisah bila memungkinkan. Susunan ini memungkinkan meja untuk dibaca pada saat yang sama indeks ini direferensikan pada disk lain. Kemampuan untuk menyimpan objek pada beberapa disk tergantung pada berapa banyak disk yang terhubung ke controller. (Lihat Gambar 15.3.)

Gambar 15.3 memperlihatkan contoh sederhana tentang bagaimana Anda dapat memisahkan wilayah utama dari database Anda.

Gambar 15.3.
Menggunakan disk yang tersedia untuk meningkatkan kinerja.

Skenario di Gambar 15.3 menggunakan empat perangkat: disk01 melalui disk04. Tujuan database berat dalam penyebaran daerah Anda dan benda-benda adalah untuk menjaga area penggunaan yang tinggi dari masing-masing lain.

  • Disk01 – Sistem Katalog menyimpan informasi tentang tabel, indeks, pengguna, statistik, database file, ukuran, informasi pertumbuhan, dan data terkait lainnya yang sering diakses oleh persentase yang tinggi dari transaksi.
  • Disk02 – Transaksi log diperbarui setiap kali perubahan dibuat untuk suatu tabel (insert, update, atau menghapus). Transaksi log adalah faktor besar dalam sebuah basis data transaksi online.Mereka tidak menjadi perhatian besar dalam lingkungan hanya membaca, seperti sebuah gudang data atau DSS.
  • Disk03 – segmen Rollback juga signifikan di lingkungan transaksi,. Namun jika ada sedikit aktivitas transaksional (insert, update, menghapus), segmen rollback tidak akan sering digunakan.
  • Disk04 – Agak Database daerah, di sisi lain, digunakan sebagai area sementara untuk memproses pernyataan SQL ketika menyortir data, seperti dalam sebuah OLEH GROUP atau klausa ORDER BY. Urutkan daerah biasanya menjadi masalah dalam sebuah gudang data atau DSS. Namun, penggunaan wilayah semacam juga harus dipertimbangkan dalam lingkungan transaksional.

TIP: Juga perhatikan bagaimana aplikasi tabel dan indeks telah ditempatkan pada setiap disk. Tabel dan indeks harus tersebar sebanyak mungkin.


Pendapatan Internet Layanan Internet bahwa dalam indeks 15,3 Gambar Dan disimpan tabel PADA perangkat berbeda yang. Nama dan Kembali ada posting juga dapat berlangganan My bagaimana “Tabel Besar” Danijel mungkin indeks bergaris melintasi doa perangkat Danijel lebih.Teknik Suami membagi tabel menjadi segmen Yang Kecil Yang lebih dapat diakses secara bersamaan. Striping tabel atau indeks di beberapa perangkat adalah cara untuk mengontrol fragmentasi. Dalam skenario ini, tabel dapat dibaca sementara indeks yang sesuai mereka direferensikan, yang meningkatkan kecepatan akses data secara keseluruhan.

Contoh ini sangat sederhana. Tergantung pada fungsi, ukuran, dan isu-isu yang terkait dengan sistem database Anda, Anda mungkin menemukan metode yang sama untuk mengoptimalkan sumber daya sistem yang bekerja yang lebih baik. Di dunia yang sempurna di mana uang ada kendala, konfigurasi terbaik adalah dengan memiliki disk entitas yang terpisah untuk setiap database utama, termasuk meja besar dan indeks.

Catatan: DBA dan administrator sistem harus bekerja sama untuk menyeimbangkan database alokasi ruang dan mengoptimalkan memori yang tersedia pada server.
Tuning database sangat tergantung pada sistem database tertentu yang Anda gunakan. Jelas, tuning database memerlukan lebih dari sekedar mempersiapkan pertanyaan dan membiarkan mereka terbang. Di sisi lain, Anda tidak akan mendapatkan pahala banyak untuk tuning database ketika aplikasi SQL tidak menyempurnakan itu sendiri. Profesional database lagu yang selama hidup sering mengkhususkan pada satu produk database dan belajar sebanyak mungkin tentang fitur dapat dan keanehan. Meskipun tuning database sering dilihat sebagai tugas menyakitkan, dapat menyediakan lapangan kerja yang sangat menguntungkan bagi orang-orang yang benar-benar memahaminya.

Hambatan Kinerja

Kita telah menyebutkan beberapa perangkap yang tak terhitung jumlahnya kemungkinan yang dapat menghambat kinerja umum database. Ini biasanya kemacetan umum yang melibatkan tingkat pemeliharaan sistem, pemeliharaan database, dan manajemen pengolahan pernyataan SQL.

Bagian ini merangkum kendala paling umum di dalam sistem dan waktu respon database.

Tidak membuat penggunaan perangkat yang tersedia di server – Sebuah perusahaan pembelian beberapa disk drive karena suatu alasan. Jika Anda tidak menggunakannya sesuai dengan menyebarkan terpisah database komponen penting, Anda membatasi kemampuan kinerja.Memaksimalkan penggunaan sumber daya sistem adalah sama pentingnya dengan memaksimalkan penggunaan kemampuan database server.

Tidak sering melakukan COMMIT s – Gagal untuk menggunakan s COMMIT atau ROLLBACK periodik selama beban batch s berat akhirnya akan mengakibatkan kemacetan database.

Membiarkan batch beban mengganggu pemrosesan harian – Menjalankan beban batch selama waktu ketika database diharapkan akan tersedia akan menyebabkan masalah untuk semua orang. Proses batch akan berada dalam pertempuran terus-menerus dengan pengguna akhir sumber daya sistem.

Karena ceroboh saat membuat laporan SQL – sembarangan membuat laporan kompleks SQL akan lebih dari mungkin berkontribusi ke waktu respons di bawah standar.

TIP: Anda dapat menggunakan berbagai cara untuk mengoptimalkan struktur pernyataan SQL, tergantung pada langkah-langkah yang diambil oleh server database selama proses statemen SQL.
Menjalankan beban batch dengan indeks tabel – Anda bisa berakhir dengan beban batch yang berjalan sepanjang hari dan malam semua, sebagai lawan dari beban batch yang selesai dalam beberapa jam. Indeks memperlambat batch beban yang mengakses persentase tinggi baris pada tabel.

Setelah pengguna konkuren terlalu banyak memori yang dialokasikan – Sebagai jumlah database secara bersamaan dan pengguna sistem tumbuh, Anda mungkin perlu mengalokasikan memori untuk proses berbagi. Lihat administrator sistem Anda.

Membuat indeks pada kolom dengan nilai-nilai unik beberapa – Pengindeksan pada kolom seperti GENDER, yang hanya memiliki dua nilai yang unik, sangat tidak efisien. Sebaliknya, cobalah untuk indeks kolom yang akan kembali persentase rendah baris dalam query.

Membuat indeks pada meja kecil – Pada saat indeks direferensikan dan data membaca, meja penuh bisa memindai telah selesai dilaksanakan.

Tidak sistem pengelolaan sumber daya secara efisien – pengelolaan Miskin sumber daya sistem dapat hasil dari menyia-nyiakan ruang selama inisialisasi database, pembuatan meja, fragmentasi tidak terkontrol, dan sistem yang tidak teratur / pemeliharaan database.

Bukan ukuran tabel dan indeks benar – perkiraan Miskin untuk tabel dan indeks yang tumbuh pesat dalam lingkungan database yang besar dapat mengakibatkan masalah fragmentasi yang serius, yang jika tidak cenderung, akan snowball menjadi masalah yang lebih serius.

Built-In Peralatan Tuning

Periksa dengan Anda DBA atau database vendor untuk menentukan apa alat yang tersedia bagi Anda untuk mengukur kinerja dan tuning. Anda dapat menggunakan alat-tuning kinerja untuk mengidentifikasi kekurangan dalam jalur akses data, di samping itu, alat ini kadang-kadang dapat menyarankan perubahan untuk meningkatkan kinerja SQL pernyataan tertentu.

Oracle memiliki dua alat populer untuk mengelola kinerja pernyataan SQL. Alat ini menjelaskan rencana dan tkprof. Alat ini menjelaskan rencana mengidentifikasi jalur akses yang akan diambil saat pernyataan SQL dijalankan. tkprof mengukur kinerja oleh waktu yang telah berlalu selama setiap tahap proses pernyataan SQL. Oracle Corporation juga menyediakan alat-alat lain yang membantu dengan pernyataan SQL dan analisis database, tetapi dua disebutkan di sini adalah yang paling populer. Jika Anda hanya ingin mengukur waktu yang telah berlalu dari query di Oracle, Anda dapat menggunakan SQL * Plus perintah SET WAKTU ON.

WAKTU SET ON dan perintah SET lainnya yang tercakup dalam lebih mendalam pada Hari 20, “SQL * Plus.”

Sybase SQL Server memiliki alat untuk laporan diagnostik SQL. Pilihan tersebut dalam bentuk perintah SET yang dapat Anda tambahkan untuk pernyataan SQL Anda. (Perintah-perintah ini mirip dengan perintah Oracle’sSET). Beberapa perintah umum yang SHOWPLAN SET ON, SET STATISTIK IO ON, dan SET STATISTIK ON TIME. Perintah-perintah ini SET menampilkan output tentang langkah-langkah yang dilakukan dalam query, jumlah membaca dan menulis yang dibutuhkan untuk melakukan query, dan laporan-parsing informasi umum. SQL Server perintah SET tercakup pada Hari 19, “Transact-SQL: Sebuah Pengantar.”

Ringkasan

Dua unsur utama pelurusan, atau tuning, secara langsung mempengaruhi kinerja pernyataan SQL: tuning tuning aplikasi dan database. Masing-masing memiliki peran sendiri, tapi tidak dapat secara optimal disetel tanpa yang lain. Langkah pertama menuju kesuksesan adalah untuk tim teknis dan insinyur sistem untuk bekerja sama untuk menyeimbangkan sumber daya dan mengambil keuntungan penuh dari database fitur yang membantu meningkatkan kinerja.Banyak fitur tersebut dibangun ke dalam perangkat lunak database yang disediakan oleh vendor.

Aplikasi pengembang harus tahu data. Kunci untuk desain database yang optimal adalah pengetahuan menyeluruh data aplikasi. Pengembang dan programer produksi harus tahu kapan menggunakan indeks, kapan harus menambah indeks, dan kapan harus memungkinkan untuk menjalankan pekerjaan batch. Selalu merencanakan dan beban batch batch processing tetap terpisah dari pengolahan transaksi harian.

Database dapat disetel untuk meningkatkan kinerja aplikasi individu yang mengaksesnya.Database administrator harus peduli dengan operasi sehari-hari dan kinerja database. Selain tuning cermat yang terjadi di belakang layar, DBA biasanya dapat memberikan saran kreatif untuk mengakses data lebih efisien, seperti misalnya memanipulasi indeks atau membangun kembali pernyataan SQL. DBA juga harus akrab dengan alat-alat yang dapat segera tersedia dengan software database untuk mengukur kinerja dan memberikan saran untuk tweaker pernyataan.

Sumber ; http://www.webbasedprogramming.com

SQL Dinamik

Tinggalkan komentar

Tujuan

Tujuan dari pelajaran hari ini adalah untuk menunjukkan tempat untuk mulai menerapkan apa yang telah Anda pelajari sejauh ini. Hari ini mencakup pelajaran, dalam stroke sangat luas, aplikasi praktis dari SQL. Kami fokus pada aplikasi dalam lingkungan Microsoft Windows, tetapi prinsip-prinsip yang terlibat hanya berlaku untuk platform perangkat lunak lain. Hari ini Anda akan mempelajari yang berikut:

  • Bagaimana berbagai produk komersial – Personal Oracle7, konektivitas database terbuka (ODBC), Interbase ISQL, Microsoft’s Visual C + +, dan Borland Delphi – berhubungan dengan SQL
  • Cara mengatur lingkungan Anda untuk SQL
  • Cara membuat database menggunakan Oracle7, Microsoft Query, dan Interbase ISQL
  • Cara menggunakan SQL di dalam aplikasi yang ditulis dalam Visual C + + dan Delphi

Setelah membaca materi ini, Anda akan tahu di mana untuk mulai menerapkan keahlian Anda SQL baru.

A Trip Cepat

Bagian ini membahas beberapa produk komersial dalam konteks sistem operasi Microsoft Windows dan secara ringkas menjelaskan bagaimana mereka berhubungan dengan SQL. Prinsip-prinsip, jika tidak produk itu sendiri, berlaku di seluruh platform berbagai perangkat lunak.

ODBC

Salah satu teknologi yang mendasari dalam sistem operasi Windows adalah ODBC, yang memungkinkan program-program berbasis Windows untuk mengakses database melalui sopir. Daripada memiliki antarmuka kustom untuk setiap database, sesuatu yang mungkin sangat baik harus menulis diri sendiri, Anda dapat terhubung ke database pilihan Anda melalui sopir. Konsep ODBC sangat mirip dengan konsep driver printer Windows, yang memungkinkan Anda untuk menulis program anda tanpa untuk printer. perbedaan individual, yang DOS pemrograman memaksa Anda untuk alamat, sangat mudah ditangani oleh driver printer. Hasilnya adalah bahwa Anda menghabiskan waktu Anda bekerja pada tugas-tugas khusus untuk program anda, bukan pada penulisan driver printer.

ODBC menerapkan ide ini untuk database. Bagian visual ODBC berada di panel kontrol pada Windows 3.1, 3.11, dan Windows 95 dan dalam kelompok program sendiri pada Windows NT.

Kami menutup ODBC lebih terinci ketika kita membahas membuat database hari ini.

Oracle7 Pribadi

Oracle7 Pribadi adalah database populer serangan terbaru ke pasar PC pribadi. Jangan menunda dengan jumlah program yang Oracle7 menginstal – kami membangun semua contoh yang digunakan dalam beberapa hari pertama hanya menggunakan Oracle Database Manager dan SQL * Plus 3.3. SQL * Plus adalah ditunjukkan pada Gambar 14.1.

Gambar 14.1.

Oracle7’s SQL * Plus.

Interbase SQL (ISQL)

Alat yang digunakan dalam contoh-contoh lain adalah Borland ISQL. Hal ini pada dasarnya sama dengan Oracle7 kecuali bahwa Oracle7 adalah karakter berorientasi dan ISQL lebih mirip Windows.

Sebuah layar ISQL ditunjukkan pada Gambar 14.2. Anda ketik pertanyaan Anda di bagian atas kotak edit, dan hasilnya muncul di kotak bawah. Dan tombol Previous Next gulir Anda melalui daftar semua query Anda buat selama sesi.

Gambar 14.2.

Interbase’s Interaktif SQL.

Visual C + +

Puluhan buku telah ditulis tentang Visual C + +. Untuk contoh dalam buku ini, kami menggunakan versi 1,52. Prosedur kita digunakan adalah yang berlaku untuk versi 32-bit, C + + 2.0. Digunakan di sini karena antarmuka yang sederhana dengan ODBC. Bukan hanya compiler dengan kemampuan untuk koneksi ke ODBC. Jika Anda menggunakan compiler yang berbeda, bagian ini memberikan titik keberangkatan baik.

Visual C + + cukup menginstal beberapa alat. Kami hanya menggunakan dua: compiler dan editor sumber daya.

Delphi

Alat terakhir kita kaji adalah Borland Delphi, yang merupakan subjek buku baru. Delphi menyediakan antarmuka scalable untuk berbagai database.

Delphi memiliki dua program yang kita gunakan: Interbase Server (Ibmgr) dan ISQL Windows (Wisql).

Menyiapkan

Cukup dengan perkenalan – mari mulai bekerja. Setelah Anda menginstal mesin SQL atau ODBC-compiler yang kompatibel, Anda harus melakukan sejumlah panggung pengaturan sebelum dapat melakukan hal-hal bintang mereka. Dengan kedua Oracle7 dan Interbase, Anda perlu untuk login dan membuat account untuk diri Anda sendiri. Prosedur ini pada dasarnya sama. Bagian tersulit adalah sorting melalui hard copy dan dokumentasi online untuk password default. Kedua sistem memiliki account default sistem administrator. (Lihat Gambar 14.3.)

Gambar 14.3.

Keamanan Interbase manajer layar.

Setelah login dan membuat account, Anda siap untuk membuat database.

Membuat database

Langkah ini di mana semua pelatihan SQL Anda mulai untuk melunasi. Pertama, Anda harus memulai database yang ingin Anda gunakan. Gambar lampu merah menunjukkan 14,4 metafora visual yang Oracle7.

Gambar 14.4.

Oracle7 Database Manager.

Setelah Anda mendapatkan lampu hijau, Anda dapat membuka SQL * Plus 3,3 alat ditunjukkan pada Gambar 14,5.

Gambar 14,5.

Oracle SQL * Plus.

Pada titik ini Anda dapat membuat tabel Anda dan masukkan data Anda dengan menggunakan kata kunci CREATE dan INSERT. Cara lain umum membuat tabel dan memasukkan data dengan file script. Sebuah file script biasanya sebuah file teks dengan perintah SQL mengetik dalam urutan yang benar. Lihat ini kutipan dari script file dikirim dengan Oracle7:

 -------------------------------------------------- ---------- - Script untuk membangun database Oracle bibit untuk Pribadi ------------------------------ ---------------------------- - NTES Dipanggil dari buildall.sql - MODIFIKASI - rs 12/04/94 - Komentar, bersih-bersih, mengubah ukuran, untuk ------------------------------------------- produksi ----------------- pfile nomount startup =% rdbms71% \ init.ora - Buat database untuk Windows RDBMS membuat database oracle logfile controlfile menggunakan kembali '% \% oracle DBS \ wdblog1. ukuran ora 400K menggunakan kembali, '% \% oracle DBS wdblog2.ora \' ulang ukuran datafile '% 400K \% oracle DBS wdbsys.ora \' ukuran 10M karakter set ulang WE8ISO8859P1;

Sintaks sedikit bervariasi dengan implementasi dari SQL dan database yang Anda gunakan, jadi pastikan untuk memeriksa dokumentasi Anda. Pilih File | Open untuk memuat script ini menjadi mesin SQL Anda.

Borland Interbase banyak data dengan cara yang sama. Kutipan berikut adalah dari salah satu file untuk menyisipkan data:

 / * * Tambahkan negara. * / INSERT INTO negara (negara, mata uang) VALUES ('AS', 'Dolar'); INSERT INTO negara (negara, mata uang) VALUES ('Inggris', 'Pound'); INSERT INTO negara ( negara, mata uang) VALUES ('Kanada', 'CdnDlr'); INSERT INTO negara (negara, mata uang) VALUES ('Swiss', 'SFranc'); INSERT INTO negara (negara, mata uang) VALUES ('Jepang', 'Yen ! '); INSERT INTO negara (negara, mata uang) VALUES (' Italia ',' Lira "); INSERT INTO negara (negara, mata uang) VALUES ('Prancis", "FFranc"); INSERT INTO negara (negara, mata uang) VALUES ('Jerman', 'D-Mark'); INSERT INTO negara (negara, mata uang) VALUES ('Australia', 'ADollar'); INSERT INTO negara (negara, mata uang) VALUES ('Hong Kong', 'HKDollar') ; INSERT INTO negara (negara, mata uang) VALUES ('Belanda', 'guilder'); INSERT INTO negara (negara, mata uang) VALUES ('Belgia', 'BFranc'); INSERT INTO negara (negara, mata uang) VALUES (' Austria ',' Schilling '); INSERT INTO negara (negara, mata uang) VALUES (' Fiji ',' fdollar ');
ANALISIS:

Ini contoh menyisipkan nama negara dan mata uang jenis yang digunakan di negara tersebut ke dalam tabel COUNTRY. (Lihat Hari 8, “Memanipulasi Data,” untuk pengenalan perintah INSERT.)

Tidak ada sihir di sini. Programmer selalu menemukan cara untuk menyimpan keystrokes. Bila Anda bermain bersama di rumah, masukkan tabel berikut:

INPUT:
  / * Table: PELANGGAN, Pemilik: PERKINS * / 
  CREATE TABEL PELANGGAN (NAMA CHAR (10), 
          ALAMAT CHAR (10), 
          NEGARA CHAR (2), 
          ZIP CHAR (10), 
          PHONE CHAR (11), 
          KOMENTAR CHAR (10));
INPUT:
  / * Tabel: Orders, Pemilik: PERKINS * / 
  CREATE TABLE pesanan (DATE ORDEREDON, 
          NAME CHAR (10), 
          PARTNUM INTEGER, 
          KUANTITAS INTEGER, 
          KOMENTAR CHAR (10));
INPUT:
  / * Tabel: BAGIAN, Pemilik: PERKINS * / 
  CREATE TABLE BAGIAN (INTEGER PARTNUM, 
          URAIAN CHAR (20), 
          HARGA numeric (9, 2)); 

Sekarang mengisi tabel tersebut dengan data sebagai berikut:

INPUT / OUTPUT:
  SELECT * FROM PELANGGAN 

  ALAMAT NAMA NEGARA ZIP PHONE KOMENTAR 
  ========== ========== ====== ====== ======== ========== 

  WHEEL TRUE 55O HUSKER NE 58.702 555-4.545 NONE 
  SEPEDA SPEC CPT mendengarkan pengakuan dosa dan LA 45678 555-1234 NONE 
  LE KS Hometown Shoppe 54678 555-1278 NONE 
  SEPEDA AAA 10 OLDTOWN NE 56.784 555-3.421 JOHN-Mgr 
  Jacks SEPEDA 24 Eglin FL 34.567 555-2.314 NONE
INPUT / OUTPUT:
  SELECT * FROM Orders 

           NAMA ORDEREDON KUANTITAS PARTNUM KOMENTAR 
         =========== ========== =========== =========== ======= 
  15-MAY-1996 WHEEL TRUE 23 6 DISETOR 
  19-MAY-1996 WHEEL TRUE 76 3 DISETOR 
   2-SEP 1996 TRUE WHEEL-10 1 DISETOR 
  30-JUN 1996 TRUE WHEEL-42 8 DISETOR 
  30-JUN-1996 SEPEDA SPEC 54 10 DISETOR 
  30-MAY-1996 SEPEDA SPEC 10 2 DISETOR 
  30-MAY-1996 SEPEDA SPEC 23 8 DISETOR 
  17-JAN-1996 SEPEDA SPEC 76 11 DISETOR 
  17-JAN-1996 LE Shoppe 76 5 DISETOR 
   1-JUN-1996 LE Shoppe 10 3 DISETOR 
   1-SEPEDA AAA-1996 10 Jun 1 DISETOR 
   1-JUL-1996 SEPEDA AAA 76 4 DISETOR 
   1-JUL-1996 SEPEDA AAA 46 14 DISETOR 
  11-JUL-1996 jack SEPEDA 76 14 DISETOR
INPUT / OUTPUT:
  SELECT * FROM BAGIAN 

      PARTNUM URAIAN HARGA 
  =========== ==================== =========== 

           54 pedal 54,25 
           42 Kursi 24,50 
           46 Ban 15,25 
           23 SEPEDA GUNUNG 350,45 
           76 JALAN SEPEDA 530,00 
           10 Tandem 1.200,00 

Setelah Anda memasukkan data ini, langkah berikutnya adalah membuat koneksi ODBC. Buka Control Panel (jika Anda berada di 3,1 Win 3.11,, atau Windows 95) dan double-klik ikon ODBC.


CATATAN: Beberapa rasa beban mesin ODBC SQL. Visual C + +, Delphi, dan beban Oracle7 ODBC sebagai bagian dari setup mereka. Untungnya, ODBC menjadi yang biasa seperti driver printer.


Layar ODBC awal ditunjukkan pada Gambar 14.6.

Gambar 14.6.

Sumber data ODBC’s seleksi.

Layar ini menampilkan koneksi ODBC saat ini. Anda ingin membuat koneksi baru,. Asumsi yang Anda gunakan Interbase dan database baru yang disebut TYSSQL (bonus sendiri 10 memberikan poin jika Anda tahu apa singkatan TYSSQL) tekan tombol Add dan pilih Driver Interbase, seperti yang ditunjukkan pada Gambar 14,7.

14,7 Gambar.

Driver seleksi.

Dari pilihan Anda pindah ke layar setup. Isi dalam seperti yang ditunjukkan pada Gambar 14,8.

Gambar 14,8.

Driver setup.

Anda dapat menggunakan nama Anda sendiri atau sesuatu yang singkat dan mudah untuk mengetik, tergantung pada account Anda tetapkan untuk diri sendiri. The sedikit rumit hanya di sini, setidaknya untuk kami, adalah mencari tahu apa yang ingin Interbase sebagai nama database. Bagi Anda yang berasal dari PC atau latar belakang database kecil harus terbiasa dengan beberapa nama path yang tampak aneh. Nama path ini memberitahu mesin SQL mana untuk mencari database di galaksi komputer yang dapat terhubung melalui LAN.

Query Menggunakan Microsoft untuk Melakukan Gabung

Sekarang bahwa Anda telah membuat koneksi ODBC, kita perlu membuat sedikit memutar ke alat yang berguna bukan bernama Microsoft Query. Program ini dimuat bersama dengan Visual C + +. Kami telah menggunakannya untuk menyelesaikan database yang cukup dan masalah coding untuk membayar biaya compiler beberapa kali. Query biasanya menginstal sendiri dalam kelompok program sendiri. Menemukannya dan membukanya. Seharusnya terlihat seperti Gambar 14.9.

Gambar 14.9.

Microsoft Query.

Pilih File Query Baru |. Anda TYSSQL link ODBC tidak muncul, jadi klik tombol lain untuk membuka dialog ODBC Data Sources kotak, yang ditunjukkan pada Gambar 14,10, dan TYSSQL pilih.

Gambar 14.10.

Sumber Data kotak dialog.

Klik OK untuk kembali ke kotak dialog Pilih Sumber Data. Pilih TYSSQL dan Penggunaan klik, seperti yang ditunjukkan pada Gambar 14,11.

Gambar 14,11.

Pilih Sumber Data kotak dialog.

Sekali lagi, pengguna database kecil tidak terbiasa untuk log on. Namun demikian, ketik sandi Anda untuk bergerak melalui layar.

Tambah Tabel kotak dialog, yang ditunjukkan pada Gambar 14,12, menyajikan tabel yang terkait dengan database yang Anda tersambung. Pilih BAGIAN, pesanan, dan PELANGGAN, dan klik Tutup.

Gambar 14,12.

Memilih tabel dalam Query.

layar Anda akan terlihat seperti Gambar 14,13. Klik dua kali ALAMAT dan NAMA dari tabel PELANGGAN. Kemudian klik dua kali ORDEREDON dan PARTNUM dari perintah.

Gambar 14,13.

Representasi visual dari sebuah tabel dalam Query.

Sekarang untuk sihir! Klik tombol bertanda SQL di toolbar. layar Anda sekarang akan tampak seperti Gambar 14,14.

Gambar 14,14.

Permintaan Permintaan yang dibangun.

Alat ini memiliki dua fungsi. Yang pertama adalah untuk memeriksa koneksi ODBC. Jika bekerja di sini, itu harus bekerja dalam program ini. Langkah ini dapat membantu Anda menentukan apakah suatu masalah dalam database atau program. Penggunaan kedua adalah untuk menghasilkan dan memeriksa permintaan. Tambahkan baris berikut ke kotak SQL dan klik OK:

  WHERE CUSTOMER.NAME = ORDERS.NAME DAN PART.PARTNUM = ORDERS.PARTNUM 

Gambar 14,15 menunjukkan hasil yang luar biasa.

Gambar 14,15.

Permintaan itu grafis representasi dari bergabung.

Anda baru saja melakukan bergabung! Tidak hanya itu, tapi field yang telah bergabung di grafis yang terhubung dalam diagram tabel (perhatikan garis zigzag antara NAMA dan PARTNUM).

Query adalah suatu alat yang penting untuk memiliki di arsenal SQL Anda pada platform perangkat lunak Windows. Ini memungkinkan Anda memeriksa dan memanipulasi tabel dan query. Anda juga dapat menggunakannya untuk membuat tabel dan memanipulasi data. Jika Anda bekerja pada Windows dengan ODBC dan SQL, baik membeli alat ini sendiri atau perusahaan Anda atau klien membelinya untuk Anda,. Hal ini tidak semenarik jaringan versi DOOM tetapi akan menghemat waktu dan uang. Sekarang bahwa Anda telah membuat sebuah link ODBC, Anda dapat menggunakannya dalam sebuah program.

Visual Menggunakan C + + dan SQL


CATATAN: Kode sumber untuk contoh ini terletak di Lampiran B, “Kode Sumber Listings for C + + Program Digunakan pada Hari 14.”


Menelepon Visual C + + dan AppWizard pilih, seperti yang ditunjukkan pada Gambar 14,16. Nama dan subdirektori untuk proyek Anda tidak harus identik.

Figur 14,16.

Proyek awal setup.

Klik tombol Options dan mengisi layar seperti tampak pada Gambar 14,17.

Gambar 14,17.

Options dialog box.

Klik OK dan kemudian pilih Pilihan Database. Pilih Database Dukungan, Tidak Dukungan file seperti yang ditunjukkan pada Gambar 14,18.

Gambar 14,18.

Database kotak dialog Pilihan.

Klik tombol Data Sumber dan membuat pilihan yang ditunjukkan pada Gambar 14,19.

Gambar 14,19.

Memilih sumber data.

Kemudian pilih tabel PELANGGAN dari kotak dialog Pilih Tabel, ditunjukkan dalam Gambar 14,20.

Gambar 14,20.

Memilih meja.

Sekarang Anda telah memilih tabel dari database PELANGGAN TYSSQL. Kembali ke dasar layar AppWizard dengan mengklik OK dua kali. Lalu klik OK lagi untuk menampilkan informasi aplikasi baru (lihat Gambar 14,21), menunjukkan spesifikasi dari suatu aplikasi kerangka baru.

Gambar 14,21.

AppWizard baru aplikasi informasi.

Setelah program ini dihasilkan, Anda perlu menggunakan editor sumber daya untuk merancang layar utama Anda. Pilih Tools | App Studio untuk memulai App Studio. Bentuk desain Anda akan sederhana – hanya cukup untuk menampilkan beberapa kolom dalam tabel Anda sebagai Anda menggulir melalui baris. formulir selesai Anda akan terlihat seperti Gambar 14,22.

Gambar 14,22.

Selesai formulir di App Studio.

Untuk kesederhanaan kami beri nama kotak edit IDC_NAME, IDC_ADDRESS, IDC_STATE, dan IDC_ZIP, meskipun Anda dapat nama mereka apa pun yang Anda pilih. Tekan Ctrl + W untuk mengirim halaman Wizard Class ke Variabel Anggota dan mengatur variabel menurut Gambar 14,23.

Gambar 14,23.

Menambahkan variabel anggota Kelas Wizard.


CATATAN: Program ini cukup baik untuk memberikan link ke meja yang Anda tersambung. Link adalah salah satu manfaat dari kerja melalui’s penyihir Microsoft atau yang ahli Borland.


Menyimpan pekerjaan Anda, kemudian tekan Alt + Tab untuk kembali ke compiler dan kompilasi program. Jika semua berjalan lancar, output akan terlihat seperti Gambar 14,24. Jika tidak, menelusuri kembali langkah-langkah Anda dan coba lagi.

Gambar 14,24.

Sebuah bersih untuk mengkompilasi program pengujian.

Sekarang jalankan program anda. Ini akan muncul, setelah itu layar logon sial, dan terlihat seperti Gambar 14,25.

Gambar 14,25.

Program uji.

Program mengesankan, mengingat yang telah Anda tulis nol baris kode sejauh ini. Gunakan tombol panah pada toolbar untuk bergerak maju mundur dalam database. Perhatikan bahwa urutan data yang sama dengan perintah input. Bukan abjad (kecuali Anda ketik dengan cara itu). Bagaimana Anda dapat mengubah urutan?

Koneksi Anda ke database dirumuskan dalam kelas yang disebut Ctyssqlset, yang AppWizard diciptakan untuk Anda. Lihat file header (tyssqset.h):

  / / Tyssqset.h: antarmuka dari kelas CTyssqlSet 
  / / 
  ////////////////////////////////////////////////// ////////////////////// 
  kelas CTyssqlSet: CRecordset publik 
  ( 
  DECLARE_DYNAMIC (CTyssqlSet) 
  publik: 
  CTyssqlSet (CDatabase * pDatabase = NULL); 
  / / Lapangan / Data Param 
  / ((AFX_FIELD (CTyssqlSet, CRecordset) 
  Cstring m_NAME; 
  Cstring m_ADDRESS; 
  Cstring m_STATE; 
  Cstring m_ZIP; 
  Cstring m_PHONE; 
  Cstring m_REMARKS; 
  / /)) AFX_FIELD 
  / / Pelaksanaan 
  dilindungi: 
  virtual CString GetDefaultConnect ();// koneksi string Default 
  virtual CString GetDefaultSQL ();// standar SQL untuk Recordset 
  virtual void DoFieldExchange (CFieldExchange * PFX); / / RFX dukungan 
  ); 
ANALISIS:

Perhatikan bahwa variabel member telah dibangun untuk semua kolom dalam tabel. Juga perhatikan fungsi GetDefaultConnect dan GetDefaultSQL; inilah implementasinya dari tyssqset.cpp:

  CString CTyssqlSet:: GetDefaultConnect () 
  ( 
  kembali ODBC, DSN = TYSSQL; "; 
  ) 
  CString CTyssqlSet:: GetDefaultSQL () 
  ( 
  kembali "PELANGGAN"; 
  ) 

GetDefaultConnect membuat koneksi ODBC. Anda tidak harus mengubah itu. Namun, GetDefaultSQL memungkinkan Anda untuk melakukan beberapa hal yang menarik. Ubah ke ini:

  kembali "SELECT * FROM PELANGGAN ORDER BY NAMA"; 

Ulang, dan ajaib meja Anda yang diurutkan menurut nama, seperti yang ditunjukkan pada Gambar 14,26.

Gambar 14,26.

Database order diubah oleh SQL.

Tanpa masuk ke tutorial Microsoft Foundation Class, mari kita katakan saja bahwa Anda dapat memanipulasi CRecordSet dan objek Cdatabase, bergabung dan drop tabel, update dan memasukkan baris, dan umumnya memiliki semua kesenangan yang mungkin di SQL. Anda telah melihat sampai di tepi mungkin, dan kami telah menunjukkan cara untuk mengintegrasikan SQL ke aplikasi C + +. Topik disarankan untuk studi lebih lanjut CRecordSet dan Cdatabase (baik di + + buku online C yang harus datang sebagai bagian dari + + perangkat lunak C), ODBC API (subjek beberapa buku), dan API yang disediakan oleh Oracle dan Sybase (yang keduanya sama untuk API ODBC).

Menggunakan Delphi dan SQL

Database alat lain yang penting pada platform perangkat lunak Windows Delphi. The splash yang muncul sebagai program ini mengambil memiliki gambaran dari Oracle di Delphi, dikelilingi oleh huruf SQL. Pada contoh C + + Anda menulis ulang satu baris kode. Menggunakan Delphi, Anda akan bergabung dengan dua meja tanpa menulis satu baris kode!


CATATAN: Kode untuk program ini terletak pada Lampiran C, Kode Sumber “Daftar untuk Program Delphi Digunakan pada Hari 14.”


Klik dua kali ikon Delphi untuk memulainya. Pada program lain seperti Gambar 14,27.

Gambar 14,27.

Lingkungan pemrograman Delphi.

Delphi mengharuskan Anda untuk mendaftar koneksi ODBC Anda akan digunakan dalam program Anda. Pilih BDE (Borland Database Environment) dari menu Tools dan kemudian mengisi kotak dialog yang ditampilkan pada Gambar 14,28.

Gambar 14,28.

Pendaftaran koneksi Anda.

Klik tab Alias ditampilkan di bagian bawah Gambar 14,28 dan menetapkan nama TYSSQL, seperti yang ditunjukkan pada Gambar 14,29.

Gambar 14,29.

Menambahkan sebuah alias baru.

Pilih File | New Form untuk membuat pilihan berikut. Mulailah dengan memilih Formulir Database dari tab Expert, seperti yang ditunjukkan pada Gambar 14,30.

Gambar 14,30.

Halaman Ahli dalam galeri Browse.

Kemudian pilih master / detail bentuk dan benda TQuery, seperti yang ditunjukkan pada Gambar 14,31.

Gambar 14,31.

Bentuk kotak dialog Database Expert.


CATATAN: Delphi memungkinkan Anda untuk bekerja dengan baik permintaan atau meja. Jika Anda membutuhkan fleksibilitas, kami sarankan objek TQuery. Jika Anda memerlukan seluruh meja tanpa modifikasi, gunakan objek ttabel.


Sekarang pilih sumber data TYSSQL Anda tetapkan sebelumnya, seperti yang ditunjukkan pada Gambar 14,32.

Gambar 14,32.

Memilih sumber data.

Pilih tabel BAGIAN sebagai master, seperti yang ditunjukkan pada Gambar 14,33.

Gambar 14,33.

Memilih meja.

Pilih semua yang bidang, seperti yang ditunjukkan pada Gambar 14,34.

Gambar 14,34.

Menambahkan semua bidang.

Pilih mode tampilan Horisontal, seperti yang ditunjukkan pada Gambar 14,35.

Gambar 14,35.

Tampilan modus seleksi.

Kemudian pilih perintah, pilih semua bidang, dan pilih Grid untuk modus tampilan nya, seperti yang ditunjukkan pada Gambar 14,36 14,37, dan 14,38.

Gambar 14,36.

Memilih tabel untuk bagian detail formulir.

Gambar 14,37.

Memilih semua bidang.

Gambar 14,38.

Memilih orientasi.

Sekarang perangkat lunak dapat digunakan untuk membuat sebuah bergabung. Buatlah bergabung pada PARTNUM, seperti yang ditunjukkan pada Gambar 14,39.

Gambar 14,39.

Membuat bergabung.

Sekarang pergi ke depan dan menghasilkan bentuk. Hasilnya seperti Gambar 14,40.

Gambar 14,40.

Bentuk selesai.

Mengkompilasi dan menjalankan program. Seperti yang Anda pilih bagian yang berbeda, agar mereka akan muncul dalam tabel yang lebih rendah, seperti yang ditunjukkan pada Gambar 14,41.

Gambar 14,41.

Program selesai.

Tutup proyek dan klik salah satu atau kedua objek query pada formulir. Ketika Anda mengklik objek, Inspektur Obyek di sebelah kiri layar pada Gambar 14,42 menunjukkan berbagai properti.

Gambar 14,42.

Permintaan di objek TQuery.

Cobalah bereksperimen dengan query untuk melihat apa yang terjadi. Hanya berpikir apa yang dapat Anda lakukan ketika Anda mulai menulis kode!

Ringkasan

Hari ini Anda belajar di mana untuk mulai menerapkan SQL menggunakan sehari-hari, hal-hal biasa Anda menemukan berbaring pada hard drive Anda. Cara terbaik untuk mengembangkan apa yang telah Anda pelajari adalah pergi keluar dan permintaan. Permintaan sebanyak yang Anda bisa.

Sumber ; http://www.webbasedprogramming.com

Tulisan 133-165

Tinggalkan komentar

Nomor

Judul Tulisan

Penulis

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

GSM

Pentium Over Drive

GPRS

Webmaster

Drupal

Mambo

Fantastisco

Konten Web

Sistem Manajemen Konten

WordPress

ASDL

Kegunaan Komda

Streaming Media

VoIP

Toturial HTML

XAMPP

MySQL Workbench

Postgre SQL

Visual Basic

GNU C Compiler

Free Basic

SQL Pengenalan

SQL Query

SQL Operator

SQL Fungsi Molding

SQL Klausa

SQL Gabung Tabel

SQL Select Tertanam

SQL Memanipulasi Data

SQL Membuat Tabel

SQL Membuat Tampilan

SQL Pengendalian Transaksi

SQL Keamanan Database

Visi lubai

Visi lubai

Visi lubai

Visi lubai

Visi lubai

Visi lubai

Visi lubai

Visi lubai

Visi lubai

Visi lubai

Visi lubai

Visi lubai

Visi lubai

Visi lubai

Visi lubai

Visi lubai

Visi lubai

Visi lubai

Visi lubai

Visi lubai

Visi lubai

Visi lubai

Visi lubai

Visi lubai

Visi lubai

Visi lubai

Visi lubai

Visi lubai

Visi lubai

Visi lubai

Visi lubai

Visi lubai

Visi lubai

SQL Keamanan Database

Tinggalkan komentar

Hari ini kita membahas keamanan database. Kami secara khusus melihat berbagai pernyataan SQL dan konstruksi yang memungkinkan Anda untuk mengelola dan efektif mengelola database relasional. Seperti banyak topik lain Anda telah mempelajari sejauh ini, bagaimana sebuah sistem manajemen database yang menerapkan keamanan sangat bervariasi antara produk-produk.Kami fokus pada produk database yang populer Oracle7 untuk memperkenalkan topik ini. Pada akhir hari, Anda akan memahami dan dapat melakukan hal berikut:

  • Buat pengguna
  • Ubah password
  • Buat peran
  • Gunakan dilihat untuk tujuan keamanan
  • Gunakan sinonim di tempat dilihat

Dicari: Database Administrator

Keamanan merupakan aspek yang sering diabaikan dari desain database. Kebanyakan komputer profesional memasuki dunia komputer dengan beberapa pengetahuan tentang pemrograman komputer atau perangkat keras, dan mereka cenderung untuk berkonsentrasi pada bidang-bidang. Misalnya, jika bos Anda meminta Anda untuk bekerja pada proyek baru merek yang jelas diperlukan beberapa jenis desain database relasional, apa yang akan menjadi langkah pertama Anda? Setelah memilih beberapa jenis perangkat keras dan dasar perangkat lunak, Anda mungkin akan mulai dengan merancang database dasar untuk proyek masyarakat ini. Akan tahap secara bertahap akan berpisah beberapa kalangan – salah satu dari mereka seorang desainer grafis antarmuka pengguna, yang lain rendah tingkat komponen-a pembangun. Mungkin Anda, setelah membaca buku ini, mungkin akan diminta untuk kode query SQL untuk memberikan keberanian aplikasi. Seiring dengan tugas ini datang benar-benar tanggung jawab administrasi dan memelihara database.

Banyak kali, pikir sedikit atau perencanaan masuk ke dalam tahap produksi aktual aplikasi. Apa yang terjadi ketika banyak pengguna yang diizinkan untuk menggunakan aplikasi ini di jaringan area luas (WAN)? Dengan perangkat lunak komputer pribadi yang kuat hari ini dan dengan teknologi seperti Microsoft Open Database Connectivity (ODBC), setiap pengguna dengan akses ke jaringan Anda dapat menemukan cara untuk mendapatkan pada database Anda. (Kami bahkan tidak akan memunculkan kompleksitas terlibat bila perusahaan Anda memutuskan untuk menghubungkan LAN Anda ke Internet atau beberapa-jaringan yang luas mulai komputer lain situasi!) Apakah Anda siap untuk menghadapi ini?

Untungnya untuk Anda, produsen perangkat lunak yang tersedia sebagian besar perangkat yang diperlukan untuk menangani masalah keamanan. Setiap rilis baru dari sebuah sistem operasi jaringan wajah persyaratan keamanan yang lebih ketat dari pendahulunya. Selain itu, sebagian vendor database utama membangun beberapa tingkat keamanan ke dalam produk mereka, yang ada secara independen dari sistem operasi Anda atau keamanan jaringan. Implementasi ini sangat beragam fitur keamanan dari produk ke produk.

Populer Database Produk dan Keamanan

Seperti yang Anda ketahui sekarang, banyak sistem basis data relasional berlomba untuk bisnis Anda. Setiap vendor ingin Anda untuk pendek dan jangka panjang alasan. Selama tahap pengembangan proyek, Anda bisa membeli sejumlah lisensi produk untuk pengujian, pengembangan, dan sebagainya. Namun, jumlah izin yang diperlukan untuk database produksi Anda dapat mencapai ratusan atau bahkan ribuan. Selain itu, ketika Anda memutuskan untuk menggunakan produk database tertentu, kemungkinan yang baik bahwa Anda akan tinggal dengan produk untuk tahun-tahun mendatang. Berikut adalah beberapa poin yang perlu diingat ketika Anda memeriksa produk ini:

  • Microsoft FoxPro sistem manajemen database adalah sistem database yang handal yang digunakan terutama di lingkungan single-user. FoxPro menggunakan subset terbatas dari SQL. Tidak ada langkah-langkah keamanan yang disediakan dengan sistem. Ia juga menggunakan format file Xbase, dengan masing-masing file yang berisi satu meja. Indeks disimpan dalam file terpisah.
  • Microsoft Access sistem manajemen database relasional menerapkan lebih dari SQL. Akses masih ditujukan untuk penggunaan pada platform PC, meskipun tidak berisi sistem keamanan dasar. Produk ini memungkinkan Anda untuk membangun query dan menyimpannya dalam database. Selain itu, seluruh database dan semua benda yang ada dalam satu file.
  • Oracle7 sistem manajemen database relasional mendukung SQL standar hampir penuh. Selain itu, Oracle telah menambahkan ekstensi ke SQL sendiri, yang disebut PL * SQL. Ini berisi fitur keamanan penuh, termasuk kemampuan untuk membuat peran dan memberikan izin dan hak pada objek dalam database.
  • Sybase SQL Server yang sama dalam kekuasaan dan fitur untuk produk Oracle. SQL Server juga menyediakan berbagai fitur keamanan dan memiliki ekstensi sendiri ke bahasa SQL, yang disebut Transact-SQL.

Tujuan di balik menggambarkan produk ini adalah untuk menggambarkan bahwa tidak semua perangkat lunak yang cocok untuk setiap aplikasi. Bila Anda berada di sebuah lingkungan bisnis, pilihan Anda mungkin terbatas. Faktor-faktor seperti biaya dan kinerja sangat penting. Namun, tanpa langkah-langkah keamanan yang memadai, ada tabungan menciptakan database Anda dapat dengan mudah diimbangi dengan masalah keamanan.

Bagaimana sebuah Database Menjadi Aman?

Sampai tahap ini, Anda tidak khawatir banyak tentang keamanan “” dari database yang telah Anda buat. Apakah terpikir oleh Anda bahwa Anda mungkin tidak ingin pengguna lain untuk masuk dan merusak dengan informasi database yang begitu cermat memasuki? Apa reaksi Anda jika Anda login ke server suatu pagi dan menemukan bahwa database Anda telah bekerja keras selama telah menjatuhkan (ingat bagaimana diam itu perintah DROP DATABASE ini)? Kami memeriksa secara rinci bagaimana satu sistem manajemen database populer (Personal Oracle7) memungkinkan Anda untuk membuat sebuah database yang aman. Anda akan dapat menerapkan sebagian besar informasi ini untuk sistem manajemen basis data lainnya, jadi pastikan Anda membaca informasi ini bahkan jika tidak sistem Oracle adalah pilihan Anda.


TIP: Jauhkan pertanyaan berikut dalam pikiran ketika Anda rencana sistem keamanan Anda:

  • Siapa yang bisa mendapatkan peran DBA?
  • Berapa banyak pengguna memerlukan akses ke database?
  • Mana pengguna akan membutuhkan hak istimewa yang mana dan peran?
  • Bagaimana Anda akan menghapus user yang tidak lagi membutuhkan akses ke database?

Oracle7 Pribadi dan Keamanan

Oracle7 mengimplementasikan keamanan dengan menggunakan tiga konstruksi:

  • Pengguna
  • Peran
  • Keistimewaan

Menciptakan Pengguna

Pengguna account nama yang diizinkan untuk login ke database Oracle. SQL sintaks yang digunakan untuk membuat pengguna baru berikut.

Sintaks:
  CREATE USER user 
  Diidentifikasi (BY password | eksternal) 
  [DEFAULT tablespace tablespace] 
  [SEMENTARA tablespace tablespace] 
  [QUOTA (integer [K | M] | UNLIMITED) ON] tablespace 
  [PROFIL] Profil 

Jika opsi password BY dipilih, sistem meminta user untuk memasukkan password setiap kali dia log on. Sebagai contoh, membuat username sendiri:

INPUT / OUTPUT:
  SQL> CREATE USER diidentifikasi oleh Bryan CUTIGER; 

  Pengguna diciptakan. 

Setiap kali saya login dengan username saya Bryan, saya diminta untuk memasukkan password saya: CUTIGER.

Jika opsi eksternal dipilih, Oracle bergantung pada nama komputer Anda login dan password sistem. Ketika Anda log on ke sistem, Anda memiliki dasarnya login ke Oracle.


CATATAN: Beberapa implementasi memungkinkan Anda untuk menggunakan eksternal, atau sistem operasi, password sebagai default saat menggunakan SQL (diidentifikasieksternal). Namun, kami menyarankan Anda memaksa pengguna untuk memasukkan password dengan memanfaatkan BY klausa diidentifikasi (diidentifikasi denganpassword).


Seperti yang dapat Anda lihat dari melihat sisa sintaks CREATE USER, Oracle juga memungkinkan Anda untuk mengatur tablespace default dan kuota. Anda dapat mempelajari lebih lanjut tentang topik ini dengan memeriksa dokumentasi Oracle.

Seperti halnya dengan setiap perintah CREATE lain yang telah Anda pelajari di buku ini, ada juga perintah ALTER USER. Ini terlihat seperti ini:

Sintaks:
  ALTER USER pengguna 
  [Diidentifikasi (BY password | eksternal)] 
  [DEFAULT tablespace tablespace] 
  [SEMENTARA tablespace tablespace] 
  [QUOTA (integer [K | M] | UNLIMITED) ON] tablespace 
  [PROFIL] Profil 
  [DEFAULT PERAN ([peran,] peran ... 
    | SEMUA [KECUALI peran [,] peran ...] | NONE)] 

Anda dapat menggunakan perintah ini untuk mengubah pilihan semua pengguna, termasuk password dan profil. Misalnya, untuk mengubah password user Bryan, Anda jenis ini:

INPUT / OUTPUT:
  SQL> ALTER Bryan PENGGUNA 
    2 diidentifikasi oleh Rosebud; 

  Pengguna berubah. 

Untuk mengubah default tablespace, ketik ini:

INPUT / OUTPUT:
  SQL> ALTER RON PENGGUNA 
    DEFAULT 2 tablespace USERS; 

  Pengguna berubah. 

Untuk menghapus pengguna, hanya masalah PENGGUNA perintah DROP, yang menghapus user masuk dalam database sistem. Berikut sintaks untuk perintah ini:

Sintaks:
 DROP USER user_name [CASCADE];

Jika opsi CASCADE digunakan, semua benda yang dimiliki oleh pengguna yang turun bersama dengan user account. Jika CASCADE tidak digunakan dan pengguna dilambangkan oleh user_namemasih memiliki objek, pengguna yang tidak jatuh. Fitur ini agak membingungkan, tetapi akan sangat berguna jika Anda pernah ingin meletakkan pengguna.

Menciptakan Peran

peran adalah hak istimewa atau serangkaian hak istimewa yang memungkinkan user untuk menjalankan fungsi tertentu dalam database. Untuk memberikan peran kepada pengguna, gunakan sintaks berikut:

Sintaks:
  Peran GRANT UNTUK [pengguna DENGAN ADMIN OPTION]; 

Jika DENGAN ADMIN OPTION digunakan, user yang kemudian dapat memberikan peran kepada pengguna lain. Bukankah daya menggembirakan?

Untuk menghapus peran, gunakan perintah REVOKE:

Sintaks:
  REVOKE peran DARI pengguna; 

Bila Anda log on ke sistem dengan menggunakan account yang Anda buat sebelumnya, Anda telah kehabisan batas izin Anda. Anda dapat log on, tapi itu adalah tentang semua yang dapat Anda lakukan. Oracle memungkinkan Anda mendaftar sebagai salah satu dari tiga peran:

  • Menghubungkan
  • Sumber
  • DBA (atau database administrator)

Ketiga peran memiliki berbagai tingkat hak istimewa.


CATATAN: Jika Anda memiliki hak istimewa yang sesuai, Anda dapat membuat peran Anda sendiri, hak istimewa hibah untuk peran Anda, dan kemudian memberikan peran Anda ke pengguna untuk keamanan lebih lanjut.


Peran Connect

Peran Connect dapat dianggap sebagai peran entry-level. Seorang pengguna yang telah diberikan akses peran Connect dapat diberikan berbagai hak istimewa yang memungkinkan dia untuk melakukan sesuatu dengan database.

INPUT / OUTPUT:
  SQL> GRANT CONNECT ATAS Bryan; 

  Grant berhasil. 

Peran Connect memungkinkan pengguna untuk memilih, memasukkan, update, dan menghapus catatan dari tabel milik pengguna lain (setelah perizinan yang sesuai telah diberikan). Pengguna juga dapat membuat tabel, pandangan, urutan, cluster, dan sinonim.

Peran Sumber Daya

Peran Sumber Daya memberi pengguna lebih banyak akses ke database Oracle. Selain izin yang dapat diberikan kepada peran Connect, peran Sumber Daya dapat juga diberikan izin untuk membuat prosedur, memicu, dan indeks.

INPUT / OUTPUT:
  SQL> GRANT RESOURCE ALAM ATAS Bryan; 

  Grant berhasil. 

Peran DBA

Peran DBA memuat segala hak istimewa. Pengguna dengan peran ini mampu melakukan dasarnya apapun yang mereka mau ke sistem database. Anda harus menjaga jumlah pengguna dengan peran untuk minimum sistem untuk memastikan integritas.

INPUT / OUTPUT:
  SQL> GRANT DBA TO Bryan; 

  Grant berhasil. 

Setelah tiga langkah sebelumnya, pengguna diberikan Bryan Connect, Resource, dan peran DBA. Hal ini agak berlebihan karena peranan DBA meliputi dua peran lainnya, sehingga Anda bisa drop mereka sekarang:

INPUT / OUTPUT:
  SQL> CONNECT REVOKE DARI Bryan; 

  Batalkan berhasil. 

  SQL> REVOKE RESOURCE DARI Bryan; 

  Batalkan berhasil. 

Bryan bisa melakukan semua yang dia perlu lakukan dengan peranan DBA.

Keistimewaan Pengguna

Setelah Anda memutuskan peran untuk memberikan pengguna Anda, langkah selanjutnya adalah memutuskan izin ini pengguna akan memiliki database pada objek. (Oracle7 panggilan izin hak hak istimewa ini.) Jenis bervariasi, tergantung pada peran apa yang telah diberikan. Jika Anda benar-benar membuat objek, Anda dapat memberikan hak istimewa pada objek yang ke pengguna lain selama peran mereka izin akses ke hak istimewa yang . Oracle mendefinisikan dua jenis hak istimewa yang dapat diberikan kepada pengguna: sistem hak dan hak istimewa objek.. (Lihat Tabel 12.1 dan 12.2)

Sistem hak systemwide berlaku. sintaks yang digunakan untuk memberikan hak istimewa sistem adalah sebagai berikut:

Sintaks:
  system_privilege GRANT ATAS (user_name | Peran | PUBLIK) 
  [DENGAN] OPSI ADMIN; 

DENGAN ADMIN OPTION memungkinkan penerima beasiswa untuk memberikan hak istimewa ini kepada orang lain.

Akses Pengguna ke Tampilan

Perintah berikut mengijinkan semua user sistem untuk memiliki CREATE VIEW akses dalam skema mereka sendiri.

INPUT:
  GRANT SQL> CREATE VIEW 
    2 UNTUK PUBLIK;
OUTPUT:
  Grant berhasil. 
ANALISIS:

Kata kunci umum berarti bahwa setiap orang memiliki hak pengaturan CREATE VIEW. Jelas, sistem ini memungkinkan penerima hibah hak istimewa yang memiliki banyak akses ke hampir semua sistem. Sistem hak harus diberikan hanya untuk pengguna khusus atau untuk pengguna yang memiliki kebutuhan untuk menggunakan hak istimewa ini. Tabel 12.1 menunjukkan keistimewaan sistem Anda akan menemukan dalam membantu file yang disertakan dengan Personal Oracle7.


PERINGATAN: Gunakan hati saat pemberian hak istimewa kepada publik. Pemberian publik memberikan semua pengguna dengan hak akses ke database Anda mungkin tidak ingin mereka miliki.


Tabel 12.1. Sistem hak istimewa di Oracle7.

Sistem Privilege Diizinkan Operasi
ALTER INDEX APAPUN Memungkinkan penerima untuk mengubah setiap indeks dalam skema apapun.
PROSEDUR ALTER APAPUN Memungkinkan penerima untuk mengubah setiap prosedur yang tersimpan, fungsi, atau paket dalam skema apapun.
ALTER PERAN APAPUN Memungkinkan penerima untuk mengubah apapun peran dalam database.
ALTER TABLE APAPUN Memungkinkan penerima untuk mengubah setiap meja atau melihat dalam skema tersebut.
ALTER TRIGGER APAPUN Memungkinkan penerima untuk mengaktifkan, menonaktifkan, atau kompilasi pun memicu database dalam skema apapun.
ALTER DATABASE Memungkinkan penerima untuk mengubah database.
ALTER USER Memungkinkan penerima untuk mengubah setiap user. hak istimewa ini kewenangan kepada penerima beasiswa untuk mengubah password user lain atau metode otentikasi, memberikan kuota pada setiap tablespace, set default dan tablespace sementara, dan memberikan profil dan peran default.
CREATE INDEKS APAPUN Memungkinkan penerima untuk membuat indeks pada setiap meja dalam skema apapun.
CREATE PROSEDUR APAPUN Memungkinkan penerima untuk membuat disimpan prosedur, fungsi, dan paket dalam skema apapun.
CREATE TABLE APAPUN Memungkinkan penerima untuk membuat tabel dalam skema apapun. Pemilik skema yang berisi tabel harus memiliki kuota ruang pada tablespace yang berisi meja.
CREATE TRIGGER APAPUN Memungkinkan penerima untuk membuat memicu database dalam setiap skema terkait dengan tabel dalam skema apapun.
CREATE VIEW APAPUN Memungkinkan penerima untuk membuat pemandangan dalam skema apapun.
CREATE PROSEDUR Memungkinkan penerima untuk membuat disimpan prosedur, fungsi, dan paket dalam skema mereka sendiri.
CREATE PROFIL Memungkinkan penerima untuk membuat profil.
CREATE PERAN Memungkinkan penerima untuk menciptakan peran.
CREATE sinonim Memungkinkan penerima untuk membuat nama-muradif dalam skema mereka sendiri.
CREATE TABLE Memungkinkan penerima untuk membuat tabel dalam skema mereka sendiri. Untuk membuat meja, para penerima hibah juga harus memiliki kuota ruangan di tablespace untuk berisi meja.
CREATE TRIGGER Memungkinkan penerima untuk membuat database dalam skema memicu mereka sendiri.
CREATE USER Memungkinkan penerima untuk membuat pengguna. hak istimewa ini juga memungkinkan pencipta untuk menetapkan kuota pada setiap tablespace, set default dan tablespace sementara, dan memberikan profil sebagai bagian dari pernyataan CREATE USER.
CREATE VIEW Memungkinkan penerima untuk membuat pemandangan dalam skema mereka sendiri.
HAPUS TABEL APAPUN Memungkinkan penerima untuk menghapus baris dari tabel atau dilihat dalam skema atau tabel truncate dalam skema apapun.
INDEKS DROP APAPUN Memungkinkan penerima untuk menjatuhkan indeks dalam skema apapun.
PROSEDUR DROP APAPUN Memungkinkan penerima untuk drop disimpan prosedur, fungsi, atau paket dalam skema apapun.
DROP PERAN APAPUN Memungkinkan penerima untuk drop peran.
DROP sinonim APAPUN Memungkinkan penerima untuk menjatuhkan nama-muradif swasta dalam skema apa pun.
DROP TABEL APAPUN Memungkinkan penerima untuk drop tabel dalam skema apapun.
DROP TRIGGER APAPUN Memungkinkan penerima untuk drop database memicu dalam skema apapun.
DROP VIEW APAPUN Memungkinkan penerima untuk menjatuhkan dilihat dalam skema apapun.
DROP PENGGUNA Memungkinkan penerima untuk drop pengguna.
Jalankan PROSEDUR APAPUN Memungkinkan penerima untuk melaksanakan prosedur atau fungsi (mandiri atau dikemas) atau referensi variabel paket publik dalam skema apapun.
GRANT APAPUN HAK ISTIMEWA Memungkinkan penerima untuk memberikan hak istimewa apapun sistem.
GRANT PERAN APAPUN Memungkinkan penerima untuk memberikan peran apa pun dalam database.
INSERT TABEL APAPUN Memungkinkan penerima untuk memasukkan baris ke dalam tabel dan tampilan dalam skema apapun.
LOCK TABLE APAPUN Memungkinkan penerima untuk mengunci tabel dan tampilan dalam skema apapun.
PILIH URUTAN APAPUN Memungkinkan penerima untuk sekuens referensi dalam skema apapun.
TABEL SELECT APAPUN Memungkinkan penerima untuk tabel query, pandangan, atau snapshot dalam skema apapun.
UPDATE SETIAP ROWS Memungkinkan penerima untuk memperbarui baris dalam tabel.

Obyek hak adalah hak istimewa yang dapat digunakan objek-objek database tertentu 12.2. Tabel daftar hak istimewa objek dalam Oracle7.

Tabel 12.2. Obyek hak diaktifkan bawah Oracle7.

SEMUA
ALTER
HAPUS
Melaksanakan
INDEKS
INSERT
DAFTAR PUSTAKA
SELECT
UPDATE

Anda dapat menggunakan formulir berikut pernyataan GRANT untuk memberikan pengguna lain mengakses ke meja Anda:

Sintaks:
  GRANT (object_priv | SEMUA [PRIVILEGES]) [(kolom 
  [, Kolom ]...)] 
  [, (Object_priv | SEMUA [PRIVILEGES]) [(kolom 
  [,] Kolom ...)]] ... 
  ON skema [.] Objek 
  UNTUK (user | Peran | PUBLIK) [, (pengguna | Peran | PUBLIK)] ... 
  [DENGAN OPSI] GRANT 

Untuk menghapus objek hak Anda telah memberikan kepada seseorang, gunakan perintah REVOKE dengan sintaks berikut:

Sintaks:
  REVOKE (object_priv | SEMUA [PRIVILEGES]) 
  [, (Object_priv | SEMUA [PRIVILEGES])] 
  ON skema [.] Objek 
  DARI (user | peran | PUBLIK) [, (pengguna | Peran | PUBLIK)] 
  KENDALA CASCADE [] 

Dari Membuat Tabel untuk Pemberian Peran

Buat tabel bernama GAJI dengan struktur sebagai berikut:

INPUT:
  NAMA, CHAR (30) 
  GAJI, NOMOR 
  UMUR, NOMOR 

  SQL> CREATE TABLE GAJI ( 
    2 NAME CHAR (30), 
    3 GAJI NUMBER, 
    4 UMUR NUMBER);
OUTPUT:
  Tabel dibuat. 

Sekarang, buat dua pengguna – Jack dan Jill:

INPUT / OUTPUT:
  SQL> membuat pengguna Jack diidentifikasi oleh Jack; 

  Pengguna diciptakan. 

  SQL> membuat user diidentifikasi oleh Jill Jill; 

  Pengguna diciptakan. 

  SQL> hibah terhubung ke Jack; 

  Grant berhasil. 

  SQL> memberikan sumber daya kepada Jill; 

  Grant berhasil. 
ANALISIS:

Sejauh ini, Anda telah membuat dua pengguna dan masing-masing diberikan peran yang berbeda. Oleh karena itu, mereka akan memiliki kemampuan yang berbeda ketika bekerja dengan database. Pertama menciptakan tabel GAJI dengan informasi berikut:

INPUT / OUTPUT:
  SQL> SELECT * FROM GAJI; 

  NAMA GAJI UMUR 
  ------------------------------ --------- --------- 
  35.000 JACK 29 
  48.000 JILL 42 
  JOHN 61.000 55 

Anda kemudian dapat memberikan berbagai hak istimewa untuk tabel ini didasarkan pada beberapa alasan sewenang-wenang untuk contoh ini. Kita menganggap bahwa saat ini Anda memiliki hak DBA dan dapat memberikan hak istimewa apapun sistem. Bahkan jika Anda tidak memiliki hak DBA, Anda masih dapat memberikan hak istimewa objek di meja GAJI karena Anda sendiri itu (asumsi Anda baru saja dibuat itu).

Karena hanya milik Jack peran Connect, Anda ingin dia hanya memiliki hak SELECT.

INPUT / OUTPUT:
 SQL> GRANT SELECT PADA GAJI KE JACK; Grant berhasil.

Karena milik Jill peran Resource, Anda membiarkan dia untuk memilih dan memasukkan beberapa data ke dalam tabel. Untuk menghidupkan hal-hal sedikit, memungkinkan Jill untuk memperbarui nilai-nilai hanya dalam bidang GAJI tabel GAJI.

INPUT / OUTPUT:
  GRANT SQL> SELECT, UPDATE (GAJI) PADA GAJI KE Jill; 

  Grant berhasil. 

Sekarang ini meja dan para pengguna telah dibuat, Anda perlu melihat bagaimana pengguna mengakses sebuah meja yang dibuat oleh user lain. Kedua Jack dan Jill telah diberikan akses SELECTpada tabel GAJI. Namun, jika Jack mencoba mengakses meja GAJI, ia akan tahu bahwa itu tidak ada karena Oracle memerlukan nama pengguna atau skema yang memiliki tabel mendahului nama tabel.

Kualifikasi Tabel

Catat username Anda gunakan untuk membuat tabel GAJI (saya adalah Bryan). Untuk Jack untuk memilih data dari tabel GAJI, ia harus mengatasi GAJI tabel dengan nama pengguna tersebut.

INPUT:
  SQL> SELECT * FROM GAJI; 
  SELECT * FROM GAJI 
                *
OUTPUT:
  ERROR pada baris 1: 
  ORA-00942: table atau melihat tidak ada 

Berikut Jack memperingatkan bahwa meja tidak ada. Sekarang menggunakan username pemilik untuk mengidentifikasi meja:

INPUT / OUTPUT:
  SQL> SELECT * 
    2 DARI Bryan.SALARIES; 

  NAMA GAJI UMUR 
  ------------------------------ --------- --------- 
  JACK 35.000 29 
  48.000 JILL 42 
  JOHN 61.000 55 
ANALISIS:

Anda dapat melihat bahwa sekarang permintaan bekerja. Sekarang menguji hak akses Jill log. Pertama dari Jack’s logon dan login lagi sebagai Jill (menggunakan password Jill).

INPUT / OUTPUT:
  SQL> SELECT * 
    2 DARI Bryan.SALARIES; 

  NAMA GAJI UMUR 
  ------------------------------ --------- --------- 
  JACK 35.000 29 
  48.000 JILL 42 
  JOHN 61.000 55 

Yang bekerja baik-baik saja. Sekarang cobalah untuk memasukkan catatan baru ke dalam tabel.

INPUT / OUTPUT:
  SQL> INSERT INTO Bryan.SALARIES 
    2 VALUES ('JOE', 85000,38); 
  INSERT INTO Bryan.SALARIES 
                      * 
  ERROR pada baris 1: 
  ORA-01031: hak istimewa tidak cukup 
ANALISIS:

Operasi ini tidak bekerja karena Jill tidak memiliki hak INSERT pada tabel GAJI.

INPUT / OUTPUT:
  SQL> UPDATE Bryan.SALARIES 
    2 SET UMUR = 42 
    3 WHERE NAME "JOHN = '; 
  UPDATE Bryan.SALARIES 
                 * 
  ERROR pada baris 1: 
  ORA-01031: hak istimewa tidak cukup 
ANALISIS:

Sekali lagi, Jill berusaha berkeliling hak istimewa bahwa ia telah diberikan. Tentu, Oracle menangkap kesalahan ini dan diperbaiki dengan cepat.

INPUT / OUTPUT:
  SQL> UPDATE Bryan.SALARIES 
    2 SET GAJI = 35.000 
    3 WHERE NAME 'JOHN ='; 

  1 baris diperbarui. 

  SQL> SELECT * 
    2 DARI Bryan.SALARIES; 

  NAMA GAJI UMUR 
  ------------------------------ --------- --------- 
  JACK 35.000 29 
  48.000 JILL 42 
  JOHN 35.000 55 
ANALISIS:

Anda dapat melihat sekarang bahwa memperbarui bekerja selama Jill mematuhi hak istimewa dia telah diberikan.

Menggunakan Tampilan untuk Tujuan Keamanan

Seperti yang telah disebutkan di Hari ke-10, “Tampilan Menciptakan dan Indeks,” pandangan adalah tabel virtual yang dapat Anda gunakan untuk menyajikan tampilan data yang berbeda dari cara secara fisik ada di database. Hari ini Anda akan mempelajari lebih lanjut tentang bagaimana menggunakan pandangan untuk melaksanakan langkah-langkah keamanan. Pertama, bagaimanapun, kami menjelaskan bagaimana laporan pandangan dapat menyederhanakan SQL.

Sebelumnya Anda telah belajar bahwa ketika pengguna harus mengakses sebuah tabel atau database objek yang memiliki pengguna lain, bahwa objek harus direferensikan dengan nama pengguna. Seperti yang dapat Anda bayangkan, prosedur ini bisa bertele-tele jika Anda harus menulis menulis beberapa query SQL berturut-turut. Lebih penting lagi, pengguna pemula akan diperlukan untuk menentukan pemilik meja sebelum mereka bisa memilih isi dari sebuah tabel, yang tidak sesuatu yang Anda ingin semua user Anda untuk melakukan. Satu solusi sederhana ditunjukkan dalam paragraf berikut.

Solusi A untuk Kualifikasi Tabel atau Lihat

Asumsikan bahwa Anda logon sebagai Jack, teman Anda dari contoh sebelumnya. Anda tahu bahwa bagi Jack untuk melihat isi tabel GAJI, ia harus menggunakan pernyataan berikut:

INPUT:
  SQL> SELECT * 
    2 DARI Bryan.SALARIES;
OUTPUT:
  NAMA GAJI UMUR 
  ------------------------------ --------- --------- 
  JACK 35.000 29 
  48.000 JILL 42 
  JOHN 35.000 55 

Jika Anda adalah untuk membuat tampilan bernama SALARY_VIEW, pengguna hanya dapat memilih dari pandangan itu.

INPUT / OUTPUT:
 SQL> CREATE VIEW SALARY_VIEW 2 AS SELECT * FROM Bryan.SALARIES 3; Lihat menciptakan DARI. SQL> SELECT * SALARY_VIEW; NAMA UMUR GAJI ---------------------- -------- --------- --------- 29 JACK JILL 48.000 35.000 35.000 55 42 JOHN
ANALISIS:

Permintaan sebelumnya kembali nilai-nilai yang sama dengan catatan kembali dari Bryan.SALARIES.

Menggunakan Sinonim di Tempat Tampilan

SQL juga menyediakan objek yang dikenal sebagai sebuah sinonim. Sebuah sinonim memberikan alias untuk meja untuk menyederhanakan atau meminimalkan penekanan tombol ketika menggunakan tabel dalam pernyataan SQL. Ada dua jenis sinonim: swasta dan publik. Setiap pengguna dengan peran sumber daya dapat membuat sinonim pribadi. Di sisi lain, hanya pengguna dengan peran DBA dapat membuat sinonim publik.

Sintaks untuk sebuah sinonim publik berikut.

Sintaks:
  CREATE [PUBLIC] Sinonim [skema sinonim.] 
  UNTUK Skema [.] Obyek [@ dblink] 

Dalam contoh sebelumnya, Anda bisa mengeluarkan perintah berikut untuk mencapai hasil yang sama:

INPUT / OUTPUT:
  SQL> CREATE GAJI sinonim PUBLIK UNTUK GAJI 
  Sinonim dibuat. 

Kemudian login kembali ke Jack dan jenis ini:

INPUT / OUTPUT:
  SQL> SELECT * FROM GAJI; 

  NAMA GAJI UMUR 
  ------------------------------ --------- --------- 
  JACK 35.000 29 
  48.000 JILL 42 
  JOHN 35.000 55 

Menggunakan Tampilan untuk Memecahkan Masalah Keamanan

Misalnya, Anda berubah pikiran tentang Jack dan Jill dan memutuskan bahwa keduanya tidak harus dapat melihat tabel GAJI sepenuhnya. Anda dapat menggunakan pandangan untuk mengubah situasi ini dan memungkinkan mereka hanya memeriksa informasi mereka sendiri.

INPUT / OUTPUT:
  SQL> JACK_SALARY CREATE VIEW AS 
    2 SELECT * FROM BRYAN.SALARIES 
    3 WHERE NAME 'JACK ='; 

  Lihat dibuat.
INPUT / OUTPUT:
  SQL> CREATE VIEW AS JILL_SALARY 
    2 SELECT * FROM BRYAN.SALARIES 
    3 WHERE NAME 'JILL ='; 

  Lihat dibuat.
INPUT / OUTPUT:
  SQL> GRANT SELECT ON JACK_SALARY 
    2 ATAS JACK; 

  Grant berhasil.
INPUT / OUTPUT:
 SQL> GRANT SELECT ON JILL_SALARY 2 ATAS JILL; Grant berhasil.
INPUT / OUTPUT:
  R SQL> SELECT ON Menimbulkan GAJI DARI JACK; 

  Batalkan berhasil.
INPUT / OUTPUT:
  SQL> SELECT ON REVOKE DARI GAJI JILL; 

  Batalkan berhasil. 

Sekarang login sebagai Jack dan menguji tampilan yang Anda buat untuknya.

INPUT / OUTPUT:
  SQL> SELECT * FROM Bryan.JACK_SALARY; 

  NAMA GAJI UMUR 
  ---------- ---------- ---- 

  Jack 35.000 29 
INPUT / OUTPUT:
  SQL> SELECT * FROM PERKINS.SALARIES; 
  SELECT * FROM PERKINS.SALARIES 
                        * 
  ERROR pada baris 1: 
  ORA-00942: table atau melihat tidak ada 

Log out dari account Jack dan Jill uji:

INPUT / OUTPUT:
  SQL> SELECT * FROM Bryan.JILL_SALARY; 

  NAMA GAJI UMUR 
  ------------------ ------------- ---- 

  Jill 48.000 42 
ANALISIS:

Anda dapat melihat bahwa akses ke meja GAJI benar-benar dikontrol menggunakan pandangan. SQL memungkinkan Anda untuk membuat pandangan yang Anda inginkan dan kemudian memberikan izin kepada pengguna lain. Teknik ini memungkinkan banyak fleksibilitas.

Sintaks untuk menjatuhkan sinonim adalah

Sintaks:
  SQL drop> [sinonim synonym_name] publik; 

CATATAN: Sekarang, Anda harus memahami pentingnya menjaga hingga minimum jumlah orang dengan peran DBA. Seorang pengguna dengan tingkat akses dapat memiliki akses lengkap untuk semua perintah dan operasi dalam database. Catatan, bagaimanapun, bahwa dengan Oracle dan Sybase Anda harus memiliki tingkat akses DBA (atau SA-tingkat di Sybase) mengimpor atau mengekspor data pada database.


Menggunakan Klausul DENGAN GRANT OPTION

Bagaimana menurut Anda yang akan terjadi jika Jill berusaha untuk lulus kehormatan UPDATE di atas untuk Jack? Sepintas Anda mungkin berpikir bahwa Jill, karena ia dipercayakan dengan hak istimewa UPDATE, harus dapat menyebarkannya ke pengguna lain yang diizinkan hak istimewa itu. Namun, dengan menggunakan pernyataan GRANT seperti yang Anda lakukan sebelumnya, Jill tidak dapat melewati hak-nya kepada orang lain:

  GRANT SQL> SELECT, UPDATE (GAJI) PADA Bryan.SALARIES ATAS Jill; 

Berikut adalah sintaks untuk laporan GRANT yang diperkenalkan sebelumnya hari ini:

Sintaks:
  GRANT (object_priv | SEMUA [PRIVILEGES]) [(kolom 
  [, Kolom ]...)] 
  [, (Object_priv | SEMUA [PRIVILEGES]) [(kolom 
  [,] Kolom ...)]] ... 
  ON skema [.] Objek 
  UNTUK (user | Peran | PUBLIK) [, (pengguna | Peran | PUBLIK)] ... 
  [DENGAN OPSI] GRANT 

Apa yang Anda cari adalah DENGAN GRANT OPTION klausa di akhir pernyataan GRANT. Ketika obyek hak istimewa yang diberikan dan DENGAN GRANT OPTION digunakan, hak istimewa ini dapat ditularkan kepada orang lain. Jadi jika Anda ingin memperbolehkan Jill untuk menyampaikan hak istimewa ini pada Jack, Anda akan melakukan hal berikut:

INPUT:
  GRANT SQL> SELECT, UPDATE (GAJI) 
    2 PADA Bryan.SALARIES ATAS JILL 
    3 DENGAN GRANT OPTION;
OUTPUT:
  Grant berhasil. 

Jill kemudian bisa log on dan masalah perintah berikut:

INPUT / OUTPUT:
  GRANT SQL> SELECT, UPDATE (GAJI) 
    2 PADA Bryan.SALARIES ATAS JACK; 

  Grant berhasil. 

Ringkasan

Keamanan merupakan topik yang sering diabaikan-yang dapat menyebabkan banyak masalah jika tidak benar dipikirkan dan dikelola. Untungnya, SQL menyediakan beberapa perintah yang berguna untuk menerapkan keamanan pada database.

Pengguna awalnya diciptakan dengan menggunakan perintah CREATE USER, yang mendirikan sebuah username dan password untuk pengguna. Setelah account pengguna telah dibentuk, pengguna ini harus diberikan peran dalam rangka untuk menyelesaikan pekerjaan apapun. Ketiga tersedia peran dalam Oracle7 adalah Connect, Sumber Daya, dan DBA. Setiap peran memiliki tingkat yang berbeda akses ke database, dengan Hubungkan menjadi sederhana dan DBA memiliki akses untuk segala sesuatu.

Perintah GRANT memberikan izin atau hak istimewa kepada user. Perintah REVOKE dapat mengambil bahwa izin atau hak istimewa menjauh dari pengguna. Kedua jenis hak istimewa adalah obyek hak dan hak istimewa sistem. Hak istimewa sistem harus diawasi dengan baik dan tidak boleh diberikan kepada pengguna berpengalaman. Memberikan akses pengguna berpengalaman untuk perintah memungkinkan mereka untuk (secara tidak sengaja mungkin) menghancurkan data atau database Anda telah susah payah menyiapkan. Obyek hak dapat diberikan untuk memberikan pengguna akses ke objek individu yang ada dalam skema’s database pemilik.

Semua teknik dan pernyataan SQL SQL menyediakan pengguna dengan berbagai alat untuk digunakan ketika mengatur keamanan sistem. Meskipun kami berfokus pada fitur keamanan Oracle7, Anda dapat menerapkan banyak informasi ini ke sistem database di situs Anda. Hanya ingat bahwa apa pun produk yang Anda gunakan, penting untuk menegakkan beberapa tingkat keamanan database.

Sumber ; http://www.webbasedprogramming.com

SQL Pengendalian transaksi

Tinggalkan komentar

Pendahuluan

Anda telah menghabiskan 10 hari terakhir belajar hampir semua yang dapat Anda lakukan dengan data dalam database relasional. Misalnya, Anda tahu bagaimana menggunakan SELECT SQL untuk mengambil data dari satu atau lebih tabel berdasarkan beberapa kondisi yang disediakan oleh pengguna. Anda juga memiliki kesempatan untuk menggunakan data laporan modifikasi seperti INSERT, UPDATE, dan DELETE. Pada hari ini, Anda telah menjadi tingkat menengah dan user SQL database. Jika diperlukan, Anda bisa membangun sebuah database dengan tabel yang terkait, yang masing-masing akan berisi beberapa bidang jenis data yang berbeda. Dengan menggunakan teknik desain yang tepat, Anda bisa memanfaatkan informasi yang terkandung dalam database ini menjadi sebuah aplikasi yang kuat.

Tujuan

Jika Anda adalah pengguna biasa SQL yang kadang-kadang perlu untuk mengambil data dari database, topik hari-hari pertama 10 menyediakan sebagian besar informasi yang Anda perlu. Namun, jika Anda berniat untuk (atau sedang diperlukan untuk) mengembangkan aplikasi profesional menggunakan semua jenis database relasional, mencakup topik-topik lanjutan selama empat hari ke depan – kontrol transaksi, keamanan, tertanam pemrograman SQL, dan prosedur database – akan membantu Anda banyak. Kita mulai dengan kontrol transaksi. Pada akhir hari, Anda akan tahu yang berikut:

  • Dasar-dasar transaksi kontrol
  • Bagaimana untuk menyelesaikan dan atau membatalkan transaksi
  • Beberapa perbedaan antara Sybase dan Oracle transaksi

Kontrol Transaksi

Transaksi kontrol, atau manajemen transaksi, mengacu pada kemampuan sistem manajemen database relasional untuk melakukan transaksi database. Transaksi unit kerja yang harus dilakukan dalam urutan logis dan berhasil sebagai kelompok atau tidak sama sekali. Istilah unit kerja berarti bahwa transaksi memiliki awal dan akhir. Jika ada yang tidak beres selama transaksi tersebut, seluruh unit kerja dapat dibatalkan jika diinginkan. Jika semuanya terlihat baik, seluruh unit kerja dapat disimpan ke database.

Dalam bulan-bulan mendatang atau tahun Anda mungkin akan mengimplementasikan aplikasi untuk beberapa pengguna untuk menggunakan di dalam jaringan. Klien / server lingkungan dirancang khusus untuk tujuan ini. Secara tradisional, server (dalam hal ini, server database) mendukung koneksi jaringan ganda untuk itu. Seperti yang sering terjadi dengan teknologi, ini baru ditemukan menambah fleksibilitas tingkat kompleksitas baru terhadap lingkungan. Pertimbangkan aplikasi perbankan yang dijelaskan dalam beberapa paragraf berikutnya.

Aplikasi Perbankan

Anda dipekerjakan oleh First Federal Bank Keuangan untuk membuat sebuah aplikasi yang menangani pemeriksaan transaksi rekening yang terdiri dari debit dan kredit untuk memeriksa rekening nasabah. Anda telah menetapkan suatu database yang bagus, yang telah diuji dan diverifikasi untuk bekerja dengan benar. Setelah menelpon aplikasi Anda, Anda memverifikasi bahwa ketika Anda mengambil 20 dari $ dari account, $ 20 benar-benar hilang dari database. Ketika Anda menambahkan $ 50,25 ke rekening giro, deposito ini muncul seperti yang diharapkan. Anda bangga mengumumkan kepada bos Anda bahwa sistem siap untuk pergi, dan beberapa komputer dibentuk di cabang lokal untuk memulai pekerjaan.

Dalam beberapa menit, Anda melihat situasi yang tidak Anda mengantisipasi: Sebagai salah satu teller adalah deposito cek, kasir lain menarik uang dari account yang sama. Dalam hitungan menit, “deposan banyak saldo tidak benar karena beberapa pengguna mengupdate tabel secara bersamaan. Sayangnya, beberapa pembaruan ini adalah Timpa satu sama lain. Tak lama kemudian, aplikasi Anda ditarik offline untuk perbaikan. Kami akan bekerja melalui masalah ini dengan database yang disebut Memeriksa. Dalam database ini adalah dua tabel, yang ditunjukkan pada Tabel 11.1 dan 11.2.

Tabel 11.1. Tabel PELANGGAN.

Nama Alamat Kota Negara Zip Customer_ID
Bill Turner 725 N. Deal Parkway Washington DC 20.085 1
John Keith 1220 Dr Via De Luna Jacksonville FL 33.581 2
Maria Rosenberg 482 Wannamaker Avenue Williamsburg VA 23.478 3
David Blanken 405 N. Highway Davis Greenville SC 29.652 4
Rebecca Little 7.753 Lane Woods Houston TX 38.764 5

Tabel 11.2. Tabel SALDO.

Average_Bal Curr_Bal Account_id
1.298,53 854,22 1
5.427,22 6.015,96 2
211,25 190,01 3
73,79 25,87 4
1.285,90 1.473,75 5
1.234,56 1.543,67 6
345,25 348,03 7

Asumsikan bahwa program aplikasi sekarang Anda melakukan operasi SELECT dan mengambil data berikut untuk Bill Turner:

OUTPUT:
  NAMA: Bill Turner 
  ALAMAT: 725 N. Parkway Deal 
  KOTA: Washington 
  NEGARA: DC 
  ZIP: 20085 
  CUSTOMER_ID: 1 

Walaupun informasi ini sedang diambil, pengguna lain dengan sambungan ke alamat informasi ini Bill Turner update database:

INPUT:
  SQL> UPDATE NASABAH SET Alamat = "Kingstowne Jalan 11.741" 
       WHERE Nama = "Bill Turner"; 

Seperti yang Anda lihat, informasi yang Anda diambil sebelumnya bisa update tidak sah jika terjadi selama tengah SELECT Anda. Jika permohonan Anda menembakkan surat untuk dikirim kepada Mr Bill Turner, alamat itu digunakan akan salah. Jelas, jika surat itu telah dikirimkan, Anda tidak akan dapat mengubah alamat. Namun, jika Anda telah menggunakan transaksi, perubahan data bisa terdeteksi, dan semua operasi lain Anda bisa telah diperpanjang kembali.

Awal sebuah Transaksi

Transaksi cukup sederhana untuk diimplementasikan. Anda akan memeriksa sintaks yang digunakan untuk melakukan transaksi dengan menggunakan sintaks SQL Oracle RDBMS serta Sybase SQL Server sintaks SQL.

Semua sistem database yang mendukung transaksi harus memiliki cara untuk secara eksplisit memberitahu sistem bahwa transaksi dimulai. (Ingat bahwa transaksi adalah pengelompokan logis dari pekerjaan yang memiliki awal dan akhir Oracle7.) Menggunakan Pribadi, sintaks seperti ini:

Sintaks:
  SET TRANSAKSI (READ ONLY | USE ROLLBACK SEGMEN segmen) 

Menetapkan standar SQL yang setiap database SQL implementasi harus mendukung pernyataan-tingkat membaca konsistensi, yaitu data harus tetap konsisten sementara satu pernyataan yang mengeksekusi. Namun, dalam banyak situasi data harus tetap berlaku di satu unit kerja, bukan hanya dalam pernyataan tunggal. Oracle memungkinkan pengguna untuk menentukan kapan transaksi akan mulai dengan menggunakan pernyataan TRANSAKSI SET berikut. Jika Anda ingin Bill Turner memeriksa informasi dan memastikan bahwa data tidak berubah, Anda bisa melakukan:

INPUT:
  SQL> SET TRANSAKSI READ ONLY; 
  SQL> SELECT * FROM PELANGGAN 
       Bill Turner WHERE NAMA = '; 

  --- --- Apakah Operasi Lainnya 

  SQL> COMMIT; 

Kami membahas laporan COMMIT hari ini. ATUR TRANSAKSI HANYA BACA pilihan memungkinkan Anda untuk secara efektif mengunci satu set catatan sampai transaksi berakhir. Anda dapat menggunakan opsi HANYA BACA dengan perintah berikut:

SELECT

LOCK TABLE

PERAN SET

ALTER SESI

ALTER SYSTEM

Opsi USE ROLLBACK SEGMEN memberitahu segmen database Oracle yang digunakan untuk ruang penyimpanan rollback. Pilihan ini merupakan perpanjangan Oracle dengan syntax SQL standar. Konsultasikan Anda dokumentasi Oracle untuk informasi lebih lanjut tentang cara menggunakan segmen untuk menjaga database Anda.

SQL-SQL server Transact menerapkan TRANSAKSI perintah BEGIN dengan sintaks berikut:

Sintaks:
  (mulai transaksi | tran) [transaction_name] 

Implementasi ini sedikit berbeda dari pelaksanaan Oracle. (Sybase tidak memungkinkan Anda untuk menentukan pilihan HANYA BACA Namun.), Sybase tidak memungkinkan Anda untuk memberikan nama suatu transaksi, selama transaksi tersebut adalah terluar dari serangkaian transaksi bersarang.

Grup berikut laporan ini mengilustrasikan penggunaan transaksi nested menggunakan bahasa SQL yang Transact-Sybase:

INPUT:
  1> mulai new_account transaksi 
  2 "masukkan> NASABAH nilai-nilai (" Parsons Izetta "," 1285 Pineapple Highway, "Greenville", "AL" 32.854, 6) 
  3> jika ada (pilih * dari NASABAH mana Nama = "Izetta Parsons") 
  4> mulai 
  5> mulai transaksi 
  6 8 menyisipkan> SALDO nilai (1250,76, 1431,26,) 
  7> akhir 
  8> lain 
  9 rollback transaksi> 
  10> jika ada (pilih * dari SALDO mana account_id = 8) 
  11> mulai 
  12> mulai transaksi 
  13 6 menyisipkan> AKUN nilai (8,) 
  14> akhir 
  15> yang lain 
  16 rollback transaksi> 
  17> jika ada (pilih * dari AKUN mana 8 = account_id dan Customer_ID = 6) 
  18> melakukan transaksi 
  19> yang lain 
  20 rollback transaksi> 
  21> pergi 

Untuk saat ini, jangan khawatir tentang laporan TRANSAKSI ROLLBACK dan COMMIT TRANSAKSI. Aspek penting dari contoh ini adalah transaksi nested – atau transaksi dalam transaksi.

Perhatikan bahwa transaksi asli (new_account) dimulai pada baris 1. Setelah menyisipkan pertama, Anda memeriksa untuk memastikan INSERT itu dilaksanakan dengan baik. Transaksi lain dimulai pada baris 5. Ini transaksi dalam transaksi disebut transaksi bersarang.

database lain mendukung opsi AUTOCOMMIT. Pilihan ini dapat digunakan dengan perintah SET. Sebagai contoh:

  SET AUTOCOMMIT [ON | OFF] 

Secara default, ON SET AUTOCOMMIT perintah dijalankan pada saat startup. Ini memberitahu SQL untuk secara otomatis melakukan semua pernyataan Anda mengeksekusi. Jika Anda tidak ingin perintah ini akan otomatis dijalankan, atur pilihan AUTOCOMMIT untuk off:

  AUTOCOMMIT SET OFF 

CATATAN: Periksa’s database sistem dokumentasi Anda untuk menentukan bagaimana Anda akan memulai transaksi.


Penyelesaian Transaksi sebuah

Sintaks Oracle untuk mengakhiri transaksi adalah sebagai berikut:

Sintaks:
  COMMIT [KERJA] 
  [COMMENT 'teks' 
  | FORCE '' [teks, integer]]; 

Berikut adalah perintah yang sama menggunakan sintaks Sybase:

Sintaks:
  COMMIT (TRANSAKSI | TRAN | KERJA) (TRANSACTION_NAME) 

Perintah COMMIT menyimpan semua perubahan yang dibuat selama transaksi. Pelaksana pernyataan COMMIT sebelum memulai transaksi memastikan bahwa tidak ada kesalahan dibuat dan tidak ada transaksi sebelumnya yang tersisa menggantung.

Contoh berikut memverifikasi bahwa perintah COMMIT dapat digunakan dengan sendirinya tanpa menerima kesalahan kembali dari sistem database.

INPUT:
  SQL> COMMIT; 
  SQL> SET TRANSAKSI READ ONLY; 
  SQL> SELECT * FROM PELANGGAN 
       Bill Turner WHERE NAMA = '; 

  --- --- Apakah Operasi Lainnya 

  SQL> COMMIT, 

Sebuah SQL menggunakan Oracle laporan COMMIT akan terlihat seperti ini:

INPUT:
  SQL> SET TRANSAKSI; 
  SQL INSERT> INTO PELANGGAN VALUES 
       ("John MacDowell", "2000 Lake Road menyergap", "Chicago", "IL", 42854, 7); 
  SQL> COMMIT; 
  SQL> SELECT * FROM PELANGGAN; 

Tabel PELANGGAN.

Nama Alamat Kota Negara Zip Customer_ID
Bill Turner 725 N. Deal Parkway Washington DC 20.085 1
John Keith 1220 Dr Via De Luna Jacksonville FL 33.581 2
Maria Rosenberg 482 Wannamaker Avenue Williamsburg VA 23.478 3
David Blanken 405 N. Highway Davis Greenville SC 29.652 4
Rebecca Little 7.753 Lane Woods Houston TX 38.764 5
Izetta Parsons 1285 Pineapple Highway Greenville AL 32.854 6
John MacDowell 2000 terjang Lake Road Chicago IL 42.854 7

Sebuah SQL menggunakan Sybase laporan COMMIT akan terlihat seperti ini:

INPUT:
  1> mulai transaksi 
  2 memasukkan> ke dalam nilai-nilai NASABAH 
     ("John MacDowell", "2000 Lake Road menyerang", "Chicago", "IL", 42854, 7) 
  3> melakukan transaksi 
  4> pergi 
  1 * pilih> dari NASABAH 
  2> pergi 

Tabel PELANGGAN.

Nama Alamat Kota Negara Zip Customer_ID
Bill Turner 725 N. Deal Parkway Washington DC 20.085 1
John Keith 1220 Dr Via De Luna Jacksonville FL 33.581 2
Maria Rosenberg 482 Wannamaker Avenue Williamsburg VA 23.478 3
David Blanken 405 N. Highway Davis Greenville SC 29.652 4
Rebecca Little 7.753 Lane Woods Houston TX 38.764 5
Izetta Parsons 1285 Pineapple Highway Greenville AL 32.854 6
John MacDowell 2000 terjang Lake Road Chicago IL 42.854 7

Laporan sebelumnya mencapai hal yang sama seperti yang mereka lakukan dengan menggunakan sintaks Oracle7. Namun, dengan menempatkan perintah COMMIT segera setelah transaksi dimulai, Anda memastikan bahwa transaksi yang baru akan menjalankan dengan benar.


CATATAN: The COMMIT BEKERJA perintah melakukan operasi yang sama seperti perintah COMMIT (atau Sybase’s TRANSAKSI perintah COMMIT). Hal ini disediakan hanya untuk memenuhi sintaks ANSI SQL.


Ingat bahwa setiap perintah COMMIT harus sesuai dengan SET TRANSAKSI TRANSAKSI dilaksanakan sebelumnya atau perintah BEGIN. Catatan kesalahan yang Anda terima dengan pernyataan berikut:

Oracle SQL:

INPUT:
  SQL> INSERT INTO SALDO nilai (18.765,42, 19.073,06, 8); 
  SQL> COMMIT WORK; 

Sybase SQL:

INPUT:
  1> masukkan ke dalam nilai-nilai SALDO (18.765,42, 19.073,06, 8) 
  2> melakukan pekerjaan 

Membatalkan Transaksi

Sementara transaksi yang sedang berlangsung, beberapa jenis pengecekan error biasanya dilakukan untuk menentukan apakah itu berhasil mengeksekusi. Anda dapat membatalkan transaksi Anda bahkan setelah berhasil menyelesaikan dengan mengeluarkan pernyataan ROLLBACK, namun harus dikeluarkan sebelum COMMIT sebuah. Pernyataan ROLLBACK harus dijalankan dari dalam transaksi. Pernyataan gulungan transaksi ROLLBACK kembali ke awal, dalam kata lain, negara database dikembalikan untuk apa itu di transaksi yang awal. Sintaks untuk perintah ini menggunakan Oracle7 adalah sebagai berikut:

Sintaks:
  ROLLBACK [KERJA] 
  [ATAS [savepoint] SAVEPOINT 
  | FORCE "'] teks 

Seperti yang Anda lihat, perintah ini membuat penggunaan savepoint transaksi. Kami membahas teknik ini nanti.

SQL-pernyataan Transact’s ROLLBACK Sybase terlihat sangat mirip dengan perintah COMMIT:

Sintaks:
  (rollback transaksi | tran | kerja) 
    [Transaction_name | savepoint_name] 

Sebuah urutan perintah SQL Oracle akan terlihat seperti ini:

INPUT:
  SQL> SET TRANSAKSI; 
  SQL INSERT> INTO PELANGGAN VALUES 
      ("Bubba MacDowell", "2222 Way Danau Biru", "Austin", "TX", 39874, 8); 
  SQL> ROLLBACK; 
  SQL> SELECT * FROM PELANGGAN; 

Tabel PELANGGAN.

Nama Alamat Kota Negara Zip Customer_ID
Bill Turner 725 N. Deal Parkway Washington DC 20.085 1
John Keith 1220 Dr Via De Luna Jacksonville FL 33.581 2
Maria Rosenberg 482 Wannamaker Avenue Williamsburg VA 23.478 3
David Blanken 405 N. Highway Davis Greenville SC 29.652 4
Rebecca Little 7.753 Lane Woods Houston TX 38.764 5
Izetta Parsons 1285 Pineapple Highway Greenville AL 32.854 6
John MacDowell 2000 terjang Lake Road Chicago IL 42.854 7

Sebuah urutan perintah SQL Sybase akan terlihat seperti ini:

INPUT:
  1> mulai transaksi 
  2 memasukkan> ke dalam nilai-nilai NASABAH 
    ("Bubba MacDowell", "2222 Way Danau Biru", "Austin", "TX", 39874, 8) 
  3 rollback transaksi> 
  4> pergi 
  1 * SELECT> DARI PELANGGAN 
  2> pergi 

Tabel PELANGGAN.

Nama Alamat Kota Negara Zip Customer_ID
Bill Turner 725 N. Deal Parkway Washington DC 20.085 1
John Keith 1220 Dr Via De Luna Jacksonville FL 33.581 2
Maria Rosenberg 482 Wannamaker Avenue Williamsburg VA 23.478 3
David Blanken 405 N. Highway Davis Greenville SC 29.652 4
Rebecca Little 7.753 Lane Woods Houston TX 38.764 5
Izetta Parsons 1285 Pineapple Highway Greenville AL 32.854 6
John MacDowell 2000 terjang Lake Road Chicago IL 42.854 7

Seperti yang dapat Anda lihat, catatan baru tidak ditambahkan karena laporan ROLLBACK digulung masukkan kembali.

Misalkan Anda menulis aplikasi untuk antarmuka pengguna grafis, seperti Microsoft Windows. Anda memiliki kotak dialog yang query database dan memungkinkan pengguna untuk mengubah nilai.Jika pengguna memilih OK, database menyimpan perubahan. Jika pengguna memilih Cancel, perubahan tersebut dibatalkan. Jelas, situasi ini memberi Anda kesempatan untuk menggunakan transaksi.


CATATAN: Daftar kode berikut menggunakan Oracle SQL sintaks; pemberitahuan SQL> prompt dan nomor baris. Daftar berikutnya menggunakan sintaks SQL Sybase, yang tidak memiliki> SQL prompt.


Ketika kotak dialog dimuat, laporan SQL yang dijalankan:

INPUT:
  SQL> SET TRANSAKSI; 
  SQL> SELECT CUSTOMERS.NAME, BALANCES.CURR_BAL, BALANCES.ACCOUNT_ID 
    2 DARI PELANGGAN, SALDO 
    3 WHERE CUSTOMERS.NAME = "Rebecca Little" 
    4 DAN CUSTOMERS.CUSTOMER_ID = BALANCES.ACCOUNT_ID; 

Kotak dialog memungkinkan pengguna untuk mengubah saldo rekening koran, sehingga Anda perlu menyimpan nilai ini kembali ke database.

Ketika pengguna memilih OK, update akan berjalan.

INPUT:
  SQL> UPDATE SET SALDO CURR_BAL = 'baru-nilai' WHERE account_id = 6; 
  SQL> COMMIT; 

Ketika pengguna memilih Batal, pernyataan ROLLBACK dikeluarkan.

INPUT:
  SQL> ROLLBACK; 

Ketika kotak dialog dimuat menggunakan Sybase SQL, laporan SQL dijalankan:

INPUT:
  1> mulai transaksi 
  2 CUSTOMERS.Name pilih>, BALANCES.Curr_Bal, BALANCES.Account_ID 
  3> dari PELANGGAN, SALDO 
  4> mana CUSTOMERS.Name = "Rebecca Little" 
  5> dan CUSTOMERS.Customer_ID = BALANCES.Account_ID 
  6> pergi 

Kotak dialog memungkinkan pengguna untuk mengubah saldo rekening koran, sehingga Anda dapat menyimpan nilai ini kembali ke database.

Di sini lagi, ketika tombol OK dipilih, update akan berjalan.

INPUT:
  1 SALDO update> set Curr_BAL = 'baru-nilai' WHERE account_id = 6 
  2> melakukan transaksi 
  3> pergi 

Ketika pengguna memilih Batal, pernyataan ROLLBACK dikeluarkan.

INPUT:
  1 rollback transaksi> 
  2> pergi 

Pernyataan ROLLBACK membatalkan seluruh transaksi. Ketika Anda transaksi bersarang, laporan sepenuhnya ROLLBACK membatalkan semua transaksi, berguling mereka kembali ke awal transaksi terluar.

Jika tidak ada transaksi yang sedang aktif, mengeluarkan pernyataan ROLLBACK atau perintah COMMIT tidak berpengaruh pada sistem database. (Bayangkan mereka sebagai perintah mati dengan tidak ada tujuan.)

Setelah pernyataan COMMIT telah dieksekusi, semua tindakan dengan transaksi dieksekusi. Pada titik ini terlalu terlambat untuk memutar kembali transaksi.

Menggunakan savepoint Transaksi

Rolling kembali transaksi membatalkan seluruh transaksi. Tapi anggaplah Anda ingin “semicommit” tengah Anda transaksi melalui laporan tersebut. Kedua Sybase dan Oracle SQL memungkinkan Anda untuk menyimpan transaksi dengan sebuah savepoint. Sejak saat itu, jika ROLLBACK adalah dikeluarkan, transaksi yang terguling kembali ke savepoint yang disimpan. Semua pernyataan yang dieksekusi sampai ke titik dari savepoint berada. Sintaks untuk menciptakan savepoint menggunakan Oracle SQL adalah sebagai berikut:

Sintaks:
  SAVEPOINT savepoint_name; 

sintaks Sybase SQL Server untuk menciptakan savepoint adalah sebagai berikut:

Sintaks:
  savepoint_name menyimpan transaksi 

Contoh berikut ini menggunakan sintaks SQL Oracle.

INPUT:
  SQL> SET TRANSAKSI; 
  UPDATE SQL> SET SALDO CURR_BAL = 25000 WHERE 5 = account_id; 
  SQL> SAVEPOINT save_it; 
  SQL> DELETE FROM WHERE SALDO 5 = account_id; 
  SQL> ROLLBACK TO save_it SAVEPOINT; 
  SQL> COMMIT; 
  SQL> * SELECT FROM SALDO; 

Tabel SALDO.

Average_Bal Curr_Bal Account_id
1.298,53 854,22 1
5.427,22 6.015,96 2
211,25 190,01 3
73,79 25,87 4
1.285,90 25.000,00 5
1.234,56 1.543,67 6
345,25 348,03 7
1.250,76 1.431,26 8

Contoh ini menggunakan sintaks SQL Sybase:

INPUT:
  1> mulai transaksi 
  2 SALDO update> set Curr_Bal = 25.000 mana account_id = 5 
  3> menyimpan save_it transaksi 
  4> menghapus dari SALDO mana account_id = 5 
  5> transaksi rollback save_it 
  6> melakukan transaksi 
  7> pergi 
  1 * pilih> dari SALDO 
  2> pergi 

Tabel SALDO.

Average_Bal Curr_Bal Account_id
1.298,53 854,22 1
5.427,22 6.015,96 2
211,25 190,01 3
73,79 25,87 4
1.285,90 25.000,00 5
1.234,56 1.543,67 6
345,25 348,03 7
1.250,76 1.431,26 8

Contoh sebelumnya menciptakan savepoint disebut SAVE_IT. Versi update dibuat ke database yang mengubah nilai kolom dari tabel CURR_BAL SALDO. Anda kemudian disimpan perubahan ini sebagai sebuah savepoint. Berikut ini menyimpan, Anda dieksekusi pernyataan DELETE, tetapi Anda berguling transaksi kembali ke savepoint segera sesudahnya. Kemudian Anda dieksekusiCOMMIT TRANSAKSI, yang melakukan semua perintah sampai dengan savepoint tersebut. Apakah Anda seorang TRANSAKSI ROLLBACK dijalankan setelah perintah savepoint_name TRANSAKSI ROLLBACK, seluruh transaksi akan telah diperpanjang kembali dan tidak ada perubahan yang akan dilakukan.

Contoh ini menggunakan sintaks SQL Oracle:

INPUT:
  SQL> SET TRANSAKSI; 
  UPDATE SQL> SET SALDO CURR_BAL = 25000 WHERE 5 = account_id; 
  SQL> SAVEPOINT save_it; 
  SQL> DELETE FROM WHERE SALDO 5 = account_id; 
  SQL> ROLLBACK TO save_it SAVEPOINT; 
  SQL> ROLLBACK; 
  SQL> SELECT * FROM SALDO; 

Tabel SALDO.

Average_Bal Curr_Bal Account_id
1.298,53 854,22 1
5.427,22 6.015,96 2
211,25 190,01 3
73,79 25,87 4
1.285,90 1.473,75 5
1.234,56 1.543,67 6
345,25 348,03 7
1.250,76 1.431,26 8

Contoh ini menggunakan sintaks SQL Sybase:

INPUT:
  1> mulai transaksi 
  2 SALDO update> set Curr_Bal = 25.000 mana account_id = 5 
  3> menyimpan save_it transaksi 
  4> menghapus dari SALDO mana account_id = 5 
  5> transaksi rollback save_it 
  6 rollback transaksi> 
  7> pergi 
  1 * pilih> dari SALDO 
  2> pergi 

Tabel SALDO.

Average_Bal Curr_Bal Account_id
1.298,53 854,22 1
5.427,22 6.015,96 2
211,25 190,01 3
73,79 25,87 4
1.285,90 1.473,75 5
1.234,56 1.543,67 6
345,25 348,03 7
1.250,76 1.431,26 8

Ringkasan

Sebuah transaksi dapat didefinisikan sebagai suatu unit kerja yang terorganisir. transaksi biasanya melaksanakan serangkaian operasi yang dijalankan tergantung pada operasi sebelumnya. Jika salah satu operasi ini tidak dilaksanakan dengan baik atau jika data diubah untuk beberapa alasan, sisa pekerjaan dalam suatu transaksi harus dibatalkan. Jika tidak, jika semua laporan dijalankan dengan benar, transaksi pekerjaan harus disimpan.

Proses membatalkan transaksi rollback satu disebut. Proses menyimpan karya seorang dijalankan dengan benar transaksi disebut komit. sintaks SQL mendukung kedua proses melalui sintaks mirip dengan pernyataan berikut dua:

Sintaks:
  MULAI TRANSAKSI 
       Pernyataan 1 
       pernyataan 2 
       pernyataan 3 
  ROLLBACK TRANSAKSI 

atau

Sintaks:
  MULAI TRANSAKSI 
       Pernyataan 1 
       pernyataan 2 
       pernyataan 3 
  COMMIT TRANSAKSI
Sumber ; http://www.webbasedprogramming.com

    SQL Membuat tampilan

    Tinggalkan komentar

    Tujuan

    Hari ini kita mulai mencakup topik yang mungkin baru bahkan untuk programmer atau pengguna database yang telah memiliki beberapa hubungan ke SQL. Hari 1 sampai 8 mencakup hampir semua materi pengantar Anda butuhkan untuk memulai menggunakan SQL dan database relasional Menciptakan. Hari ke-9, “dan Memanipulasi Tabel,” telah dikhususkan untuk diskusi tentang desain database, pembuatan tabel, dan data manipulasi perintah lain. Ciri umum dari obyek yang dibahas sejauh – database, tabel, catatan, dan bidang – adalah bahwa mereka semua benda-benda fisik terletak pada hard disk. Hari ini pergeseran fokus ke dua fitur dari SQL yang memungkinkan Anda untuk melihat atau memberikan data dalam format yang berbeda dari yang terlihat pada disk. Kedua fitur tampilan dan indeks. Pada akhir hari ini, Anda akan tahu yang berikut:

    • Bagaimana membedakan antara indeks dan dilihat
    • Cara membuat pemandangan
    • Cara membuat indeks
    • Bagaimana mengubah data menggunakan dilihat
    • Apa indeks lakukan

    Sebuah tampilan sering disebut sebagai tabel virtual. Tampilan diciptakan dengan menggunakan pernyataan CREATE VIEW. Setelah melihat telah dibuat, Anda dapat menggunakan perintah berikut untuk merujuk SQL untuk melihat bahwa:

    • SELECT
    • INSERT
    • INPUT
    • UPDATE
    • HAPUS

    Sebuah indeks adalah cara lain penyajian data berbeda dari yang terlihat pada disk. Khusus jenis indeks menyusun ulang fisik lokasi catatan di dalam tabel. Indeks dapat dibuat pada kolom dalam tabel atau pada kombinasi kolom dalam tabel. Ketika indeks digunakan, data ini disajikan untuk pengguna dalam urutan disortir, yang Anda dapat mengontrol dengan pernyataan CREATE INDEX.Anda biasanya bisa mendapatkan perbaikan kinerja substansial oleh pengindeksan pada bidang yang benar, terutama bidang yang sedang bergabung antara tabel.


    CATATAN: Tampilan dan indeks adalah dua benda yang sama sekali berbeda, namun mereka memiliki satu kesamaan: Mereka berdua terkait dengan tabel dalam database. Meskipun objek asosiasi masing-masing dengan meja yang unik, mereka berdua meningkatkan meja, sehingga pembukaan fitur canggih seperti data presorted dan standar permintaan.



    CATATAN: Kami menggunakan Pribadi Oracle7 untuk menghasilkan’s contoh hari ini. Silakan lihat dokumentasi untuk pelaksanaan SQL spesifik untuk setiap perbedaan kecil dalam sintaks.


    Menggunakan Tampilan

    Anda dapat menggunakan pandangan, atau tabel virtual, untuk membungkus permintaan kompleks. Setelah melihat pada satu set data telah dibuat, Anda dapat memperlakukan bahwa pandangan seperti meja lain. Namun, pembatasan khusus ditempatkan pada memodifikasi data dalam pandangan. Ketika data dalam tabel perubahan, apa yang Anda lihat ketika Anda query tampilan juga berubah. Tampilan tidak mengambil ruang fisik dalam database seperti tabel lakukan.

    Sintaks untuk pernyataan CREATE VIEW adalah

    Sintaks:
      CREATE VIEW <view_name> [(column1, column2 ...)] AS 
      SELECT <table_name column_names> 
      DARI <table_name> 
    

    Seperti biasa, sintaks ini mungkin tidak jelas pada pandangan pertama, tapi itu bahan ini berisi banyak contoh yang menggambarkan penggunaan dan manfaat dari pandangan. Perintah ini memberitahu SQL untuk membuat tampilan (dengan nama pilihan Anda) yang terdiri dari kolom (dengan nama pilihan Anda jika Anda suka). Sebuah pernyataan SQL SELECT menentukan bidang dalam kolom dan jenis data mereka. Ya, ini adalah pernyataan SELECT yang sama yang telah digunakan berulang kali untuk hari-hari terakhir sembilan.

    Sebelum Anda dapat melakukan sesuatu yang berguna dengan dilihat, Anda perlu mengisi database BILLS dengan data yang lebih sedikit. Jangan khawatir jika Anda punya senang dan memanfaatkan pengetahuan baru ditemukan Anda perintah DROP DATABASE. Anda hanya dapat kembali menciptakannya. (Lihat Tabel 10.1, 10.2, dan 10,3 untuk data sampel.)

    INPUTOUTPUT:
      SQL> BILLS membuat database; 
    
      Pernyataan diproses.
    INPUTOUTPUT:
      SQL> BILLS membuat tabel ( 
        2 NAME CHAR (30) NOT NULL, 
        3 JUMLAH NOMOR, 
        4 account_id NUMBER NOT NULL); 
    
      Tabel dibuat.
    INPUTOUTPUT:
      SQL> BANK_ACCOUNTS membuat tabel ( 
        2 NOMOR account_id NOT NULL, 
        3 JENIS CHAR (30), 
        4 NERACA NOMOR, 
        5 BANK CHAR (30)); 
    
      Tabel dibuat.
    INPUTOUTPUT:
     SQL> membuat tabel PERUSAHAAN (2 NAMA CHAR (30) NOT NULL, 3 ALAMAT CHAR (50), 4 CITY CHAR (30), 5 NEGARA CHAR (2)); Tabel dibuat.

    Tabel 10.1. Contoh data untuk tabel BILLS.

    Nama Jumlah Account_id
    Telepon Perusahaan 125 1
    Power Company 75 1
    Rekam Club 25 2
    Software Perusahaan 250 1
    Perusahaan TV kabel 35 3
    Joe Istana Mobil 350 5
    SC Student Loan 200 6
    Air Florida Perusahaan 20 1
    UO-Kami Perusahaan Asuransi 125 5
    Debitur Kartu Kredit 35 4

    Tabel 10.2. Contoh data untuk tabel BANK_ACCOUNTS.

    Account_id Jenis Keseimbangan Bank
    1 Memeriksa 500 Pertama Federal
    2 Pasar uang 1200 Pertama Investor
    3 Memeriksa 90 Credit Union
    4 Tabungan 400 First Federal
    5 Memeriksa 2500 Kedua Reksa
    6 Bisnis 4.500 Kesetiaan

    Tabel 10.3. Contoh data untuk tabel PERUSAHAAN.

    Nama Alamat Kota Negara
    Telepon Perusahaan 111 1 Street Atlanta GA
    Power Company 222 2 Street Jacksonville FL
    Rekam Club 333 3 Avenue Los Angeles
    Software Perusahaan 444 4 Drive San Francisco
    Perusahaan TV kabel 555 5 Drive Austin TX
    Joe Istana Mobil Pemerintah 1000. Blvd Miami FL
    SC Student Loan 25 College Blvd SC
    Air Florida Perusahaan 1883 Hwy 87 Navarre FL
    UO-Us Asuransi 295 Beltline Hwy Macon GA
    Debitur Kartu Kredit 115 2 Avenue Newark NJ

    Sekarang bahwa Anda telah berhasil menggunakan CREATE DATABASE, CREATE TABLE, dan INSERT perintah untuk memasukkan semua informasi ini, Anda siap untuk diskusi mendalam dalam berpendapat.

    J Dilihat Wikipedia

    Mari kita mulai dengan paling sederhana dari semua pandangan. Misalkan, untuk beberapa alasan yang tidak diketahui, Anda ingin membuat tampilan di atas meja BILLS yang terlihat identik dengan meja tapi memiliki nama yang berbeda. (Kami menyebutnya HUTANG.) Berikut pernyataan:

    INPUT:
      SQL> CREATE VIEW AS HUTANG 
           SELECT * FROM BILLS; 
    

    Untuk mengkonfirmasi bahwa operasi ini melakukan apa yang seharusnya, Anda dapat memperlakukan melihat seperti meja:

    INPUT / OUTPUT:
      SQL> SELECT * FROM HUTANG; 
    
      JUMLAH NAMA account_id 
      Telepon Perusahaan 125 1 
      Perusahaan Power 75 1 
      Rekam Club 25 2 
      Perusahaan perangkat lunak 250 1 
      Perusahaan TV kabel 35 3 
      Istana Mobil Joe 350 5 
      Student Loan SC 200 6 
      Perusahaan Air Florida 20 1 
      UO-Kami Perusahaan Asuransi 125 5 
      Kartu Kredit Debitor 35 4 
      10 baris yang dipilih. 
    

    Anda bahkan dapat membuat pemandangan baru dari tampilan yang ada. Hati-hati saat membuat pandangan pandangan. Meskipun praktek ini dapat diterima, hal itu mempersulit pemeliharaan.Misalnya Anda memiliki tampilan tiga level di bawah dari meja, seperti gambaran tentang pandangan pandangan tabel. Apa yang Anda pikir akan terjadi jika pandangan pertama di atas meja akan dijatuhkan? Lain Kedua masih dilihat ada, tapi mereka akan sia-sia karena mereka mendapatkan sebagian informasi mereka dari pandangan pertama. Ingat, setelah melihat telah diciptakan, berfungsi sebagai meja virtual.

    INPUT:
      SQL> CREATE VIEW AS CREDITCARD_DEBTS 
        2 SELECT * FROM HUTANG 
        3 WHERE 4 = account_id; 
      SQL> SELECT * FROM CREDITCARD_DEBTS;
    OUTPUT:
     NAMA BESARNYA account_id Debitor Kredit Kartu 35 4 1 baris yang dipilih.

    The CREATE VIEW juga memungkinkan Anda untuk memilih kolom individu dari meja dan menempatkannya di tampilan. Memilih Contoh berikut NAMA, dan bidang meja NEGARA dari PERUSAHAAN.

    INPUT:
      SQL> CREATE VIEW COMPANY_INFO (NAMA, NEGARA) SEBAGAI 
        2 SELECT * FROM PERUSAHAAN; 
      SQL> SELECT * FROM COMPANY_INFO;
    OUTPUT:
      NAMA NEGARA 
      Telepon Perusahaan GA 
      Perusahaan Power FL 
      Rekam Club CA 
      Perusahaan software CA 
      Perusahaan TV kabel TX 
      Joe FL Istana Mobil 
      Student Loan SC SC 
      Perusahaan Air Florida FL 
      UO-Kami Perusahaan Asuransi GA 
      Kartu Kredit Debitor NJ 
    
      10 baris yang dipilih. 
    

    CATATAN: Pengguna dapat membuat pemandangan untuk permintaan data tertentu. Katakanlah Anda memiliki sebuah meja dengan 50 kolom dan ratusan ribu baris, tetapi Anda perlu melihat data dalam hanya 2 kolom. Anda dapat membuat tampilan pada kolom kedua, dan kemudian dengan query dari tampilan ini, Anda akan melihat perbedaan besar dalam jumlah waktu yang dibutuhkan untuk hasil pencarian Anda akan dikembalikan.


    Mengganti Nama Kolom

    Tampilan menyederhanakan representasi data. Selain penamaan melihat, sintaks SQL untuk pernyataan CREATE VIEW memungkinkan Anda untuk mengubah nama kolom yang dipilih.Pertimbangkan contoh sebelumnya sedikit lebih erat. Bagaimana jika Anda ingin menggabungkan ALAMAT, KOTA, dan bidang NEGARA dari meja PERUSAHAAN untuk mencetak mereka pada amplop?Contoh berikut menggambarkan hal ini. Contoh ini menggunakan operator + SQL untuk menggabungkan bidang alamat ke satu alamat lama dengan menggabungkan spasi dan koma dengan data karakter.

    INPUT:
      SQL> CREATE VIEW BATAS (PERUSAHAAN, MAILING_ADDRESS) SEBAGAI 
        2 SELECT NAMA, ALAMAT + "" + KOTA "+," + NEGARA 
        3 DARI PERUSAHAAN; 
      SQL> SELECT * FROM BATAS;
    OUTPUT:
      PERUSAHAAN MAILING_ADDRESS 
      Telepon Perusahaan 111 1 Street Atlanta, GA 
      Perusahaan Power 222 2 Street Jacksonville, FL 
      Rekam Club 3 333 Los Angeles Avenue, CA 
      Perusahaan perangkat lunak 444 San Francisco 4 Drive, CA 
      Perusahaan TV kabel 555 Austin Drive 5, TX 
      Joe Istana Mobil 1.000 Pemerintah.  Blvd Miami, FL 
      Student Loan College SC 25 Blvd.  Columbia, SC 
      Perusahaan Air Florida 1883 Hwy.  87 Navarre, FL 
      UO-Kami Perusahaan Asuransi Beltline 295 Hwy.  Macon, GA 
      Kartu Kredit Debitor 115 2 Avenue Newark, NJ 
    
      10 baris yang dipilih. 
    
    ANALISIS:

    Sintaks SQL mengharuskan Anda untuk menyertakan nama field’s virtual virtual setiap kali melihat lapangan dibuat menggunakan perhitungan atau fungsi SQL. Cedure-pro ini masuk akal karena Anda tidak ingin melihat’s kolom nama menjadi COUNT (*) atau AVG (PEMBAYARAN).


    CATATAN: Periksa pelaksanaan Anda untuk penggunaan operator +.


    SQL Lihat Pengolahan

    Tampilan dapat mewakili data di dalam tabel dalam cara yang lebih mudah dari apa yang sebenarnya yang ada di meja struktur database. Tampilan juga bisa sangat nyaman saat melakukan query beberapa kompleks dalam serangkaian (seperti dalam prosedur disimpan atau program aplikasi). Untuk memperkuat pemahaman Anda pandang dan pernyataan SELECT, bagian berikutnya membahas cara proses SQL query terhadap view. Misalnya Anda memiliki sebuah query yang sering terjadi, misalnya, Anda secara rutin bergabung dengan meja BILLS dengan tabelBANK_ACCOUNTS untuk mengambil informasi mengenai pembayaran Anda.

    INPUT:
     SQL SELECT BILLS.NAME>, BILLS.AMOUNT, BANK_ACCOUNTS.BALANCE, 2 BANK_ACCOUNTS.BANK DARI BILLS, BANK_ACCOUNTS 3 WHERE BILLS.ACCOUNT_ID = BANK_ACCOUNTS.ACCOUNT_ID;
    OUTPUT:
      BILLS.NAME BANK_ACCOUNTS.BALANCE BANK_ACCOUNTS.BANK BILLS.AMOUNT 
      Telepon 125 500 Pertama Perusahaan Federal 
      Power Perusahaan Federal Pertama 75 500 
      Rekam Club Investor Pertama 1200 25's 
      Software 250 500 Pertama Perusahaan Federal 
      Perusahaan TV kabel 35 90 Credit Union 
      Joe Istana Mobil Kedua Reksa 350 2500 
      SC Student Loan Fidelity 200 4500 
      Perusahaan Air Florida 20 500 Pertama Federal 
      UO-Kami Perusahaan Asuransi Reksa Kedua 125 2500 
    
      9 baris yang dipilih. 
    

    Anda dapat mengubah proses ini menjadi tampilan dengan menggunakan pernyataan berikut:

    INPUT / OUTPUT:
      SQL> CREATE VIEW BILLS_DUE (NAMA, JUMLAH, ACCT_BALANCE, BANK) SEBAGAI 
        2 SELECT BILLS.NAME, BILLS.AMOUNT, BANK_ACCOUNTS.BALANCE, 
        3 BANK_ACCOUNTS.BANK DARI BILLS, BANK_ACCOUNTS 
        4 WHERE BILLS.ACCOUNT_ID = BANK_ACCOUNTS.ACCOUNT_ID; 
    
      Lihat dibuat. 
    

    Jika Anda tanya tampilan BILLS_DUE menggunakan beberapa kondisi, pernyataan tersebut akan terlihat seperti ini:

    INPUT / OUTPUT:
      SQL> SELECT * FROM BILLS_DUE 
        2 WHERE ACCT_BALANCE> 500; 
    
      NAMA BANK JUMLAH ACCT_BALANCE 
      Rekor Klub Investor Pertama 1200 25's 
      Joe Istana Mobil Kedua Reksa 350 2500 
      SC Student Loan Fidelity 200 4500 
      UO-Us Perusahaan Asuransi Reksa Kedua 125 2500 
    
      4 baris yang dipilih. 
    
    ANALISIS:

    SQL menggunakan beberapa langkah untuk memproses laporan sebelumnya. Karena BILLS_DUE adalah pandangan, bukan meja aktual, SQL pertama mencari meja bernama BILLS_DUE dan menemukan apa-apa. SQL prosesor mungkin akan (tergantung pada apa yang sistem database yang Anda gunakan) untuk mengetahui dari meja BILLS_DUE adalah sistem yang melihat. Hal ini kemudian akan menggunakan tampilan rencananya untuk membangun query berikut:

      SQL> SELECT BILLS.NAME, BILLS.AMOUNT, BANK_ACCOUNTS.BALANCE, 
        2 BANK_ACCOUNTS.BANK DARI BILLS, BANK_ACCOUNTS 
        3 WHERE BILLS.ACCOUNT_ID = BANK_ACCOUNTS.ACCOUNT_ID 
        4 DAN BANK_ACCOUNTS.BALANCE> 500; 
    

    Contoh 10.1

    Buatlah sebuah tampilan yang menunjukkan semua negara yang sedang tagihan dikirim. Juga menampilkan total jumlah uang dan jumlah tagihan yang dikirim ke masing-masing negara.

    Pertama-tama, Anda tahu bahwa CREATE VIEW bagian dari pernyataan tersebut akan terlihat seperti ini:

      CREATE VIEW CONTOH (NEGARA, TOTAL_BILLS, TOTAL_AMOUNT) SEBAGAI ... 
    

    Sekarang Anda harus menentukan apa yang query SELECT akan terlihat seperti. Anda tahu bahwa Anda ingin memilih bidang NEGERI pertama menggunakan sintaks SELECT berbedaberdasarkan kebutuhan untuk menampilkan tagihan negara-negara yang sedang dikirim. Sebagai contoh:

    INPUT:
      SQL> SELECT berbeda NEGARA DARI PERUSAHAAN;
    OUTPUT:
      NEGARA 
      GA 
      FL 
      CA 
      TX 
      SC 
      NJ 
    
      6 baris yang dipilih. 
    

    Selain memilih bidang NEGERI, Anda perlu total jumlah pembayaran dikirim ke NEGARA. Oleh karena itu, Anda perlu untuk bergabung dengan meja BILLS dan meja PERUSAHAAN.

    INPUT / OUTPUT:
      SQL SELECT COMPANY.STATE berbeda>, COUNT (BILLS. *) DARI BILLS, PERUSAHAAN 
        2 GROUP BY COMPANY.STATE 
        3 HAVING BILLS.NAME = COMPANY.NAME; 
    
      NEGARA COUNT (BILLS. *) 
      GA 2 
      FL 3 
      CA 2 
      TX 1 
      SC 1 
      NJ 1 
    
      6 baris yang dipilih. 
    

    Sekarang bahwa Anda telah berhasil kembali dua pertiga hasil yang diinginkan, Anda dapat menambahkan nilai pengembalian yang diperlukan akhir. Menggunakan fungsi SUM untuk total jumlah uang yang dikirim ke masing-masing negara.

    INPUT / OUTPUT:
      SQL> SELECT COMPANY.STATE berbeda, COUNT (BILLS.NAME), SUM (BILLS.AMOUNT) 
        2 DARI BILLS, PERUSAHAAN 
        3 GROUP BY COMPANY.STATE 
        4 HAVING BILLS.NAME = COMPANY.NAME; 
    
      NEGARA COUNT (BILLS. *) SUM (BILLS.AMOUNT) 
      GA 2 250 
      FL 3 445 
      CA 2 275 
      TX 1 35 
      SC 1 200 
      NJ 1 35 
    
      6 baris yang dipilih. 
    

    Sebagai langkah terakhir, Anda dapat menggabungkan pernyataan SELECT dengan CREATE VIEW pernyataan yang dibuat pada awal proyek ini:

    INPUT / OUTPUT:
      SQL> CREATE VIEW CONTOH (NEGARA, TOTAL_BILLS, TOTAL_AMOUNT) SEBAGAI 
        2 COMPANY.STATE berbeda SELECT, COUNT (BILLS.NAME), SUM (BILLS.AMOUNT) 
        3 DARI BILLS, PERUSAHAAN 
        4 GROUP BY COMPANY.STATE 
        5 HAVING BILLS.NAME = COMPANY.NAME; 
    
      Lihat dibuat. 
    
    INPUT / OUTPUT:
      SQL> * SELECT DARI CONTOH; 
    
      NEGARA TOTAL_BILLS TOTAL_AMOUNT 
      GA 2 250 
      FL 3 445 
      CA 2 275 
      TX 1 35 
      SC 1 200 
      NJ 1 35 
    
      6 baris yang dipilih. 
    

    Contoh sebelumnya menunjukkan Anda bagaimana merencanakan pernyataan CREATE VIEW dan laporan SELECT. Kode ini tes laporan SELECT untuk melihat apakah mereka akan menghasilkan hasil yang tepat dan kemudian menggabungkan laporan untuk membuat tampilan.

    Contoh 10,2

    Asumsikan bahwa kreditor Anda mengenakan biaya layanan 10 persen untuk semua akhir pembayaran, dan sayangnya Anda terlambat pada segala bulan ini. Anda ingin melihat tagihan akhir ini seiring dengan jenis rekening pembayaran berasal dari.

    Ini bergabung sangatlah mudah. (Anda tidak perlu menggunakan hal seperti COUNT atau SUM Namun.), Anda akan menemukan salah satu keuntungan utama menggunakan pandangan. Anda dapat menambahkan 10 persen service charge dan menampilkannya sebagai sebuah bidang dalam melihat. Sejak saat itu, Anda dapat memilih catatan dari melihat dan telah memiliki jumlah total dihitung untuk Anda. Pernyataan tersebut akan terlihat seperti ini:

    INPUT:
      SQL> CREATE VIEW LATE_PAYMENT (NAMA, NEW_TOTAL, ACCOUNT_TYPE) SEBAGAI 
        2 SELECT BILLS.NAME, * BILLS.AMOUNT 1.10, BANK_ACCOUNTS.TYPE 
        3 DARI BILLS, BANK_ACCOUNTS 
        4 WHERE BILLS.ACCOUNT_ID = BANK_ACCOUNTS.ACCOUNT_ID;
    OUTPUT:
      Lihat dibuat.
    INPUT / OUTPUT:
     SQL> * SELECT FROM LATE_PAYMENT; NAMA Perusahaan NEW_TOTAL Telepon ACCOUNT_TYPE 137,50 Memeriksa Power Perusahaan 82,50 Memeriksa Rekam Klub 27,50 Pasar Uang Perusahaan Software 275 Memeriksa kabel Perusahaan TV Joe Mobil Palace 38,50 Memeriksa 385 Memeriksa Pinjaman Mahasiswa SC 220 Bisnis Florida Perusahaan Air 22 Memeriksa UO-Us 137,50 Perusahaan Asuransi Bisnis Kartu Kredit Debitor 38,50 Tabungan 10 baris yang dipilih.

    Menggunakan pembatasan SELECT

    SQL pembatasan tempat-tempat tertentu dengan menggunakan perintah SELECT untuk merumuskan melihat. Dua mematuhi peraturan berlaku pada saat menggunakan SELECT:

    • Anda tidak dapat menggunakan operator UNION.
    • Anda tidak dapat menggunakan klausa ORDER BY. Namun, Anda dapat menggunakan klausa GROUP BY di maksud untuk melakukan fungsi yang sama seperti klausa ORDER BY.

    Memodifikasi Data di Lihat

    Seperti yang telah Anda pelajari, dengan membuat pandangan pada satu atau lebih tabel fisik dalam database, Anda dapat membuat tabel virtual untuk digunakan di seluruh skrip SQL atau aplikasi database. Setelah melihat telah dibuat dengan menggunakan CREATE VIEW ... SELECT pernyataan, Anda dapat memperbarui, memasukkan, atau menghapus tampilan data dengan menggunakan UPDATE, INSERT, dan DELETE perintah Anda pelajari tentang pada Hari 8, “Memanipulasi Data.”

    Kami membahas pembatasan memodifikasi tampilan’s data yang lebih rinci nanti. Kelompok berikutnya menggambarkan contoh bagaimana untuk memanipulasi data yang ada di tampilan.

    Untuk melanjutkan pekerjaan yang Anda lakukan pada Contoh 10.2, update tabel BILLS untuk mencerminkan bahwa 10 persen muatan malang terlambat.

    INPUT / OUTPUT:
      SQL> CREATE VIEW AS LATE_PAYMENT 
        2 SELECT * FROM BILLS; 
    
      Lihat dibuat. 
    
      SQL> UPDATE LATE_PAYMENT 
        2 SET JUMLAH = JUMLAH * 1,10; 
    
      1 baris diperbarui. 
    
      SQL> SELECT * FROM LATE_PAYMENT; 
    
      NAMA NEW_TOTAL account_id 
      Telepon Perusahaan 137,50 1 
      Power Perusahaan 82,50 1 
      Rekam Club 27,50 2 
      Perusahaan perangkat lunak 275 1 
      Perusahaan TV kabel 38,50 3 
      Istana Mobil Joe 385 5 
      Student Loan SC 220 6 
      Perusahaan Air Florida 22 1 
      UO-Kami Perusahaan Asuransi 5 137,50 
      Kartu Kredit Debitor 38,50 4 
    
      10 baris yang dipilih. 
    

    Untuk memastikan bahwa benar-benar diperbarui UPDATE tabel yang mendasari, BILLS, query tabel BILLS:

    INPUT / OUTPUT:
      SQL> SELECT * FROM BILLS; 
    
      NAMA NEW_TOTAL account_id 
      Telepon Perusahaan 137,50 1 
      Power Perusahaan 82,50 1 
      Rekam Club 27,50 2 
      Perusahaan perangkat lunak 275 1 
      Perusahaan TV kabel 38,50 3 
      Istana Mobil Joe 385 5 
      Student Loan SC 220 6 
      Perusahaan Air Florida 22 1 
      UO-Kami Perusahaan Asuransi 5 137,50 
      Kartu Kredit Debitor 38,50 4 
    
      10 baris yang dipilih. 
    

    Sekarang menghapus baris dari melihat:

    INPUT / OUTPUT:
      SQL> HAPUS DARI LATE_PAYMENT 
        2 WHERE 4 = account_id; 
    
      1 baris dihapus. 
    
      SQL> SELECT * FROM LATE_PAYMENT; 
    
      NAMA NEW_TOTAL account_id 
      Telepon Perusahaan 1 137,50 
      Power Perusahaan 82,50 1 
      Rekam Club 27,50 2 
      Perusahaan perangkat lunak 275 1 
      Cable TV 3 Perusahaan 38,50 
      Istana Mobil Joe 385 5 
      SC Student Loan 220 6 
      Perusahaan Air Florida 22 1 
      UO-Kami Perusahaan Asuransi 5 137,50 
    
      9 baris yang dipilih. 
    

    Langkah terakhir adalah untuk menguji fungsi UPDATE. Untuk semua tagihan yang telah NEW_TOTAL yang lebih besar dari 100, menambahkan 10 tambahan.

    INPUT / OUTPUT:
      SQL> UPDATE LATE_PAYMENT 
        2 SET NEW_TOTAL = + NEW_TOTAL 10 
        3 WHERE NEW_TOTAL> 100; 
    
      9 baris diperbarui. 
    
      SQL> SELECT * FROM LATE_PAYMENT; 
    
      NAMA NEW_TOTAL account_id 
      Telepon Perusahaan 147,50 1 
      Power Perusahaan 82,50 1 
      Rekam Club 27,50 2 
      Perusahaan perangkat lunak 285 1 
      Perusahaan TV kabel 38,50 3 
      Istana Mobil Joe 395 5 
      Student Loan SC 230 6 
      Perusahaan Air Florida 22 1 
      UO-Kami Perusahaan Asuransi 5 147,50 
    
      9 baris yang dipilih. 
    

    Masalah dengan Menggunakan Data Memodifikasi Tampilan

    Karena apa yang Anda lihat melalui melihat dapat beberapa set sekelompok tabel, memodifikasi data dalam tabel yang mendasarinya tidak selalu langsung seperti contoh sebelumnya. Berikut ini adalah daftar pembatasan yang paling umum yang akan Anda hadapi saat bekerja dengan tampilan:

    • Anda tidak dapat menggunakan laporan DELETE pada pandangan beberapa meja.
    • Anda tidak dapat menggunakan pernyataan INSERT kecuali semua kolom NULL TIDAK digunakan dalam tabel yang mendasari termasuk dalam view. Pembatasan ini berlaku karena prosesor SQL tidak tahu mana nilai-nilai untuk memasukkan ke dalam kolom TIDAK NULL.
    • Jika Anda memasukkan atau memperbarui data melalui bergabung melihat, semua catatan yang harus diperbarui milik tabel fisik yang sama.
    • Jika Anda menggunakan klausa yang berbeda untuk membuat tampilan, kau tidak dapat memperbarui atau catatan memasukkan dalam pandangan bahwa.
    • Anda tidak dapat memperbarui kolom virtual (kolom yang merupakan hasil dari sebuah ekspresi atau fungsi).

    Aplikasi Umum Tampilan

    Berikut adalah beberapa tugas-tugas yang dilihat dapat melakukan:

    • Menyediakan fungsi keamanan pengguna
    • Konversi antara unit
    • Membuat tabel virtual baru format
    • Menyederhanakan pembangunan kompleks query

    Tampilan dan Keamanan

    Meskipun diskusi lengkap keamanan database muncul di Hari 12, “Database Security,” kita secara singkat menyentuh pada topik sekarang untuk menjelaskan bagaimana Anda dapat menggunakan pandangan dalam melakukan fungsi keamanan.

    Semua sistem database relasional yang digunakan saat ini termasuk rangkaian lengkap dari built-in fitur keamanan. Pengguna sistem database umumnya dibagi dalam kelompok berdasarkan penggunaan database. kelompok jenis umum adalah database administrator, pengembang database, personil entri data, dan pengguna umum. Kelompok-kelompok pengguna memiliki berbagai tingkat hak istimewa saat menggunakan database. Administrator database mungkin akan memiliki kontrol penuh terhadap sistem, termasuk UPDATE, INSERT, DELETE, dan hak istimewa ALTERbasis data. Kelompok masyarakat dapat diberikan hak istimewa SELECT hanya – dan mungkin mungkin diperbolehkan untuk SELECT hanya dari tabel tertentu dalam database tertentu.

    Tampilan umum digunakan dalam situasi ini untuk mengontrol informasi bahwa pengguna memiliki akses ke database. Misalnya, jika anda ingin pengguna memiliki akses hanya untuk bidang NAMAtabel BILLS, Anda hanya dapat menciptakan pandangan disebut BILLS_NAME:

    INPUT / OUTPUT:
      SQL> CREATE VIEW AS BILLS_NAME 
        2 SELECT NAMA FROM BILLS; 
    
      Lihat dibuat. 
    

    Seseorang dengan tingkat hak istimewa administrator sistem dapat memberikan hak istimewa kelompok masyarakat SELECT di tampilan BILLS_NAME. Kelompok ini tidak akan memiliki hak istimewa di meja BILLS mendasarinya. Seperti yang Anda duga, SQL telah memberikan keamanan data laporan untuk Anda gunakan juga. Perlu diketahui bahwa pandangan yang sangat berguna untuk melaksanakan keamanan database.

    Menggunakan Tampilan Mengkonversi Unit

    Tampilan juga berguna dalam situasi di mana Anda perlu menyajikan pengguna dengan data yang berbeda dari data yang benar-benar ada dalam database. Misalnya, jika bidang JUMLAHsebenarnya disimpan dalam dolar AS dan Anda tidak ingin pengguna Kanada harus terus-menerus melakukan perhitungan mental untuk melihat total AMOUNT dalam dolar Kanada, Anda dapat membuat tampilan sederhana yang disebut CANADIAN_BILLS:

    INPUT / OUTPUT:
      SQL> CREATE VIEW CANADIAN_BILLS (NAMA, CAN_AMOUNT) SEBAGAI 
        2 SELECT NAMA, JUMLAH / 1,10 
        3 DARI BILLS; 
    
      Lihat Dibuat. 
    
      SQL> SELECT * FROM CANADIAN_BILLS; 
    
      NAME CAN_AMOUNT 
      Telepon Perusahaan 125 
      Power 75 Perusahaan 
      Record 25 Club 
      250 Perusahaan Software 
      35 Perusahaan TV kabel 
      Istana Mobil Joe 350 
      Student Loan SC 200 
      20 Perusahaan Air Florida 
      UO-125 Kami Perusahaan Asuransi 
    
      9 baris yang dipilih. 
    
    ANALISIS:

    Ketika unit konversi seperti ini, mengingat kemungkinan masalah yang melekat dalam memodifikasi data yang mendasar pada tabel ketika perhitungan (seperti contoh sebelumnya) digunakan untuk membuat salah satu kolom view. Seperti biasa, Anda harus berkonsultasi’s database sistem dokumentasi Anda untuk menentukan dengan tepat bagaimana menerapkan sistem perintahCREATE VIEW.

    Pertanyaan Penyederhanaan Kompleks Menggunakan Tampilan

    Tampilan juga berguna dalam situasi yang mengharuskan Anda untuk melakukan suatu urutan pertanyaan untuk mencapai hasil. Contoh berikut menggambarkan penggunaan pandangan dalam situasi ini.

    Untuk memberikan nama semua bank yang mengirim tagihan ke negara bagian Texas dengan jumlah kurang dari $ 50, Anda akan melanggar masalah menjadi dua masalah yang terpisah:

    • Ambil semua tagihan yang dikirim ke Texas
    • Ambil semua tagihan kurang dari $ 50

    Mari kita mengatasi masalah ini dengan menggunakan dua tampilan yang terpisah: BILLS_1 dan BILLS_2:

    INPUT / OUTPUT:
      SQL> CREATE TABLE BILLS1 AS 
        2 SELECT * FROM BILLS 
        3 WHERE JUMLAH <50; 
    
      Tabel dibuat. 
    
      SQL> CREATE TABLE BILLS2 (NAMA, JUMLAH, account_id) SEBAGAI 
        2 BILLS BILLS DARI SELECT .*, PERUSAHAAN 
        3 WHERE BILLS.NAME = COMPANY.NAME DAN COMPANY.STATE = "TX"; 
    
      Tabel dibuat. 
    
    ANALISIS:

    Karena Anda ingin mencari semua tagihan dikirim ke Texas dan semua tagihan yang kurang dari $ 50, Anda sekarang dapat menggunakan SQL DI klausa untuk mencari uang di BILLS1 yang dikirim ke Texas. Gunakan informasi ini untuk menciptakan pandangan baru yang disebut BILLS3:

    INPUT / OUTPUT:
      SQL> CREATE VIEW AS BILLS3 
        2 SELECT * FROM WHERE NAMA DI BILLS2 
        3 (SELECT * FROM BILLS1); 
    
      Lihat dibuat. 
    

    Sekarang permintaan sebelumnya menggabungkan dengan tabel BANK_ACCOUNTS untuk memenuhi persyaratan asli contoh ini:

    INPUT / OUTPUT:
      SQL> CREATE VIEW BANKS_IN_TEXAS (BANK) SEBAGAI 
        2 SELECT BANK_ACCOUNTS.BANK 
        3 DARI BANK_ACCOUNTS, BILLS3 
        4 WHERE BILLS3.ACCOUNT_ID = BANK_ACCOUNTS.ACCOUNT_ID; 
    
      Lihat dibuat. 
    
      SQL> SELECT * FROM BANK_IN_TEXAS; 
    
      BANK 
      Credit Union 
    
      1 baris yang dipilih. 
    

    ANALISIS:

    Seperti yang Anda lihat, setelah permintaan tersebut dipecah menjadi pandangan terpisah, pertanyaan akhir agak sederhana. Juga, Anda dapat menggunakan kembali pandangan individu sesering mungkin.

    Pernyataan itu DROP VIEW

    Yang sama dengan setiap CREATE SQL lainnya … perintah, CREATE VIEW memiliki DROP terkait … perintah. Sintaksnya adalah sebagai berikut:

    Sintaks:
      SQL> DROP VIEW view_name; 
    

    Satu-satunya hal yang harus diingat ketika menggunakan perintah DROP VIEW adalah bahwa semua pandangan lain yang melihat referensi yang sekarang tidak sah. Beberapa sistem database bahkan drop semua pandangan yang digunakan tampilan Anda jatuh. Menggunakan Pribadi Oracle7, jika Anda menurunkan tampilan BILLS1, pertanyaan akhir akan menghasilkan error berikut:

    INPUT / OUTPUT:
      SQL> DROP VIEW BILLS1; 
    
      Lihat menjatuhkan. 
    
      SQL> SELECT * FROM BANKS_IN_TEXAS; 
      * 
      ERROR pada baris 1: 
      ORA-04063: view "PERKINS.BANKS_IN_TEXAS" memiliki kesalahan  

    CATATAN: Sebuah tampilan dapat dijatuhkan tanpa tabel aktual yang diubah, yang menjelaskan mengapa kita sering lihat dilihat sebagai tabel virtual. (Logika yang sama dapat diterapkan pada teknologi virtual reality.)


    Menggunakan Indeks

    Cara lain untuk menyajikan data dalam format yang berbeda dari yang secara fisik ada di disk adalah dengan menggunakan indeks. Selain itu, indeks juga dapat menyusun ulang data yang disimpan pada disk (dilihat sesuatu yang tidak dapat dilakukan).

    Indeks yang digunakan dalam database SQL untuk tiga alasan utama:

    • Untuk menegakkan batasan integritas referensial dengan menggunakan kata kunci UNIK
    • Untuk memudahkan pemesanan data berdasarkan isi indeks lapangan atau bidang
    • Untuk mengoptimalkan kecepatan eksekusi query

    Apakah Indeks?

    Data dapat diambil dari database dengan menggunakan dua metode. Metode pertama, yang sering disebut Metode Sequential Access, SQL mengharuskan untuk melewati setiap record mencari korek api. Metode pencarian ini tidak efisien, tetapi satu-satunya cara untuk SQL untuk menemukan arsip yang benar. Pikirkan kembali hari-hari ketika perpustakaan memiliki sistem katalog kartu pengajuan besar-besaran. Misalkan pustakawan dihapus kartu indeks alfabet, melemparkan kartu ke udara, kemudian menempatkan mereka kembali ke dalam lemari arsip. Bila Anda ingin mencari lokasi’s rak buku ini, mungkin Anda akan mulai dari awal, kemudian pergi melalui satu kartu pada suatu waktu sampai Anda menemukan informasi yang Anda inginkan. (Kemungkinannya adalah, Anda akan berhenti mencari segera setelah Anda menemukan buku tentang topik ini!)

    Sekarang anggaplah pustakawan diurutkan menurut abjad judul buku. Anda dapat dengan cepat mengakses informasi buku ini dengan menggunakan pengetahuan Anda tentang alfabet untuk bergerak melalui katalog.

    Bayangkan fleksibilitas jika pustakawan itu rajin tidak hanya cukup untuk menyortir buku-buku dengan judul tetapi juga menciptakan lain katalog diurutkan menurut nama pengarang dan lain diurutkan berdasarkan topik. Proses ini akan memberikan Anda, pengguna perpustakaan, dengan banyak fleksibilitas dalam mengambil informasi. Juga, Anda akan dapat mengambil informasi Anda dalam hitungan waktu yang awalnya akan diambil.

    Menambahkan indeks ke database SQL memungkinkan Anda untuk menggunakan Metode Akses langsung. SQL menggunakan struktur treelike untuk menyimpan dan mengambil data indeks.Pointer ke grup data yang disimpan di bagian atas pohon. Kelompok-kelompok ini disebut node. Setiap node berisi pointer ke node lain. Kelenjar getah bening menunjuk ke kiri berisi nilai-nilai yang kurang dari node induknya. The pointer ke titik yang tepat untuk nilai lebih besar dari node induk.

    Sistem database dimulai pencarian di node atas dan hanya mengikuti petunjuk sampai sukses.


    CATATAN: Hasil query terhadap tabel unindexed sering disebut sebagai meja penuh scan. Sebuah meja penuh scan adalah proses yang digunakan oleh server database untuk mencari setiap baris tabel sampai semua baris yang dikembalikan dengan kondisi yang diberikan (s). Operasi ini sebanding dengan mencari buku di perpustakaan oleh mulai dari buku pertama di rak pertama dan scan setiap buku sampai Anda menemukan yang Anda inginkan. Di sisi lain, untuk mencari buku dengan cepat, Anda mungkin akan terlihat dalam) kartu katalog terkomputerisasi (. Demikian pula, indeks memungkinkan server database untuk menunjuk ke baris tertentu dari data dengan cepat dalam tabel.


    Untungnya, Anda tidak diharuskan untuk benar-benar melaksanakan struktur pohon sendiri, sama seperti Anda tidak diharuskan untuk menulis pelaksanaan untuk menyimpan dan membaca dalam tabel atau database. SQL Sintaks dasar untuk membuat indeks adalah sebagai berikut:

    INPUT / OUTPUT:
      SQL> CREATE INDEX index_name 
        2 ON table_name (column_name1, [column_name2], ...); 
    
      Indeks dibuat. 
    

    Ketika Anda telah melihat beberapa kali sebelumnya, sintaks untuk CREATE INDEX dapat sangat bervariasi diantara sistem database. Sebagai contoh, pernyataan CREATE INDEX bawah Oracle7 terlihat seperti ini:

    Sintaks:
      CREATE INDEX [schema.] Indeks 
      ON (skema [.] Tabel ([kolom dibawah! |! ASC DESC] 
           [, [Kolom dibawah! ...! ASC | DESC]]) 
         | KLASTER [schema.] Cluster) 
      [INITRANS integer] [MAXTRANS integer] 
      [Tablespace tablespace] 
      [PENYIMPANAN storage_clause] 
      [PCTFREE integer] 
      [NOSORT] 
    

    Sintaks untuk CREATE INDEX menggunakan Sybase SQL Server adalah sebagai berikut:

    Sintaks:
      membuat unik] [[berkerumun | nonclustered] 
           index index_name
    on [[database.]owner.]table_name (column_name
        [, column_name]...)
    [with {fillfactor = x, ignore_dup_key, sorted_data,
          [ignore_dup_row | allow_dup_row]}]
    [on segment_name]
    

    Informix SQL implements the command like this:

    Sintaks:
     CREATE [UNIQUE | DISTINCT] [CLUSTER] INDEX index_name
    ON table_name (column_name [ASC | DESC],
                   column_name [ASC | DESC]...)
    

    Notice that all of these implementations have several things in common, starting with the basic statement

     CREATE INDEX index_name ON table_name (column_name, ...)
    

    SQL Server dan Oracle memungkinkan Anda untuk membuat sebuah clustered index, yang dibahas kemudian. Oracle dan Informix memungkinkan Anda untuk menetapkan apakah kolom nama harus disortir di menaik atau menurun. Kami tidak suka suara seperti kaset rusak, tapi, sekali lagi, Anda harus berkonsultasi dokumentasi sistem manajemen database Anda ketika menggunakan INDEXcommand CREATE.

    Misalnya, untuk membuat indeks di bidang account_id tabel BILLS, pernyataan CREATE INDEX akan terlihat seperti ini:

    INPUT:
     SQL> SELECT * FROM BILLS;
    OUTPUT:
      JUMLAH NAMA account_id 
      Telepon Perusahaan 125 1 
      Perusahaan Power 75 1 
      Rekam Club 25 2 
      Perusahaan perangkat lunak 250 1 
      Perusahaan TV kabel 35 3 
      Istana Mobil Joe 350 5 
      Student Loan SC 200 6 
      Perusahaan Air Florida 20 1 
      UO-Kami Perusahaan Asuransi 125 5 
      Kartu Kredit Debitor 35 4 
    
      10 baris yang dipilih. 
    
    INPUT / OUTPUT:
      SQL> CREATE INDEX ON ID_INDEX BILLS (account_id); 
    
      Indeks dibuat. 
    
      SQL> SELECT * FROM BILLS; 
    
      JUMLAH NAMA account_id 
      Telepon Perusahaan 125 1 
      Perusahaan Power 75 1 
      Perusahaan perangkat lunak 250 1 
      Perusahaan Air Florida 20 1 
      Rekam Club 25 2 
      Perusahaan TV kabel 35 3 
      Kartu Kredit Debitor 35 4 
      Istana Mobil Joe 350 5 
      UO-Kami Perusahaan Asuransi 125 5 
      Student Loan SC 200 6 
    
      10 baris yang dipilih. 
    

    Tabel BILLS diurutkan menurut bidang account_id sampai indeks akan dibuang dengan menggunakan pernyataan INDEKS DROP. Seperti biasa, pernyataan INDEKS DROP sangat mudah:

    Sintaks:
      SQL> DROP INDEX index_name; 
    

    Berikut adalah apa yang terjadi ketika indeks akan dibuang:

    INPUT / OUTPUT:
      SQL> DROP INDEX ID_INDEX; 
    
      Indeks menjatuhkan. 
    
      SQL> SELECT * FROM BILLS; 
    
      JUMLAH NAMA account_id 
      Telepon Perusahaan 125 1 
      Perusahaan Power 75 1 
      Rekam Club 25 2 
      Perusahaan perangkat lunak 250 1 
      Perusahaan TV kabel 35 3 
      Istana Mobil Joe 350 5 
      Student Loan SC 200 6 
      Perusahaan Air Florida 20 1 
      UO-Kami Perusahaan Asuransi 125 5 
      Kartu Kredit Debitor 35 4 
    
      10 baris yang dipilih. 
    
    ANALISIS:

    Sekarang tabel BILLS dalam bentuk aslinya. Menggunakan bentuk yang paling sederhana dari pernyataan CREATE INDEX fisik tidak mengubah cara meja itu disimpan.

    Anda mungkin bertanya-tanya mengapa sistem database bahkan menyediakan indeks jika mereka juga memungkinkan Anda untuk menggunakan klausa ORDER BY.

    INPUT / OUTPUT:
    SQL> SELECT * FROM BILLS ORDER BY ACCOUNT_ID; NAME                         AMOUNT     ACCOUNT_ID Phone Company                125        1 Power Company                75         1 Software Company             250        1 Florida Water Company        20         1 Record Club                  25         2 Cable TV Company             35         3 Debtor's Credit Card         35         4 Joe's Car Palace             350        5 UO-Us Insurance Company     125        5 SC Student Loan            200        6 10 rows selected.
    ANALISIS:

    Ini SELECT dan ID_INDEX di meja BILLS menghasilkan hasil yang sama. Perbedaannya adalah bahwa klausa ORDER BY kembali dan perintah-macam data setiap kali Anda menjalankan pernyataan SQL yang sesuai. Bila menggunakan indeks, sistem database membuat objek indeks fisik (menggunakan struktur pohon dijelaskan sebelumnya) dan menggunakan kembali indeks yang sama setiap kali Anda query meja.

    PERINGATAN: Bila meja terjatuh, semua indeks yang terkait dengan meja yang jatuh juga.
    Pengindeksan Tips

    Tercantum di sini adalah beberapa tips untuk diingat ketika indeks menggunakan:

    • Untuk meja kecil, menggunakan indeks tidak menghasilkan perbaikan kinerja.
    • Menghasilkan indeks perbaikan terbesar ketika kolom Anda diindeks di berisi berbagai data atau nilai NULL banyak.
    • Indeks dapat mengoptimalkan query Anda ketika mereka permintaan akan kembali sejumlah kecil data (aturan praktis yang baik adalah kurang dari 25 persen dari data). Jika Anda kembali data yang lebih sebagian besar waktu, indeks cukup tambahkan overhead.
    • Indeks dapat meningkatkan kecepatan pengambilan data. Namun, mereka lambat update data.Ingatlah ini ketika melakukan banyak pembaruan seiring dengan indeks. Untuk update sangat besar, Anda bisa mempertimbangkan menjatuhkan indeks sebelum Anda melakukan update.Ketika update selesai, cukup membangun kembali indeks Anda. Pada satu update tertentu, kami dapat menyimpan programmer 18 jam dengan menjatuhkan indeks dan menciptakan kembali setelah beban data.
    • Indeks mengambil tempat dalam database Anda. Jika Anda menggunakan sistem manajemen database yang memungkinkan Anda untuk mengelola ruang disk yang diambil database Anda, faktor dalam ukuran indeks saat perencanaan ukuran database Anda.

    Selalu indeks pada kolom yang digunakan dalam bergabung antara tabel. Teknik ini dapat sangat meningkatkan kecepatan join.

    Kebanyakan sistem database tidak membolehkan Anda untuk membuat indeks pada tampilan.Jika sistem database Anda memungkinkan, gunakan klausa teknik dengan pernyataan SELECT yang membangun tampilan untuk memesan data di dalam view. (Sayangnya, banyak sistem tidak memungkinkan klausa ORDER BY dengan pernyataan CREATE VIEW baik.)

    Jangan indeks pada kolom yang diperbarui atau dimodifikasi secara teratur. overhead yang dibutuhkan untuk selalu memperbarui indeks akan mengimbangi keuntungan kinerja Anda berharap untuk mendapatkan.

    Jangan indeks menyimpan dan tabel pada drive fisik yang sama. Memisahkan benda-benda ini akan menghilangkan pertengkaran drive dan menghasilkan permintaan yang lebih cepat.
    Pengindeksan pada Lebih dari Satu Field

    SQL juga memungkinkan Anda untuk indeks pada lebih dari satu lapangan. Jenis indeks merupakan indeks komposit. Kode berikut menggambarkan indeks komposit sederhana.Perhatikan bahwa walaupun dua bidang yang sedang digabungkan, hanya satu indeks fisik dibuat (disebut ID_CMPD_INDEX).

    INPUT / OUTPUT:

     SQL> CREATE INDEX ID_CMPD_INDEX ON BILLS( ACCOUNT_ID, AMOUNT );
    
    Index created.
    
    SQL> SELECT * FROM BILLS;
    
    NAME                         AMOUNT         ACCOUNT_ID
    Florida Water Company            20                  1
    Power Company                    75                  1
    Phone Company                   125                  1
    Software Company                250                  1
    Record Club                      25                  2
    Cable TV Company                 35                  3
    Debtor's Credit Card             35                  4
    UO-Us Insurance Company        125                  5
    Joe's Car Palace                350                  5
    SC Student Loan               200                  6
    
      10 baris yang dipilih. 
    
    SQL> DROP INDEX ID_CMPD_INDEX;
    
    Index dropped.
    
    ANALISIS:

    Anda dapat mencapai keuntungan kinerja dengan memilih kolom dengan nilai-nilai paling unik.Misalnya, setiap nilai dalam bidang NAMA tabel BILLS adalah unik. Bila menggunakan indeks majemuk, tempat yang paling selektif bidang pertama dalam daftar kolom. Artinya, tempat bidang yang Anda harapkan untuk memilih yang paling sering pada awal daftar. (Urutan nama kolom yang muncul dalam pernyataan INDEKS theCREATE tidak harus sama dengan urutan mereka dalam tabel) Asumsikan Anda secara rutin menggunakan pernyataan seperti berikut :

     SQL> SELECT * FROM BILLS WHERE NAME = "Cable TV Company";
    

    Untuk mencapai keuntungan kinerja, Anda harus membuat indeks menggunakan bidang NAMA sebagai kolom terkemuka. Berikut adalah dua contoh:

     SQL> CREATE INDEX NAME_INDEX ON BILLS(NAME, AMOUNT);
    

    atau

     SQL> CREATE INDEX NAME_INDEX ON BILLS(NAME);
    

    Bidang NAMA adalah kolom paling kiri untuk kedua indeks ini, sehingga permintaan sebelumnya akan dioptimalkan untuk pencarian di bidang NAMA.

    Komposit indeks juga digunakan untuk menggabungkan dua atau lebih kolom yang dengan sendirinya mungkin telah selektivitas rendah. Untuk contoh selektivitas, memeriksa BANK_ACCOUNTS tabel:

    ACCOUNT_ID     TYPE             BALANCE     BANK 1              Checking         500         First Federal 2              Money Market     1200        First Investor's 3              Checking         90          Credit Union 4              Savings          400         First Federal 5              Checking         2500        Second Mutual 6              Business         4500        Fidelity

    Perhatikan bahwa dari enam catatan, yang Memeriksa nilai muncul dalam tiga dari mereka.Kolom ini memiliki selektivitas lebih rendah dari bidang account_id. Perhatikan bahwa setiap nilai field account_id adalah unik. Untuk meningkatkan selektivitas indeks Anda, Anda bisa menggabungkan JENIS dan bidang account_id dalam indeks baru. Langkah ini akan menciptakan nilai indeks yang unik (yang, tentu saja, adalah selektivitas tertinggi yang bisa mendapatkan).

    Catatan: Sebuah indeks yang berisi beberapa kolom sering disebut sebagai indeks komposit.Kinerja masalah dapat mempengaruhi keputusan Anda apakah akan menggunakan kolom-tunggal atau indeks komposit. Dalam Oracle, misalnya, Anda dapat memutuskan untuk menggunakan indeks tunggal-kolom jika sebagian besar pertanyaan Anda melibatkan satu kolom khusus sebagai bagian dari kondisi, di sisi lain, Anda mungkin akan membuat indeks komposit jika kolom dalam indeks yang sering digunakan bersama sebagai kondisi untuk permintaan. Periksa pelaksanaan bimbingan khusus Anda pada saat membuat indeks beberapa-kolom.
    Menggunakan Kata Kunci UNIK dengan CREATE INDEX

    indeks komposit yang sering digunakan dengan kata kunci UNIK untuk mencegah beberapa catatan muncul dengan data yang sama. Misalkan Anda ingin memaksa tabel BILLS memiliki built-in sebagai berikut “aturan”: Setiap tagihan yang dibayarkan kepada perusahaan harus berasal dari rekening bank yang berbeda. Anda akan membuat indeks UNIQUE pada NAMA dan bidang account_id. Sayangnya, Oracle7 tidak mendukung sintaks UNIK. Sebaliknya, mengimplementasikan fitur UNIK menggunakan batasan integritas UNIK. Contoh berikut ini menunjukkan kata kunci UNIK dengan CREATE INDEX menggunakan bahasa Transact-SQL Sybase’s.

    INPUT:
     1> create unique index unique_id_name
    2> on BILLS(ACCOUNT_ID, NAME)
      3> pergi 
    1> select * from BILLS
      2> pergi
    OUTPUT:
    NAME                         AMOUNT     ACCOUNT_ID Florida Water Company        20         1 Power Company                75         1 Phone Company                125        1 Software Company             250        1 Record Club                  25         2 Cable TV Company             35         3 Debtor's Credit Card         35         4 UO-Us Insurance Company     125        5 Joe's Car Palace             350        5 SC Student Loan            200        6

    Sekarang coba untuk menyisipkan merekam ke dalam tabel BILLS yang duplikat data yang sudah ada.

    INPUT:
     1> insert BILLS (NAME, AMOUNT, ACCOUNT_ID)
    2> values("Power Company", 125, 1)
      3> pergi 
    
    ANALISIS:

    Anda seharusnya menerima pesan kesalahan yang mengatakan bahwa perintah INSERT tidak diperbolehkan. Jenis pesan kesalahan bisa terperangkap dalam sebuah program aplikasi, dan pesan bisa memberitahu pengguna ia dimasukkan data yang tidak valid.

    Example 10.3

    Buat indeks pada tabel BILLS yang akan menyortir bidang AMOUNT dalam urutan.

    INPUT / OUTPUT:
     SQL> CREATE INDEX DESC_AMOUNT
         ON  BILLS(AMOUNT DESC);
    
    Index created.
    
    ANALISIS:

    Ini adalah pertama kalinya Anda telah menggunakan operator DESC, yang menceritakan SQL untuk menyortir indeks dalam urutan. (Secara default field nomor diurutkan dalam urutan) Sekarang Anda dapat memeriksa hasil karya Anda.:

    INPUT / OUTPUT:
     SQL> SELECT * FROM BILLS;
    
    NAME                         AMOUNT     ACCOUNT_ID
    Joe's Car Palace             350        5
    Software Company             250        1
    SC Student Loan            200        6
    Phone Company                125        1
    UO-Us Insurance Company     125        5
    Power Company                75         1
    Cable TV Company             35         3
    Debtor's Credit Card         35         4
    Record Club                  25         2
    Florida Water Company        20         1
    
      10 baris yang dipilih. 
    
    ANALISIS:

    Contoh ini membuat indeks menggunakan operator DESC pada jumlah kolom.Perhatikan dalam output, angka tersebut dipesan dari terbesar ke terkecil.

    Indexes and Joins

    Bila menggunakan bergabung rumit dalam permintaan, perintah SELECT Anda dapat mengambil waktu yang lama. Dengan tabel besar, ini jumlah waktu bisa mendekati beberapa detik (dibandingkan dengan milidetik Anda digunakan untuk menunggu). Jenis kinerja di klien / server lingkungan dengan banyak pengguna menjadi sangat frustasi dengan pengguna aplikasi Anda. Membuat indeks pada kolom yang sering digunakan dalam bergabung dapat mengoptimalkan kinerja query Anda cukup. Namun, jika terlalu banyak indeks diciptakan, mereka dapat memperlambat kinerja sistem anda, bukan mempercepatnya. Kami menyarankan Anda bereksperimen dengan menggunakan indeks pada beberapa tabel besar (di urutan ribuan catatan). Jenis percobaan mengarah ke pemahaman yang lebih baik mengoptimalkan pernyataan SQL.

    Catatan: Sebagian besar implementasi mekanisme untuk mengumpulkan waktu yang telah berlalu dari query; Oracle mengacu pada fitur ini sebagai waktu. Periksa pelaksanaan Anda untuk informasi spesifik.
    Contoh berikut membuat index pada bidang account_id di BILLS dan tabel BANK_ACCOUNTS:

    INPUT / OUTPUT:
     SQL> CREATE INDEX BILLS_INDEX ON BILLS(ACCOUNT_ID);
    
    Index created.
    
    SQL> CREATE INDEX BILLS_INDEX2 ON BANK_ACCOUNTS(ACCOUNT_ID);
    
    Index created.
    
    SQL> SELECT BILLS.NAME NAME, BILLS.AMOUNT AMOUNT, BANK_ACCOUNTS.BALANCE
      2 ACCOUNT_BALANCE
      3  FROM BILLS, BANK_ACCOUNTS
      4 WHERE BILLS.ACCOUNT_ID = BANK_ACCOUNTS.ACCOUNT_ID;
    
    NAME                         AMOUNT     ACCOUNT_BALANCE
    Phone Company                125        500
    Power Company                75         500
    Software Company             250        500
    Florida Water Company        20         500
    Record Club                  25         1200
    Cable TV Company             35         90
    Debtor's Credit Card         35         400
    Joe's Car Palace             350        2500
    UO-Us Insurance Company     125        2500
    SC Student Loan            200        4500
    
      10 baris yang dipilih. 
    
    ANALISIS:

    Contoh ini pertama membuat indeks untuk account_id pada kedua tabel dalam query yang berhubungan. Dengan membuat indeks untuk account_id di meja masing-masing, join dapat lebih cepat mengakses baris tertentu dari data. Sebagai aturan, Anda harus indeks kolom (s) dari tabel yang unik atau yang Anda rencanakan untuk bergabung tabel dengan dalam permintaan.

    Using Clusters

    Meskipun kami awalnya mengatakan bahwa indeks dapat digunakan untuk menyajikan gambaran tentang tabel yang berbeda dari pengaturan fisik yang ada, pernyataan ini tidak sepenuhnya akurat. Jenis khusus dari indeks didukung oleh banyak sistem database memungkinkan manajer database atau pengembang data cluster. Ketika sebuah clustered index digunakan, susunan fisik dari data dalam tabel adalah dimodifikasi. Menggunakan clustered index biasanya hasil dalam temu data yang lebih cepat daripada menggunakan indeks, tradisional nonclustered. Namun, sistem banyak database (seperti Sybase SQL Server) hanya mengizinkan satu berkerumun indeks per tabel. lapangan yang digunakan untuk membuat clustered index biasanya bidang primary key. Menggunakan Transact-SQL Sybase, Anda dapat membuat indeks, cluster yang unik pada tabel ACCOUNT_IDfield BANK_ACCOUNTS menggunakan sintaks berikut:

    Sintaks:
     create unique clustered index id_index
    on BANK_ACCOUNTS(ACCOUNT_ID)
     go
    

    Oracle memperlakukan konsep cluster yang berbeda. Bila menggunakan database Oracle relasional, cluster adalah sebuah objek database seperti database atau tabel. Sebuah cluster digunakan untuk menyimpan tabel dengan bidang umum sehingga kecepatan akses mereka ditingkatkan.

    Berikut adalah sintaks untuk membuat cluster menggunakan Oracle 7:

    Sintaks:
     CREATE CLUSTER [schema.]cluster
    (column datatype [,column datatype] ... )
    [PCTUSED integer] [PCTFREE integer]
    [SIZE integer [K|M] ]
    [INITRANS integer] [MAXTRANS integer]
    [TABLESPACE tablespace]
    [STORAGE storage_clause]
    [!!under!!INDEX
    | [HASH IS column] HASHKEYS integer]
    

    You should then create an index within the cluster based on the tables that will be added to it. Then you can add the tables. You should add tables only to clusters that are frequently joined. Do not add tables to clusters that are accessed individually through a simple SELECT statement.

    Obviously, clusters are a very vendor-specific feature of SQL. We will not go into more detail here on their use or on the syntax that creates them. However, consult your database vendor’s documentation to determine whether your database management system supports these useful objects.

    Ringkasan

    Tampilan adalah tabel virtual. Tampilan hanya cara penyajian data dalam format yang berbeda dari jalan sebenarnya ada di database. Sintaks dari pernyataan CREATE VIEW menggunakan perintah SELECT standar untuk membuat melihat (dengan beberapa pengecualian). Anda dapat memperlakukan pandangan sebagai meja biasa dan melakukan sisipan, pembaruan, menghapus, dan memilih pada itu. Kami secara singkat membahas penggunaan keamanan database dan bagaimana pandangan umumnya digunakan untuk mengimplementasikan keamanan ini. Database keamanan dibahas secara lebih rinci pada Hari 12.

    Sintaks dasar yang digunakan untuk membuat tampilan adalah :

     CREATE VIEW view_name AS
    SELECT field_name(s) FROM table_name(s);
    

    Berikut adalah penggunaan yang paling umum dilihat:

    • Untuk melakukan fungsi keamanan pengguna
    • Untuk mengkonversi unit
    • Untuk membuat format tabel virtual baru
    • Untuk menyederhanakan pembangunan kompleks query

    Indeks juga database desain dan tool pemrograman SQL. Indeks adalah objek database fisik disimpan oleh sistem manajemen database yang dapat digunakan untuk mengambil data yang telah diurutkan dari database. Selain itu, berkat indeks cara yang dipetakan, menggunakan indeks dan query yang terbentuk dengan baik dapat menghasilkan peningkatan kinerja yang signifikan.

    Sintaks dasar yang digunakan untuk menciptakan indeks terlihat seperti ini:

     CREATE INDEX index_name
    ON table_name(field_name(s));
    

    Beberapa sistem database termasuk opsi-opsi tambahan yang sangat berguna seperti UNIK dan kata kunci berkerumun.

    Sumber ; http://www.webbasedprogramming.com

    SQL Membuat tabel

    Tinggalkan komentar

    Tujuan

    Hari ini Anda belajar tentang membuat database. Hari 9 meliputi CREATE DATABASE, CREATE TABLE, ALTER TABLE, DROP TABLE, dan DROP DATABASE laporan, yang secara bersama dikenal sebagai definisi laporan data. (Sebaliknya, SELECT, UPDATE, INSERT, dan DELETE laporan sering digambarkan sebagai manipulasi data laporan hari.) Menjelang akhir dari, Anda akan memahami dan dapat melakukan hal berikut:

    • Buat kunci bidang
    • Buat database dengan tabel yang terkait
    • Membuat, mengubah, dan drop tabel
    • Menambahkan data ke database
    • Memodifikasi data dalam database
    • Drop database

    Anda sekarang tahu banyak kosakata dan telah memeriksa SQL query SQL dalam beberapa detail, dimulai dengan sintaks dasar. Pada Hari 2, “Pengantar Permintaan: Pernyataan SELECT," Anda belajar bagaimana untuk memilih data dari database. Pada Hari 8, “Memanipulasi Data,” Anda belajar bagaimana untuk memasukkan, update, dan menghapus data dari database. Sekarang, sembilan hari dalam proses belajar, Anda mungkin sudah bertanya-tanya di mana ini berasal dari database. Untuk itu demi kesederhanaan, kita telah mengabaikan proses menciptakan database dan tabel. Kita telah mengasumsikan bahwa objek-objek data yang ada saat ini pada sistem Anda. Hari ini Anda akhirnya membuat objek-objek ini.

    Sintaks dari laporan CREATE bisa berkisar dari sangat sederhana sampai yang kompleks, tergantung pada pilihan sistem manajemen database (DBMS) mendukung dan bagaimana rinci Anda ingin saat membangun database.


    CATATAN: Contoh-contoh yang digunakan saat ini dihasilkan menggunakan Pribadi Oracle7. Silakan lihat dokumentasi untuk pelaksanaan SQL spesifik untuk setiap perbedaan kecil dalam sintaks.


    The CREATE DATABASE Pernyataan

    Langkah pertama manajemen data dalam database setiap proyek adalah untuk menciptakan database. Tugas ini dapat berkisar dari SD ke rumit, tergantung pada kebutuhan dan sistem manajemen database yang telah Anda pilih. Banyak sistem modern (termasuk Personal Oracle7) berikut perangkat grafis yang memungkinkan Anda untuk benar-benar membangun database dengan mengklik tombol mouse. Fitur ini menghemat waktu tentu saja bermanfaat, namun Anda harus memahami pernyataan SQL yang dijalankan untuk menanggapi klik mouse.

    Melalui pengalaman pribadi, kita telah belajar pentingnya menciptakan baik SQL menginstal script. File ini berisi script kode SQL yang dibutuhkan untuk benar-benar membangun kembali basis data atau database; script sering kali berisi objek database seperti indeks, disimpan prosedur, dan pemicu. Anda akan melihat nilai dari script ini selama perkembangan sebagai Anda terus-menerus melakukan perubahan pada database dan pada kesempatan ingin sekali membangun kembali database dengan semua perubahan terbaru. Dengan menggunakan alat grafis setiap kali Anda perlu melakukan kembali dapat menjadi sangat waktu memakan. Selain itu, mengetahui sintaks SQL untuk prosedur ini memungkinkan Anda untuk menerapkan pengetahuan Anda ke sistem database lain.

    Sintaks untuk pernyataan CREATE DATABASE khas terlihat seperti ini:

    Sintaks:
     CREATE DATABASE database_name

    Karena sintaks bervariasi secara luas dari sistem ke sistem, kita tidak akan memperluas pada pernyataan CREATE DATABASE sintaks. Banyak sistem bahkan tidak mendukung perintah SQL CREATE DATABASE. Namun, semua yang populer, lebih kuat, manajemen basis data relasional sistem (RDBMSs) melakukan memberikan itu. Alih-alih berfokus pada sintaks, kami akan meluangkan waktu mendiskusikan pilihan yang perlu dipertimbangkan ketika membuat database.

    CREATE DATABASE Pilihan

    Sintaks untuk pernyataan CREATE DATABASE dapat sangat bervariasi. Banyak SQL teks melompat menyangkut pernyataan CREATE DATABASE dan bergerak langsung ke pernyataan CREATE TABLE. Karena Anda harus membuat database sebelum Anda dapat membangun sebuah meja, bagian ini berfokus pada beberapa konsep pengembang harus dipertimbangkan ketika membangun database. Pertimbangan pertama adalah tingkat izin. Jika Anda menggunakan sistem manajemen database relasional (RDBMS) yang mendukung akses user tersebut, Anda harus yakin bahwa baik Anda memiliki izin pengaturan tingkat administrator sistem atau administrator sistem telah memberikan izin CREATE DATABASE. Lihat dokumentasi RDBMS Anda untuk informasi lebih lanjut .

    Kebanyakan RDBMSs juga memungkinkan Anda untuk menentukan ukuran database default, biasanya dalam hal ruang hard disk (seperti megabyte). Anda perlu memahami bagaimana sistem database toko dan menempatkan data pada disk untuk memperkirakan secara akurat ukuran yang Anda butuhkan. Tanggung jawab untuk mengelola ruang ini jatuh terutama untuk administrator sistem, dan mungkin di lokasi database administrator akan membangun database test .

    Jangan biarkan pernyataan CREATE DATABASE mengintimidasi Anda. Pada sederhana, Anda dapat membuat database bernama PEMBAYARAN dengan pernyataan berikut:

    Sintaks:
      SQL> CREATE DATABASE PEMBAYARAN; 
      

    CATATAN: Sekali lagi, pastikan untuk berkonsultasi sistem manajemen database dokumentasi Anda untuk mempelajari spesifik database bangunan, sebagai pernyataan CREATE DATABASE dapat dan memang bervariasi untuk implementasi yang berbeda. Pelaksanaan Masing-masing juga memiliki beberapa pilihan yang unik.


    Desain Database

    Merancang database dengan benar sangat penting bagi keberhasilan aplikasi Anda,. Pengantar Materi pada Hari 1 “Pengantar SQL,” menyentuh pada topik teori database relasional dan normalisasi database.

    Normalisasi adalah proses memecah data Anda menjadi komponen-komponen terpisah untuk mengurangi pengulangan data. Setiap tingkat normalisasi mengurangi pengulangan data. Normalisasi data Anda bisa menjadi proses yang sangat kompleks, dan berbagai alat desain database memungkinkan Anda untuk merencanakan proses ini dengan cara yang logis.

    Banyak faktor yang dapat mempengaruhi desain database Anda, termasuk yang berikut:

    • Keamanan
    • Tersedia ruang disk
    • Kecepatan pencarian database dan pengambilan
    • Kecepatan pembaruan basis data
    • Kecepatan beberapa-meja bergabung untuk mengambil data
    • RDBMS dukungan untuk tabel sementara

    ruang disk selalu merupakan faktor penting. Meskipun Anda mungkin tidak berpikir bahwa ruang disk merupakan masalah besar dalam usia penyimpanan multigigabyte, ingat bahwa semakin besar database Anda, semakin lama waktu yang dibutuhkan untuk mengambil catatan. Jika Anda telah melakukan pekerjaan yang buruk merancang struktur tabel Anda, kemungkinan besar Anda telah sia-sia mengulangi sebagian besar data Anda.

    Seringkali masalah dapat terjadi sebaliknya. Anda mungkin telah berusaha untuk sepenuhnya menormalkan ‘tabel desain Anda dengan database dan dalam melakukan banyak tabel diciptakan begitu. Meskipun Anda mungkin telah mendekati nirwana-desain database, operasi dilakukan terhadap setiap query database ini akan memakan waktu yang sangat lama untuk mengeksekusi.Database dirancang dengan cara ini terkadang sulit untuk mempertahankan karena struktur tabel mungkin mengaburkan maksud desainer. Masalah ini menggarisbawahi pentingnya selalu mendokumentasikan kode Anda atau desain sehingga orang lain dapat masuk setelah Anda (atau bekerja dengan anda) dan memiliki beberapa ide tentang apa yang Anda pikirkan pada saat Anda membuat struktur database Anda. Dalam desainer segi database, dokumentasi ini dikenal sebagai kamus data.

    Membuat Kamus Data

    Sebuah kamus data database desainer paling penting membentuk dokumentasi. Itu melaksanakan fungsi-fungsi berikut:

    • Menjelaskan tujuan database dan yang akan menggunakannya.
    • Dokumen yang spesifik di belakang database itu sendiri: apa perangkat itu dibuat pada,’s default ukuran database, atau ukuran file log (digunakan untuk menyimpan database informasi beroperasi di sekitar RDBMSs).
    • SQL Berisi kode sumber untuk setiap database menginstal atau menghapus script, termasuk dokumentasi mengenai penggunaan alat-alat ekspor impor /, seperti yang diperkenalkan kemarin (Day 8).
    • Memberikan penjelasan rinci tentang setiap tabel dalam database dan menjelaskan tujuan dalam proses terminologi bisnis.
    • Dokumen struktur internal setiap tabel, termasuk semua kolom dan jenis data mereka dengan komentar, semua indeks, dan semua pandangan. (Lihat Hari ke-10, “Tampilan Membuat dan Indeks.”)
    • SQL Berisi kode sumber untuk semua prosedur disimpan dan pemicu.
    • Menjelaskan kendala database seperti penggunaan nilai-nilai yang unik atau nilai-nilai NULL TIDAK. Dokumentasi juga harus menyebutkan apakah kendala-kendala yang diterapkan pada tingkat RDBMS atau apakah programmer database diharapkan untuk memeriksa hambatan-hambatan dalam kode sumber.

    Banyak dibantu-komputer rekayasa perangkat lunak (CASE) alat bantuan perancang database dalam penciptaan ini kamus data. Sebagai contoh, Microsoft Access datang dikemas dengan database yang mendokumentasikan alat yang print penjelasan rinci dari setiap objek dalam database. Lihat Hari 17, “Menggunakan SQL untuk Menghasilkan SQL Laporan,” untuk rincian lebih lanjut tentang data kamus.


    CATATAN: Sebagian besar paket RDBMS besar datang dengan baik data DIC-tionary diinstal atau script untuk menginstalnya.


    Membuat Kunci Fields

    Seiring dengan mendokumentasikan desain database, desain tujuan paling penting yang harus Anda miliki adalah untuk menciptakan struktur tabel anda sehingga setiap tabel memiliki kunci primer dan kunci asing. Kunci utama harus memenuhi tujuan berikut:

    • Setiap catatan unik dalam tabel (ada catatan lain dalam tabel memiliki semua kolom yang sama dengan yang lain).
    • Sebagai catatan yang harus unik, semua kolom yang diperlukan, yaitu data dalam satu kolom tidak harus diulang di tempat lain dalam tabel.

    Mengenai gol kedua, kolom yang unik data lengkap seluruh meja dikenal sebagai bidang primary key. Bidang kunci asing adalah bidang yang menghubungkan satu meja ke meja utama atau kunci asing lain. Contoh berikut akan memperjelas situasi ini.

    Asumsikan Anda memiliki tiga tabel: BILLS, BANK_ACCOUNTS, dan PERUSAHAAN 9.1. Tabel menunjukkan format ketiga tabel.

    Tabel 9.1. Tabel struktur database PEMBAYARAN.

    Uang kertas Bank_Accounts Perusahaan
    NAMA, CHAR (30) Account_id, NOMOR NAMA, CHAR (30)
    JUMLAH, NOMOR JENIS, CHAR (30) ALAMAT, CHAR (50)
    Account_id, NOMOR NERACA, NOMOR KOTA, CHAR (20)
    BANK, CHAR (30) NEGARA, CHAR (2)

    Luangkan waktu sejenak untuk memeriksa tabel ini. Bidang yang menurut Anda adalah kunci utama? Yang merupakan kunci asing?

    Kunci utama dalam tabel BILLS adalah bidang NAMA. Bidang ini tidak boleh ditiru karena kamu hanya memiliki satu tagihan dengan jumlah ini. (Pada kenyataannya, Anda mungkin akan memiliki nomor cek atau tanggal untuk membuat catatan ini benar-benar unik, tapi untuk saat ini menganggap bahwa bekerja bidang NAME.) Bidang account_id dalam tabel BANK_ACCOUNTS adalah kunci utama untuk meja itu. Bidang NAMA adalah kunci utama untuk tabel PERUSAHAAN.

    Kunci asing dalam contoh ini mungkin mudah untuk spot. Bidang account_id pada tabel BILLS BILLS bergabung meja dengan tabel BANK_ACCOUNTS. Bidang NAMA pada tabel BILLS BILLSbergabung meja dengan tabel PERUSAHAAN. Jika ini adalah desain database matang penuh, Anda akan memiliki tabel lebih banyak dan kerusakan data. Misalnya, bidang BANK dalam tabelBANK_ACCOUNTS bisa menunjuk ke sebuah meja BANK berisi informasi bank seperti alamat dan nomor telepon. Tabel PERUSAHAAN dapat dikaitkan dengan tabel lain (atau database untuk hal ini) yang berisi informasi tentang perusahaan dan produk-produknya.

    Latihan 9,1

    Mari kita luangkan waktu untuk mempelajari sebuah desain database yang salah menggunakan informasi yang sama yang terkandung dalam BILLS, BANK_ACCOUNTS, dan tabel PERUSAHAAN.Kesalahan banyak pengguna awal membuat tidak menghancurkan data mereka ke dalam kelompok logis sebanyak mungkin. Misalnya, satu meja yang dirancang buruk BILLS mungkin terlihat seperti ini:

    Nama Kolom Komentar
    NAMA, CHAR (30) Nama perusahaan yang tagihan adalah utang
    JUMLAH, NOMOR Jumlah tagihan dalam dolar
    Account_id, NOMOR Rekening bank jumlah tagihan (terkait dengan BANK_ACCOUNTS tabel)
    ALAMAT, CHAR (30) Alamat tagihan adalah perusahaan yang utang
    KOTA, CHAR (15) Kota adalah perusahaan yang tagihan utang
    NEGARA, CHAR (2) Negara adalah perusahaan yang tagihan utang

    Hasilnya mungkin terlihat benar, tapi luangkan waktu untuk benar-benar melihat data di sini. Jika selama beberapa bulan Anda menulis tagihan beberapa perusahaan di bidang NAMA, setiap kali rekor baru telah ditambahkan untuk tagihan, perusahaan ALAMAT, KOTA , dan NEGARA informasi akan diduplikasi. Sekarang kalikan duplikasi bahwa lebih dari beberapa ratus atau ribu catatan dan kemudian kalikan angka tersebut dengan 10 20,, atau 30 tabel. Anda dapat mulai melihat pentingnya normalisasi database dengan benar.

    Sebelum Anda benar-benar isi tabel ini dengan data, Anda akan perlu tahu cara membuat tabel.

    The CREATE TABLE Pernyataan

    Proses membuat tabel jauh lebih standar daripada pernyataan CREATE DATABASE. Berikut sintaks dasar untuk pernyataan CREATE TABLE:

    Sintaks:
      CREATE TABLE table_name 
      (Field1 [datatype NOT NULL], 
            field2 [datatype NOT NULL], 
            field3 [datatype NOT NULL ]...) 
    

    Sebuah contoh sederhana dari pernyataan berikut CREATE TABLE.

    INPUT / OUTPUT:
      SQL> CREATE TABLE BILLS ( 
        2 NAME CHAR (30), 
        3 JUMLAH NOMOR, 
        4 account_id NUMBER); 
    
      Tabel dibuat. 
    
    ANALISIS:

    Pernyataan ini membuat sebuah tabel bernama BILLS. Dalam tabel BILLS tiga bidang: NAMA, JUMLAH, dan account_id. Bidang NAME memiliki tipe data karakter dan string dapat menyimpan hingga 30 karakter. The JUMLAH dan bidang account_id dapat berisi nilai angka saja.

    Bagian berikut membahas komponen dari perintah CREATE TABLE.

    Tabel Nama

    Ketika membuat tabel menggunakan Pribadi Oracle7, beberapa kendala berlaku ketika penamaan meja. Pertama, nama tabel boleh ada lebih dari 30 karakter. Oracle Karena peka terhadap huruf, Anda dapat menggunakan salah satu huruf besar atau huruf kecil untuk karakter individu. Namun, karakter pertama dari nama harus surat antara A dan Z. Karakter tersisa bisa huruf atau _simbol, #, $, dan @. Tentu saja, nama tabel harus unik dalam skema tersebut. Nama juga tidak dapat menjadi salah satu Oracle atau SQL dilindungi kata-kata (seperti SELECT).


    CATATAN: Anda dapat memiliki duplikat nama tabel sebagai panjang sebagai pemilik atau skema berbeda. Nama tabel dalam skema yang sama harus unik.


    Field Nama

    Kendala-kendala yang sama yang berlaku untuk nama tabel juga berlaku untuk nama field basis data. Namun, lapangan nama dapat ditiru di dalam. pembatasan adalah bahwa nama field harus unik dalam tabel tersebut. Sebagai contoh, asumsikan bahwa Anda memiliki dua tabel dalam database Anda: TABLE1 dan TABLE2. Kedua tabel ini bisa memiliki bidang yang disebut ID. Anda tidak bisa, bagaimanapun, memiliki dua bidang dalam TABLE1 disebut ID, bahkan jika mereka adalah jenis data yang berbeda.

    Field Tipe Data

    Jika Anda pernah diprogram dalam bahasa apapun, Anda akrab dengan konsep tipe data, atau jenis data yang akan disimpan dalam suatu bidang tertentu. Misalnya, tipe data karakter merupakan sebuah bidang yang menyimpan data string karakter saja. Tabel 9.2 menunjukkan jenis data yang didukung oleh Personal Oracle7.

    Tabel 9.2. jenis data yang didukung oleh Personal Oracle7.

    Jenis Data Komentar
    CHAR Data alfanumerik dengan panjang antara 1 dan 255 karakter. Spasi melangkah ke kanan nilai untuk melengkapi dialokasikan panjang total kolom.
    DATE Termasuk sebagai bagian dari tanggal adalah abad, tahun, bulan, hari, jam, menit, dan detik.
    PANJANG Variabel string alfanumerik-panjang sampai 2 gigabyte. (Lihat catatan berikut.)
    PANJANG RAW Binary data hingga 2 gigabyte. (Lihat catatan berikut.)
    NOMOR Angka 0, positif atau negatif tetap atau floating-point data.
    RAW Binary data sampai dengan 255 byte.
    ROWID String heksadesimal mewakili alamat unik sebuah baris dalam tabel. (Lihat catatan berikut.)
    VARCHAR2 data alfanumerik yang panjang variabel; field ini harus antara 1 dan 2.000 karakter.

    CATATAN: Tipe data PANJANG sering disebut tipe data MEMO dalam sistem manajemen basis data lainnya. Hal ini terutama digunakan untuk menyimpan sejumlah besar teks untuk pencarian pada beberapa waktu kemudian.Jenis data RAW PANJANG sering disebut sebuah objek besar biner (BLOB) dalam sistem manajemen basis data lainnya. Hal ini biasanya digunakan untuk menyimpan grafik, suara, atau data video. Meskipun sistem manajemen database relasional tidak awalnya dirancang untuk melayani jenis data, saat ini banyak sistem multimedia menyimpan data mereka diRAW PANJANG, atau blob, ladang.

    Jenis ROWID lapangan digunakan untuk memberikan setiap record dalam tabel Anda yang unik, nonduplicating nilai. Banyak sistem database lain mendukung konsep dengan lapanganCOUNTER (Microsoft Access) atau medan IDENTITAS (SQL Server).



    CATATAN: Periksa pelaksanaan untuk jenis data yang didukung karena dapat bervariasi.


    Nilai NULL

    SQL juga memungkinkan Anda untuk mengidentifikasi apa yang dapat disimpan dalam kolom. Sebuah nilai NULL hampir oksimoron, karena memiliki lapangan dengan nilai NULL berarti bahwa lapangan sebenarnya tidak memiliki nilai yang tersimpan di dalamnya.

    Ketika bangunan meja, sistem database yang paling memungkinkan Anda untuk menunjukkan kolom dengan kata kunci NULL TIDAK. NOT NULL berarti kolom tidak dapat berisi nilai NULL untuk setiap record dalam tabel. Sebaliknya, TIDAK NULL berarti bahwa setiap catatan harus memiliki nilai aktual dalam kolom ini. Contoh berikut menggambarkan penggunaan kata kunci NULL TIDAK.

    INPUT:
      SQL> CREATE TABLE BILLS ( 
       2 NAME CHAR (30) NOT NULL, 
       3 JUMLAH NOMOR, 
       4 account_id NOT NULL); 
    
    ANALISIS:

    Dalam tabel ini, Anda ingin menyimpan nama perusahaan Anda berutang uang untuk, bersama dengan jumlah tagihan itu. Jika bidang NAMA dan / atau account_id tidak disimpan, catatan akan menjadi tidak berarti. Anda akan berakhir dengan catatan dengan tagihan, namun Anda akan tidak tahu siapa yang harus Anda bayar.

    Pernyataan pertama dalam contoh berikut menyisipkan catatan yang berisi data yang valid untuk tagihan yang akan dikirim ke Joe Layanan Komputer sebesar $ 25.

    INPUT / OUTPUT:
      SQL> INSERT INTO NILAI BILLS ("Layanan Komputer Joe", 25, 1); 
    
      1 baris dimasukkan.
    INPUT / OUTPUT:
      SQL> INSERT INTO NILAI BILLS ("", 25000, 1); 
    
      1 baris dimasukkan. 
    
    ANALISIS:

    Perhatikan bahwa catatan kedua dalam contoh sebelumnya tidak mengandung nilai NAMA. (Anda mungkin berpikir bahwa penerima pembayaran yang hilang adalah untuk keuntungan Anda karena jumlah tagihan adalah $ 25.000, tetapi kami tidak akan mempertimbangkan bahwa mengangkat.) Yang Jika tabel telah diciptakan dengan NULL TIDAK nilai untuk bidang NAMA, kedua masukkan akan kesalahan.

    Aturan praktis yang baik adalah bahwa bidang kunci utama dan semua kolom kunci asing tidak boleh berisi nilai NULL.

    Unik Fields

    Salah satu tujuan desain Anda harus memiliki satu kolom yang unik dalam setiap tabel. Ini kolom atau bidang adalah bidang kunci primer. Beberapa sistem manajemen database memungkinkan Anda untuk mengatur medan sebagai unik. Sistem manajemen basis data lainnya, seperti Oracle dan SQL Server, memungkinkan Anda untuk membuat indeks yang unik di lapangan. (Lihat Hari 10 fitur. Ini) membuat Anda memasukkan nilai-nilai field kunci duplikat ke dalam database.

    Anda harus memperhatikan beberapa hal ketika memilih bidang kunci. Seperti yang telah disebutkan, Oracle menyediakan lapangan ROWID yang bertambah untuk setiap baris yang ditambahkan, yang membuat bidang ini secara default selalu sebuah kunci yang unik. Bidang ROWID melakukan bidang utama yang sangat baik karena beberapa alasan. Pertama, adalah lebih cepat untuk bergabung pada sebuah nilai integer dari pada-karakter string 80. Hasil tersebut bergabung dalam ukuran database lebih kecil dari waktu ke waktu jika Anda menyimpan nilai integer di setiap dan asing kunci utama yang bertentangan dengan nilai CHAR panjang. Keuntungan lainnya adalah bahwa Anda dapat menggunakan ROWID bidang untuk melihat bagaimana meja diatur. Juga, menggunakan nilai CHAR daun Anda terbuka untuk sejumlah masalah entri data. Sebagai contoh, apa yang akan terjadi jika satu orang masuk 111 First Street, yang lain masuk 111 1 Street, dan lagi-lagi masuk 111 First St? Dengan lingkungan grafis pengguna hari ini, string yang benar bisa dimasukkan ke dalam kotak daftar. Ketika seorang pengguna membuat pilihan dari daftar kotak, kode tersebut akan mengkonversi string ini ke sebuah ID yang unik dan menyimpan ID ini untuk database.

    Sekarang Anda dapat membuat tabel yang Anda gunakan tadi pagi. Anda akan menggunakan tabel ini selama sisa hari ini, jadi Anda akan ingin mengisinya dengan beberapa data. Gunakan perintah INSERT tertutup kemarin untuk memuat tabel dengan data pada Tabel 9.3, 9.4, dan 9,5.

    INPUT / OUTPUT:
      SQL> membuat database PEMBAYARAN; 
    
      Pernyataan diproses. 
    
      SQL> BILLS membuat tabel ( 
        2 NAME CHAR (30) NOT NULL, 
        3 JUMLAH NOMOR, 
        4 account_id NUMBER NOT NULL); 
    
      Tabel dibuat. 
    
      SQL> BANK_ACCOUNTS membuat tabel ( 
        2 NOMOR account_id NOT NULL, 
        3 JENIS CHAR (30), 
        4 NERACA NOMOR, 
        5 BANK CHAR (30)); 
    
      Tabel dibuat. 
    
      SQL> membuat tabel PERUSAHAAN ( 
        2 NAME CHAR (30) NOT NULL, 
        3 ALAMAT CHAR (50), 
        4 CHAR KOTA (30), 
        5 CHAR NEGARA (2)); 
    
      Tabel dibuat. 
    

    Tabel 9.3. Contoh data untuk tabel BILLS.

    Nama Jumlah Account_id
    Telepon Perusahaan 125 1
    Power Company 75 1
    Rekam Club 25 2
    Software Perusahaan 250 1
    Perusahaan TV kabel 35 3

    Tabel 9.4. Contoh data untuk tabel BANK_ACCOUNTS.

    Account_id Jenis Keseimbangan Pita
    1 Memeriksa 500 Pertama Federal
    2 Pasar uang 1200 Pertama Investor
    3 Memeriksa 90 Credit Union

    Tabel 9.5. Contoh data untuk tabel PERUSAHAAN.

    Nama Alamat Kota Negara
    Telepon Perusahaan 111 1 Street Atlanta GA
    Power Company 222 2 Street Jacksonville FL
    Rekam Club 333 3 Avenue Los Angeles CA
    Software Perusahaan 444 4 Drive San Francisco CA
    Perusahaan TV kabel 555 5 Drive Austin TX

    Tabel Penyimpanan dan Ukuran

    Kebanyakan RDBMSs utama memiliki setting default untuk ukuran meja dan lokasi tabel. Jika Anda tidak menentukan ukuran meja dan lokasi, kemudian meja akan mengambil default. The default mungkin sangat tidak diinginkan, terutama untuk tabel besar. default ukuran dan lokasi akan bervariasi antara implementasi. Berikut adalah contoh dari pernyataan CREATE TABLE dengan klausa penyimpanan (dari Oracle).

    INPUT:
     SQL> CREATE TABLE tablename 2 (NOT NULL CHAR COLUMN1, 3 COLUMN2 NOMOR, 4 COLUMN3 DATE) 5 tablespace Tablespace NAMA 6 PENYIMPANAN 7 AWAL UKURAN, 8 NEXT UKURAN, 9 MINEXTENTS nilai, 10 MAXEXTENTS nilai, 11 PCTINCREAS E nilai);
    OUTPUT:
      Tabel dibuat. 
    
    ANALISIS:

    Dalam Oracle Anda dapat menentukan tablespace di mana Anda ingin meja untuk tinggal. Satu keputusan biasanya dibuat sesuai dengan ruang yang tersedia, sering oleh database administrator (DBA) UKURAN. AWAL adalah ukuran untuk tingkat awal tabel (yang awal ruang yang dialokasikan) UKURAN. BERIKUTNYA adalah nilai untuk setiap luasan tambahan meja dapat berlangsung melalui pertumbuhan. MINEXTENTS dan MAXEXTENTS mengidentifikasi luasan maksimum dan minimum yang diizinkan untuk meja, dan PCTINCREASE mengidentifikasi persentase tingkat berikutnya akan meningkat setiap kali meja tumbuh, atau mengambil batas lain.

    Membuat Tabel dari Tabel Ada

    Yang paling umum cara untuk membuat tabel adalah dengan perintah CREATE TABLE. Namun, sistem manajemen database beberapa memberikan metode alternatif untuk menciptakan tabel, menggunakan format dan data dari tabel yang ada. Metode ini berguna bila Anda ingin memilih data dari meja untuk modifikasi sementara. Hal ini juga dapat berguna saat Anda harus membuat tabel yang sama ke tabel yang ada dan mengisinya dengan data yang sama. (Anda tidak perlu masuk kembali semua informasi ini Oracle.) Sintaks untuk berikut.

    Sintaks:
     CREATE TABLE NEW_TABLE (FIELD1, FIELD2, FIELD3) AS (SELECT FIELD1, FIELD2, FIELD3 DARI <WHERE...> OLD_TABLE

    sintaks ini memungkinkan Anda untuk membuat sebuah meja baru dengan jenis data yang sama dengan kolom yang dipilih dari meja tua. Hal ini juga memungkinkan Anda untuk mengubah nama field dalam tabel baru dengan memberi mereka nama-nama baru.

    INPUT / OUTPUT:
      SQL> CREATE TABLE NEW_BILLS (NAMA, JUMLAH, account_id) 
        2 AS SELECT * (BILLS FROM WHERE JUMLAH <50); 
    
      Tabel dibuat. 
    
    ANALISIS:

    Pernyataan sebelumnya membuat tabel baru (NEW_BILLS) dengan semua catatan dari meja BILLS yang AMOUNT sebuah kurang dari 50.

    Beberapa sistem database juga memungkinkan Anda untuk menggunakan sintaks berikut:

    Sintaks:
      INSERT NEW_TABLE 
      SELECT <field1, field2 ...  | *> Dari OLD_TABLE 
      <WHERE...> 
    

    Sintaks sebelumnya akan membuat tabel baru dengan struktur lapangan tepat dan data yang ditemukan di meja tua. Menggunakan-SQL server Transact SQL dalam contoh berikut menggambarkan teknik ini.

    INPUT:
      INSERT NEW_BILLS 
      1 * pilih> dari BILLS mana JUMLAH <50 
      2> pergi 
    

    (Pernyataan GO di SQL Server memproses pernyataan SQL dalam buffer perintah;. Hal ini setara dengan titik koma () digunakan dalam Oracle7.)

    TABLE Pernyataan

    Berkali-kali desain database Anda tidak menjelaskan segala sesuatu yang seharusnya. Selain itu, persyaratan untuk aplikasi dan database selalu berubah. ALTER TABLE pernyataan itu memungkinkan administrator database atau desainer untuk mengubah struktur dari tabel setelah ini telah diciptakan.

    ALTER TABLE Perintah ini memungkinkan Anda untuk melakukan dua hal:

    • Tambahkan kolom ke tabel yang ada
    • Mengubah kolom yang sudah ada

    Sintaks untuk pernyataan ALTER TABLE adalah sebagai berikut:

    Sintaks:
      ALTER TABLE table_name 
        <ADD column_name data_type; | 
        Memodifikasi column_name data_type;> 
    

    Perubahan perintah berikut bidang NAMA tabel BILLS untuk menahan 40 karakter:

    INPUT / OUTPUT:
      SQL> ALTER TABLE BILLS 
        2 memodifikasi NAME CHAR (40); 
    
      Tabel diubah. 
    

    CATATAN: Anda dapat menambah atau mengurangi panjang kolom, namun Anda tidak dapat mengurangi kolom yang panjang jika ukuran saat ini salah satu nilai yang lebih besar dari nilai yang ingin Anda tetapkan ke panjang kolom.


    Berikut pernyataan untuk menambahkan kolom baru ke tabel NEW_BILLS:

    INPUT / OUTPUT:
      SQL> TABLE NEW_BILLS ALTER 
        2 ADD COMMENTS CHAR (80); 
    
      Tabel diubah. 
    
    ANALISIS:

    Pernyataan ini akan menambahkan kolom baru bernama COMMENTS mampu memegang 80 karakter. lapangan itu akan ditambahkan ke kanan semua bidang yang ada.

    Beberapa pembatasan berlaku untuk menggunakan ALTER TABLE pernyataan. Anda tidak dapat menggunakannya untuk menambah atau menghapus field dari database. Hal ini dapat mengubah kolom dari NULL TIDAK NULL, tetapi belum tentu sebaliknya. Sebuah spesifikasi kolom dapat diubah dari TIDAK NULL NULL hanya jika kolom tersebut tidak mengandung nilai NULL. Untuk mengubah kolom dari NOT NULL ke NULL, gunakan sintaks berikut:

    Sintaks:
      ALTER TABLE table_name memodifikasi (column_name data_type NULL); 
    

    Untuk mengubah kolom dari NULL untuk TIDAK NULL, Anda mungkin harus mengambil beberapa langkah:

    1. Tentukan apakah kolom mempunyai nilai NULL.
    2. Menemukan. Deal dengan NULL nilai-nilai yang Anda. (Hapus catatan-catatan, update kolom yang nilai, dan sebagainya.)
    3. Masalah ALTER TABLE perintah.

    CATATAN: Beberapa sistem manajemen basis data mengizinkan penggunaan klausa memodifikasi; lainnya tidak. Masih lain telah menambahkan klausa lain untuk ALTER TABLElaporan. Dalam Oracle, Anda bahkan dapat mengubah parameter storage meja. Periksa dokumentasi sistem yang Anda gunakan untuk menentukan pelaksanaan ALTER TABLEpernyataan.


    Pernyataan itu TABLE DROP

    SQL menyediakan perintah untuk menghapus sebuah tabel dari database. The TABLE DROP perintah menghapus tabel beserta semua pandangan yang terkait dan indeks.. (Lihat Hari 10 untuk rincian) Setelah perintah ini telah diterbitkan, tidak ada jalan kembali. Yang umum menggunakan sebagian besar pernyataan DROP TABLE adalah ketika Anda telah membuat tabel untuk digunakan sementara. Ketika Anda telah menyelesaikan semua operasi di atas meja yang Anda rencanakan untuk lakukan, masalah pernyataan TABLE DROP dengan sintaks berikut:

    Sintaks:
      DROP TABLE table_name; 
    

    Berikut adalah cara untuk drop tabel NEW_BILLS:

    INPUT / OUTPUT:
      SQL NEW_BILLS DROP TABLE>; 
    
      Tabel menjatuhkan. 
    
    ANALISIS:

    Perhatikan tidak adanya sistem prompt. Perintah ini tidak bertanya Apakah Anda yakin? (Y / N). Setelah perintah DROP TABLE dikeluarkan, tabel ini dihapus secara permanen.


    PERINGATAN: Jika Anda masalah

     SQL NEW_BILLS DROP TABLE>;

    Anda dapat menjatuhkan meja yang salah. Ketika tabel menjatuhkan, Anda harus selalu menggunakan atau nama pemilik skema. Sintaks yang disarankan adalah

      SQL OWNER.NEW_BILLS DROP TABLE>;

    Kami menekankan sintaks ini karena kami pernah memiliki untuk memperbaiki database produksi dari tabel yang salah yang terjatuh. Meja itu tidak benar diidentifikasi dengan nama skema. Memulihkan database adalah delapan jam kerja, dan kami harus bekerja sampai tengah malam sudah lewat.


    Pernyataan itu DROP DATABASE

    Beberapa sistem manajemen database juga memberikan pernyataan DROP DATABASE, yang identik dalam penggunaan dengan pernyataan DROP TABLE. Sintaks untuk pernyataan ini adalah sebagai berikut:

      DROP DATABASE database_name 
    

    Jangan jatuhkan database BILLS sekarang karena Anda akan menggunakannya untuk sisa hari ini, serta pada Hari ke-10.


    CATATAN: Database relasional implementasi berbagai mengharuskan Anda untuk mengambil langkah-erent diff untuk drop database. Setelah database terjatuh, Anda perlu membersihkan file-file sistem operasi yang membentuk basis data.


    Latihan 9,2

    Buat database dengan satu tabel di dalamnya. Masalah perintah DROP TABLE, dan DROP DATABASE masalah perintah. Apakah sistem database Anda memungkinkan Anda untuk melakukan hal ini?-File berbasis sistem tunggal, seperti Microsoft Access, tidak mendukung perintah ini. Basis data yang terkandung dalam satu file. Untuk membuat database, Anda harus menggunakan pilihan menu yang disediakan di produk itu sendiri. Untuk menghapus database, cukup hapus file dari hard drive.

    Ringkasan

    Hari 9 meliputi fitur-fitur utama dari SQL’s Data Manipulasi Language (DML). Secara khusus, Anda belajar lima laporan baru: CREATE DATABASE, CREATE TABLE, ALTER TABLE, DROP TABLE, danDROP DATABASE.'s Pelajaran Hari ini juga membahas pentingnya menciptakan desain database yang baik.

    Sebuah kamus data adalah salah satu bagian yang paling penting dari dokumentasi Anda dapat membuat saat mendesain database. Kamus ini harus menyertakan keterangan lengkap tentang semua objek dalam database: tabel, bidang, pandangan, indeks, prosedur tersimpan, pemicu, dan sebagainya. Sebuah kamus data lengkap juga berisi komentar singkat menjelaskan tujuan di balik setiap item dalam database. Anda harus memperbarui data kamus setiap kali Anda membuat perubahan ke database.

    Sebelum menggunakan salah satu dari laporan manipulasi data, juga penting untuk menciptakan sebuah rancangan database yang baik. Memecah informasi yang diperlukan ke dalam kelompok logis dan mencoba untuk mengidentifikasi bidang kunci utama bahwa kelompok-kelompok (atau tabel) dapat digunakan untuk referensi grup ini logis. asing bidang kunci Gunakan untuk menunjuk ke kunci asing ladang atau utama dalam tabel lainnya.

    Anda tahu bahwa pernyataan CREATE DATABASE bukanlah elemen standar dalam sistem database. Variasi ini terutama disebabkan oleh berbagai cara menyimpan database mereka vendor pada disk. Setiap memungkinkan pelaksanaan yang berbeda-beda fitur dan pilihan, yang menghasilkan pernyataan CREATE DATABASE sama sekali berbeda. Cukup mengeluarkan database_name CREATE DATABASE membuat default database dengan ukuran default pada kebanyakan sistem. Pernyataan itu DROP DATABASE secara permanen menghapus database tersebut.

    Pernyataan CREATE TABLE membuat tabel baru. Dengan perintah ini, Anda dapat membuat bidang yang Anda butuhkan dan mengidentifikasi jenis data mereka. Beberapa sistem manajemen database juga memungkinkan Anda untuk menentukan atribut lainnya untuk bidang, seperti apakah itu bisa membiarkan nilai NULL atau apakah bidang yang harus unik sepanjang meja. The pernyataan ALTER TABLE dapat mengubah struktur dari tabel yang ada. Pernyataan itu DROP TABLE dapat menghapus tabel dari database.

    Sumber ; http://www.webbasedprogramming.com

    Older Entries