跳到主要内容

自定义 SQL:从写到执行

平台上的“自定义 SQL”一般指:语句保存在服务端,带参数,可被应用或 BFF 调用。CLI 帮你完成:列举、看详情、校验、新建、拉取、推送、执行一次试跑,以及后面 代码生成与菜单 里提到的代码生成。

SQL 在平台上的标识通常是 **sqlCode **,形如 xxxxxxxx-xxxxxxxx(8 位 hex + - + 8 位 hex)。记不住就先 sql list

看看你有哪些 SQL

rabetbase sql list
rabetbase sql list --name 报表
rabetbase sql list --sqlcode xxxxxxxx-xxxxxxxx

支持分页时可用 --page--pagesize(默认值以 --help 为准)。

看某一条 SQL 的完整定义

rabetbase sql detail --sqlcode xxxxxxxx-xxxxxxxx

会包含语句内容、参数定义等,适合复制到本地文件或对照修改。

先校验,再推送(推荐习惯)

本地准备一个 .sql 文件,推送到平台前先校验:

rabetbase sql validate --file ./queries/report.sql

也可以直接传字符串:

rabetbase sql validate --sql "SELECT * FROM t WHERE id = #{id}"

校验会看语句类型、是否包含危险操作、抽出 #{param} 这种参数等。若希望按数据集做表名列名交叉检查,可传:

rabetbase sql validate --file ./queries/report.sql --schemas order,customer

CI 里常用 --format json 拿机器可读结果。

新建和更新 SQL

新建 SQL 时,CLI 会先在平台创建资源,再在项目里生成受管的本地文件。非交互环境需要显式传入名称、数据库连接 ID 和文件模式:

rabetbase sql create --name 月报查询 --db-id <dbId> --mode sql

创建成功后,按命令输出里的本地路径编辑 SQL 文件。改完后先预览,再推送:

rabetbase sql push --sqlcode xxxxxxxx-xxxxxxxx --dry-run
rabetbase sql push --sqlcode xxxxxxxx-xxxxxxxx --yes

更新已有 SQL 时,先拉到本地受管目录,再修改并推送:

rabetbase sql pull --sqlcode xxxxxxxx-xxxxxxxx
rabetbase sql push --sqlcode xxxxxxxx-xxxxxxxx --yes

sql push 会使用与 validate 一致的校验规则,危险语句会被拦截。非交互环境(CI)请加 --non-interactive,需要跳确认时配合 --yes 等(以命令 help 为准)。

早期教程里的 sql save 已不再作为推荐流程。新建用 sql create,更新用 sql pull / sql push

执行已保存的 SQL

用于自测或临时拉数据:

rabetbase sql exec --sqlcode xxxxxxxx-xxxxxxxx
rabetbase sql exec --sqlcode xxxxxxxx-xxxxxxxx --params '{"keyword":"test","page":1}'

--params 是 JSON,键要和 SQL 里 #{...} 对上。


小结

  • list / detail 管理 sqlCode。
  • 养成 validate → create / push 的顺序,减少校验与落库不一致。
  • exec 用来试跑带参查询。

生成 TypeScript 调用片段见 代码生成与菜单。要写服务端脚本并与 Git 协作,见 BFF 脚本:本地与远端同步