实操教程!用Oracle 26ai Select AI自然语言一键生成SQL

实操教程!用 Oracle 26ai Select AI自然语言一键生成SQL

友情提示:这是一篇技术实操文,有点长,但干货满满,建议先收藏。

 

我做DBA 快 20 年了,写过无数条SQL ,从单表查询到二十几个表关联,从简单聚合到窗口函数套娃,说实话,写 SQL 这事儿吧,熟练了之后确实快,但架不住需求多、变化快、逻辑绕。

以前最怕的两种情况:一是业务方临时要个数据,描述了半天我还得琢磨表结构;二是自己写复杂查询,一个括号位置不对,跑出来结果全错,排查半天。

Oracle 26ai 这个版本,我盯了很久,不为别的,就为那个叫 "Select AI" 的功能 —— 自然语言直接转 SQL 。

一个字:爽。

今天手把手带你走一遍,从零搭到跑出结果。注意,这不是PPT 上的概念,是真正能落地的实操。


一、先搞清楚这是干什么的

简单说,Select AI 就是 Oracle 数据库里内置了一个 AI 能力,你直接写一句人话,比如 " 查出去年每个月的销售额 " ,它自动生成 SQL ,跑出结果给你。

它不是外挂,不是插件,是数据库内核里就有的功能。用的底层是LLM (大语言模型),支持的厂商还挺多: OCI Generative AI 、 Azure OpenAI 、 OpenAI 、 Cohere 、 Google 、 Anthropic 、 Hugging Face 等等。

你想用哪个大模型都行,自己指定。


二、动手之前,这些准备工作一个都不能少

别急着敲代码,先检查以下几个方面。我刚开始踩过坑,漏一步就跑不起来。

1. 确认你的环境支持

Select AI 在 Oracle 26ai 以上版本都支持。不管是云的( Autonomous AI Database )还是本地部署的,都行。我的环境是 Oracle AI Database 26ai 。

2. 确保有DBMS_CLOUD_AI的执行权限

这一步找管理员给个授权:

sql

GRANT   EXECUTE   ON  DBMS_CLOUD_AI TO   你的用户名;

3. 注册AI供应商并获取密钥

我这次用的是OCI Generative AI ,你也可以选别的。需要在你选择的 AI 平台上申请一个 API Key 。

拿到key 之后,在数据库里创建凭证:

sql

BEGIN

  DBMS_CLOUD.CREATE_CREDENTIAL(

    credential_name =>   'OCI_CRED' ,

    username =>   '你的用户名' ,

    password =>   '你的API密钥'

  ); END ; /


三、核心操作:创建 AI配置(Profile)

这是最关键的一步。AI 配置就是告诉数据库:你要用哪个 AI 、访问哪些表、用哪个模型。

我第一次做的时候,就卡在这里 —— 配置项多,容易写错。

正确的写法是这样的:

sql

BEGIN

  DBMS_CLOUD_AI.CREATE_PROFILE(

    profile_name =>   'GENAI' ,

    attributes =>   '{

       "provider": "oci",

       "credential_name": "OCI_CRED",

       "object_list": [

         {"owner": "SH", "name": "customers"},

         {"owner": "SH", "name": "countries"},

         {"owner": "SH", "name": "products"},

         {"owner": "SH", "name": "sales"}

       ],

       "model": "meta.llama-3.3-70b-instruct"

     }'

  ); END ; /

几个关键点说清楚:

·  object_list   就是你想让AI 访问的表。你可以理解为, AI 只看你给它看的表,没在列表里的它不会碰。

·  provider   是AI 供应商,我用的 OCI ,你也可以换成 "openai" 、 "azure" 、 "google" 这些。

·  model   是具体的模型名,不同的供应商支持的模型不一样。

如果你不想一个个表指定,只想让AI 自己发现相关的表,还可以这么写:

sql

"object_list_mode": "automated"

这个模式比较智能,AI 会自动判断哪些表跟你的问题相关,只拿那些表的元数据去生成 SQL 。适合表特别多、记不住表名的情况。


四、激活配置,开始用自然语言问问题

配置创建好之后,激活它:

sql

EXEC  DBMS_CLOUD_AI.SET_PROFILE( 'GENAI' );

检查一下是否激活成功:

sql

SELECT  DBMS_CLOUD_AI.get_profile() FROM  dual;

看到返回的是你配置的名字,就对了。

接下来就是见证奇迹的时刻 ——

问问题:

sql

SELECT  AI how many customers exist;

回车,你会看到:

Number of Customers

-------------------

55500

它直接跑出了结果。不是只给你SQL ,是直接跑了 SQL 然后把结果返给你。

再问一个:

sql

SELECT  AI how many customers in  San Francisco are  married;

同样秒出结果。

我当时第一次跑通的时候,说实话有点恍惚。干了好多年DBA ,头一回觉得写 SQL 这件事儿可以这么轻松。


五、干货:这几种 Action你一定要知道

SELECT AI   后面可以跟不同的动作关键词,作用完全不一样。我整理了最常用的几个:

1. runsql(默认动作)

你直接 SELECT AI 后面跟问题,默认就是跑SQL 。上面两个例子就是这个。

2. showsql——只看SQL不跑

有时候你想看看AI 生成的 SQL 到底是啥样的:

sql

