调用PL/SQL数字反转存储过程时无结果输出
解决PL/SQL反转数字存储过程无法输出结果的问题
嘿,我看了你的反转数字存储过程,发现两个关键问题导致你看不到预期结果,咱们一步步来解决:
1. 变量MYRESULT未初始化
PL/SQL里声明的数值变量如果没给初始值,默认是NULL。而NULL跟任何数做运算结果还是NULL,所以你的反转计算全程都是无效的,最后finalresult自然也是空值。这是核心问题!
2. 执行时没正确处理输出参数并打印
就算存储过程逻辑对了,直接调用它也不会自动把结果打出来,你得通过匿名块或者绑定变量来获取输出值,再手动打印。
修正后的存储过程
先给MYRESULT初始化为0,把逻辑补对:
CREATE OR REPLACE PROCEDURE SAMPLE_REV (myinput IN NUMBER, finalresult OUT NUMBER) IS OperInput NUMBER; MYREMAINDER NUMBER; MYRESULT NUMBER := 0; -- 显式初始化为0,这步必不可少 BEGIN OperInput := myinput; WHILE OperInput != 0 LOOP MYREMAINDER := MOD(OperInput, 10); MYRESULT := (MYRESULT * 10) + MYREMAINDER; OperInput := TRUNC(OperInput / 10); END LOOP; finalresult := MYRESULT; END; /
正确的执行方式(带打印输出)
用匿名块调用存储过程,再用DBMS_OUTPUT.PUT_LINE把结果打出来。别忘了先开启服务器输出,不然看不到内容:
SET SERVEROUTPUT ON; -- 必须先执行这句,开启输出功能 DECLARE v_input NUMBER := 12345; -- 换成你想测试的数字就行 v_result NUMBER; BEGIN SAMPLE_REV(v_input, v_result); DBMS_OUTPUT.PUT_LINE('反转后的结果是: ' || v_result); END; /
要是你用的是PL/SQL Developer这类工具,也可以在工具设置里开启DBMS输出的显示,这样执行匿名块后就能直接看到结果了。
内容的提问来源于stack exchange,提问作者Mubarak Abdullah
相关产品推荐
相关产品推荐

