新闻详情

新闻详情

首页 / 资讯中心 / 详情

帆软报表调用ORACLE存储过程并返回参数:TaoToken统一Key配置与调试实录

发布时间:2026/9/29 2:27:37来源:尧图网络
帆软报表调用ORACLE存储过程并返回参数:TaoToken统一Key配置与调试实录
1. 帆软前台调用 ORACLE 存储过程并返回参数卡在哪一步帆软报表调用 ORACLE 存储过程并返回参数是很多做企业报表的同学绕不开的一关。它要解决的问题很具体报表前台点一个按钮触发数据库里的存储过程过程执行完还要把结果比如成功标志T、失败标志F回显到页面上。适合谁适合已经会用帆软设计器、但对 ORACLE 存储过程输出参数尤其是SYS_REFCURSOR游标类型和前台 JS 取值不太熟的开发者。真正卡人的地方通常有三个。第一ORACLE 存储过程的输出参数如果是SYS_REFCURSOR它不是一个普通字符串帆软前台不能直接拿到得先把游标打开、把里面的行取出来。第二帆软的数据连接里怎么定义这个调用参数占位符怎么写返回的是结果集还是单值很多人第一次配会懵。第三前台 JS 用FR.remoteEvaluate拿到返回值之后怎么判断成功失败、怎么弹提示。我试过把整条链路拆开跑先在数据库里建一张测试表和存储过程再在帆软里配数据连接最后用前台 JS 调用并校验返回参数。下面按这个顺序来每一步都给可复制的片段。另外如果你在调试过程中想用 AI 辅助工具帮你解释报错、生成 SQL 模板可以用 TaoToken 的统一 Key 把多个工具的配置收口后面第 2 节会讲 settings.json 骨架怎么搭。2. 前置准备测试表、存储过程与 TaoToken 统一 Key2.1 建测试表和存储过程为了让结果直观先建一张三个字符串字段的测试表 A再写一个带输出游标的存储过程。注意SYS_REFCURSOR是 ORACLE 自带的游标类型帆软前台要拿它的内容必须OPEN之后按结果集读。-- 测试表 create table A ( col1 varchar2(50), col2 varchar2(50), col3 varchar2(50) ); -- 带输出游标的存储过程 create or replace procedure P_INOUT_DEMO(value2 out SYS_REFCURSOR) is begin insert into A select 999,1,1 from dual; commit; OPEN value2 FOR SELECT T FROM dual; end P_INOUT_DEMO;这里value2是输出参数类型SYS_REFCURSOR。过程体里先插一条数据并提交然后打开游标游标里查出一个单值T。这个T就是前台要拿到的“发布版本成功”标志。2.2 用 TaoToken 统一 Key 管理 AI 辅助工具调试存储过程和写帆软 JS 时我经常让 AI 工具帮我解释报错、补全 SQL。工具一多Key 和地址散落各处很乱。TaoToken 提供统一 Key 和 API 通道把模型对话、编码辅助这些入口收口到一个地址上。官网入口是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 基址是 https://taotoken.net/api 不加 UTM。下面是一个settings.json骨架把统一 Key 和 API 地址填进去多个 AI 辅助工具可以共用。注意把sk-你的Key换成你在控制台生成的真实 Key。{ ai: { provider: taotoken, api_base: https://taotoken.net/api, api_key: sk-你的Key, models: { chat: gpt-4o-mini, code: claude-3-5-sonnet }, timeout_ms: 60000 } }Key 在控制台的 API Keys 页面生成地址是 https://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite 。生成后建议按项目分 Key方便排查是哪个工具在调用。如果你主要做长期编码和 Agent 类任务可以看 Coding Plan https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite 。3. 可复制配置帆软数据连接与存储过程调用模板3.1 数据连接配置在帆软设计器里新建一个 JDBC 数据连接指向你的 ORACLE 库。连接串大致如下把主机、端口、服务名换成你自己的jdbc:oracle:thin://192.168.1.10:1521/ORCLPDB1驱动类用oracle.jdbc.OracleDriver用户名密码填有权限执行该存储过程的账号。配好后点“测试连接”能通再往下走。这一步不通后面全是白搭。3.2 存储过程调用模板帆软里调用存储过程常见写法是用SQL函数配合{call ...}语法。输出参数用?占位。下面这个模板对应上面的P_INOUT_DEMO{call P_INOUT_DEMO(?)}在帆软数据集里如果只想拿游标里的单值可以把它当成一个返回结果集的查询来用。配置时把“定义数据连接”换成你实际的数据连接名比如ORCL_TEST。参数个数和顺序要和存储过程签名一致P_INOUT_DEMO只有一个输出参数所以占位符就一个。3.3 前台 JS 调用并取返回参数前台按钮的事件里用FR.remoteEvaluate执行这段 SQL 并拿到返回值。可复制片段如下var sql SQL(ORCL_TEST,{call P_INOUT_DEMO (?)},1,1); var res FR.remoteEvaluate(sql); alert(res); if (T res) { alert(发布版本成功); } else { alert(发布版本失败请联系系统负责人); }SQL(数据连接名,语句,1,1)里的两个1分别控制取第几行第几列这里取第一行第一列正好是游标里查出的T。这样前台就能拿到存储过程返回的参数并做判断。4. 验证请求与成功结果4.1 数据库侧先验证在 SQL 客户端里直接跑一遍确认存储过程本身没问题var v_cur SYS_REFCURSOR; exec P_INOUT_DEMO(:v_cur); print v_cur;如果能看到T说明过程逻辑正确。再看表 A应该多了一条999,1,1的记录。数据库侧通了问题就只可能在帆软配置或前台 JS。4.2 帆软侧验证在数据集预览里执行{call P_INOUT_DEMO(?)}正常应该返回一行一列值为T。如果预览报错先看数据连接是否选对、账号是否有执行权限。预览通过后再挂到前台按钮上点一下看弹窗是不是“发布版本成功”。4.3 返回参数对照环节期望结果常见异常数据库执行游标返回 T表 A 新增一行权限不足、过程未编译帆软数据集预览一行一列值 T连接名写错、占位符数量不符前台 JS 调用弹窗“发布版本成功”返回值带空格、类型不匹配5. 本篇常见错排查5.1 返回参数拿不到或为空最常见的原因是游标没打开或者SQL函数取的行列位置不对。SYS_REFCURSOR必须OPEN ... FOR之后才有内容。另外SQL(...,1,1)里的行列索引从 1 开始写 0 会取不到。如果返回的是null检查存储过程里是否真的OPEN了游标。5.2 报“参数个数不匹配”{call P_INOUT_DEMO(?)}里的?数量必须和存储过程参数个数一致。如果过程有两个参数一个入参一个出参就要写两个?。入参可以直接在 SQL 里写死比如{call P_DEMO(X, ?)}。5.3 前台 JS 判断总是不相等FR.remoteEvaluate返回的可能是带空格或换行的字符串。稳妥做法是先trimvar res (FR.remoteEvaluate(sql) ).trim(); if (res T) { /* 成功 */ }用而不是避免隐式类型转换带来的意外。5.4 数据连接测试不通先确认 JDBC 驱动版本和 ORACLE 版本匹配再确认网络能到数据库端口。连接串里服务名和 SID 写法不同//host:port/service是服务名写法host:port:SID是 SID 写法别混。6. 继续调试与接入文档整条链路跑通后剩下的就是把它固化到你的报表模板里。如果你在写 SQL、解释报错、生成调用模板时需要 AI 辅助用 TaoToken 的统一 Key 把工具配置收口会更省心。模型对话入口在 https://taotoken.net/model-chat?utm_sourcetaotoken_aicg_blog_endutm_contentmodel_chatutm_campaignrewrite 接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite API Keys 管理在 https://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite 。长期做编码和 Agent 任务的话Coding Plan 在 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite 。最后留一个实用技巧把存储过程的返回标志统一约定成单字符T/F前台只做一次trim和判断别在 JS 里堆复杂逻辑。数据库侧该commit的地方一定commit否则前台看到成功、数据却没落库这种坑最难查。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Keil MDK 静态 LIB 库生成、接入与交付实战 2026/9/29 3:22:20

