SAP Hướng dẫn HANA: Tạo trình tự
⚡ Tóm tắt thông minh
Tạo chuỗi trong SAP HANA định nghĩa một đối tượng cơ sở dữ liệu tự động tạo ra một danh sách các giá trị số tăng dần. Các tham số kiểm soát giá trị bắt đầu, bước tăng, giới hạn, chu kỳ và hành vi lưu trữ của trình tạo.

Trình tự là gì?
Chuỗi là một đối tượng cơ sở dữ liệu tự động tạo ra danh sách các giá trị số tăng dần theo quy tắc như được chỉ định trong đặc tả chuỗi.
Ví dụ để tự động chèn mã số nhân viên vào cột (EMPLOYEE_NO) của Bảng, khi chèn một bản ghi mới vào bảng thì ta sử dụng dãy.
Các giá trị trình tự được tạo theo thứ tự Tăng dần hoặc Giảm dần.
Trình tự không được liên kết với bảng; chúng được ứng dụng sử dụng. Có hai giá trị theo thứ tự –
- HIỆN TẠI – Cung cấp giá trị hiện tại của Chuỗi.
- NEXTVAL – Cung cấp giá trị tiếp theo của chuỗi.
TỔNG HỢP
CREATE SEQUENCE <sequence_name> [<sequence_parameter_list>] [RESET BY <subquery>]
CÁC YẾU TỐ CÚP PHÁP
| Yếu tố | MÔ TẢ |
|---|---|
| Đó là tên của trình tự. | |
| [ ] | Nó chỉ định một hoặc nhiều tham số trình tự. |
| BẮT ĐẦU VỚI | Nó mô tả giá trị chuỗi bắt đầu. |
| TĂNG BỞI | Điều này chỉ định giá trị được tăng lên từ giá trị cuối cùng được gán cho mỗi lần khi giá trị chuỗi mới được tạo. Mặc định là 1. |
| GIÁ TRỊ TỐI ĐA | Tham số này chỉ định giá trị tối đa có thể được tạo ra bởi chuỗi. có thể nằm trong khoảng từ -4611686018427387903 đến 4611686018427387902. |
| KHÔNG CÓ GIÁ TRỊ TỐI ĐA | Khi tùy chọn NO MAXVALUE được chỉ định, đối với dãy tăng dần, giá trị tối đa sẽ là 4611686018427387903 và giá trị tối thiểu đối với dãy giảm dần sẽ là -1. |
| GIÁ TRỊ TỐI THIỂU / KHÔNG CÓ GIÁ TRỊ TỐI THIỂU | Nó chỉ định giá trị tối thiểu mà một chuỗi có thể tạo ra. có thể nằm trong khoảng từ -4611686018427387904 đến 4611686018427387902. Khi sử dụng tùy chọn KHÔNG CÓ GIÁ TRỊ TỐI THIỂU, giá trị tối thiểu cho một dãy tăng dần là 1. |
| ĐI XE ĐẠP | Chỉ thị CYCLE quy định rằng số thứ tự sẽ được khởi động lại sau khi đạt đến giá trị tối đa hoặc tối thiểu. |
| KHÔNG CÓ CHU KỲ | Tùy chọn mặc định. Chỉ thị NO CYCLE quy định rằng số thứ tự sẽ không được khởi động lại sau khi đạt đến giá trị tối đa hoặc tối thiểu. |
| Bộ nhớ đệm | Kích thước bộ nhớ đệm chỉ định phạm vi số thứ tự nào sẽ được lưu vào bộ nhớ đệm trong một nút. Phải là số nguyên không dấu. |
| KHÔNG CÓ BỘ NHỚ | Tùy chọn mặc định. Chỉ thị NO CACHE quy định rằng số thứ tự sẽ không được lưu vào bộ nhớ đệm trong một nút. |
| THIẾT LẬP LẠI BẰNG | Nó chỉ định rằng trong quá trình khởi động lại cơ sở dữ liệu, cơ sở dữ liệu sẽ tự động thực thi lệnh và giá trị chuỗi được khởi động lại với giá trị trả về. |
Thí dụ -
Chúng tôi sẽ tạo một chuỗi có tên là DHK_SCHEMA.EMP_NO, chuỗi này sẽ tạo ra giá trị tăng dần của chuỗi thêm +1 mỗi lần khi chuỗi được sử dụng.
Kịch bản trình tự –
CREATE SEQUENCE DHK_SCHEMA.EMP_NO START WITH 100 INCREMENT BY 1;
Ở đây chúng ta sẽ sử dụng đối tượng “sequence” trong ví dụ bên dưới để tăng giá trị của số nhân viên lên +1 mỗi khi truy vấn chọn được thực thi. Trong truy vấn, “nextval” có thể được sử dụng để tạo số sê-ri hoặc cùng loại yêu cầu.
Sử dụng trình tự –
SELECT DHK_SCHEMA.EMP_NO.nextval FROM DUMMY;
KẾT QUẢ – 100, 101, 102 … và cứ thế tiếp tục cho mỗi lần thực thi truy vấn SELECT ở trên.
Cách sử dụng dãy số trong bảng
Ví dụ trên trả về một số nhưng không lưu trữ nó ở bất kỳ đâu. Có ba mẫu kết nối một chuỗi với dữ liệu thực, và sự lựa chọn đúng phụ thuộc vào mức độ kiểm soát mà ứng dụng cần.
1) Gọi trực tiếp NEXTVAL trong phần CHÈN. Cách tiếp cận rõ ràng nhất. Ứng dụng sẽ quyết định khi nào một số được sử dụng hết.
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) Sử dụng chuỗi số đó làm giá trị mặc định cho cột. Số thứ tự được gán ngay cả khi câu lệnh chèn không đề cập đến cột, điều này phù hợp với các ứng dụng không được thiết kế để biết về trình tự.
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) Đọc giá trị vừa được phát hành. CURRVAL trả về số cuối cùng mà phiên này đã lấy, đây là cách mà một hàng con được liên kết với hàng cha vừa được chèn vào.
SELECT DHK_SCHEMA.EMP_NO.CURRVAL FROM DUMMY;
⚠️ Cảnh báo: Hàm CURRVAL sẽ báo lỗi cho đến khi hàm NEXTVAL được gọi ít nhất một lần trong phiên hiện tại. Nó báo cáo giá trị được cấp cho phiên này, chứ không phải giá trị tối đa toàn cục, vì vậy hai phiên có thể có các giá trị hiện tại khác nhau cùng một lúc.
Cột trình tự so với cột nhận dạng
SAP HANA cũng cung cấp cột định danh, tạo ra các số mà không cần đối tượng riêng biệt. Cả hai giải pháp đều giải quyết cùng một vấn đề theo cách khác nhau.
| Tham số | Trình tự | Cột nhận dạng |
|---|---|---|
| Loại đối tượng | Đối tượng cơ sở dữ liệu độc lập | Thuộc tính cột của một bảng |
| Được chia sẻ giữa các bàn | Đúng vậy, bất kỳ số lượng bảng nào cũng có thể lấy dữ liệu từ đó. | Không, nó thuộc về một cột duy nhất. |
| Giá trị hiển thị trước khi chèn | Vâng, thông qua NEXTVAL. | Không, được tạo ra trong quá trình chèn |
| Định nghĩa | TẠO YÊU CẦU | ĐƯỢC TẠO MẶC ĐỊNH LÀ ĐỊNH DANH |
| Tốt nhất cho | Đánh số chung, chèn thông tin cho cha và con. | Một khóa thay thế đơn giản trên một bảng |
Chọn một dãy số khi số thứ tự phải được biết trước khi hàng tồn tại, hoặc khi nhiều bảng dùng chung một dãy số. Chọn một cột định danh cho khóa thay thế đơn giản mà không có yêu cầu rộng hơn.
Quản lý chuỗi: ALTER, DROP và Gaps
Một chuỗi thao tác hiếm khi giữ nguyên như lúc ban đầu. Ba nhiệm vụ bảo trì thường xuyên xuất hiện.
Thay đổi hành vi. ALTER SEQUENCE điều chỉnh bước tăng, giới hạn hoặc chu kỳ của một chuỗi hiện có mà không làm mất đi phần tử nào.ping Lệnh RESTART WITH sẽ đặt lại bộ đếm, đây là bước thường lệ sau khi tải lại dữ liệu thử nghiệm.
ALTER SEQUENCE DHK_SCHEMA.EMP_NO RESTART WITH 1000; ALTER SEQUENCE DHK_SCHEMA.EMP_NO INCREMENT BY 10; DROP SEQUENCE DHK_SCHEMA.EMP_NO;
Hiểu rõ những điểm thiếu sót. Số thứ tự không được đảm bảo là liên tục, và điều này gây ngạc nhiên cho những người mong đợi một nhật ký kiểm toán liền mạch. Khoảng trống xuất hiện vì ba lý do:
- Các giao dịch đã được hoàn tác. NEXTVAL không phải là hệ thống giao dịch. Một số được sử dụng bởi một thao tác chèn mà sau đó bị hoàn tác sẽ không bao giờ được cấp lại.
- Bộ nhớ đệm. Với CACHE 100, một nút sẽ dành riêng một trăm giá trị cùng một lúc. Việc khởi động lại sẽ loại bỏ bất cứ thứ gì còn lại chưa được sử dụng trong khối đó.
- Các phiên đồng thời. Hai phiên chèn dữ liệu đồng thời xen kẽ các số của chúng, do đó không phiên nào nhìn thấy một dãy số liên tục.
Nguyên tắc thực tiễn là coi một chuỗi số như một nguồn mã định danh duy nhất, chứ không bao giờ là bộ đếm số lượng hàng tồn tại. Trong trường hợp chuỗi số liên tục là yêu cầu pháp lý, chẳng hạn như số hóa đơn, thì chuỗi số đó phải được tạo ra bởi logic ứng dụng với các điều khiển riêng chứ không phải bởi một chuỗi số trong cơ sở dữ liệu.
Tìm kiếm những gì đang tồn tại. Chế độ xem hệ thống SEQUENCES liệt kê mọi chuỗi với giá trị hiện tại của nó, đây là cách nhanh nhất để kiểm tra cấu trúc lược đồ. Cú pháp liên quan được đề cập trong tài liệu này. SAP HANA SQL và định nghĩa cột trong SAP Các kiểu dữ liệu HANA.
