Oracle存储过程返回计数对应英文单词 执行无输出问题求助
Oracle存储过程问题修复方案
无输出的核心原因
- 你未开启Oracle的
dbms_output输出通道,客户端默认关闭该功能,执行存储过程前需要先运行开启指令:set serveroutput on;,主流Oracle客户端(SQL/Plus、PL/SQL Developer、DBeaver等)均支持该指令。
现有代码的其他逻辑问题
count(*)查询永远不会触发no_data_found异常,哪怕没有匹配的用户名也会返回计数0,你编写的异常分支属于无效逻辑,永远不会执行。- 当前代码直接输出数字格式的计数,不符合你要求的英文单词输出需求,可借助Oracle内置的
jsp日期格式掩码实现阿拉伯数字转英文拼写。
修正后的完整存储过程代码
create or replace procedure user_search (x in varchar2) is y int; y_english varchar2(100); begin select count(*) into y from userpermissions where username = x; -- 处理0的特殊情况,内置转换不支持数字0 if y = 0 then y_english := 'zero'; else -- 利用儒略日格式掩码实现数字转英文拼写 select to_char(to_date(y, 'j'), 'jsp') into y_english from dual; end if; dbms_output.put_line(initcap(y_english) || ' document(s) found under user: ' || x); end; /
正确执行步骤
-- 第一步:开启输出开关 set serveroutput on; -- 第二步:调用存储过程,替换为你要查询的用户名 exec user_search('test_user');
内容的提问来源于stack exchange,提问作者dyertkd
相关产品推荐
相关产品推荐