Keil MDK 静态 LIB 库生成、接入与交付实战

前阵子帮朋友收拾一个交付项目的烂摊子。他们做的是工业采集仪表,算法部分(滤波、标定、非线性补偿)本来是自己的核心资产,前期为了赶进度直接把 .c 源码连带头文件打包给了客户。半年后客户那边三个工程师各自改了一版&#xff0…

阅读更多 →
零碳工厂数据底座怎么搭?开源MyEMS能源管理系统部署与实践 2026/9/29 3:22:20

零碳工厂数据底座怎么搭?开源MyEMS能源管理系统部署与实践

聊零碳工厂之前,我得先说句可能不太讨喜的话:现在很多企业缺的不是光伏板,也不是储能柜,而是缺一套能说清楚“电到底用在哪、怎么用的”的数据系统。我接触过不少号称要建零碳标杆的工厂,能源数据还停留在每月人工抄表…

阅读更多 →
PyCharm环境配置实战:解释器、虚拟环境与远程开发一次搞定 2026/9/29 3:22:20

PyCharm环境配置实战:解释器、虚拟环境与远程开发一次搞定

有段时间我盯着PyCharm报错窗口里的红色波浪线发呆:同一个Python项目,在终端里跑得好好的,换到PyCharm里就告诉我没有某个模块;PyCharm左下角明明能看到这个包,运行起来还是ModuleNotFoundError。后来才想明白&#xf…

阅读更多 →
Vue中实现PDF、Word、Excel在线预览的完整方案解析 2026/9/29 3:22:20

Vue中实现PDF、Word、Excel在线预览的完整方案解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
OnlyOffice动态权限API实战:实时将协作者转只读 2026/9/29 3:22:20

OnlyOffice动态权限API实战:实时将协作者转只读

我们团队把在线文档从 WPS 切到 OnlyOffice 之后,第一个被产品经理盯上的需求就是:能不能像 WPS 那样,管理员一个按钮,把某个正在改文档的协作者实时变成只读。OnlyOffice 的编辑器本身开放能力并不弱,初始化时就能在 …

阅读更多 →
Model-Optimizer:一站式模型优化与推理部署实践指南 2026/9/29 3:22:13

Model-Optimizer:一站式模型优化与推理部署实践指南

有一天下午,我在调一个边缘盒子的推理延迟,训练好的模型在 GPU 服务器上跑得很欢,换到盒子上却要么算子崩掉,要么显存直接爆掉。折腾两天之后,我决定把所有优化动作收敛成一个统一入口,就是今天要聊的 Mode…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