Thủ tục lưu trữ trong SAP HANA (Hướng dẫn SQL)
⚡ Tóm tắt thông minh
SAP Thủ tục lưu trữ HANA SQL là một khối mã SQL có thể tái sử dụng, được đặt tên, thực hiện một thao tác dữ liệu cụ thể. Nó chấp nhận các tham số IN, OUT và INOUT, có thể được đánh dấu là chỉ đọc bằng READS SQL DATA và được tạo ở cấp độ lược đồ hoặc gói bằng cú pháp CREATE PROCEDURE.
Thủ tục lưu trữ SQL là gì?
A thủ tục lưu trữ Thủ tục là một đơn vị mã có tên, có thể tái sử dụng, thực hiện một nhiệm vụ cụ thể. Các thủ tục có thể được kết hợp thành các chương trình lớn hơn, đó là nền tảng của... Thiết kế mô đunMột quy trình có thể gọi một quy trình khác — bên gọi được gọi là bên tiếp nhận. chương trình gọi điện.
Thủ tục là các khối xử lý có thể tái sử dụng với một trình tự biến đổi dữ liệu được xác định. Chúng có thể chấp nhận nhiều tham số đầu vào và đầu ra và có thể được khai báo là chỉ đọc hoặc đọc-ghi.
An SQL thủ tục trong SAP HANNA có thể được tạo tại:
- Cấp độ lược đồ (Nút danh mục) — được quản lý thông qua danh mục và hiển thị cho mọi người dùng có quyền phù hợp.
- Mức độ gói (Nút nội dung) — được quản lý như một thành phần thiết kế trong gói ứng dụng.
SAP Cú pháp thủ tục lưu trữ HANA
Cú pháp tổng quát để tạo một thủ tục trong SAP HANA được hiển thị bên dưới.
CREATE PROCEDURE <proc_name> [(<parameter_clause>)] [LANGUAGE <lang>]
[SQL SECURITY <mode>] [DEFAULT SCHEMA <default_schema_name>]
[READS SQL DATA [WITH RESULT VIEW <view_name>]] AS
{ BEGIN [SEQUENTIAL EXECUTION]
<procedure_body>
END
| HEADER ONLY }
CREATE PROCEDURE Câu lệnh này tạo ra một thủ tục sử dụng ngôn ngữ lập trình được chỉ định bởi <lang>Ngôn ngữ mặc định là SQLScript.
Giải thích các yếu tố cú pháp
Bảng dưới đây mô tả mọi mệnh đề được sử dụng trong cú pháp CREATE PROCEDURE.
| Yếu tố | Mô tả Chi tiết |
|---|---|
<proc_name> |
Tên của quy trình. |
<parameter_clause> |
Danh sách các tham số, mỗi tham số được đánh dấu IN, OUT hoặc INOUT: • IN — Dữ liệu đầu vào chỉ đọc được truyền cho thủ tục. • OUT — Kết quả trả về từ quy trình. • GIỚI THIỆU — Cả hai phương thức đều truyền một giá trị vào và trả về giá trị đã được sửa đổi. |
LANGUAGE <lang> |
Ngôn ngữ lập trình được sử dụng trong thủ tục. Mặc định: SQLSCRIPT. |
SQL SECURITY <mode> |
Chế độ bảo mật (Mặc định: DEFINER): • ĐỊNH NGHĨA — được thực thi với quyền hạn của người tạo ra quy trình. • NGƯỜI TRIỆU HỒI — được thực thi với quyền hạn của người gọi. |
DEFAULT SCHEMA <default_schema_name> |
Lược đồ được sử dụng để giải quyết các đối tượng không đủ điều kiện trong phần thân thủ tục. Nếu bỏ qua, lược đồ của phiên hiện tại sẽ được sử dụng. |
READS SQL DATA |
Đánh dấu thủ tục là chỉ đọc. Nó không thể sửa đổi dữ liệu hoặc lược đồ, không chứa DDL hoặc DML và chỉ có thể gọi các thủ tục chỉ đọc khác. |
WITH RESULT VIEW <view_name> |
Xác định chế độ xem kết quả được sử dụng làm đầu ra của thủ tục. Khi có chế độ xem kết quả, thủ tục có thể được truy vấn bởi một thủ tục khác. SQL Câu lệnh được trình bày như thể đó là một bảng hoặc một khung nhìn. |
SEQUENTIAL EXECUTION |
Buộc phần thân thủ tục phải thực thi tuần tự mà không có sự song song. |
<procedure_body> |
Phần thân chính của quy trình, được viết bằng ngôn ngữ lập trình đã chọn. |
HEADER ONLY |
Chỉ tạo các thuộc tính của thủ tục với một OID, mà không biên dịch phần thân. Hữu ích cho việc khai báo trước. |
Ví dụ: Tạo một thủ tục lưu trữ đơn giản
Ví dụ dưới đây tạo một thủ tục chỉ đọc trả về tổng doanh thu của một khách hàng cụ thể.
CREATE PROCEDURE GET_CUSTOMER_SALES (
IN iv_customer_id NVARCHAR(10),
OUT ev_total DECIMAL(15,2)
)
LANGUAGE SQLSCRIPT
SQL SECURITY INVOKER
READS SQL DATA AS
BEGIN
SELECT SUM(NET_VALUE) INTO ev_total
FROM "SALES"."ORDERS"
WHERE CUSTOMER_ID = :iv_customer_id;
END;
Gọi thủ tục bằng lệnh:
CALL GET_CUSTOMER_SALES ('C0001', ?);
SAP HANA Studio (hoặc bất kỳ ứng dụng khách JDBC/ODBC nào) trả về giá trị của ev_total trong tham số đầu ra.
Gọi một thủ tục lưu trữ
Sau khi được tạo, thủ tục lưu trữ sẽ được gọi thông qua... CALL Câu lệnh có thể được thực thi tùy chọn bên trong một thủ tục khác, một hàm SQLScript hoặc một máy khách bên ngoài. Bốn mẫu gọi phổ biến nhất là:
- Từ SQL:
CALL my_proc(p1, p2, ?);— Các phần giữ chỗ trả về giá trị OUT. - Từ một quy trình khác:
CALL another_proc(:in1, :out1); - Từ một ứng dụng: Liên kết các tham số đầu vào và đọc đầu ra thông qua JDBC, ODBC hoặc Cloud SDK.
- Dưới dạng một chiếc bàn ảo: Khi một view kết quả được khai báo, hãy truy vấn thủ tục bằng câu lệnh SELECT dựa trên tên của view đó.
Các phương pháp thực hành tốt nhất cho thủ tục lưu trữ HANA
Những thói quen dưới đây giúp các thủ tục HANA dễ đọc, hiệu quả và dễ bảo trì:
- Đặt tên tham số kèm tiền tố:
iv_để nhập liệu,ev_để xuất khẩu, vàiov_Dùng cho đầu vào/đầu ra. - Đánh dấu ý định bằng lệnh READS SQL DATA trong trường hợp quy trình đó thực sự chỉ cho phép đọc mà không cần chỉnh sửa.
- Sử dụng SQL SECURITY INVOKER Đối với các quy trình được chia sẻ, cần tôn trọng quyền hạn của người gọi.
- Bọc mỗi khối trong BEGIN/END và giữ cho phần thân hàm ngắn gọn — chia nhỏ các thao tác logic phức tạp thành các thủ tục hỗ trợ.
- Xử lý ngoại lệ: sử dụng
DECLARE EXIT HANDLERĐể báo cáo lỗi một cách lịch sự. - Tránh sử dụng SELECT * Bên trong các thủ tục — hãy đặt tên cho các cột mà bạn thực sự cần để kế hoạch được ổn định.

