package com.test;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
public class Test {
public static final String drive = "oracle.jdbc.driver.OracleDriver";
public static final String url = "jdbc:oracle:thin:@10.10.29.150:1522:ordb10";
public static final String DBUSER="test";
public static final String password="test";
public static void main(String args[]){
Connection conn = null;
CallableStatement cstmt = null;
try{
Class.forName (drive).newInstance();
conn = DriverManager.getConnection(url, DBUSER, password);
String strSQL = "update test set object_id=1 where";
cstmt = conn.prepareCall("{call proce_test( , )}");
cstmt.setString(1, strSQL);//输入参数
cstmt.registerOutParameter(2, java.sql.Types.VARCHAR);//输出参数
cstmt.execute();
System.out.println(cstmt.getString(2));//打印错误信息
}catch(Exception ex){
ex.printStackTrace();
}finally{
try{
if(cstmt != null){
cstmt.close();
}
}catch(Exception ex){
ex.printStackTrace();
}
try{
if(conn != null){
conn.close();
}
}catch(Exception ex){
ex.printStackTrace();
}
}
}
}
CREATE OR REPLACE PROCEDURE proce_test (intputsql in string, v_error_message out string) AS BEGIN EXECUTE IMMEDIATE intputsql; Exception WHEN OTHERS Then v_error_message :=SQLCODE || ':' || SQLERRM || substr(dbms_utility.format_error_backtrace, 1, 200); END proce_test;