资讯动态

Oracle 游标 %notfound 和 %rowcount 对不上?TaoToken 这样配 Codex 再排查

发布时间:2026/9/19 23:44:48 来源:尧图企业网站定制
手动 fetch 游标时 %notfound 和 %rowcount 为什么总对不上写 PL/SQL 游标排查时最容易卡住的不是语法而是属性取值时机。CURSOR c_job IS select empno,ename,job,sal from emp where jobMANAGER这种显式游标手动open/fetch/close时c_job%notfound和c_job%rowcount经常出现看起来矛盾的结果明明已经取不到行了%rowcount却还停在上一轮的数字或者exit when c_job%notfound提前退出少打印了一行。这类问题靠肉眼盯代码很难定位本文用 TaoToken官网 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 配好 Codex把 SQL*Plus 的真实输出贴进去对照排查比反复改代码试错快得多。TaoToken 在这里的角色很明确它只提供 API Key 和 Base URL让 Codex 走 TaoToken 通道不执行游标、不连你的 Oracle 库。游标块还是在你本地 SQL*Plus 里跑报错和dbms_output输出由你贴给 Codex 分析。场景还原%notfound 与 %rowcount 的取值时机先把原文里那段手动 fetch 游标拎出来这是问题最集中的地方declare cursor c_job is select empno,ename,job,sal from emp where jobMANAGER; c_row c_job%rowtype; begin open c_job; loop fetch c_job into c_row; exit when c_job%notfound; dbms_output.put_line(c_row.empno||-||c_row.ename||-||c_row.job||-||c_row.sal); end loop; close c_job; end;关键点在于%notfound反映的是最近一次 fetch 是否取到行而%rowcount反映的是到目前为止成功 fetch 的行数。当你 fetch 到游标末尾之外时%notfound变 true但%rowcount不会因为这次失败的 fetch 而增加它停留在最后一次成功取行的计数上。所以如果循环里先dbms_output.put_line再判断%notfound就会多打印一行空值或旧值如果先判断再打印逻辑才对。隐式 SQL 游标select into、update、delete的属性含义又不一样。原文里那段begin update emp set ENAMEALEARK WHERE EMPNO7469; if sql%isopen then dbms_output.put_line(Openging); else dbms_output.put_line(closing); end if; if sql%found then dbms_output.put_line(游标指向了有效行); else dbms_output.put_line(Sorry); end if; if sql%notfound then dbms_output.put_line(Also Sorry); else dbms_output.put_line(Haha); end if; dbms_output.put_line(sql%rowcount); exception when no_data_found then dbms_output.put_line(Sorry No data); when too_many_rows then dbms_output.put_line(Too Many rows); end;隐式游标sql%isopen永远是 falseOracle 自动开关sql%rowcount对 update 返回的是受影响行数对select into返回 1 或 0。很多人把显式游标和隐式游标的属性混着理解才会觉得对不上。TaoToken 前置拿 Key、配 Codex排查这类问题你需要一个能读懂 PL/SQL 上下文、又能对照你贴的输出做推理的模型通道。TaoToken 的接入步骤打开 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 注册并创建 API Key。在控制台复制 Key形如YOUR_API_KEY。记下 Base URLhttps://taotoken.net/api。注意不要带/v1也不要把带 UTM 的官网地址填进去Base URL 就是纯 API 地址。Codex 的配置走config.toml不是 Claude Code 的settings.json别搞混。下面给出可复制配置。可复制配置Codex 走 TaoToken 通道Codex 的配置文件通常在~/.codex/config.tomlWindows 在%USERPROFILE%\.codex\config.toml。填入model gpt-5-codex model_provider taotoken [model_providers.taotoken] name TaoToken base_url https://taotoken.net/api env_key TAOTOKEN_API_KEY wire_api chat然后在环境变量里设置 Key# Linux / macOS export TAOTOKEN_API_KEYYOUR_API_KEY # Windows PowerShell $env:TAOTOKEN_API_KEYYOUR_API_KEY如果你更习惯用 CLI 方式拉起也可以npm i -g taotoken/taotoken taotoken cc -k YOUR_API_KEY -u https://taotoken.net/api -m gpt-5-codex配置完成后Codex 的请求会走 TaoToken 通道。注意base_url只填到/api多写/v1会导致 404 或路径拼接错误这是接入阶段最常见的坑。验证请求把游标输出贴给 Codex 对照配置好之后先在本地 SQL*Plus 执行游标块把真实输出抓下来。建议开启dbms_outputset serveroutput on size 1000000然后跑手动 fetch 那段观察输出行数和%rowcount。为了看清时机可以在循环里加一行调试loop fetch c_job into c_row; dbms_output.put_line(notfound||case when c_job%notfound then true else false end || rowcount||c_job%rowcount); exit when c_job%notfound; dbms_output.put_line(c_row.empno||-||c_row.ename||-||c_row.job||-||c_row.sal); end loop;把这段输出整段贴给 Codex附上你的疑问比如为什么最后一次 notfoundtrue 时 rowcount 还是 3。Codex 会结合 PL/SQL 语义帮你逐行对照指出%notfound是 fetch 之后才更新、%rowcount只统计成功取行。验证请求是否走通 TaoToken可以看 Codex 是否正常返回内容。如果返回 401说明 Key 没读到返回 404多半是base_url写错。确认通道通了再贴游标输出排查效率才高。本篇常见错排查错误一exit when c_job%notfound位置放错。如果放在fetch之前第一次循环%notfound还是初始值false逻辑看似正常但如果放在dbms_output.put_line之后就会多打印一行。正确顺序是fetch→ 判断%notfound→ 打印。错误二把显式游标属性套到隐式游标上。sql%isopen在隐式游标里恒为 false不要用它判断游标是否打开。sql%rowcount对select into返回 1 或 0不是结果集行数。错误三%rowcount在close之后读取。游标关闭后属性值不再可靠要在close之前读取。错误四Codex 的base_url带了/v1或 UTM 参数。正确值是https://taotoken.net/api多一个字符都可能请求失败。错误五for 循环游标里手动 fetch。for 循环游标由 Oracle 自动 open/fetch/close循环体内再写fetch会打乱行指针导致%rowcount和实际打印行数对不上。错误六for update of sal与where current of不匹配。更新游标声明了for update of salwhere current of必须引用同一个游标名否则报 ORA-01410 或更新错行。语义一致 CTA排查游标属性问题核心是拿到真实输出再对照语义。TaoToken 提供 Key 和 Base URLCodex 负责帮你逐行分析%notfound、%rowcount的取值时机数据库操作始终在你自己环境里完成。接入配置、Key 管理、Base URL 排障前往 API Keys 与接入文档 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite 对照config.toml检查base_url是否只写到/api。想先验证模型通道是否正常用模型对话 https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentmodel_chatutm_campaignrewrite 发一段游标代码试跑。长期做 PL/SQL 排查、需要稳定编码通道看 Coding Plan https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite 。把 SQL*Plus 的输出贴准把base_url配对游标属性对不上的问题基本都能定位到具体那一行 fetch。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价