ORA-24344编译成功但含错误:存储过程创建编译错误排查求助
排查ORA-24344存储过程编译错误的原因
咱来一步步揪出这个存储过程里的编译错误,都是些常见的PL/SQL语法坑:
缺了存储过程声明的关键关键字:在参数列表
(n in number, r out number)结束后,必须用IS或者AS来开启变量声明部分,你直接加了分号就写变量,PL/SQL根本认不出这是存储过程的结构。正确的开头应该是CREATE OR REPLACE PROCEDURE fact(n IN NUMBER, r OUT NUMBER) IS。变量声明的位置和语法全错了:
- 变量
i和f得放在IS/AS和BEGIN之间,不能直接跟在参数后面; - 每个变量声明语句末尾必须加分号!你写的
i number:=n和f number:=1都没加分号,编译器根本没法区分这两行代码。得改成i NUMBER := n;和f NUMBER := 1;。
- 变量
赋值用错了运算符:PL/SQL里赋值是用
:=,=是用来做比较的!你写的i=i-1和r=f全是比较逻辑,不是赋值,得改成i := i - 1;和r := f;。循环没闭合:
WHILE循环必须用END LOOP;收尾,你只写了LOOP开头,没写结束标记,编译器不知道循环到哪为止。额外提个逻辑坑(不影响编译但结果错):你循环里写的
f:=f*1完全没意义,阶乘应该是乘当前的i啊,得改成f := f * i;,不然不管输入啥,结果都是1。
最后给你修正后的完整代码:
CREATE OR REPLACE PROCEDURE fact(n IN NUMBER, r OUT NUMBER) IS i NUMBER := n; f NUMBER := 1; BEGIN WHILE(i > 1) LOOP f := f * i; i := i - 1; END LOOP; r := f; END fact; /
内容的提问来源于stack exchange,提问作者Karthik D
相关产品推荐
相关产品推荐

