Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

oracle - chuỗi không có chuỗi

Mặc dù tôi thực sự khuyên bạn không nên sử dụng nó (thích sử dụng một chuỗi đơn và chỉ chấp nhận rằng sẽ có khoảng cách lớn hơn dự kiến), bạn có thể xây dựng bảng chuỗi giả của riêng mình

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

chèn một vài hàng

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

và sau đó viết một hàm để nhận giá trị chuỗi tiếp theo

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;

Thao tác này sẽ khóa hàng trong bảng đối với trình tự cụ thể cho đến khi giao dịch truy xuất hàng tiếp theo cam kết hoặc quay trở lại. Điều này sẽ làm giảm hoàn toàn khả năng mở rộng của ứng dụng của bạn so với việc sử dụng chuỗi Oracle bằng cách đảm bảo rằng chỉ một phiên có thể được chèn một hàng cho một group_name cụ thể tại một thời điểm-- những người khác sẽ chặn chờ trình tự. Nếu bạn có một hệ thống với số lượng người dùng đồng thời tương đối nhỏ (hoặc một số lượng tương đối lớn group_name giá trị), bạn có thể chấp nhận được. Nhưng nói chung đó là một thực hành kém. Tùy thuộc vào phiên bản Oracle, bạn có thể sử dụng các giao dịch tự trị để tăng tính đồng thời nhưng điều đó chỉ làm tăng thêm một chút phức tạp cho giải pháp. Tại thời điểm bạn thực sự lo lắng về khả năng mở rộng, bạn thực sự muốn đẩy lùi toàn bộ thiết kế và chỉ sử dụng một chuỗi 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. lỗi từ khóa bị thiếu trong câu lệnh oracle CASE WHEN sql

  2. Truy vấn FIFO SQL với nhóm theo

  3. Sự khác biệt giữa setTime (...) và setTimestamp (...) trong Hibernate Query là gì?

  4. ORA-01882:không tìm thấy vùng múi giờ

  5. PL / SQL Cách trả về tất cả các thuộc tính trong ROW