SAP Tutorial HANA: Membuat Urutan
โก Ringkasan Cerdas
Buat Urutan di SAP HANA mendefinisikan objek basis data yang secara otomatis menghasilkan daftar nilai numerik yang bertambah. Parameter mengontrol nilai awal, penambahan, batasan, siklus, dan perilaku caching dari generator.

Apa itu Urutan?
Urutan adalah objek database yang secara otomatis menghasilkan daftar nilai numerik yang bertambah menurut aturan sebagaimana ditentukan dalam spesifikasi urutan.
Misalnya untuk memasukkan nomor pegawai secara otomatis pada kolom (EMPLOYEE_NO) Tabel, ketika ada record baru yang dimasukkan ke dalam tabel, maka kita menggunakan sequence.
Nilai urutan dihasilkan dalam urutan Ascending atau Descending.
Urutan tidak dikaitkan dengan tabel; mereka digunakan oleh aplikasi. Ada dua nilai secara berurutan โ
- CURRVAL โ Memberikan nilai Urutan Saat Ini.
- NEXTVAL โ Memberikan nilai urutan Berikutnya.
SINTAKSIS
CREATE SEQUENCE <sequence_name> [<sequence_parameter_list>] [RESET BY <subquery>]
ELEMEN SINTAKS
| UNSUR | DESKRIPSI |
|---|---|
| Itu adalah nama urutannya. | |
| [ ] | Ini menentukan satu atau lebih parameter urutan. |
| DIMULAI DARI | Ini menggambarkan nilai urutan awal. |
| PENINGKATAN OLEH | Ini menentukan nilai yang akan bertambah dari nilai terakhir yang ditetapkan setiap kali nilai urutan baru dihasilkan. Standarnya adalah 1. |
| NILAI MAKSIMUM | Ini menentukan nilai maksimum yang dapat dihasilkan oleh urutan tersebut. Nilainya bisa berkisar antara -4611686018427387903 dan 4611686018427387902. |
| TIDAK ADA NILAI MAKSIMAL | Jika NO MAXVALUE ditentukan, untuk urutan menaik, nilai maksimumnya adalah 4611686018427387903 dan nilai minimum untuk urutan menurun adalah -1. |
| NILAI MIN / TANPA NILAI MIN | Ini menentukan nilai minimum yang dapat dihasilkan oleh suatu urutan. Nilainya bisa berkisar antara -4611686018427387904 dan 4611686018427387902. Saat opsi NO MINVALUE digunakan, nilai minimum untuk urutan menaik adalah 1. |
| SIKLUS | Direktif CYCLE menentukan bahwa nomor urutan akan dimulai ulang setelah mencapai nilai maksimum atau minimumnya. |
| TANPA SIKLUS | Opsi default. Direktif NO CYCLE menentukan bahwa nomor urut tidak akan diurutkan ulang setelah mencapai nilai maksimum atau minimumnya. |
| CACHE | Ukuran cache menentukan rentang nomor urutan mana yang akan disimpan dalam cache di sebuah node. Harus berupa bilangan bulat tanpa tanda. |
| TANPA CACHE | Opsi default. Direktif NO CACHE menentukan bahwa nomor urutan tidak akan disimpan dalam cache di sebuah node. |
| SETEL ULANG OLEH | Ini menentukan bahwa selama restart database, database secara otomatis mengeksekusi dan nilai urutan dimulai ulang dengan nilai yang dikembalikan. |
Contoh -
Kita akan membuat sequence dengan nama DHK_SCHEMA.EMP_NO, yang akan membuat nilai sequence bertambah +1 setiap kali, saat sequence tersebut digunakan.
Skrip Urutan โ
CREATE SEQUENCE DHK_SCHEMA.EMP_NO START WITH 100 INCREMENT BY 1;
Di sini kita akan menggunakan objek "urutan" dalam contoh di bawah ini untuk menaikkan nilai no karyawan sebanyak +1 setiap kali kueri pemilihan dijalankan. Dalam kueri, "nextval" dapat digunakan untuk pembuatan nomor seri atau jenis persyaratan yang sama.
Penggunaan Urutan โ
SELECT DHK_SCHEMA.EMP_NO.nextval FROM DUMMY;
OUTPUT โ 100, 101, 102 โฆ dan seterusnya untuk setiap eksekusi kueri select di atas.
Cara Menggunakan Urutan dalam Tabel
Contoh di atas mengembalikan sebuah angka tetapi tidak menyimpannya di mana pun. Tiga pola menghubungkan sebuah urutan dengan data nyata, dan pilihan yang tepat bergantung pada seberapa banyak kendali yang dibutuhkan aplikasi.
1) Panggil NEXTVAL langsung di dalam perintah INSERT. Pendekatan yang paling eksplisit. Aplikasi menentukan kapan suatu angka dikonsumsi.
CREATE COLUMN TABLE DHK_SCHEMA.EMPLOYEE ( EMPLOYEE_NO INTEGER NOT NULL, EMP_NAME NVARCHAR(100), PRIMARY KEY (EMPLOYEE_NO) ); INSERT INTO DHK_SCHEMA.EMPLOYEE VALUES (DHK_SCHEMA.EMP_NO.NEXTVAL, 'Anita Sharma');
2) Gunakan urutan tersebut sebagai nilai default kolom. Nomor tersebut ditetapkan bahkan ketika perintah penyisipan tidak menyebutkan kolom, yang sesuai untuk aplikasi yang tidak pernah dirancang untuk mengetahui tentang urutan tersebut.
CREATE COLUMN TABLE DHK_SCHEMA.EMPLOYEE2 ( EMPLOYEE_NO INTEGER DEFAULT DHK_SCHEMA.EMP_NO.NEXTVAL, EMP_NAME NVARCHAR(100) ); INSERT INTO DHK_SCHEMA.EMPLOYEE2 (EMP_NAME) VALUES ('Ravi Kumar');
3) Baca nilai yang baru saja dikeluarkan. CURRVAL mengembalikan angka terakhir yang diambil dalam sesi ini, yang merupakan cara baris anak dihubungkan dengan baris induk yang baru saja dimasukkan.
SELECT DHK_SCHEMA.EMP_NO.CURRVAL FROM DUMMY;
โ ๏ธ Peringatan: CURRVAL akan gagal dengan kesalahan sampai NEXTVAL dipanggil setidaknya sekali dalam sesi saat ini. Fungsi ini melaporkan nilai yang diberikan ke sesi ini, bukan nilai maksimum global, sehingga dua sesi dapat memiliki nilai saat ini yang berbeda pada saat yang bersamaan.
Kolom Urutan vs Kolom Identitas
SAP HANA juga menawarkan kolom identitas, yang menghasilkan angka tanpa objek terpisah. Keduanya menyelesaikan masalah yang sama dengan cara yang berbeda.
| Parameter | Urutan | Kolom identitas |
|---|---|---|
| Jenis objek | Objek basis data independen | Properti kolom dari satu tabel |
| Dibagikan di semua meja | Ya, sejumlah tabel dapat mengambil data dari sana. | Tidak, itu milik satu kolom saja. |
| Nilai terlihat sebelum dimasukkan | Ya, melalui NEXTVAL | Tidak, dihasilkan saat penyisipan. |
| Definisi | BUAT URUTAN | DIBUAT SECARA DEFAULT SEBAGAI IDENTITAS |
| Terbaik untuk | Penomoran bersama, sisipan induk dan anak | Kunci pengganti sederhana pada satu tabel |
Pilih urutan ketika nomor harus diketahui sebelum baris tersebut ada, atau ketika beberapa tabel berbagi satu rangkaian penomoran. Pilih kolom identitas untuk kunci pengganti biasa tanpa persyaratan yang lebih luas.
Mengelola Urutan: ALTER, DROP, dan Jeda
Suatu rangkaian jarang tetap seperti saat pertama kali dibuat. Tiga tugas pemeliharaan muncul berulang kali.
Mengubah perilaku. ALTER SEQUENCE menyesuaikan penambahan, batasan, atau siklus dari urutan yang ada tanpa penurunan.ping Perintah RESTART WITH akan mereset penghitung, yang merupakan langkah umum setelah pemuatan ulang data uji.
ALTER SEQUENCE DHK_SCHEMA.EMP_NO RESTART WITH 1000; ALTER SEQUENCE DHK_SCHEMA.EMP_NO INCREMENT BY 10; DROP SEQUENCE DHK_SCHEMA.EMP_NO;
Memahami kesenjangan. Nomor urut tidak dijamin berurutan, dan ini mengejutkan orang-orang yang mengharapkan jejak audit yang tidak terputus. Celah muncul karena tiga alasan:
- Transaksi dibatalkan. NEXTVAL bukan merupakan fungsi transaksional. Angka yang digunakan oleh operasi insert yang kemudian di-rollback tidak akan pernah diterbitkan ulang.
- cache. Dengan CACHE 100, sebuah node memesan seratus nilai sekaligus. Restart akan membuang semua nilai yang tidak terpakai dalam blok tersebut.
- Sesi bersamaan. Dua sesi memasukkan angka secara bersamaan dan menyisipkan angka-angka tersebut secara bergantian, sehingga tidak ada yang melihat urutan yang berkelanjutan.
Aturan praktisnya adalah memperlakukan urutan sebagai sumber pengenal unik, bukan sebagai penghitung jumlah baris yang ada. Jika rangkaian yang tidak terputus merupakan persyaratan hukum, seperti penomoran faktur, rangkaian tersebut harus dihasilkan oleh logika aplikasi dengan kontrolnya sendiri, bukan oleh urutan basis data.
Menemukan apa yang sudah ada. Tampilan sistem SEQUENCES mencantumkan setiap urutan beserta nilai saat ini, yang merupakan cara tercepat untuk mengaudit skema. Sintaks terkait dibahas di bagian selanjutnya. SAP HANA SQL dan definisi kolom di SAP Tipe data HANA.
