From ac6bc332c6fc8f0483bb9397834d11505a4d4534 Mon Sep 17 00:00:00 2001 From: xiaoc <648844981@qq.com> Date: Wed, 5 Aug 2026 20:32:21 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E6=B7=BB=E5=8A=A0=20Oracle=20?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Oracle \346\237\245\350\257\242.tool" | Bin 0 -> 5269 bytes tools/tool_oracle/README.md | 100 ++++++++++++++++++ tools/tool_oracle/data.yaml | 5 + tools/tool_oracle/logo.png | Bin 0 -> 2408 bytes 4 files changed, 105 insertions(+) create mode 100644 "tools/tool_oracle/1.0.0/Oracle \346\237\245\350\257\242.tool" create mode 100644 tools/tool_oracle/README.md create mode 100644 tools/tool_oracle/data.yaml create mode 100644 tools/tool_oracle/logo.png diff --git "a/tools/tool_oracle/1.0.0/Oracle \346\237\245\350\257\242.tool" "b/tools/tool_oracle/1.0.0/Oracle \346\237\245\350\257\242.tool" new file mode 100644 index 0000000000000000000000000000000000000000..9b054187a85745ca423683895233affb4dc3717b GIT binary patch literal 5269 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 Xz@#DVI|Z*Ap?*d5iBls{SS$Vy9$j8f literal 0 HcmV?d00001 diff --git a/tools/tool_oracle/README.md b/tools/tool_oracle/README.md new file mode 100644 index 0000000..62a01bd --- /dev/null +++ b/tools/tool_oracle/README.md @@ -0,0 +1,100 @@ +# Oracle 数据库查询工具 + +一个面向 MaxKB 智能体平台的 Oracle 数据库查询工具,支持使用 Service Name 或 SID 连接 Oracle 12.1 及以上版本。 + +## 功能特性 + +- 支持 Service Name 和 SID 两种连接方式 +- 同时填写时优先使用 Service Name +- 使用 python-oracledb Thin 模式,无需安装 Oracle Client +- 自动处理日期、Decimal、LOB、字节等数据类型 +- 支持连接超时设置 +- 支持结果集行数限制 +- 返回 JSON 格式查询结果和中文错误信息 + +## 系统要求 + +- Oracle Database 12.1 或更高版本 +- MaxKB 平台环境 + +## 安装依赖 + +```bash +pip install oracledb==3.4.2 +``` + +依赖包说明: + +- `oracledb==3.4.2` - Oracle 官方 Python 数据库驱动 + +## 参数说明 + +| 参数 | 类型 | 必填 | 默认值 | 说明 | +|------|------|------|--------|------| +| host | string | 是 | - | 数据库服务器地址 | +| port | string | 是 | 1521 | 监听端口 | +| user | string | 是 | - | 用户名 | +| password | string | 是 | - | 密码 | +| service_name | string | 否 | - | Service Name;与 SID 同时填写时优先使用 | +| sid | string | 否 | - | SID;Service Name 为空时使用 | +| query | string | 是 | - | SQL 查询语句 | +| timeout | number | 否 | 30 | 连接超时时间(秒) | +| max_rows | number | 否 | 1000 | 最大返回行数,设为 0 不限制 | + +`service_name` 和 `sid` 均不单独必填,但至少需要填写一个。 + +## 使用示例 + +### 使用 Service Name + +```python +result = query_oracle( + host="10.1.12.86", + port="1521", + user="system", + password="your_password", + service_name="ORCLPDB1", + query="SELECT * FROM v$version" +) +``` + +### 使用 SID + +```python +result = query_oracle( + host="10.1.12.86", + port="1521", + user="system", + password="your_password", + sid="ORCLCDB", + query="SELECT instance_name FROM v$instance" +) +``` + +## 错误处理 + +| 错误类型 | 提示信息 | +|----------|----------| +| 连接标识缺失 | Service Name 和 SID 至少填写一个 | +| 认证失败 | 认证失败,请检查用户名和密码 | +| 服务不存在 | 无法连接到指定的 Service Name 或 SID | +| 监听不可用 | 无法连接到数据库服务器,请检查地址、端口和监听状态 | +| SQL 执行失败 | SQL 执行错误及 Oracle 返回的详细信息 | + +## 返回格式 + +查询结果以 JSON 格式返回: + +```json +[ + {"COLUMN1": "value1", "COLUMN2": "value2"}, + {"COLUMN1": "value3", "COLUMN2": "value4"} +] +``` + +## 注意事项 + +1. 确保 Oracle Listener 已启动,并允许 MaxKB 所在主机访问监听端口。 +2. Service Name 与 SID 同时填写时,工具优先使用 Service Name。 +3. 建议使用仅具备所需查询权限的数据库账户。 +4. 大数据量查询建议保留 `max_rows` 限制。 diff --git a/tools/tool_oracle/data.yaml b/tools/tool_oracle/data.yaml new file mode 100644 index 0000000..33936b4 --- /dev/null +++ b/tools/tool_oracle/data.yaml @@ -0,0 +1,5 @@ +name: Oracle 数据库查询 +tags: + - 数据库查询 +title: 实现 Oracle 数据库的查询操作 +description: 实现 Oracle 数据库的查询操作,支持通过 Service Name 或 SID 连接。 diff --git a/tools/tool_oracle/logo.png b/tools/tool_oracle/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..497e87f8b5e77670a204b8158b391b6ae7197702 GIT binary patch literal 2408 zcmd5;`6Ck!8{Zt|KIV7{DV8fao1>U$u6zkeMCOPgN3Iz&$H-B9ohi*N(PgMcjh38Y zyVS7Xh+dcd_RR$}1fYM2BpPfhfc zQ))+M)$JN-tQ}Cm!bMHD$+1xfbaLKLod3=J@w+Td_ZF`kyCmFa(=fQiXoM+)5b6?*Ov=A+$9D_{tE5m(Uds>JbRf3l+5#aFgXC# z4**@z=YF)H&TRuA3k9av2_3feD`m^|{&$Am{*AKeV>a&10WuxQugSJ5Kw>tB!-)4r z)m~iQOz0)}B(Y=%fps5rvX8HJ%R49mCFMYJf+qArZ$GN^Mum>m6ThW!^#hb7^>g3; zvi7wz4{#!rRWc1edcuIXM z(m*5Zkzi*LKGPvqUg1?D*DVf^*^_OxI??OHOc4RD zm?U$0Rfah02Nt`D1Y=tzgb2U``X4kkwU83PLHdf zX)+C$K8i2N>SyiUspx2PxF$K58)}s>U;r+kN*Sk@Y~;v~C_{IaJeDb~woI})Je7=? z#!o8i#DUuCMAyX?_bf5RzYlLLR+?DrM(~#QA`HG)g+@f0UrE9!_@wg_LU7ziD+{&_ zStcubq0D_9_U^C=R@+=*k}@wZYcw7ttJ~8A-76yY6PSvRU~meF{nTm%A3Ex?a8DEN zzGaL&xB5E!xb`A(?Z%8Ug`iotIyzv9rnTNHi$-UR=>?azhU3nay*!Kbsz7ZYAL;3p zm}x$Pe>t8LvwWKn9?9u&UYKGK>{JjvhKbdMVWDK!z+0VFf&mzga;g`<-X>Ol#bHRQ z<$H|xmgoZKpj%0c!VLMu{Kn0E7oMh9vh>)w*RX~?((BzMH18U-ZmL5Ic6zg=6%pS4 zUUBnlsMO?IMVEew?goV5%g~&hyY+P)fsD822b|B@U;4`*9);Y6f$YQ2{b;cZ5- zCUS0(_;bxaFlj}KkQ-g~+^0m13zo`8C-|ZVXk(`hc@v}5OC9&Q%%Qp4@ec(WYP~SR zDRwIFTKtph80{Lqrk&}GWj_~}%7FdUOwEuBiz_|HSKAmOo)N|#uEo?Za}m-sSKX?a zFd$rGPj!;1GWB7X1oX9 z*eO{5Zc>KPB$Iyzx3qtc-Fibhxj7pq{;$$V_YRa7e$wQ&Vs)y6Wyor(Qo10Vd`WlM za46ZmFc;B6sHQcbVWsQX2qpb#Z5B}8)vI5#`KED#A1UKQ(I*=y2m8+?Xn36$-Vi_5 zhN$3;+6ZbiV~RE9;2d|qOUxHGcuJ^NICd%(3x+^^e+2dxJ0Xvwa4F46S9ca zD*8La(CEy|%m%kp&7aUiEtVmuH51t6{*jejGap31QbvFEWi3kIit7GvXOmK@CaCoJ2WbYd- z{~&hH()`Cq5Ajk12pR+p>l^i0cSlr*?TSQ{i~Ffv2|OUO-~W?MpE5HF6=0n;RedHX z88=*b9<==!U+sHfUtM9B7)GQ|n<0gMBB9+P*4$l#s}CcDnLP9ElW$N@mzR9-#;wUe z+`3C?^Tyw3N@tq``8`I1KWDUGs&8xelFzuizXG_*MaB8m4G^{cO(Q^f4I>dnvSZO&`|(>H*y3$v-rHTsx!D z%|! zz43DhI?c7|JQ}l_sk{Os5|zKo{LJ9Vda{uKLJA zz_W+N^LYS}ughCoz}3I(ZrcF(b)U_GlQo{4GWvg6zn^5KzL04g_Kfo9