pl/sql代码
create or replace procedure sp_pr07(spbookid in number,spbookname in varchar2,sppublishhouse in varchar2) is
begin
insert into book values(spbookid,spbookname,sppublishhouse);
end;
java代码
package com.sp;
import java.sql.*;
public class Test2 {
public static void main(String[] args) {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection ct = DriverManager.getConnection("jdbc:oracle:thin:@121.197.102.20:1521:BOOKSTORE","scott","oracle");
CallableStatement cs=ct.prepareCall("{call sp_pro7(?,?,?)}");
cs.setInt(1, 10);
cs.setString(2, "笑傲江湖");
cs.setString(3, "人民出版社");
cs.execute();
cs.close();
ct.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
报错
java.sql.SQLException: ORA-06550: 第 1 行, 第 7 列:
PLS-00201: 必须声明标识符 'SP_PRO7'
ORA-06550: 第 1 行, 第 7 列:
PL/SQL: Statement ignored
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:111)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:330)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:287)
at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:742)
at oracle.jdbc.driver.T4CCallableStatement.doOall8(T4CCallableStatement.java:211)
at oracle.jdbc.driver.T4CCallableStatement.executeForRows(T4CCallableStatement.java:950)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1159)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3284)
at oracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStatement.java:3389)
at oracle.jdbc.driver.OracleCallableStatement.execute(OracleCallableStatement.java:4222)
at com.sp.Test2.main(Test2.java:16)
------解决思路----------------------
sp_pro7 在oracle中没有定义
检查是不是连错用户了,或是名字是不是拼写有问题
------解决思路----------------------
调用的时候写错了吧:
一个是:sp_pr07
一个是:sp_pro7
你再检查一下