HANA SQLScript中的变量类型汇总

发布于:2025-07-18 ⋅ 阅读:(12) ⋅ 点赞:(0)

在 SAP HANA SQLScript 中,可以使用多种变量类型,包括标量(Scalar)类型、表类型和结构化类型。以下是各种变量类型的详细说明和示例。


1. 标量变量(Scalar Variables)

标量变量是用于存储单个值(如数字、字符串、日期等)的变量类型。常用于计算结果的存储或临时逻辑操作。

常见标量数据类型:
数据类型 描述
INTEGER 整数类型,例如 10, 20 等值。
BIGINT 大整数类型。
SMALLINT 小整数类型。
DECIMAL(p,s) 精确小数类型,其中 p 是总位数,s 是小数位数。
DOUBLE 双精度浮点数类型。
NVARCHAR(n) 可变长度的 Unicode 字符串,最多可以存储 n 个字符。
VARCHAR(n) 可变长度的非 Unicode 字符串,最多可以存储 n 个字符。
DATE 存储日期值(YYYY-MM-DD)。
TIME 存储时间值(HH:MI:SS)。
TIMESTAMP 存储日期和时间值(YYYY-MM-DD HH:MI:SS[.F])。
BOOLEAN 布尔值类型(TRUE、FALSE)。
使用示例:
DO BEGIN
    -- 声明变量
    DECLARE v_count INTEGER;
    DECLARE v_average DECIMAL(10,2);
    DECLARE v_name NVARCHAR(50);
    DECLARE v_current_date DATE;
    
    -- 给变量赋值
    SELECT COUNT(*) INTO v_count FROM EMPLOYEES WHERE SALARY > 50000;
    SELECT AVG(SALARY) INTO v_average FROM EMPLOYEES WHERE DEPT_ID = 101;
    SET :v_name = 'John Smith';
    SET :v_current_date = CURRENT_DATE;
    
    -- 输出调试信息(仅供开发环境)
    -- PRINT 'Name: ' || :v_name || ', Date: ' || :v_current_date;
END;

2. 表变量(Table Variables 或 Temporary Tables)

表变量用于存储一组数据(表格形式)。表变量是将数据存储在内存中,因此适合执行中间计算或复杂查询。

特点:
  • 表变量可以看作是一个 “临时表”。
  • 可以用 CREATE LOCAL TEMPORARY TABLE 创建,也可以直接声明。
  • 作用域仅限当前会话或 SQLScript 脚本的生命周期。
  • 必须指定每个列的名称和数据类型。
使用示例:
DO BEGIN
    -- 声明临时表
    CREATE LOCAL TEMPORARY TABLE #EMPLOYEE_TEMP (
        EMP_ID INT,
        NAME NVARCHAR(100),
        SALARY DECIMAL(10,2),
        DEPARTMENT NVARCHAR(50)
    );

    -- 将查询结果插入到临时表中
    INSERT INTO #EMPLOYEE_TEMP 
    SELECT EMP_ID, NAME, SALARY, DEPT_NAME
    FROM EMPLOYEES INNER JOIN DEPARTMENTS
    ON EMPLOYEES.DEPT_ID = DEPARTMENTS.DEPT_ID
    WHERE EMPLOYEES.SALARY > 50000;

    -- 查询临时表
    SELECT * FROM #EMPLOYEE_TEMP;

    -- 清理临时表(可选,因为在会话结束时自动删除)
    DROP TABLE #EMPLOYEE_TEMP;
END;

3. 结构化变量(Structured Variables 行结构/Record Row Type)

结构化变量(也叫记录或行结构变量)允许存储一行数据的多个字段。这种类型适用于存储数据行(例如存储查询返回的单个行的结果)。

定义结构化变量的方式:
  • 使用表结构中的字段定义类似的记录行。
  • 通过查询结果直接赋值给结构化变量。
使用示例:
DO BEGIN
    -- 声明结构化变量(类似于一行记录)
    DECLARE v_employee_record EMPLOYEES%ROWTYPE;

    -- 获取单条记录并存入结构化变量
    SELECT EMP_ID, NAME, SALARY, DEPT_ID 
    INTO v_employee_record 
    FROM EMPLOYEES 
    WHERE EMP_ID = 1001;

    -- 访问结构化变量的字段(示例输出)
    -- PRINT 'Employee Name: ' || :v_employee_record.NAME || ', Salary: ' || :v_employee_record.SALARY;
END;
注意:

结构化变量中,每个字段的类型会自动与表定义中的字段匹配,因此可以很方便地表示一行查询结果。


4. 游标(CURSOR)变量

游标用于处理返回多行结果集的查询。通过游标,可以逐行遍历一组查询结果。

声明和使用游标的基本步骤:
  1. 声明游标并指定查询语句。
  2. 打开游标(OPEN)。
  3. 逐行获取数据(FETCH)。
  4. 关闭游标(CLOSE)。
使用示例:
DO BEGIN
    -- 声明游标,定义查询语句
    DECLARE cur_employee CURSOR FOR
    SELECT EMP_ID, NAME, SALARY FROM EMPLOYEES WHERE SALARY > 50000;

    -- 声明变量用于存储游标中的字段值
    DECLARE v_emp_id INTEGER;
    DECLARE v_emp_name NVARCHAR(100);
    DECLARE v_emp_salary DECIMAL(10,2);

    -- 打开游标
    OPEN cur_employee;

    -- 遍历游标中的结果集
    WHILE (cur_employee IS NOT EMPTY) DO
        FETCH cur_employee INTO v_emp_id, v_emp_name, v_emp_salary;
        -- 处理每一行数据(示例:输出或逻辑操作)
        -- PRINT 'Employee: ' || :v_emp_name || ', Salary: ' || :v_emp_salary;
    END WHILE;

    -- 关闭游标
    CLOSE cur_employee;
END;

5. 常见的类型约束和自动匹配

在声明变量类型时,有一些实用约束和功能:

  • 自动类型绑定:
    如果你希望一个变量和某个表列的类型一致,可以使用 %TYPE

    DECLARE v_salary EMPLOYEES.SALARY%TYPE;
    
  • 行类型绑定:
    如果你希望一个变量结构和整个表/查询结果行一致,可以使用 %ROWTYPE

    DECLARE v_employee EMPLOYEES%ROWTYPE;
    

总结:支持的变量类型

  1. 标量变量(单值类型,如 INTEGER, DECIMAL, NVARCHAR 等)。
  2. 表变量(类似临时表,用于存储表格形式的数据)。
  3. 结构化变量(记录/行变量,用于存储结构化查询结果,%ROWTYPE)。
  4. 游标变量(用于处理多行记录,便于逐行操作)。

这些类型结合起来能够完成 SAP HANA 中 SQLScript 的复杂业务逻辑。选择变量的类型应基于你的业务场景及性能需求。


网站公告

今日签到

点亮在社区的每一天
去签到