首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

JSP 調用 Oracle 存儲過程報 PLS-00103:必須包裹在 BEGIN END 塊中

     編輯:程式設計綜合問答

錯誤現象

java.sql.SQLException: ORA-06550: line 1, column 8: PLS-00103: Encountered the symbol "?" when expecting one of the following: begin case declare ...

原始調用代碼

String procedure = "{call sajet.test_levi(?)}";
CallableStatement cstmt = conn.prepareCall(procedure);
cstmt.setString(1, customer);
cstmt.execute();

原因解析

Oracle JDBC 驅動在調用 不帶 OUT 參數的存儲過程 時,要求使用匿名 PL/SQL 塊語法:BEGIN procedure_name(?); END;。直接使用 {call ...} 會導致解析器無法識別參數佔位符。

修正代碼

CallableStatement cstmt = conn.prepareCall("BEGIN sajet.test_levi(?); END;");
cstmt.setString(1, "sssss");
cstmt.execute();

加上 BEGIN ... END; 後即可正常執行,無需修改存儲過程定義。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved