sap-sqlscript
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseSAP SQLScript Development Guide
SAP SQLScript 开发指南
Overview
概述
SQLScript is SAP HANA's procedural extension to SQL, enabling complex data-intensive logic execution directly within the database layer. It follows the code-to-data paradigm, pushing computation to where data resides rather than moving data to the application layer.
SQLScript是SAP HANA对SQL的过程化扩展,支持在数据库层直接执行复杂的数据密集型逻辑。它遵循code-to-data范式,将计算推向数据所在位置,而非将数据移动到应用层。
Key Characteristics
核心特性
- Case-insensitive language
- All statements end with semicolons
- Variables use colon prefix when referenced ()
:variableName - No colon when assigning values
- Use table for single-row operations
DUMMY
- 大小写不敏感的语言
- 所有语句以分号结尾
- 引用变量时使用冒号前缀()
:variableName - 赋值时无需冒号
- 单条记录操作使用表
DUMMY
Two Logic Types
两种逻辑类型
| Type | Description | Execution |
|---|---|---|
| Declarative | Pure SQL sequences | Converted to data flow graphs, processed in parallel |
| Imperative | Control structures (IF, WHILE, FOR) | Processed sequentially, prevents parallel execution |
| 类型 | 描述 | 执行方式 |
|---|---|---|
| 声明式 | 纯SQL序列 | 转换为数据流图,并行处理 |
| 命令式 | 控制结构(IF、WHILE、FOR) | 顺序处理,无法并行执行 |
Table of Contents
目录
Container Types
容器类型
1. Anonymous Blocks
1. 匿名块
Single-use logic not stored in the database. Useful for testing and ad-hoc execution.
sql
DO [(<parameter_clause>)]
BEGIN [SEQUENTIAL EXECUTION]
<body>
END;Example:
sql
DO
BEGIN
DECLARE lv_count INTEGER;
SELECT COUNT(*) INTO lv_count FROM "MYTABLE";
SELECT :lv_count AS record_count FROM DUMMY;
END;一次性逻辑,不存储在数据库中,适用于测试和临时执行。
sql
DO [(<parameter_clause>)]
BEGIN [SEQUENTIAL EXECUTION]
<body>
END;示例:
sql
DO
BEGIN
DECLARE lv_count INTEGER;
SELECT COUNT(*) INTO lv_count FROM "MYTABLE";
SELECT :lv_count AS record_count FROM DUMMY;
END;2. Stored Procedures
2. 存储过程
Reusable database objects with input/output parameters.
sql
CREATE [OR REPLACE] PROCEDURE <procedure_name>
(
[IN <param> <datatype>],
[OUT <param> <datatype>],
[INOUT <param> <datatype>]
)
LANGUAGE SQLSCRIPT
[SQL SECURITY {DEFINER | INVOKER}]
[DEFAULT SCHEMA <schema_name>]
[READS SQL DATA | READS SQL DATA WITH RESULT VIEW <view_name>]
AS
BEGIN
<procedure_body>
END;可复用的数据库对象,支持输入/输出参数。
sql
CREATE [OR REPLACE] PROCEDURE <procedure_name>
(
[IN <param> <datatype>],
[OUT <param> <datatype>],
[INOUT <param> <datatype>]
)
LANGUAGE SQLSCRIPT
[SQL SECURITY {DEFINER | INVOKER}]
[DEFAULT SCHEMA <schema_name>]
[READS SQL DATA | READS SQL DATA WITH RESULT VIEW <view_name>]
AS
BEGIN
<procedure_body>
END;3. User-Defined Functions
3. 用户自定义函数
Scalar UDF - Returns single value:
sql
CREATE FUNCTION <function_name> (<input_parameters>)
RETURNS <scalar_type>
LANGUAGE SQLSCRIPT
AS
BEGIN
<function_body>
RETURN <value>;
END;Table UDF - Returns table (read-only):
sql
CREATE FUNCTION <function_name> (<input_parameters>)
RETURNS TABLE (<column_definitions>)
LANGUAGE SQLSCRIPT
READS SQL DATA
AS
BEGIN
RETURN SELECT ... FROM ...;
END;标量UDF - 返回单个值:
sql
CREATE FUNCTION <function_name> (<input_parameters>)
RETURNS <scalar_type>
LANGUAGE SQLSCRIPT
AS
BEGIN
<function_body>
RETURN <value>;
END;表UDF - 返回表(只读):
sql
CREATE FUNCTION <function_name> (<input_parameters>)
RETURNS TABLE (<column_definitions>)
LANGUAGE SQLSCRIPT
READS SQL DATA
AS
BEGIN
RETURN SELECT ... FROM ...;
END;Data Types
数据类型
SQLScript supports comprehensive data types for different use cases. See for complete documentation including:
references/data-types.md- Numeric types (TINYINT, INTEGER, DECIMAL, etc.)
- Character types (VARCHAR, NVARCHAR, CLOB, etc.)
- Date/Time types (DATE, TIME, TIMESTAMP, SECONDDATE)
- Binary types (VARBINARY, BLOB)
- Type conversion functions (CAST, TO_ functions)
- NULL handling patterns
SQLScript支持适用于不同场景的全面数据类型。完整文档请参阅,包括:
references/data-types.md- 数值类型(TINYINT、INTEGER、DECIMAL等)
- 字符类型(VARCHAR、NVARCHAR、CLOB等)
- 日期/时间类型(DATE、TIME、TIMESTAMP、SECONDDATE)
- 二进制类型(VARBINARY、BLOB)
- 类型转换函数(CAST、TO_系列函数)
- NULL值处理模式
Variable Declaration
变量声明
Scalar Variables
标量变量
sql
DECLARE <variable_name> <datatype> [:= <initial_value>];
-- Examples
DECLARE lv_name NVARCHAR(100);
DECLARE lv_count INTEGER := 0;
DECLARE lv_date DATE := CURRENT_DATE;Note: Uninitialized variables default to NULL.
sql
DECLARE <variable_name> <datatype> [:= <initial_value>];
-- 示例
DECLARE lv_name NVARCHAR(100);
DECLARE lv_count INTEGER := 0;
DECLARE lv_date DATE := CURRENT_DATE;注意: 未初始化的变量默认值为NULL。
Table Variables
表变量
Implicit declaration:
sql
lt_result = SELECT * FROM "MYTABLE" WHERE status = 'A';Explicit declaration:
sql
DECLARE lt_data TABLE (
id INTEGER,
name NVARCHAR(100),
amount DECIMAL(15,2)
);Using TABLE LIKE:
sql
DECLARE lt_copy TABLE LIKE :lt_original;隐式声明:
sql
lt_result = SELECT * FROM "MYTABLE" WHERE status = 'A';显式声明:
sql
DECLARE lt_data TABLE (
id INTEGER,
name NVARCHAR(100),
amount DECIMAL(15,2)
);使用TABLE LIKE:
sql
DECLARE lt_copy TABLE LIKE :lt_original;Arrays
数组
sql
DECLARE arr INTEGER ARRAY := ARRAY(1, 2, 3, 4, 5);
-- Access: arr[1], arr[2], etc. (1-based index)
-- Note: Arrays cannot be returned from proceduressql
DECLARE arr INTEGER ARRAY := ARRAY(1, 2, 3, 4, 5);
-- 访问方式:arr[1], arr[2]等(下标从1开始)
-- 注意:数组无法从过程中返回Control Structures
控制结构
IF-ELSE Statement
IF-ELSE语句
sql
IF <condition1> THEN
<statements>
[ELSEIF <condition2> THEN
<statements>]
[ELSE
<statements>]
END IF;Comparison Operators:
| Operator | Meaning |
|---|---|
| Equal to |
| Greater than |
| Less than |
| Greater than or equal |
| Less than or equal |
| Not equal |
Important: IF-ELSE cannot be used within SELECT statements. Use CASE WHEN instead.
sql
IF <condition1> THEN
<statements>
[ELSEIF <condition2> THEN
<statements>]
[ELSE
<statements>]
END IF;比较运算符:
| 运算符 | 含义 |
|---|---|
| 等于 |
| 大于 |
| 小于 |
| 大于等于 |
| 小于等于 |
| 不等于 |
重要提示: IF-ELSE不能在SELECT语句中使用,请改用CASE WHEN。
WHILE Loop
WHILE循环
sql
WHILE <condition> DO
<statements>
END WHILE;sql
WHILE <condition> DO
<statements>
END WHILE;FOR Loop
FOR循环
sql
-- Numeric range
FOR i IN 1..10 DO
<statements>
END FOR;
-- Reverse
FOR i IN REVERSE 10..1 DO
<statements>
END FOR;
-- Cursor iteration
FOR row AS <cursor_name> DO
<statements using row.column_name>
END FOR;sql
-- 数值范围
FOR i IN 1..10 DO
<statements>
END FOR;
-- 反向循环
FOR i IN REVERSE 10..1 DO
<statements>
END FOR;
-- 游标迭代
FOR row AS <cursor_name> DO
<statements using row.column_name>
END FOR;LOOP with EXIT
带EXIT的LOOP
sql
LOOP
<statements>
IF <condition> THEN
BREAK;
END IF;
END LOOP;sql
LOOP
<statements>
IF <condition> THEN
BREAK;
END IF;
END LOOP;Table Types
表类型
Define reusable table structures:
sql
CREATE TYPE <type_name> AS TABLE (
<column1> <datatype>,
<column2> <datatype>,
...
);Usage in procedures:
sql
CREATE PROCEDURE get_employees (OUT et_result MY_TABLE_TYPE)
LANGUAGE SQLSCRIPT AS
BEGIN
et_result = SELECT * FROM "EMPLOYEES";
END;定义可复用的表结构:
sql
CREATE TYPE <type_name> AS TABLE (
<column1> <datatype>,
<column2> <datatype>,
...
);在过程中使用:
sql
CREATE PROCEDURE get_employees (OUT et_result MY_TABLE_TYPE)
LANGUAGE SQLSCRIPT AS
BEGIN
et_result = SELECT * FROM "EMPLOYEES";
END;Cursors
游标
Cursors handle result sets row by row. Pattern: Declare → Open → Fetch → Close
Performance Note: Cursors bypass the database optimizer and process rows sequentially. Use primarily with primary key-based queries. Prefer set-based operations when possible.
sql
DECLARE CURSOR <cursor_name> FOR
SELECT <columns> FROM <table> [WHERE <condition>];
OPEN <cursor_name>;
FETCH <cursor_name> INTO <variables>;
CLOSE <cursor_name>;Complete Example:
sql
DO
BEGIN
DECLARE lv_id INTEGER;
DECLARE lv_name NVARCHAR(100);
DECLARE CURSOR cur_employees FOR
SELECT id, name FROM "EMPLOYEES" WHERE dept = 'IT';
OPEN cur_employees;
FETCH cur_employees INTO lv_id, lv_name;
WHILE NOT cur_employees::NOTFOUND DO
-- Process row
SELECT :lv_id, :lv_name FROM DUMMY;
FETCH cur_employees INTO lv_id, lv_name;
END WHILE;
CLOSE cur_employees;
END;FOR Loop Alternative:
sql
FOR row AS cur_employees DO
SELECT row.id, row.name FROM DUMMY;
END FOR;游标用于逐行处理结果集,模式为:声明 → 打开 → 提取 → 关闭
性能提示: 游标会绕过数据库优化器,逐行处理数据。主要用于基于主键的查询,尽可能优先使用集合操作。
sql
DECLARE CURSOR <cursor_name> FOR
SELECT <columns> FROM <table> [WHERE <condition>];
OPEN <cursor_name>;
FETCH <cursor_name> INTO <variables>;
CLOSE <cursor_name>;完整示例:
sql
DO
BEGIN
DECLARE lv_id INTEGER;
DECLARE lv_name NVARCHAR(100);
DECLARE CURSOR cur_employees FOR
SELECT id, name FROM "EMPLOYEES" WHERE dept = 'IT';
OPEN cur_employees;
FETCH cur_employees INTO lv_id, lv_name;
WHILE NOT cur_employees::NOTFOUND DO
-- 处理行数据
SELECT :lv_id, :lv_name FROM DUMMY;
FETCH cur_employees INTO lv_id, lv_name;
END WHILE;
CLOSE cur_employees;
END;FOR循环替代方案:
sql
FOR row AS cur_employees DO
SELECT row.id, row.name FROM DUMMY;
END FOR;Exception Handling
异常处理
EXIT HANDLER
EXIT HANDLER
Suspends execution and performs cleanup when exceptions occur.
sql
DECLARE EXIT HANDLER FOR <condition_value>
<statement>;Condition values:
- - Any SQL exception
SQLEXCEPTION - - Specific error code
SQL_ERROR_CODE <number>
Access error details:
- - Numeric error code
::SQL_ERROR_CODE - - Error message text
::SQL_ERROR_MESSAGE
Example:
sql
CREATE PROCEDURE safe_insert (IN iv_id INTEGER, IN iv_name NVARCHAR(100))
LANGUAGE SQLSCRIPT AS
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
SELECT ::SQL_ERROR_CODE AS err_code,
::SQL_ERROR_MESSAGE AS err_msg FROM DUMMY;
END;
INSERT INTO "MYTABLE" VALUES (:iv_id, :iv_name);
END;发生异常时暂停执行并执行清理操作。
sql
DECLARE EXIT HANDLER FOR <condition_value>
<statement>;条件值:
- - 任意SQL异常
SQLEXCEPTION - - 特定错误码
SQL_ERROR_CODE <number>
访问错误详情:
- - 数值型错误码
::SQL_ERROR_CODE - - 错误消息文本
::SQL_ERROR_MESSAGE
示例:
sql
CREATE PROCEDURE safe_insert (IN iv_id INTEGER, IN iv_name NVARCHAR(100))
LANGUAGE SQLSCRIPT AS
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
SELECT ::SQL_ERROR_CODE AS err_code,
::SQL_ERROR_MESSAGE AS err_msg FROM DUMMY;
END;
INSERT INTO "MYTABLE" VALUES (:iv_id, :iv_name);
END;CONDITION
CONDITION
Associate user-defined names with error codes:
sql
DECLARE <condition_name> CONDITION FOR SQL_ERROR_CODE <number>;
-- Example
DECLARE duplicate_key CONDITION FOR SQL_ERROR_CODE 301;
DECLARE EXIT HANDLER FOR duplicate_key
SELECT 'Duplicate key error' FROM DUMMY;将用户自定义名称与错误码关联:
sql
DECLARE <condition_name> CONDITION FOR SQL_ERROR_CODE <number>;
-- 示例
DECLARE duplicate_key CONDITION FOR SQL_ERROR_CODE 301;
DECLARE EXIT HANDLER FOR duplicate_key
SELECT 'Duplicate key error' FROM DUMMY;SIGNAL and RESIGNAL
SIGNAL和RESIGNAL
Throw user-defined exceptions (codes 10000-19999):
sql
-- Throw exception
SIGNAL <condition_name> SET MESSAGE_TEXT = '<message>';
-- Re-throw in handler
RESIGNAL [<condition_name>] [SET MESSAGE_TEXT = '<message>'];Common Error Codes:
| Code | Description |
|---|---|
| 301 | Unique constraint violation |
| 1299 | No data found |
抛出用户自定义异常(错误码范围10000-19999):
sql
-- 抛出异常
SIGNAL <condition_name> SET MESSAGE_TEXT = '<message>';
-- 在处理器中重新抛出
RESIGNAL [<condition_name>] [SET MESSAGE_TEXT = '<message>'];常见错误码:
| 错误码 | 描述 |
|---|---|
| 301 | 唯一约束违反 |
| 1299 | 未找到数据 |
AMDP Integration
AMDP集成
ABAP Managed Database Procedures allow SQLScript within ABAP classes.
ABAP托管数据库过程(AMDP)允许在ABAP类中使用SQLScript。
Class Definition
类定义
abap
CLASS zcl_my_amdp DEFINITION PUBLIC FINAL CREATE PUBLIC.
PUBLIC SECTION.
INTERFACES if_amdp_marker_hdb. " Required interface
TYPES: BEGIN OF ty_result,
id TYPE i,
name TYPE string,
END OF ty_result,
tt_result TYPE STANDARD TABLE OF ty_result.
CLASS-METHODS: get_data
IMPORTING VALUE(iv_filter) TYPE string
EXPORTING VALUE(et_result) TYPE tt_result.
ENDCLASS.abap
CLASS zcl_my_amdp DEFINITION PUBLIC FINAL CREATE PUBLIC.
PUBLIC SECTION.
INTERFACES if_amdp_marker_hdb. " 必需接口
TYPES: BEGIN OF ty_result,
id TYPE i,
name TYPE string,
END OF ty_result,
tt_result TYPE STANDARD TABLE OF ty_result.
CLASS-METHODS: get_data
IMPORTING VALUE(iv_filter) TYPE string
EXPORTING VALUE(et_result) TYPE tt_result.
ENDCLASS.Method Implementation
方法实现
abap
CLASS zcl_my_amdp IMPLEMENTATION.
METHOD get_data BY DATABASE PROCEDURE
FOR HDB
LANGUAGE SQLSCRIPT
OPTIONS READ-ONLY
USING ztable.
et_result = SELECT id, name
FROM ztable
WHERE category = :iv_filter;
ENDMETHOD.
ENDCLASS.abap
CLASS zcl_my_amdp IMPLEMENTATION.
METHOD get_data BY DATABASE PROCEDURE
FOR HDB
LANGUAGE SQLSCRIPT
OPTIONS READ-ONLY
USING ztable.
et_result = SELECT id, name
FROM ztable
WHERE category = :iv_filter;
ENDMETHOD.
ENDCLASS.AMDP Restrictions
AMDP限制
- Parameters must be pass-by-value (no RETURNING)
- Only scalar types, structures, internal tables allowed
- No nested tables or deep structures
- COMMIT/ROLLBACK not permitted
- Must use Eclipse ADT for development
- Auto-created on first invocation
- 参数必须按值传递(不支持RETURNING)
- 仅允许标量类型、结构体、内表
- 不支持嵌套表或深层结构体
- 不允许使用COMMIT/ROLLBACK
- 必须使用Eclipse ADT进行开发
- 首次调用时自动创建
Performance Best Practices
性能最佳实践
1. Reduce Data Volume Early
1. 尽早减少数据量
sql
-- Good: Filter and project early
lt_filtered = SELECT col1, col2 FROM "BIGTABLE" WHERE status = 'A';
lt_result = SELECT a.col1, b.name
FROM :lt_filtered AS a
JOIN "LOOKUP" AS b ON a.id = b.id;
-- Bad: Join then filter
lt_result = SELECT a.col1, b.name
FROM "BIGTABLE" AS a
JOIN "LOOKUP" AS b ON a.id = b.id
WHERE a.status = 'A';sql
-- 推荐:先过滤和投影
lt_filtered = SELECT col1, col2 FROM "BIGTABLE" WHERE status = 'A';
lt_result = SELECT a.col1, b.name
FROM :lt_filtered AS a
JOIN "LOOKUP" AS b ON a.id = b.id;
-- 不推荐:先关联再过滤
lt_result = SELECT a.col1, b.name
FROM "BIGTABLE" AS a
JOIN "LOOKUP" AS b ON a.id = b.id
WHERE a.status = 'A';2. Prefer Declarative Over Imperative
2. 优先使用声明式而非命令式
sql
-- Good: Set-based operation
lt_result = SELECT id, amount * 1.1 AS new_amount FROM "ORDERS";
-- Bad: Row-by-row processing
FOR row AS cur_orders DO
UPDATE "ORDERS" SET amount = row.amount * 1.1 WHERE id = row.id;
END FOR;sql
-- 推荐:集合操作
lt_result = SELECT id, amount * 1.1 AS new_amount FROM "ORDERS";
-- 不推荐:逐行处理
FOR row AS cur_orders DO
UPDATE "ORDERS" SET amount = row.amount * 1.1 WHERE id = row.id;
END FOR;3. Avoid Engine Mixing
3. 避免引擎混合
- Don't mix Row Store and Column Store tables in same query
- Avoid Calculation Engine functions with pure SQL
- Use consistent storage types
- 不要在同一查询中混合行存储和列存储表
- 避免在纯SQL中使用计算引擎函数
- 使用一致的存储类型
4. Use UNION ALL Instead of UNION
4. 使用UNION ALL而非UNION
sql
-- Faster when duplicates impossible or acceptable
SELECT * FROM table1 UNION ALL SELECT * FROM table2;
-- Slower: removes duplicates
SELECT * FROM table1 UNION SELECT * FROM table2;sql
-- 更快:当无重复或允许重复时使用
SELECT * FROM table1 UNION ALL SELECT * FROM table2;
-- 更慢:会移除重复数据
SELECT * FROM table1 UNION SELECT * FROM table2;5. Avoid Dynamic SQL
5. 避免动态SQL
sql
-- Bad: Re-optimized each execution
EXECUTE IMMEDIATE 'SELECT * FROM ' || :lv_table;
-- Good: Static SQL with parameters
SELECT * FROM "MYTABLE" WHERE id = :lv_id;sql
-- 不推荐:每次执行都重新优化
EXECUTE IMMEDIATE 'SELECT * FROM ' || :lv_table;
-- 推荐:带参数的静态SQL
SELECT * FROM "MYTABLE" WHERE id = :lv_id;6. Position Imperative Logic Last
6. 将命令式逻辑放在最后
Place control structures at the end of procedures to maximize parallel processing of declarative statements.
将控制结构放在过程末尾,最大化声明式语句的并行处理能力。
System Limits
系统限制
| Limit | Value |
|---|---|
| Table locks per transaction | 16,383 |
| Tables in a statement | 4,095 |
| SQL statement length | 2 GB |
| Procedure size | Bounded by SQL statement length (2 GB) |
Note: Actual limits may vary by HANA version. Consult SAP documentation for version-specific limits.
| 限制项 | 数值 |
|---|---|
| 每个事务的表锁数量 | 16,383 |
| 单条语句中的表数量 | 4,095 |
| SQL语句长度 | 2 GB |
| 过程大小 | 受SQL语句长度限制(2 GB) |
注意: 实际限制可能因HANA版本而异,请查阅SAP文档获取特定版本的限制说明。
Debugging Tools
调试工具
- SQLScript Debugger - SAP Web IDE / Business Application Studio
- Plan Visualizer - Analyze execution plans
- Expensive Statement Trace - Identify bottlenecks
- SQL Analyzer - Query optimization recommendations
- SQLScript调试器 - SAP Web IDE / Business Application Studio
- 执行计划可视化工具 - 分析执行计划
- 昂贵语句跟踪 - 识别性能瓶颈
- SQL分析器 - 查询优化建议
Quick Reference
快速参考
String Concatenation
字符串拼接
sql
lv_result = lv_str1 || ' ' || lv_str2;sql
lv_result = lv_str1 || ' ' || lv_str2;NULL Handling
NULL值处理
sql
COALESCE(value, default_value)
IFNULL(value, default_value)
NULLIF(value1, value2)sql
COALESCE(value, default_value)
IFNULL(value, default_value)
NULLIF(value1, value2)Date Operations
日期操作
sql
ADD_DAYS(date, n)
ADD_MONTHS(date, n)
DAYS_BETWEEN(date1, date2)
CURRENT_DATE
CURRENT_TIMESTAMPsql
ADD_DAYS(date, n)
ADD_MONTHS(date, n)
DAYS_BETWEEN(date1, date2)
CURRENT_DATE
CURRENT_TIMESTAMPType Conversion
类型转换
sql
CAST(value AS datatype)
TO_VARCHAR(value)
TO_INTEGER(value)
TO_DATE(string, 'YYYY-MM-DD')
TO_TIMESTAMP(string, 'YYYY-MM-DD HH24:MI:SS')sql
CAST(value AS datatype)
TO_VARCHAR(value)
TO_INTEGER(value)
TO_DATE(string, 'YYYY-MM-DD')
TO_TIMESTAMP(string, 'YYYY-MM-DD HH24:MI:SS')Related Skills
相关技能
For comprehensive SAP development, combine this skill with:
| Skill | Use Case |
|---|---|
| sap-abap | ABAP programming patterns for AMDP context |
| sap-abap-cds | CDS views that consume SQLScript procedures |
| sap-cap-capire | CAP framework database procedures integration |
| sap-hana-cli | HANA CLI for procedure deployment and testing |
| sap-btp-cloud-platform | BTP deployment of HANA artifacts |
如需全面的SAP开发,可将本技能与以下技能结合使用:
| 技能 | 使用场景 |
|---|---|
| sap-abap | AMDP场景下的ABAP编程模式 |
| sap-abap-cds | 调用SQLScript过程的CDS视图 |
| sap-cap-capire | CAP框架数据库过程集成 |
| sap-hana-cli | HANA CLI用于过程部署和测试 |
| sap-btp-cloud-platform | BTP上的HANA工件部署 |
Bundled Resources
捆绑资源
Reference Documentation
参考文档
- - Index of all references with quick navigation
references/skill-reference-guide.md - - SQLScript terminology and concepts
references/glossary.md - - Complete SQLScript syntax reference
references/syntax-reference.md - - Built-in functions catalog
references/built-in-functions.md - - Data types and conversion
references/data-types.md - - Exception handling patterns
references/exception-handling.md - - AMDP integration patterns
references/amdp-integration.md - - Optimization techniques
references/performance-guide.md - - Lateral joins, JSON, query hints, currency conversion
references/advanced-features.md - - Common errors and solutions
references/troubleshooting.md
- - 所有参考文档的索引,支持快速导航
references/skill-reference-guide.md - - SQLScript术语和概念
references/glossary.md - - 完整SQLScript语法参考
references/syntax-reference.md - - 内置函数目录
references/built-in-functions.md - - 数据类型和转换
references/data-types.md - - 异常处理模式
references/exception-handling.md - - AMDP集成模式
references/amdp-integration.md - - 优化技巧
references/performance-guide.md - - 横向连接、JSON、查询提示、货币转换
references/advanced-features.md - - 常见错误及解决方案
references/troubleshooting.md
Production-Ready Templates
生产就绪模板
Copy and customize these templates for common patterns:
- - Basic stored procedure with error handling
templates/simple-procedure.sql - - Comprehensive error handling patterns
templates/procedure-with-error-handling.sql - - Table UDF with validation
templates/table-function.sql - - Scalar UDF examples
templates/scalar-function.sql - - Complete AMDP class boilerplate
templates/amdp-class.abap - - AMDP implementation template
templates/amdp-procedure.sql - - Cursor patterns (classic and FOR loop)
templates/cursor-iteration.sql - - High-performance bulk operations
templates/bulk-operations.sql
可复制并自定义以下模板以适配常见场景:
- - 带错误处理的基础存储过程
templates/simple-procedure.sql - - 全面的错误处理模式
templates/procedure-with-error-handling.sql - - 带验证的表UDF
templates/table-function.sql - - 标量UDF示例
templates/scalar-function.sql - - 完整AMDP类模板
templates/amdp-class.abap - - AMDP实现模板
templates/amdp-procedure.sql - - 游标模式(经典版和FOR循环版)
templates/cursor-iteration.sql - - 高性能批量操作
templates/bulk-operations.sql
Specialized Agents
专用Agent
- sqlscript-analyzer - Analyze code for performance issues and best practices
- procedure-generator - Generate procedures interactively from requirements
- amdp-helper - Assist with AMDP class creation and debugging
- sqlscript-analyzer - 分析代码的性能问题和最佳实践合规性
- procedure-generator - 根据需求交互式生成过程
- amdp-helper - 协助创建和调试AMDP类
Slash Commands
斜杠命令
- - Validate code with auto-fix capability
/sqlscript-validate - - Performance analysis and optimization suggestions
/sqlscript-optimize - - Convert between standalone and AMDP formats
/sqlscript-convert
- - 验证代码并提供自动修复功能
/sqlscript-validate - - 性能分析和优化建议
/sqlscript-optimize - - 在独立格式和AMDP格式之间转换
/sqlscript-convert
Validation Hooks
验证钩子
Automatic code quality checks on Write/Edit operations:
- Error handling completeness
- Security vulnerabilities
- Performance anti-patterns
- Naming conventions
- AMDP compliance
对写入/编辑操作自动进行代码质量检查:
- 异常处理完整性
- 安全漏洞
- 性能反模式
- 命名规范
- AMDP合规性