掌握执行服务器过程 -- 执行 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 同步执行(可勾选)
- 如果勾选,则前端后续动作需要等待此后台过程完成之后才能执行,并且要求后台过程执行正确。如果后台执行发生错误,则前端的后续动作不会执行。
- 如果不勾选,则前端的后续动作不会受后台过程执行影响,彼此独立进行。