Cheat Sheet SQL dan PL/SQL Oracle
Cheat Sheet SQL dan PL/SQL Oracle
Lembar contekan ini mencakup sebagian besar fungsi dasar yang dibutuhkan DBA Oracle untuk menjalankan kueri dasar
dan melakukan tugas dasar. Ini juga berisi informasi yang sering digunakan oleh programmer PL/SQL untuk menulis
prosedur yang disimpan. Sumber daya ini berguna sebagai pengantar bagi individu yang baru mengenal Oracle, atau sebagai
referensi bagi mereka yang berpengalaman menggunakan Oracle.
Banyak informasi tentang Oracle tersedia di seluruh internet. Kami mengembangkan sumber daya ini untuk membuatnya
lebih mudah bagi programmer dan DBA untuk menemukan sebagian besar dasar-dasar di satu tempat. Topik di luar cakupan
"cheatsheet" umumnya menyediakan tautan untuk penelitian lebih lanjut.
Referensi XML Oracle-- referensi XML masih dalam tahap awal, tetapi sedang berkembang dengan baik.
Daftar Isi
1 PILIH
2 PILIH KE DALAM
3 INSERT
4 HAPUS
5 PEMBARUAN
5.1 Menetapkan batasan pada sebuah tabel
5.2 Indeks unik pada tabel
6 URUTAN
6.1 BUAT SEKUENS
6.2 UBAH SEKUENSI
7 Menghasilkan kueri dari sebuah string
8 Operasi string
8.1 Panjang
8.2 Instr
8.3 Ganti
8.4 Substr
8.5 Trim
9 DDL SQL
9.1 Tabel
9.1.1 Buat tabel
9.1.2 Tambahkan kolom
9.1.3 Ubah kolom
9.1.4 Hapus kolom
9.1.5 Batasan
[Link] Jenis dan kode batasan
[Link] Menampilkan batasan
[Link] Memilih batasan referensial
[Link] Membuat batasan unik
[Link] Menghapus batasan
9.2 INDEKS
9.2.1 Membuat indeks
9.2.2 Buat indeks berbasis fungsi
9.2.3 Ganti Nama Indeks
9.2.4 Mengumpulkan statistik pada suatu indeks
9.2.5 Hapus indeks
10 Terkait DBA
10.1 Manajemen Pengguna
10.1.1 Membuat pengguna
10.1.2 Pemberian hak istimewa
10.1.3 Ganti kata sandi
10.2 Impor dan ekspor
10.2.1 Impor file dump menggunakan IMP
11 PL/SQL
11.1 Operator
11.1.1 Operator aritmatika
[Link] Contoh
11.1.2 Operator perbandingan
[Link] Contoh
11.1.3 Operator string
11.1.4 Operator tanggal
11.2 Jenis
11.2.1 Tipe Dasar PL/SQL
11.2.2 %TIPE - deklarasi variabel tipe terikat
11.2.3 Koleksi
11.3 Logika yang Disimpan
11.3.1 Fungsi
11.3.2 Prosedur
11.3.3 blok anonim
11.3.4 Mengoper parameter ke logika tersimpan
[Link] Notasi posisi
[Link] Notasi bernama
[Link] Notasi campuran
11.3.5 Fungsi tabel
11.4 Kontrol aliran
11.4.1 Operator Bersyarat
11.4.2 Contoh
11.4.3 Jika/kemudian/selain itu
11.5 Array
11.5.1 Array Asosiatif
11.5.2 Contoh
12 APEX
12.1 Substitusi string
13 Tautan eksternal
14 Wikibook Lainnya
PILIH
Pernyataan SELECT digunakan untuk mengambil baris yang dipilih dari satu atau lebih tabel, tabel objek, tampilan,
tampilan objek, atau tampilan materialisasi.
PILIH *
DARI minuman
DIMANA field1 = 'Kona'
DAN field2 = 'kopi'
DAN field3 = 122;
PILIH KE DALAM
Pilih menjadi mengambil nilai nama, alamat dan nomor telepon dari tabel karyawan, dan menempatkannya
ke dalam variabel v_employee_name, v_employee_address, dan v_employee_phone_number.
Ini hanya berfungsi jika kueri cocok dengan satu item. Jika kueri tidak mengembalikan baris, itu akan menimbulkan
Pengecualian built-in NO_DATA_FOUND. Jika kueri Anda mengembalikan lebih dari satu baris, Oracle mengeluarkan
eksepsi TERLALU_BANYAK_BARIS.
SISIPKAN
Pernyataan INSERT menambahkan satu atau lebih baris data baru ke tabel basis data.
HAPUS
Pernyataan DELETE digunakan untuk menghapus baris dalam sebuah tabel.
PERBARUI
Pernyataan UPDATE digunakan untuk memperbarui baris dalam sebuah tabel.
memperbarui kolom faktur sebagai dibayar ketika kolom dibayar memiliki lebih dari nol.
Sintaksis untuk membuat batasan cek menggunakan pernyataan CREATE TABLE adalah:
Sebagai contoh:
Sintaksis untuk membuat batasan unik menggunakan pernyataan CREATE TABLE adalah:
Misalnya:
TABEL DIBUAT
SQL> ALTER TABLE OPP ADD CONSTRAINT OPP_ID_UK UNIQUE(ID);
TABEL DIUBAH
URUTAN
Urutan adalah objek basis data yang dapat digunakan oleh banyak pengguna untuk menghasilkan bilangan bulat unik. Urutan
generator menghasilkan nomor urut, yang dapat membantu secara otomatis menghasilkan kunci primer yang unik, dan
koordinasikan kunci di antara beberapa baris atau tabel.
BUAT SEKUENS
Sebagai contoh:
Ubah Urutan
Terkadang perlu untuk membuat kueri dari string. Artinya, jika programmer ingin membuat kueri
pada saat runtime (menghasilkan kueri Oracle secara langsung), berdasarkan seperangkat keadaan tertentu, dll.
Perhatian harus diambil untuk tidak menyisipkan data yang diberikan pengguna langsung ke dalam string kueri dinamis, tanpa terlebih dahulu
memeriksa data dengan sangat ketat untuk karakter pelarian SQL; jika tidak, Anda akan menghadapi risiko signifikan untuk mengaktifkan
serangan injeksi data pada kode Anda.
Ini adalah contoh yang sangat sederhana tentang bagaimana kueri dinamis dilakukan. Tentu saja, ada banyak cara yang berbeda.
untuk melakukan ini; ini hanyalah contoh dari fungsionalitas.
v_query varchar2(5000);
v_nama varchar2(64);
MULAI
v_query := 'PILIH nama DARI karyawan DIMANA employee_id=5';
BUKA l_cursor UNTUK v_query;
GILIRAN
AMBIL l_cursor KE dalam v_name;
KELUAR KETIKAl_cursor%TIDAKDITEMUKAN;
Akhir LOOP;
TUTUP l_cursor;
AKHIR;
Operasi string
Panjang
Length mengembalikan sebuah bilangan bulat yang mewakili panjang dari sebuah string yang diberikan. Ini dapat dirujuk sebagai: lengthb,
lengthc,length2, danlength4.
panjang( string1 );
Instr mengembalikan sebuah bilangan bulat yang menentukan lokasi dari sub-string dalam sebuah string. Programmer dapat
menentukan tampilan mana dari string yang ingin mereka deteksi, serta posisi awal. Sebuah ketidakberhasilan
pencarian menghasilkan 0.
Ganti
Ganti melihat melalui sebuah string, mengganti satu string dengan yang lain. Jika tidak ada string lain yang ditentukan, itu menghapus
string yang ditentukan dalam parameter string pengganti.
Substr
Substr mengembalikan sebagian dari string yang diberikan. "start_position" bersifat 1-based, bukan 0-based. Jika "start_position"
adalah negatif, substr menghitung dari akhir string. Jika "panjang" tidak diberikan, substr secara default menjadi
panjang sisa dari string.
mengembalikanpl/sqlkarena "p" dalam "pl/sql" berada di posisi ke-8 dalam string (menghitung dari 1 pada
o dalam "oracle"
mengembalikanlembar contekankarena "c" berada di posisi ke-15 dalam string dan "t" adalah karakter terakhir dalam
string.
Pangkas
Fungsi-fungsi ini dapat digunakan untuk memfilter karakter yang tidak diinginkan dari string. Secara default, mereka menghapus spasi, tetapi
set karakter dapat ditentukan untuk dihapus juga.
DDL SQL
Meja
Buat tabel
Misalnya:
Tambahkan kolom
Misalnya:
Sebagai contoh:
Hapus kolom
Sebagai contoh:
Keterbatasan
Menampilkan batasan
PILIH
nama_tabel
nama_konstraint
tipe_konstraint
DARI user_constraints;
pilih * nama_tabel;
Pernyataan berikut menunjukkan semua batasan referensial (kunci asing) dengan sumber dan
pasangan tabel/kolom tujuan:
PILIH
c_list.CONSTRAINT_NAME sebagai NAMA,
c_src.TABLE_NAME sebagai SRC_TABLE
c_src.COLUMN_NAME sebagai SRC_COLUMN
c_dest.TABLE_NAME sebagai DEST_TABLE,
c_dest.COLUMN_NAME
DARI SEMUA_KONSTRIAN c_list,
SEMUA_KONS_COL c_src,
SEMUA_KOLOM_KONS c_dest
DI MANA c_list.CONSTRAINT_NAME = c_src.CONSTRAINT_NAME
DAN c_list.R_CONSTRAINT_NAME = c_dest.CONSTRAINT_NAME
DAN c_list.CONSTRAINT_TYPE = 'R'
GROUP BY c_list.CONSTRAINT_NAME,
c_src.NAMA_TABEL,
c_src.NAMA_KOLOM,
c_dest.NAMA_TABEL,
c_dest.NAMA_KOLOM;
Sebagai contoh:
Menghapus batasan
Sebagai contoh:
INDIKATOR
Indeks adalah metode yang mengambil catatan dengan efisiensi yang lebih besar. Indeks membuat entri untuk setiap
nilai yang muncul di kolom yang diindeks. Secara default, Oracle membuatPohon Bindeks.
Buat indeks
UNIQUE menunjukkan bahwa kombinasi nilai dalam kolom yang diindeks harus unik.
KOMPUTE STATISTIK memberi tahu Oracle untuk mengumpulkan statistik selama pembuatan indeks. Statistik
kemudian digunakan oleh pengoptimal untuk memilih rencana eksekusi yang optimal saat pernyataan dijalankan.
Sebagai contoh:
Dalam contoh ini, sebuah indeks telah dibuat pada tabel pelanggan yang disebut customer_idx. Ini hanya terdiri dari
field customer_name.
Di Oracle, Anda tidak dibatasi untuk hanya membuat indeks pada kolom. Anda dapat membuat indeks berbasis fungsi.
indeks.
Misalnya:
Untuk memastikan bahwa optimizer Oracle menggunakan indeks ini saat menjalankan pernyataan SQL Anda, pastikan bahwa
UPPER(customer_name) tidak mengevaluasi menjadi nilai NULL. Untuk memastikan ini, tambahkan
UPPER(customer_name) TIDAK NULL pada klausa WHERE Anda sebagai berikut:
Misalnya:
Jika Anda perlu mengumpulkan statistik tentang indeks setelah pertama kali dibuat atau Anda ingin memperbarui statistik, Anda
Anda selalu dapat menggunakan perintah ALTER INDEX untuk mengumpulkan statistik. Anda mengumpulkan statistik sehingga oracle dapat
gunakan indeks dengan cara yang efektif. Ini menghitung ulang ukuran tabel, jumlah baris, blok, segmen
dan memperbarui tabel kamus sehingga oracle dapat menggunakan data secara efektif saat memilih eksekusi
rencana.
Sebagai contoh:
Dalam contoh ini, statistik dikumpulkan untuk indeks yang disebut customer_idx.
Hapus indeks
Misalnya:
Terkait DBA
Manajemen Pengguna
Membuat pengguna
Sebagai contoh:
Misalnya:
Misalnya:
UBAHPENGGUNAbrianDIIDENTIFIKASIDENGANkatasandibrianpassword;
Perintah ini digunakan untuk mengimpor tabel Oracle dan data tabel dari file *.dmp yang dibuat oleh alat 'exp'.
Ingatlah bahwa ini adalah perintah yang dieksekusi dari baris perintah melalui $ORACLE_HOME/bin
dan tidak di dalam SQL*Plus.
imp KATA_KUNCI=nilai
Ada sejumlah parameter yang dapat Anda gunakan untuk kata kunci.
imp BANTUAN=ya
Sebuah contoh:
PL/SQL
Operator
(tidak lengkap)
Operator aritmatika
Penambahan: +
Pengurangan: -
Perkalian: *
Pembagian: /
Daya (hanya PL/SQL): **
Contoh
Operator perbandingan
Contoh
PILIH nama, gaji, email DARI karyawan DI MANA gaji > 40000;
Operator String
Gabungkan: ||
Operator tanggal
Penjumlahan: +
Pengurangan: -
Tipe
Tipe skalar (didefinisikan dalam paket STANDAR): ANGKA, KARAKTER, VARCHAR2, BOOLEAN,
BINARY_INTEGER, LONG\LONG RAW, TANGGAL, STAMPS WAKTU (dan keluarganya termasuk interval)
Tipe komposit (tipe yang ditentukan pengguna): TABEL, REKAM, TABEL NESTED dan VARRAY
Tipe data LOB: digunakan untuk menyimpan sejumlah besar data yang tidak terstruktur
Misalnya
nama [Link]%tipe; /* nama didefinisikan sebagai tipe yang sama dengan kolom 'judul' dari tabel Buku
Catatan:
Koleksi
Koleksi adalah sekelompok elemen yang teratur, semua dari jenis yang sama. Ini adalah konsep umum yang mencakup
daftar, array, dan tipe data lain yang familiar. Setiap elemen memiliki subskrip unik yang menentukan posisinya
dalam koleksi.
my_book_rec book_rec%TIPE;
my_book_rec_tab book_rec_tab%TIPE;
...
my_book_rec := my_book_rec_tab(5);
temukan_buku_penulis(my_book_rec.penulis);
...
Kecepatan eksekusi yang jauh lebih cepat, berkat peningkatan kinerja yang transparan termasuk yang baru
kompiler yang dioptimalkan, kompilasi native yang lebih terintegrasi, dan tipe data baru yang membantu dengan
aplikasi pengolahan angka.
Pernyataan FORALL, menjadi lebih fleksibel dan berguna. Misalnya, FORALL sekarang
mendukung indeks yang tidak berurutan.
Koleksi, ditingkatkan untuk mencakup hal-hal seperti perbandingan koleksi untuk kesetaraan dan dukungan untuk
operasi himpunan pada tabel bersarang.
lihat juga:
ADA
declaration_section
AWAL
bagian_eksekusi
kembalikan [nilai_kembali]
[PENGECUALIAN
bagian_pengecualian
AKHIR [nama_prosedur];
Misalnya:
SELESAI;
Prosedur
Sebuah prosedur berbeda dari sebuah fungsi karena ia tidak harus mengembalikan nilai kepada pemanggil.
Ketika Anda membuat prosedur atau fungsi, Anda dapat mendefinisikan parameter. Ada tiga jenis parameter.
itu dapat dinyatakan:
[Link]- Parameter dapat dirujuk oleh prosedur atau fungsi. Nilai parameter dapat
tidak akan ditimpa oleh prosedur atau fungsi.
[Link]- Parameter tidak dapat dirujuk oleh prosedur atau fungsi, tetapi nilai dari
parameter dapat ditimpa oleh prosedur atau fungsi.
[Link] OUT- Parameter dapat dirujuk oleh prosedur atau fungsi dan nilai dari
parameter dapat ditimpa oleh prosedur atau fungsi.
/* meskipun ada cara yang lebih baik untuk menghitung jumlah siswa, */
ini adalah kesempatan baik untuk menunjukkan kursor dalam aksi */
MULAI
BUKA student_cur;
LOOP
AMBIL student_cur KE student_rec;
KELUAR SAAT student_cur%TIDAK DITEMUKAN;
numberOfStudents := numberOfStudents + 1;
AKHIR LOOP;
TUTUP student_cur;
PEMBERIAN KEPEMIMPINAN
KAPAN ORANG LAIN MAKA
raise_application_error(-20001,'Terjadi kesalahan - '||SQLCODE||' -KESALAHAN- '||SQL
END DapatkanJumlahMahasiswa;
blok anonim
MENYATAKAN
x NOMOR(4) := 0;
MEMULAI
x := 1000;
MULAI
x := x + 100;
KECUALI
KAPAN ORANG LAIN
x := x + 2;
SELESAI;
x := x + 10;
dbms_output.put_line(x);
KECUALI
KETIKAORANG LAIN MAKA
x := x + 3;
AKHIR;
Ada tiga sintaks dasar untuk melewatkan parameter ke prosedur tersimpan: notasi posisi, bernama
notasi dan notasi campuran.
Contoh berikut memanggil prosedur ini untuk masing-masing sintaks dasar untuk pengoperasian parameter:
Notasi posisi
Tentukan parameter yang sama dalam urutan yang sama seperti yang dinyatakan dalam prosedur. Notasi ini adalah
kompak, tetapi jika Anda menentukan parameter (terutama literal) dalam urutan yang salah, bugnya bisa sulit untuk
deteksi. Anda harus mengubah kode Anda jika daftar parameter prosedur berubah.
Notasi bernama
Specify the name of each parameter along with its value. An arrow (=>) serves as the association operator.
Urutan parameter tidak signifikan. Notasi ini lebih verbose, tetapi membuat kode Anda lebih mudah untuk
baca dan pertahankan. Anda terkadang dapat menghindari mengubah kode jika daftar parameter prosedur berubah, untuk
contoh jika parameter diubah urutannya atau parameter opsional baru ditambahkan. Notasi bernama adalah baik
latihan untuk digunakan untuk kode apa pun yang memanggil API orang lain, atau mendefinisikan API untuk digunakan orang lain.
buat_pelanggan(p_alamat => '301 Anystreet', p_id => 33, p_nama => 'James Whitfield', p_telepon =
Notasi campuran
Tentukan parameter pertama dengan notasi posisi, kemudian beralih ke notasi bernama untuk parameter terakhir.
Anda dapat menggunakan notasi ini untuk memanggil prosedur yang memiliki beberapa parameter yang diperlukan, diikuti oleh beberapa
parameter opsional.
Fungsi tabel
Kontrol aliran
Operator Kondisional
DAN
atau
tidak
Contoh
Jika/kemudian/jika tidak
Array
Array asosiatif
Array dengan tipe yang kuat, berguna sebagai tabel dalam memori
Contoh
Contoh yang sangat sederhana, indeks adalah kunci untuk mengakses array jadi tidak perlu melakukan pengulangan.
seluruh tabel kecuali jika Anda bermaksud menggunakan data dari setiap baris array.
Indeks juga dapat berupa nilai numerik.
MENYATAKAN
--Array asosiatif yang diindeks dengan string:
MENYATAKAN
-- Jenis catatan
TIPE apollo_recADALAH REKAMAN
(
komandan VARCHAR2(100)
luncurkan TANGGAL
);
-- Tipe array asosiatif
TIPE apollo_type_arrADALAH TABEL DARI apollo_rec INDEKS OLEH VARCHAR2(100);
Variabel array asosiasi
apollo_arr apollo_type_arr;
MULAI
apollo_arr('Apollo 11').commander := 'Neil Armstrong';
Peluncuran Apollo 11 TO_DATE('16 Juli 1969','Bulan dd, yyyy');
apollo_arr('Apollo 12').commander := 'Pete Conrad';
Apollo 12 TO_DATE('14 November 1969','Bulan dd, yyyy');
apollo_arr('Apollo 13').commander := 'James Lovell';
Apollo 13 TO_DATE('April 11, 1970','Bulan dd, yyyy');
apollo_arr('Apollo 14').commander := 'Alan Shepard';
Apollo 14 TO_DATE('31 Januari 1971','Bulan dd, yyyy');
DBMS_OUTPUT.PUT_LINE(apollo_arr('Apollo 11').komandan);
DBMS_OUTPUT.PUT_LINE(apollo_arr('Apollo 11').peluncuran);
akhir;
/
-- Hasil cetak:
Neil Armstrong
16-JUL-69
APEX
Substitusi string
* Dalam SQL: :VARIABLE
* Dalam PL/SQL: V('VARIABEL') atau NV('VARIABEL')
* Dalam teks: &VARIABLE.
Tautan eksternal
Referensi PSOUG ([Link]
Pendahuluan ke SQL