掌握执行服务器过程 -- 执行 SQL

1 SQL 设置方法

执行单条 SQL

直接书写带变量的 SQL,取用前端和后端提供的变量数据做持久化操作,如:

INSERT INTO TAB_A(F1, F2, F3, ...) VALUES(@11-VAR1@, @11-VAR2@, @VAR3@)

一次执行多条 SQL

可以使用 $0, $1, $2, ... 标识符依次来表示引用第 1 条, 第 2 条, 第 3 条 SQL... 执行的结果。如:

SELECT * FROM tab_a WHERE id = @12-USER_ID@ AND master = @USER_ID@; -- 一定要分号分隔

INSERT INTO tab_b(F1, F2, F3, ...) VALUES($0.rows[0]["field1"] , @11-VAR2@, @VAR3@);
                                       -- ^^^^^^^ 即第 1 条 SELECT 查询结果集合。
UPDATE tab_b SET f1 = @12-VAR1@, f2 = @VAR2@ WHERE id = $1.insertId; --<-- 即 第 2 条 SQL 执行的结果。

【说明 1】$n 标识符代表的第 n+1 条 SQL 执行结果,本身是一个 JSON 对象,结构如下:

{
    rows: [{...}, {...}, {...} ...], // 执行 SELECT 语句才有该字段,表示查询结果。
    insertId: 12889, // 执行 INSERT 语句才有该字段,表示插入后获得的自增长 ID,仅适用于 mysql。
    affectedRows: 3, // 执行 INSERT, UPDATE, DELETE 才有该字段,表示影响行数。
}

取值举例:

  • $0.rows[0].name 可以取到第 1 条 SELECT SQL 执行结果的第 1 行结果的 name 字段值。
  • $1.insertId 可以取到第 2 条 INSERT SQL 执行完毕后返回的自增长 ID。

【说明 2】执行多条 SQL 时,解释器会根据上下文依赖,决定是否并发执行还是串行执行;同时,如果包含两条以上的更新语句(INSERT、UPDATE、DELETE),则会采用事务方式执行,如果有错误会自动回滚,开发者无需关心。**

SQL 中嵌入 JavaScript 脚本

可以使用 # JavaScript 脚本 # 嵌入 SQL 中对变量进行加工处理,如:

INSERT INTO tab_a(F1, F2, F3) VALUES(
    -- 字段 F1 值
    #@11-VAR1@ + '-' + @11-VAR2@#,

    -- 字段 F2 值
    #@12-NAMES@.split(',').map(function(s) {
        return s.replace(/\s/g, '');
    }).join(':')#,

    -- 字段 F3 值
    #@12-VAR@ + b#
);

2 添加错误码对照提示

对于一些需要明确提示给用户的 SQL 错误,可以设置SQL 错误码对应的错误提示信息,以增加交互的友好性。比如给常见的主键重复错误码ER_DUP_KEY添加对照提示您添加的学号已经存在!

3 同步执行(可勾选)

  • 如果勾选,则前端后续动作需要等待此后台过程完成之后才能执行,并且要求后台过程执行正确。如果后台执行发生错误,则前端的后续动作不会执行。
  • 如果不勾选,则前端的后续动作不会受后台过程执行影响,彼此独立进行。

Demo

使用 Enhancer 后台执行程序,结合 Enhancer 变量体系,可以使得业务逻辑的开发变得更直观和高效。

results matching ""

    No results matching ""