Oracle过程返回count作为一个单词



我试图创建一个过程,它接受一个表值(varchar2),计算它出现的次数,然后返回一条语句,告诉用户它在表中以单词而不是数字的形式出现了多少次(3次而不是3次)。到目前为止我的代码是:

create or replace procedure user_search (x in varchar2) is y int;

begin

select count(*) as z into y from userpermissions where x=username;dbms_output.put_line(to_char(y) || ' document(s) found under user: ' || x);

exception

when no_data_found then dbms_output.put_line('no documents for user: ' || x);

end;

当我运行这个时,它会说'pl/sql procedure completed successfully',但不返回任何东西。试图找出我在这里做错了什么,任何帮助将是感激的

你做错了几件事。

直接问题("not return anything")与您的过程无关;您需要先运行set serveroutput on,以便在过程完成后将dbms_output缓冲区显示到屏幕上。你这么做了吗?

你的异常永远不会被到达;如果在表中没有找到x作为用户名,查询仍然返回一行:在这种情况下计数将为零。如果必须将其视为异常(和/或使用"none";而不是单词"0",你需要用不同的方式来处理。

当您开始查看输出时,您会注意到to_char(<number>)并没有神奇地将数字转换成它的英文单词表示形式。你认为它做到了吗,或者你知道如何改变它,在这个阶段你只是在测试你目前得到的东西吗?

如果你在最后一部分需要帮助,这里有一个提示:

select deptno, to_char(to_date(count(*), 'j'), 'jsp') as english_num
from   scott.emp
group  by deptno
;
DEPTNO ENGLISH_NUM    
---------- ---------------
30 six            
20 five           
10 three       

如果你不明白这是如何工作的,看看to_date()to_char()的'j'和'jsp'格式模型。

最新更新