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.

  • 🔢 Định nghĩa cốt lõi: Dãy số tạo ra các số theo quy tắc được quy định trong phần mô tả của nó, theo thứ tự tăng dần hoặc giảm dần.
  • 🔗 Không có liên kết bảng: Các chuỗi là các đối tượng độc lập được ứng dụng sử dụng chứ không phải được gắn với bất kỳ bảng nào.
  • 📍 Hai giá trị: CURRVAL trả về giá trị hiện tại và NEXTVAL chuyển tiếp chuỗi và trả về giá trị mới.
  • 🎚️ Các thông số quan trọng: START WITH, INCREMENT BY, MAXVALUE, MINVALUE, CYCLE và CACHE định hình đầu ra.
  • ♻️ Đạp xe: Lệnh CYCLE sẽ khởi động lại quá trình đánh số từ giới hạn; NO CYCLE là lệnh mặc định và sẽ báo lỗi.
  • ⚡ Bộ nhớ đệm: CACHE dành riêng một khối số cho mỗi nút để tăng tốc độ; NO CACHE là chế độ mặc định.
  • 🔄 Tùy chọn đặt lại: Lệnh RESET BY chạy một truy vấn con khi khởi động lại cơ sở dữ liệu và tiếp tục từ giá trị mà truy vấn đó trả về.

Tạo chuỗi trong SAP HANNA

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.

Câu Hỏi Thường Gặp

Các giao dịch bị hoàn tác, các khối dữ liệu được lưu trong bộ nhớ cache bị mất khi khởi động lại và các phiên đồng thời đều tạo ra các khoảng trống. Một chuỗi đảm bảo tính duy nhất, chứ không bao giờ là một chuỗi giá trị liên tục.

Đúng vậy. Một chuỗi độc lập với bất kỳ bảng nào, vì vậy nhiều bảng có thể truy cập vào chuỗi đó. Điều này hữu ích khi các định danh phải là duy nhất trong toàn bộ lược đồ chứ không phải chỉ riêng từng bảng.

Đúng vậy. Phân tích thông lượng chèn cho thấy một nút tiêu thụ bao nhiêu giá trị giữa các lần khởi động lại, điều này cân bằng giữa lợi ích về tốc độ của bộ nhớ đệm với kích thước của các khoảng trống mà nó tạo ra.

Đúng vậy. Việc so sánh các giá trị hiện tại với MAXVALUE và tốc độ tiêu thụ sẽ dự đoán tình trạng cạn kiệt, do đó trình tự được mở rộng trước khi các thao tác chèn bắt đầu gặp lỗi trong môi trường sản xuất.

Vì NEXTVAL chưa được gọi trong phiên hiện tại. CURRVAL báo cáo giá trị được cấp cho phiên này, vì vậy nó không có gì để báo cáo cho đến khi có giá trị được lấy đi.

Tóm tắt bài viết này với: