sap-sqlscript

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

SAP 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
    DUMMY
    table for single-row operations
  • 大小写不敏感的语言
  • 所有语句以分号结尾
  • 引用变量时使用冒号前缀
    :variableName
  • 赋值时无需冒号
  • 单条记录操作使用
    DUMMY

Two Logic Types

两种逻辑类型

TypeDescriptionExecution
DeclarativePure SQL sequencesConverted to data flow graphs, processed in parallel
ImperativeControl 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
references/data-types.md
for complete documentation including:
  • 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 procedures

sql
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:
OperatorMeaning
=
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:
  • SQLEXCEPTION
    - Any SQL exception
  • SQL_ERROR_CODE <number>
    - Specific error code
Access error details:
  • ::SQL_ERROR_CODE
    - Numeric error code
  • ::SQL_ERROR_MESSAGE
    - Error message text
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>;
条件值:
  • SQLEXCEPTION
    - 任意SQL异常
  • 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:
CodeDescription
301Unique constraint violation
1299No 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

系统限制

LimitValue
Table locks per transaction16,383
Tables in a statement4,095
SQL statement length2 GB
Procedure sizeBounded 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_TIMESTAMP
sql
ADD_DAYS(date, n)
ADD_MONTHS(date, n)
DAYS_BETWEEN(date1, date2)
CURRENT_DATE
CURRENT_TIMESTAMP

Type 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:
SkillUse Case
sap-abapABAP programming patterns for AMDP context
sap-abap-cdsCDS views that consume SQLScript procedures
sap-cap-capireCAP framework database procedures integration
sap-hana-cliHANA CLI for procedure deployment and testing
sap-btp-cloud-platformBTP deployment of HANA artifacts

如需全面的SAP开发,可将本技能与以下技能结合使用:
技能使用场景
sap-abapAMDP场景下的ABAP编程模式
sap-abap-cds调用SQLScript过程的CDS视图
sap-cap-capireCAP框架数据库过程集成
sap-hana-cliHANA CLI用于过程部署和测试
sap-btp-cloud-platformBTP上的HANA工件部署

Bundled Resources

捆绑资源

Reference Documentation

参考文档

  • references/skill-reference-guide.md
    - Index of all references with quick navigation
  • references/glossary.md
    - SQLScript terminology and concepts
  • references/syntax-reference.md
    - Complete SQLScript syntax reference
  • references/built-in-functions.md
    - Built-in functions catalog
  • references/data-types.md
    - Data types and conversion
  • references/exception-handling.md
    - Exception handling patterns
  • references/amdp-integration.md
    - AMDP integration patterns
  • references/performance-guide.md
    - Optimization techniques
  • references/advanced-features.md
    - Lateral joins, JSON, query hints, currency conversion
  • references/troubleshooting.md
    - Common errors and solutions
  • references/skill-reference-guide.md
    - 所有参考文档的索引,支持快速导航
  • references/glossary.md
    - SQLScript术语和概念
  • references/syntax-reference.md
    - 完整SQLScript语法参考
  • references/built-in-functions.md
    - 内置函数目录
  • references/data-types.md
    - 数据类型和转换
  • references/exception-handling.md
    - 异常处理模式
  • references/amdp-integration.md
    - AMDP集成模式
  • references/performance-guide.md
    - 优化技巧
  • references/advanced-features.md
    - 横向连接、JSON、查询提示、货币转换
  • references/troubleshooting.md
    - 常见错误及解决方案

Production-Ready Templates

生产就绪模板

Copy and customize these templates for common patterns:
  • templates/simple-procedure.sql
    - Basic stored procedure with error handling
  • templates/procedure-with-error-handling.sql
    - Comprehensive error handling patterns
  • templates/table-function.sql
    - Table UDF with validation
  • templates/scalar-function.sql
    - Scalar UDF examples
  • templates/amdp-class.abap
    - Complete AMDP class boilerplate
  • templates/amdp-procedure.sql
    - AMDP implementation template
  • templates/cursor-iteration.sql
    - Cursor patterns (classic and FOR loop)
  • templates/bulk-operations.sql
    - High-performance bulk operations
可复制并自定义以下模板以适配常见场景:
  • templates/simple-procedure.sql
    - 带错误处理的基础存储过程
  • templates/procedure-with-error-handling.sql
    - 全面的错误处理模式
  • templates/table-function.sql
    - 带验证的表UDF
  • templates/scalar-function.sql
    - 标量UDF示例
  • templates/amdp-class.abap
    - 完整AMDP类模板
  • templates/amdp-procedure.sql
    - AMDP实现模板
  • templates/cursor-iteration.sql
    - 游标模式(经典版和FOR循环版)
  • 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

斜杠命令

  • /sqlscript-validate
    - Validate code with auto-fix capability
  • /sqlscript-optimize
    - Performance analysis and optimization suggestions
  • /sqlscript-convert
    - Convert between standalone and AMDP formats
  • /sqlscript-validate
    - 验证代码并提供自动修复功能
  • /sqlscript-optimize
    - 性能分析和优化建议
  • /sqlscript-convert
    - 在独立格式和AMDP格式之间转换

Validation Hooks

验证钩子

Automatic code quality checks on Write/Edit operations:
  • Error handling completeness
  • Security vulnerabilities
  • Performance anti-patterns
  • Naming conventions
  • AMDP compliance
对写入/编辑操作自动进行代码质量检查:
  • 异常处理完整性
  • 安全漏洞
  • 性能反模式
  • 命名规范
  • AMDP合规性