大数跨境

CodeBuddy+SQLazy 编写复杂SQL详解

CodeBuddy+SQLazy 编写复杂SQL详解 润乾软件
2026-10-15
1
导读:AI 现在可以生成复杂 SQL,但输出仍可能有幻觉,代码对不对很难审;SQL 本身又往往几十行嵌套,不好调试,

AI 现在可以生成复杂 SQL,但输出仍可能有幻觉,代码对不对很难审;SQL 本身又往往几十行嵌套,不好调试,需求改一次,常常要重新生成一遍,时间长了很难维护。更稳妥的做法,是先用 CodeBuddy 把逻辑写成 SQLazy 分步脚本,再编译成 SQL。写成脚本之后,每一步都能单独运行,中间结果随时可看,审计和调试都有据可查;脚本本身就是可读的文档,交接时直接交脚本。验证通过后,再编译成目标数据库的 SQL,换库也只是重新编译一次。

本文就从安装配置开始,把完整流程走一遍。

1. 安装配置 SQLazy

图片

下载安装 SQLazy

进入官网https://www.raqsoft.com.cn/download-SQLazy,下载 SQLazy
QQ20260827143603png

一键安装 SQLazy,可保留默认配置项。点击桌面图标 "SQLazy" 打开 IDE。

Picture3png

配置项目目录

在操作系统中,新建任意目录作为本项目根目录,比如 "d:\AI\workbuddyNSQL",在该目录下新建空目录 nsql,将来存放 CodeBuddy 生成的 nsql 代码文件。

打开 "SQLazy安装目录\LLM" 目录,找到 SQLazy 知识库,即该目录下的 2 个文件:规划.md、sqlazy 规划.md,以及 2 个目录:函数、功能。

规划.md:全局规约文件,集中定义了全部表结构、输出流程、SQLazy 格式规范、硬性约束,并声明了所有 SQLazy 函数 / 功能文档的加载路径。

sqlazy 规划.md:自定义命令文件,定义了在 LLM 对话框调用本 skills 的格式。

函数:SQLazy 所有的函数定义文件。

功能:SQLazy 所有的功能定义文件。

将这些文件和目录复制到本项目根目录,形如下图:

q6jpg

配置 JDBC

配置 JDBC 是为了让后续步骤使用内存表和 SQL 数据源,如果使用文本数据源,可以跳过本步骤。

将数据库对应的驱动放入 "SQLazy安装目录\..\common\jdbc",这里以 mysql8 为例:

Picture5png

在 SQLazy IDE 中,用菜单 "工具 -> 数据连接" 新建数据源。新建 My_SQL 数据源,按 Java 规范填写,命名为 mysql8。点击连接按钮,如果数据源名变为粉色,则说明连接成功。

Picture6png

2. 安装配置 CodeBuddy

图片

进入官网https://www.codebuddy.cn/ide/,下载 CodeBuddy IDE。

Picture7png

按缺省选项安装 CodeBuddy,安装后按官方要求登录。

Picture8png

用菜单 "文件 -> 打开文件夹" 打开本项目的根目录,CodeBuddy 会自动索引上下文,并自动以 Craft 类型打开右下角的 LLM 对话框。如果没有自动打开,请点击右上角的按钮展开 LLM 对话框,并在对话类型中选择 "Craft"。

q7jpg

3. 基本解题步骤

图片

可以把一些常用的数据表定义为全局表,从而在本项目的任意对话框中直接引用。下面将基于一个全局表进行计算,结果生成 nsql 文件,再在 SQLazy 中验证该 nsql,验证无误后编译成 SQL,最后执行 SQL。

定义全局表

在文件 "规划.md" 的 "业务数据表结构" 章节,编写股票表的定义:stock:CODE(INT),DT(DATETIME),CL(FLOAT)。

Picture10png

注意,如果没有在 "规划.md" 中定义表结构,则必须在将来输入用户指令时定义。
在 mysql8 数据库中新建 stock 表,导入下面的股票记录。

CODE,DT,CL100030,2009-01-01 00:00:00,3.89100046,2009-01-05 00:00:00,3.78100046,2009-01-06 00:00:00,4.04100046,2009-01-08 00:00:00,4.02100046,2009-01-07 00:00:00,3.77100046,2009-01-12 00:00:00,4.86100046,2009-01-09 00:00:00,4.42100046,2009-01-13 00:00:00,4.44100046,2009-01-14 00:00:00,4.88100046,2009-01-15 00:00:00,4.98100046,2009-01-19 00:00:00,4.83100046,2009-01-16 00:00:00,4.99100046,2009-01-21 00:00:00,5.51100046,2009-01-20 00:00:00,5.12

生成 nsql 文件

在 CodeBuddy 的对话框中输入指令:/sqlazy 规划 计算股票代码为 100046 的股票,最长连续上涨了多少天?

