Apex Oracle中PL/SQL报ORA-00936缺失表达式错误如何修复?
PL/SQL报错排查与修复方案
错误定位
报错ORA-06550: line 8, column 44: PL/SQL: ORA-00936: missing expression指向代码第8行,经检查存在以下语法错误:
- 绑定变量前缀错误:Apex页面对象作为绑定变量调用时必须以冒号
:开头,你在FACULTY分支的INSERT语句、STUDENT分支的INSERT语句中,均将:P10_BOOK_NAME的冒号错写为分号;,属于无效标识符。 - 多余无效字符:FACULTY分支的INSERT语句中
;P10_BOOK_NAME前后多余的**符号不属于PL/SQL合法语法,导致表达式无法识别。 - 遗漏绑定变量前缀:if判断条件中的
P10_USER_TYPE也是Apex页面项,遗漏了冒号前缀,执行时也会触发标识符无效报错。
修复后代码
declare user_id number(10); begin if(:P10_USER_TYPE = 'FACULTY') then user_id := :P10_BORROWER_FACULTY; insert into LMS_BOOK_ISSUE(BOOK_ISSUE_ID,BOOK_ID,BORROWER_ID,ISSUED_BY,BORROWED_FROM_DATE,BORROWED_TO_DATE,BORROWER_TYPE,BOOK_RT_STATUS) values (LMS_BOOK_ISSUE_SEQ.nextval,:P10_BOOK_NAME,user_id, 1, :P10_BORROWED_DATE,:P10_FACULTY_RET_DATE,'FACULTY',1); update LMS_BOOK_DETAIL set BOOK_NO_OF_COPIES_CURRENT = BOOK_NO_OF_COPIES_CURRENT-1 where BOOK_ID=:P10_BOOK_NAME; else user_id := :P10_STUDENT; insert into LMS_BOOK_ISSUE(BOOK_ISSUE_ID,BOOK_ID,BORROWER_ID,ISSUED_BY,BORROWED_FROM_DATE,BORROWED_TO_DATE,BORROWER_TYPE,BOOK_RT_STATUS) values (LMS_BOOK_ISSUE_SEQ.nextval,:P10_BOOK_NAME,user_id, 1, :P10_BORROWED_DATE,:P10_FACULTY_RET_DATE,'STUDENT',1); update LMS_BOOK_DETAIL set BOOK_NO_OF_COPIES_CURRENT = BOOK_NO_OF_COPIES_CURRENT-1 where BOOK_ID=:P10_BOOK_NAME; end if; end;
排查技巧
后续遇到同类PL/SQL语法报错时,可优先按以下步骤排查:
- 按报错提示的行号、列号定位对应代码段
- 检查绑定变量是否正确使用冒号前缀
- 检查是否存在多余的无效字符、符号
- 检查括号、引号、分号是否正确闭合
内容的提问来源于stack exchange,提问作者Mister Squash
相关产品推荐
相关产品推荐

