โพรซีเดอร์ที่จัดเก็บไว้ใน SAP HANA (บทเรียน SQL)
⚡ สรุปอย่างชาญฉลาด
SAP HANA SQL Stored Procedure คือบล็อก SQLScript ที่สามารถนำกลับมาใช้ซ้ำได้ โดยมีชื่อกำกับ และทำหน้าที่ดำเนินการกับข้อมูลเฉพาะอย่าง มันรับพารามิเตอร์แบบ IN, OUT และ INOUT สามารถกำหนดให้เป็นแบบอ่านอย่างเดียวได้ด้วยคำสั่ง READS SQL DATA และสร้างขึ้นที่ระดับสคีมาหรือแพ็กเกจโดยใช้ไวยากรณ์ CREATE PROCEDURE

SQL Stored Procedure คืออะไร?
A ขั้นตอนการเก็บ คือหน่วยของโค้ดที่มีชื่อและสามารถนำกลับมาใช้ซ้ำได้ ซึ่งทำหน้าที่เฉพาะอย่างใดอย่างหนึ่ง ขั้นตอนต่างๆ สามารถนำมาประกอบกันเป็นโปรแกรมขนาดใหญ่ ซึ่งเป็นพื้นฐานของ การออกแบบโมดูลาร์กระบวนการหนึ่งสามารถเรียกอีกกระบวนการหนึ่งได้ โดยกระบวนการที่เรียกนั้นเรียกว่า ผู้เรียก โปรแกรมการโทร.
ขั้นตอนการทำงานคือบล็อกการประมวลผลที่สามารถนำกลับมาใช้ซ้ำได้ โดยมีลำดับการแปลงข้อมูลที่กำหนดไว้ สามารถรับพารามิเตอร์อินพุตและเอาต์พุตได้หลายตัว และสามารถประกาศเป็นแบบอ่านอย่างเดียวหรืออ่านเขียนได้
An SQL ขั้นตอนใน SAP HANA สามารถสร้างได้ที่:
- ระดับสคีมา (โหนดแคตตาล็อก) — จัดการผ่านแคตตาล็อกและมองเห็นได้สำหรับผู้บริโภคทุกคนที่มีสิทธิ์ที่เหมาะสม
- ระดับบรรจุภัณฑ์ (โหนดเนื้อหา) — จัดการในฐานะส่วนประกอบในขั้นตอนการออกแบบภายในแพ็กเกจแอปพลิเคชัน
SAP ไวยากรณ์ของโพรซีเดอร์ที่เก็บไว้ใน HANA
ไวยากรณ์ทั่วไปสำหรับการสร้างขั้นตอนใน SAP HANA แสดงอยู่ด้านล่าง
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 คำสั่งนี้จะสร้างขั้นตอนการทำงานโดยใช้ภาษาโปรแกรมที่ระบุไว้ <lang>ภาษาเริ่มต้นคือ SQLScript
คำอธิบายองค์ประกอบทางไวยากรณ์
ตารางด้านล่างนี้อธิบายรายละเอียดของทุกข้อความที่ใช้ในไวยากรณ์ของคำสั่ง CREATE PROCEDURE
| ธาตุ | Descriptไอออน |
|---|---|
<proc_name> |
ชื่อของขั้นตอนการรักษา |
<parameter_clause> |
รายการพารามิเตอร์ โดยแต่ละพารามิเตอร์จะมีเครื่องหมาย IN, OUT หรือ INOUT กำกับไว้: • IN — ข้อมูลที่อ่านได้อย่างเดียวถูกส่งไปยังขั้นตอนการทำงาน • OUT — ผลลัพธ์ที่ได้จากกระบวนการ • เข้า — ทั้งสองฟังก์ชันรับค่าเข้าและส่งคืนค่าที่แก้ไขแล้ว |
LANGUAGE <lang> |
ภาษาโปรแกรมที่ใช้ในกระบวนการนี้ ค่าเริ่มต้น: SQLSCRIPT |
SQL SECURITY <mode> |
โหมดความปลอดภัย (ค่าเริ่มต้น: ตัวกำหนด): • ผู้กำหนด — ดำเนินการโดยใช้สิทธิ์ของผู้สร้างกระบวนการนั้น • ผู้เรียก — ดำเนินการโดยมีสิทธิ์การใช้งานตามผู้โทร |
DEFAULT SCHEMA <default_schema_name> |
Schema ที่ใช้ในการแก้ไขวัตถุที่ไม่ระบุคุณสมบัติในส่วนเนื้อหาของขั้นตอน หากละเว้น จะใช้ Schema ของเซสชันปัจจุบัน |
READS SQL DATA |
กำหนดให้ขั้นตอนการทำงานนี้เป็นแบบอ่านอย่างเดียว ไม่สามารถแก้ไขข้อมูลหรือโครงสร้างข้อมูลได้ ไม่มีคำสั่ง DDL หรือ DML และสามารถเรียกใช้ขั้นตอนการทำงานแบบอ่านอย่างเดียวอื่นๆ ได้เท่านั้น |
WITH RESULT VIEW <view_name> |
กำหนดมุมมองผลลัพธ์ที่ใช้เป็นเอาต์พุตของกระบวนการ เมื่อมีมุมมองผลลัพธ์อยู่ กระบวนการอื่นสามารถถูกสอบถามได้ SQL ข้อความนั้นเปรียบเสมือนตารางหรือมุมมองหนึ่ง |
SEQUENTIAL EXECUTION |
บังคับให้ตัวโปรแกรมทำงานตามลำดับโดยไม่มีการทำงานแบบขนาน |
<procedure_body> |
ส่วนหลักของกระบวนการ ซึ่งเขียนด้วยภาษาโปรแกรมที่เลือกไว้ |
HEADER ONLY |
สร้างเฉพาะคุณสมบัติของโปรซีเดอร์ด้วย OID โดยไม่คอมไพล์ส่วนเนื้อหา มีประโยชน์สำหรับการประกาศล่วงหน้า |
ตัวอย่าง: สร้าง Stored Procedure อย่างง่าย
ตัวอย่างด้านล่างนี้สร้างขั้นตอนการทำงานแบบอ่านอย่างเดียว ซึ่งจะส่งคืนยอดขายรวมสำหรับลูกค้าที่กำหนด
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;
เรียกใช้ขั้นตอนด้วย:
CALL GET_CUSTOMER_SALES ('C0001', ?);
SAP HANA Studio (หรือไคลเอ็นต์ JDBC/ODBC ใดๆ) จะส่งคืนค่าของ ev_total ในพารามิเตอร์เอาต์พุต
การเรียกใช้โพรซีเดอร์ที่จัดเก็บไว้
เมื่อสร้างเสร็จแล้ว จะมีการเรียกใช้ stored procedure ผ่านทาง CALL คำสั่งนี้สามารถเรียกใช้ได้ภายในขั้นตอนอื่น ฟังก์ชัน SQLScript หรือไคลเอ็นต์ภายนอก รูปแบบการเรียกใช้ที่พบบ่อยที่สุดสี่แบบ ได้แก่:
- จาก SQL:
CALL my_proc(p1, p2, ?);— ตัวแปรแทนที่ส่งค่า OUT กลับมา - จากขั้นตอนอื่น:
CALL another_proc(:in1, :out1); - จากใบสมัคร: ผูกพารามิเตอร์อินพุตและอ่านเอาต์พุตผ่าน JDBC, ODBC หรือ Cloud SDK
- ในรูปแบบโต๊ะเสมือนจริง: เมื่อมีการประกาศวิวผลลัพธ์ ให้เรียกใช้โปรแกรมย่อยด้วยคำสั่ง SELECT โดยใช้ชื่อวิวเป็นเกณฑ์
แนวทางปฏิบัติที่ดีที่สุดสำหรับ HANA Stored Procedures
แนวทางปฏิบัติเหล่านี้จะช่วยให้ขั้นตอนการทำงานของ HANA อ่านง่าย มีประสิทธิภาพ และบำรุงรักษาได้ง่าย:
- ตั้งชื่อพารามิเตอร์โดยใช้คำนำหน้า:
iv_สำหรับการป้อนข้อมูลev_เพื่อการส่งออก และiov_สำหรับอินพุต/เอาต์พุต - ระบุเจตนาด้วยคำสั่ง READS SQL DATA ในกรณีที่กระบวนการนั้นเป็นแบบอ่านอย่างเดียวอย่างแท้จริง
- ใช้ SQL SECURITY INVOKER สำหรับขั้นตอนที่ใช้ร่วมกันซึ่งควรเคารพสิทธิ์ของผู้โทร
- ห่อบล็อกแต่ละบล็อกด้วย BEGIN/END และควรเขียนเนื้อหาหลักให้กระชับ — แบ่งตรรกะที่ซับซ้อนออกเป็นขั้นตอนย่อยๆ เพื่อช่วยเสริม
- จัดการกับข้อผิดพลาด: ใช้
DECLARE EXIT HANDLERเพื่อการรายงานข้อผิดพลาดอย่างมีประสิทธิภาพ - หลีกเลี่ยงการเลือก * ขั้นตอนภายใน — ตั้งชื่อคอลัมน์ที่คุณต้องการใช้จริง เพื่อให้แผนงานมีความเสถียร