上面指令中,"/sqlazy 规划" 是自定义命令,后面是计算要求,"股票" 通常会被 LLM 识别为全局表 stock。

经过一段时间的计算,Codebuddy 会根据全局规约文件输出结果,包括:计算过程、核心逻辑、nsql 文件等。其中 nsql 文件是核心。

Picture11png

用内存表运行 nsql

在 SQLazy IDE 中打开 "本项目根目录\nsql" 中的 nsql 文件。

Picture12png

点击菜单 "工具 -> 内存表" 打开配置内存表的界面。

Picture13png

点击 "导入数据库表",将列出数据库所有的表(当前 schema)。勾选需要用的表 stock,并点击 "确定"。

Picture14png

在内存表界面中再次勾选需要用的表 stock,并关闭界面。

Picture15png

点击执行(或单步运行)按钮,如果右边显示正确计算结果,则说明 nsql 代码正常。注意,实际代码可能与下面有偏差,甚至每次生成的 nsql 文件都有少许偏差,这是由 LLM 的不确定性决定的。

Picture16png

点击左边某行 nsql 代码时,右边会自动跳转到对应的中间计算结果,这在调试时非常方便。比如点击 t5,可以看到最终计算结果。

Picture17png

编译 SQL

在 SQLazy IDE 中打开菜单 "程序 -> 编译",在目标数据库中选择 MYSQL,点击 "编译",将自动生成 SQL 语句。

Picture18png

点击 "执行",将执行该 SQL,返回执行结果。该结果应与 IDE 中最后一步 nsql 的计算结果一致。

Picture19png

4. 进阶:更多数据源

图片

SQL数据源

上面解题步骤的数据源是库表生成的内存表,这里介绍 SQL 实时数据源。

在 nsql 代码的第一行插入新行,命名为 stock(必须与下一行的锚点同名),编写 SQL 功能用于取数 ":SQL"select * from stock"; 数据库 mysql8

其中,mysql8 是之前配置好的数据源名。

Picture20png
点击执行按钮,如果右边显示正确计算结果,则说明 SQL 数据源取数成功。

Picture21png

文本数据源

使用指定符号分隔的文本文件做数据源,可以脱离数据库运行 nsql。

将前面的股票记录保存成文件 stock.csv。

将 nsql 代码中原第一行(命名为 stock 的行)替换为以下内容,用 nsql 的文件功能取数:文件 "d:\\stock.csv"; 逗号分隔; 标题

其中,"逗号分隔" 表示分隔符是逗号,可以指定其他符号; "标题" 表示文本的首行为字段名。

运行后如图所示。

Picture22png

5. 进阶:失败处理

图片

LLM 一定有幻觉,不能保证百分百成功,但有一些办法可以提高成功率。

清晰描述算法

计算失败主要原因是表达不清晰,越复杂的算法越怕不清晰。下面介绍一种推荐的表达方法:把指令分为源数据、计算要求、预期结果三个清晰的部分。比如下面这个较复杂的例子 "跨子组按序列填充字段值",指令如下:

/sqlazy规划源数据:库表lines前两个字段是分组字段,后两个字段是组内明细。按前 3 个字段排序后,数据有以下规律:同一个大组的各小组的记录数一定相同;每个大组里只有最后一个小组的第 4 个字段有值,其他小组都是 null。Group1  Group2  LineID  TargetField1  1  51  1  61  2  31  2  41  3  1  11  3  2  22  4  112  4  122  4  132  5  16  52  5  17  32  5  18  4
计算要求:现在要在每个大组内,把最后一个小组的第 4 列,按序列的顺序更新或复制到其他小组。
预期结果:Group1  Group2  LineID  TargetField1  1  5  11  1  6  21  2  3  11  2  4  21  3  1  11  3  2  22  4  11  52  4  12  32  4  13  42  5  16  52  5  17  32  5  18  4

计算结果如下。

Picture23png

编译为 SQL。

Picture24png

反馈错误日志

如果 SQLazy IDE 执行 nsql 时报错,则可以点击菜单 "工具 -> 控制台",将错误日志复制出来。

Picture25png

全部粘贴到 CodeBuddy 中,并简单说明这是错误日志。LLM 会分析日志并重新生成 nsql 文件。

Picture26png

如此反复,通常可以解决问题。

使用高性能模型

使用性能一般的模型时可能失败率偏高,可尝试在 CodeBuddy 中切换到高性能模型后重试。

Picture27png
图片

产品  集算器 润乾报表 智能问数 SQLazy

Desktop YModel esProc Reportlite

更多  乾学院  好多乾  图书课程  关于润乾
图片

【声明】内容源于网络
0
0
润乾软件
集算器(esProc SPL):高性能大数据计算 | 润乾报表:高性价比报表工具
内容 35
粉丝 0
润乾软件 集算器(esProc SPL):高性能大数据计算 | 润乾报表:高性价比报表工具
总阅读600
粉丝0
内容35