存储过程中 SAP HANA(SQL教程)
⚡ 智能摘要
SAP HANA SQL 存储过程是一个可重用的、命名的 SQLScript 代码块,用于执行特定的数据操作。它接受 IN、OUT 和 INOUT 参数,可以使用 READS SQL DATA 将其标记为只读,并且可以使用 CREATE PROCEDURE 语法在模式或包级别创建。

什么是SQL存储过程?
A 存储过程 过程是已命名的、可重用的代码单元,用于执行特定任务。过程可以组合成更大的程序,这是程序的基础。 模块化设计一个程序可以调用另一个程序——调用者被称为…… 呼叫程序.
过程是可重用的处理模块,具有预定义的数据转换顺序。它们可以接受多个输入和输出参数,并且可以声明为只读或读写。
- 模式级别 (目录节点)——通过目录进行管理,并且对每个具有相应权限的消费者可见。
- 包装级别 (内容节点)——作为应用程序包内的设计时工件进行管理。
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 语法中使用的每个子句。
| 元素 | 描述 |
|---|---|
<proc_name> |
手术名称。 |
<parameter_clause> |
参数列表,每个参数分别标记为 IN、OUT 或 INOUT: • IN — 传递给该过程的只读输入。 • OUT — 过程返回的输出。 • 输入输出 —两者都接受一个输入值,并返回修改后的值。 |
LANGUAGE <lang> |
该过程使用的编程语言。默认值:SQLSCRIPT。 |
SQL SECURITY <mode> |
安全模式(默认:DEFINER): • 定义器 — 以程序创建者的权限运行。 • 祈求者 — 以调用者的权限运行。 |
DEFAULT SCHEMA <default_schema_name> |
用于解析过程体中未限定对象的模式。如果省略,则使用当前会话模式。 |
READS SQL DATA |
将该过程标记为只读。它不能修改数据或模式,不包含 DDL 或 DML,并且只能调用其他只读过程。 |
WITH RESULT VIEW <view_name> |
定义用作过程输出的结果视图。如果存在结果视图,则其他程序可以查询该过程。 SQL 像操作表格或视图一样操作语句。 |
SEQUENTIAL EXECUTION |
强制过程体按顺序执行,不进行并行处理。 |
<procedure_body> |
用选定的编程语言编写的程序主体。 |
HEADER ONLY |
仅创建具有 OID 的过程属性,而不编译过程体。适用于前向声明。 |
示例:创建一个简单的存储过程
下面的示例创建了一个只读过程,该过程返回给定客户的销售总额。
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 在输出参数中。
调用存储过程
存储过程一旦创建,即可通过以下方式调用: CALL 语句可以选择性地位于另一个过程、SQLScript 函数或外部客户端中。四种最常见的调用模式是:
- 来自 SQL:
CALL my_proc(p1, p2, ?);—占位符返回OUT值。 - 来自另一个程序:
CALL another_proc(:in1, :out1); - 来自一份申请表: 通过 JDBC、ODBC 或云 SDK 绑定输入参数并读取输出。
- 作为虚拟表格: 声明结果视图时,使用 SELECT 语句针对视图名称查询该过程。
HANA存储过程的最佳实践
以下习惯可确保 HANA 程序具有可读性、高性能和易于维护的特点:
- 参数名称需添加前缀:
iv_输入,ev_用于出口,以及iov_用于输入/输出。 - 使用 READS SQL 数据标记意图 无论该程序是否真正是只读的。
- 使用 SQL 安全调用器 对于应尊重调用者权限的共享程序。
- 将每个代码块用 BEGIN/END 包裹起来 保持主体简短——将繁重的逻辑拆分成辅助程序。
- 处理异常情况: 使用
DECLARE EXIT HANDLER用于优雅地报告错误。 - 避免选择 * 在程序内部——命名你实际需要的列,以便计划保持稳定。
