Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

oracle - urutan tanpa urutan

Meskipun saya sangat menyarankan untuk tidak melakukannya (lebih suka menggunakan satu urutan dan hanya menerima bahwa akan ada kesenjangan yang lebih besar dari yang diharapkan), Anda dapat membuat tabel urutan semu Anda sendiri

CREATE TABLE my_sequences (
  sequence_name VARCHAR2(30) PRIMARY KEY,
  sequence_val  NUMBER
);

menyisipkan beberapa baris

INSERT INTO my_sequences( sequence_name, sequence_val )
  VALUES( 'GroupA', 1 );
INSERT INTO my_sequences( sequence_name, sequence_val )
  VALUES( 'GroupB', 1 );

dan kemudian tulis fungsi untuk mendapatkan nilai urutan berikutnya

CREATE FUNCTION get_nextval( p_sequence_name IN VARCHAR2 )
  RETURN NUMBER
IS
  l_val NUMBER;
BEGIN
  SELECT sequence_val
    INTO l_val
    FROM my_sequences
   WHERE sequence_name = p_sequence_name
     FOR UPDATE;

  UPDATE my_sequences
     SET sequence_val = sequence_val + 1
   WHERE sequence_name = p_sequence_name;

  RETURN l_val;
END;

Ini akan mengunci baris dalam tabel untuk urutan tertentu hingga transaksi yang mengambil baris berikutnya melakukan atau memutar kembali. Ini secara radikal akan mengurangi skalabilitas aplikasi Anda dibandingkan dengan menggunakan urutan Oracle dengan memastikan bahwa hanya satu sesi yang dapat menyisipkan baris untuk group_name tertentu pada suatu waktu-- yang lain akan memblokir menunggu urutan. Jika Anda memiliki sistem dengan jumlah pengguna bersamaan yang relatif kecil (atau jumlah group_name yang relatif besar nilai), yang mungkin dapat Anda terima. Tetapi secara umum itu adalah praktik yang buruk. Bergantung pada versi Oracle, Anda mungkin dapat menggunakan transaksi otonom untuk meningkatkan konkurensi tetapi itu hanya menambah sedikit kerumitan pada solusi. Pada saat Anda benar-benar khawatir tentang skalabilitas, Anda benar-benar ingin mendorong kembali seluruh desain dan hanya menggunakan urutan Oracle.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana saya bisa mengonfigurasi lokasi file tnsnames Oracle saya?

  2. Dapatkan pembuatan boneka gagal ketika skrip SQL yang terkandung gagal dieksekusi

  3. Memahami aliasing Oracle - mengapa alias tidak dikenali dalam kueri kecuali dibungkus dengan kueri kedua?

  4. Pengelompokan data ke dalam tabel yang berbeda berdasarkan tanggal minimum suatu peristiwa

  5. Hasilkan tanggal acak di Oracle dengan DBMS_RANDOM