SELECT  AI showsql how many customers in  San Francisco are  married;

返回:

sql

SELECT   COUNT ( * ) AS  total_married_customers FROM  "SH"."CUSTOMERS" c WHERE   UPPER (c."CUST_CITY") =   UPPER ( 'San Francisco' )

   AND   UPPER (c."CUST_MARITAL_STATUS") =   UPPER ( 'married' )

SQL 写得挺规整的,大小写处理了,条件也对了。这对于学习 SQL 写法的人来说,是个很好的老师。

3. explainsql——让它解释SQL

如果你想理解AI 生成的 SQL 逻辑:

sql

SELECT  AI explainsql how many customers in  San Francisco are  married;

它会返回一个中文解释(取决于模型),告诉你这条SQL 是怎么拼的,每个条件的含义。这个功能对于审核 SQL 特别有用。

4. narrate——用自然语言描述结果

这个功能我觉得特别适合做报表。你跑完数据,让它用自然语言描述结果:

sql

SELECT  AI narrate what are  the top 3  customers in  San Francisco;

它会把结果用一段话描述出来,像是:

" 在旧金山的客户中,排名前三的客户分别是 ……"

做数据分析报告的时候,这个功能帮我省了很多写备注的时间。

5. chat——直接跟LLM聊天

不查数据库,就是纯跟大模型聊天。比如:

sql

SELECT  AI chat Write the Python code to  compute a confusion matrix;

它会直接给你一段Python 代码。写代码、问问题、查文档,都行。


六、进阶玩法: RAG检索增强生成

如果你觉得光靠表的元数据还不够,想让AI 能看懂业务文档里的内容,那就要上 RAG 了。

RAG (检索增强生成)的大概逻辑是:你把业务文档存到数据库里, AI 在回答问题的时候,会先去文档里找相关的信息,然后结合这些信息来回答。

建一个向量索引(Vector Index ):

sql

BEGIN

  DBMS_CLOUD_AI.CREATE_VECTOR_INDEX(

    index_name =>   'MY_INDEX' ,

    attributes =>   '{

       "vector_db_provider": "oracle",

       "location": "https://objectstorage.你的区域.oraclecloud.com/...",

       "object_storage_credential_name": "OCI_CRED",

       "profile_name": "GENAI",

       "vector_dimension": 384,

       "vector_distance_metric": "cosine",

       "chunk_overlap": 128,

       "chunk_size": 1024

     }'

  ); END ; /

然后你在AI 配置里引用这个向量索引,再问问题的时候, AI 就会去文档里找线索来回答问题。

这个功能适合那些需要结合私有知识库的场景。比如公司的财务制度、产品说明,AI 都能看懂再回答,而不是瞎编。


七、你可能遇到的坑和解决办法

坑 1:SELECT AI之后报错ORA-00923

ORA -00923 : FROM  keyword not   found   where  expected

大概率是你的AI 配置没有激活。检查一下 SET_PROFILE 有没有执行成功。

坑 2:SQL生成不对,结果明显有问题

大模型不是 全能 的,有些复杂逻辑可能会生成错误的SQL 。

解决方法有两个:

·  给表加注释(comments ),注释写得越清楚, AI 生成得越准

·  用feedback 功能,告诉 AI 哪里错了,下次它会记住

加注释的方式:

sql

COMMENT ON   TABLE  customers IS   '客户表,包含客户基本信息' ;

COMMENT ON   COLUMN  customers.cust_marital_status IS   '婚姻状态,取值范围:married, single, divorced' ;

然后在创建AI 配置时加上:

json

"comments":   "true"

坑 3:AI生成的SQL里用了不该用的表

在配置里加上:

json

"enforce_object_list":   "true"

这样AI 只会用你指定的那些表。

坑 4:想用AI改数据?

注意:SELECT AI 只支持查询( SELECT ),不支持 INSERT 、 UPDATE 、 DELETE 、 DDL 这些操作。官方明确说了,安全考虑。


八、总结一下使用场景

我个人觉得以下场景特别适合用Select AI :

1. 业务方临时要数据

以前得等DBA 或开发写 SQL ,现在自己 "SELECT AI 问一下 " ,效率直接拉满。

2. 自己写复杂查询的辅助

先把需求用自然语言描述,看AI 生成的 SQL ,再手动调整。比从零开始写快很多。

3. 学习 SQL 写法

showsql 和 explainsql 结合起来,是个很好的学习工具。

4. 快速验证数据假设

想验证某个想法,直接说话,不用等写SQL 。


九、最后说几句

AI 辅助写 SQL 这件事,前几年大家都在讨论,今年 Oracle 26ai 是真的落地了。不需要额外部署什么平台,数据库里就有的功能。

别把AI 想得太神,复杂的业务逻辑、多表关联的特定写法,该调还得调。但日常查询、数据探索、 SQL 辅助生成,它确实能省下大量时间。

如果你还没试过,建议今天就在测试库上搭一套试试。跑通一次,你就能感受到" 说话就能查数据 " 是什么样的体验。

工具摆在这,用不用看你自己。反正我用了之后,回不去了。


有什么问题欢迎留言交流,或者你有更好的使用技巧,也欢迎分享。

点赞、在看、转发,是对我最大的支持。

 


请使用浏览器的分享功能分享到微信等