实操教程!用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 辅助生成,它确实能省下大量时间。

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

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


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

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

 


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