SAP Hướng dẫn viết mã SQL cho HANA: Cú pháp và ví dụ
⚡ Tóm tắt thông minh
Tập lệnh SQL trong SAP HANA mở rộng chuẩn SQL với các cấu trúc hàm và thủ tục. Nó hỗ trợ các thủ tục lưu trữ và các hàm do người dùng định nghĩa, chuyển logic xử lý dữ liệu chuyên sâu từ máy chủ ứng dụng vào cơ sở dữ liệu.

Tập lệnh SQL là gì?
SQL Script là tập hợp các phần mở rộng cho SQL. Nó có thể được sử dụng trong thủ tục lưu trữ thay cho SQL đơn giản. Nó xác định các phần mở rộng chức năng và thủ tục.
In SQL Người dùng tập lệnh có thể xác định các biến cục bộ cho cấu trúc và bảng được sử dụng chủ yếu để tạo thủ tục lưu trữ.
Tập lệnh SQL cũng có thể được sử dụng trong chế độ xem Tính toán. Trong SQL Script, có hai vùng chứa logic khác nhau-
- Quy trình (Thủ tục cho phép bạn mô tả một chuỗi các biến đổi dữ liệu trên dữ liệu được truyền dưới dạng bảng đầu vào và cơ sở dữ liệu).
- Hàm do người dùng xác định (Bộ chứa Hàm do người dùng xác định được tách thành Hàm vô hướng do người dùng xác định và Hàm do người dùng xác định theo bảng).
Các phần tử Ngôn ngữ tập lệnh SQL như sau -
Logic tập lệnh SQL khai báo (Phần mở rộng chức năng)
- Nó cho phép định nghĩa các loại bảng mà không cần tham chiếu các bảng cơ sở dữ liệu.
- Tuyên bố điển hình như CHỌN.
- Chức năng Công cụ tính toán (CE).
⚠️ Lưu ý về phiên bản: Các toán tử trong kế hoạch của Công cụ Tính toán, các hàm CE_ như CE_COLUMN_TABLE và CE_JOIN, đã bị loại bỏ. SAPViệc phát triển mới nên sử dụng các câu lệnh SQL chuẩn, mà trình tối ưu hóa xử lý tốt không kém. Mã CE hiện có vẫn chạy nhưng nên được chuyển đổi khi có thay đổi tiếp theo trong quy trình.
Logic điều phối tập lệnh SQL (Phần mở rộng chức năng)
Logic điều phối được sử dụng để triển khai luồng dữ liệu bằng cách sử dụng Câu lệnh truy vấn DDL, DML và SQL và logic luồng điều khiển bằng cách sử dụng các cấu trúc ngôn ngữ mệnh lệnh như vòng lặp và điều kiện.
- Tuyên bố ngôn ngữ định nghĩa dữ liệu. Ví dụ: Tạo lược đồ.
- Ngôn ngữ thao tác dữ liệu (Ví dụ: Chèn).
Logic tập lệnh SQL bắt buộc (Mở rộng thủ tục)
Logic mệnh lệnh phân chia logic giữa một số luồng dữ liệu. Ví dụ: IF, ELSEIF, ELSE, CASE, FOR (Vòng lặp) và Ngoại lệ.
Tầm quan trọng của tập lệnh SQL
Chỉ SQL Script mới cung cấp các phần tử cần thiết để di chuyển logic sử dụng nhiều dữ liệu hoặc hoạt động của máy chủ ứng dụng sang máy chủ cơ sở dữ liệu.
Các điểm chính của SQL Script
- Tập lệnh SQL được thực thi và xử lý trong công cụ tính toán trong cơ sở dữ liệu HANA.
- SQL Script có khả năng thực hiện các phép tính phức tạp.
- Trong SQL Script, một biến cục bộ có thể được khai báo để giữ kết quả tạm thời.
- Quy trình tập lệnh SQL có thể trả về nhiều kết quả hơn bằng cách sử dụng “Tham số OUTPUT” trong khi Quy trình SQL thông thường chỉ có thể trả về một kết quả.
- Trong SQL Script, bạn có thể xác định các loại bảng chung hoặc cục bộ có thể được sử dụng làm tham số.
Bằng cách sử dụng SQL Script, có thể đạt được chế độ xử lý song song.
Ví dụ về thủ tục kịch bản SQL
Thủ tục là loại container phổ biến nhất. Ví dụ dưới đây đọc dữ liệu nhân viên, lọc dữ liệu và trả về kết quả thông qua tham số bảng đầu ra.
CREATE PROCEDURE DHK_SCHEMA.GET_HIGH_EARNERS ( IN im_min_salary DECIMAL(15,2), OUT ex_employees TABLE (EMP_NAME NVARCHAR(100), SALARY DECIMAL(15,2)), OUT ex_row_count INTEGER ) LANGUAGE SQLSCRIPT READS SQL DATA AS BEGIN -- Declarative logic: a table variable, not a physical table lt_all = SELECT EMP_NAME, SALARY FROM DHK_SCHEMA.EMPLOYEE WHERE SALARY >= :im_min_salary; -- Imperative logic: branch on the result SELECT COUNT(*) INTO ex_row_count FROM :lt_all; IF :ex_row_count = 0 THEN ex_employees = SELECT '' AS EMP_NAME, 0 AS SALARY FROM DUMMY WHERE 1 = 0; ELSE ex_employees = SELECT * FROM :lt_all ORDER BY SALARY DESC; END IF; END;
Có ba quy ước đáng lưu ý. Dấu hai chấm được đặt trước bất kỳ lần đọc nào của một biến, vì vậy :lt_all đọc biến bảng trong khi lt_all Phần bên trái gán cho nó. Lệnh READS SQL DATA báo cho trình tối ưu hóa biết rằng thủ tục không có tác dụng phụ, cho phép song song hóa mạnh mẽ hơn. Và một thủ tục trả về nhiều tham số đầu ra chính xác là khả năng mà SQL thông thường không có.
Việc gọi tên nó rất đơn giản:
CALL DHK_SCHEMA.GET_HIGH_EARNERS (50000, ?, ?);
Các hàm do người dùng định nghĩa dạng vô hướng và dạng bảng
Trong khi một thủ tục thực hiện các hành động, một hàm trả về một giá trị và có thể được sử dụng bên trong một truy vấn. SQL Script cung cấp hai dạng và chúng không thể thay thế cho nhau.
| Tham số | UDF vô hướng | Bảng UDF |
|---|---|---|
| Hoàn trả | Một giá trị duy nhất | Một tập hợp kết quả |
| Được dùng trong | Danh sách SELECT, mệnh đề WHERE, biểu thức | Mệnh đề FROM, giống như một bảng. |
| Có thể chỉnh sửa dữ liệu | Không | Không |
| Sử dụng điển hình | Tính toán có thể tái sử dụng, ví dụ như tỷ lệ thuế. | Chế độ xem tham số trả về các hàng đã lọc |
-- Scalar function: returns one value CREATE FUNCTION DHK_SCHEMA.ADD_BONUS (im_salary DECIMAL(15,2)) RETURNS total DECIMAL(15,2) LANGUAGE SQLSCRIPT AS BEGIN total := :im_salary * 1.10; END; SELECT EMP_NAME, DHK_SCHEMA.ADD_BONUS(SALARY) AS WITH_BONUS FROM DHK_SCHEMA.EMPLOYEE;
Hàm bảng được định nghĩa bằng RETURNS TABLE và sau đó được truy vấn trong mệnh đề FROM, điều này làm cho nó trở thành cách tự nhiên để xây dựng một tập dữ liệu có thể tái sử dụng và tham số hóa. chế độ xem tính toán hoặc báo cáo có thể tiêu thụ.
Các phương pháp hay nhất khi viết kịch bản SQL
Tập lệnh SQL hoạt động tốt khi được viết để cho phép công cụ xử lý song song, và hoạt động kém khi được viết giống như mã ứng dụng. Sáu thói quen tạo nên sự khác biệt.
- Nên ưu tiên câu trần thuật hơn câu mệnh lệnh. Một câu lệnh dựa trên tập hợp duy nhất thường hiệu quả hơn nhiều so với vòng lặp xử lý từng hàng một. Chỉ nên sử dụng vòng lặp FOR khi logic thực sự không thể được biểu diễn dưới dạng phép toán tập hợp.
- Tránh sử dụng con trỏ chuột. Chúng buộc phải xử lý từng hàng một và vô hiệu hóa hoàn toàn công cụ tính toán. Hầu hết mọi con trỏ đều có thể được viết lại thành phép nối hoặc phép tổng hợp.
- Hãy giữ cho các tuyên bố độc lập. Hai biến bảng không tham chiếu lẫn nhau được tính toán song song. Việc nối tiếp từng bước thông qua bước trước đó sẽ tuần tự hóa toàn bộ quy trình.
- Khai báo READS SQL DATA ở những nơi đúng. Điều này cho thấy quy trình không có tác dụng phụ, cho phép tối ưu hóa hơn nữa.
- Lọc càng sớm càng tốt. Việc giảm số lượng hàng trong biến bảng đầu tiên sẽ thu nhỏ mọi thứ ở các bước tiếp theo, trong khi việc lọc ở cuối đã bù đắp chi phí đó rồi.
- Hãy loại bỏ các hàm CE_. Chúng đã lỗi thời, không thể kết hợp tự do với SQL trong cùng một câu lệnh, và trình tối ưu hóa SQL hiện xử lý công việc tương tự tốt hơn.
Cú pháp cấp câu lệnh được đề cập trong SAP HANA SQLcác chức năng có sẵn bên trong một thủ tục trong SAP Các hàm SQL của HANAvà các đối tượng mô hình sử dụng các quy trình này trong SAP Mô hình HANA hướng dẫn.
