【发布时间】:2018-04-23 20:09:23
【问题描述】:
如何编写一个 PL/SQL 函数:
- 仅使用数字数据类型和函数 - 不使用 VARCHAR2、CHAR、CLOB、XML 等。 " 换句话说,REVERSE、SUBSTR 等字符/字符串函数不能在您的解决方案中使用。
- 接受 PLS_INTEGER 参数
- 如果提供的值小于或等于零,则抛出应用程序错误 -20001 并提供良好的错误消息
- 返回一个 PLS_INTEGER 值,其中输入参数中的数字以相反的顺序排列。如果输入值以一个或多个零结尾,则这些零将不会出现在返回的数值中,因为它们将是前导零。
这是我目前所写的:
create or replace function test_reverse
(p_input in pls_integer)
return pls_integer
is
p_num pls_integer := 0;
p_in_num pls_integer := 0;
p_out_num pls_integer := 0;
begin
p_num := p_input;
loop
exit when p_num p_in_num := mod(p_num,10);
p_out_num := (p_out_num * 10) + p_in_num;
p_num := trunc(p_num / 10);
end loop;
return p_out_num;
end;
【问题讨论】:
-
不客气。到目前为止,您尝试了什么。
-
创建或替换函数 TEST_REVERSE (P_INPUT IN PLS_INTEGER) RETURN PLS_INTEGER IS P_NUM PLS_INTEGER := 0; P_IN_NUM PLS_INTEGER := 0; P_OUT_NUM PLS_INTEGER := 0;开始 P_NUM := P_INPUT;循环退出当 P_NUM P_IN_NUM := MOD(P_NUM,10); P_OUT_NUM := (P_OUT_NUM * 10) + P_IN_NUM; P_NUM := TRUNC(P_NUM / 10);结束循环;返回 P_OUT_NUM;结束;
-
请在您的问题中添加任何代码,而不是作为 cmets,并描述什么不起作用。另外,如果您可以将其小写以提高可读性,那就太好了。
-
显然是一个家庭作业问题。但这是一个有趣的问题,需要对 Oracle SQL 函数有一些非显而易见的知识,所以值得回答。