У меня есть процедура PL/SQL в базе данных Oracle. И эта процедура охватывает случай исключения в конце скрипта;Вызов процедуры из исключения java throws
EXCEPTION WHEN OTHERS THEN
v_error_text := 'Error case';
Переменная v_error_text - это параметр out для регистрации исключения на стороне java. Я вызываю этот скрипт из Java-приложения. Иногда это исключает исключение, а не из стороны Oracle, а из java.
java.sql.SQLException: ORA-06502: PL/SQL: numeric or value error: character to number conversion error
ORA-06512: at line 1
Как говорится, это исключает возможность преобразования символа в число. Но поскольку процедура имеет обработку исключений, она не должна вызывать эту ошибку со стороны java, она должна выбросить ее со стороны Oracle, и я смогу получить текст ошибки, который я отправляю как параметр out (v_error_text).
Как это могло быть возможно, даже я объявил иск EXCEPTION, любые идеи?
Большое спасибо.
Edit:
я не добавил код Java, здесь мы можем увидеть:
package oracle;
import java.sql.Connection;
import java.sql.DriverManager;
import oracle.jdbc.OracleCallableStatement;
import oracle.jdbc.OracleConnection;
import oracle.jdbc.driver.OracleDriver;
public class MyTestClass {
static String URL = "jdbc:oracle:thin:@//127.0.0.1:1521/test";
static String USER = "myuser";
static String PASS = "mspass";
public static void main(String[] args) throws Exception {
DriverManager.registerDriver(new OracleDriver());
Connection jConn = null;
OracleCallableStatement jStmt = null;
jConn = (OracleConnection) DriverManager
.getConnection(URL, USER, PASS);
jStmt = (OracleCallableStatement) jConn
.prepareCall("{ call MYPACKET.MYPROCEDURE(?, ?, ?) }");
jStmt.setString(1, "Test 1");
jStmt.setString(2, "Test 2");
jStmt.execute();
jConn.close();
}
}
Как вы вызываете хранимую процедуру в Java? Можете ли вы добавить код, который вы используете для этого? Я подозреваю, что в этом проблема. В случае возникновения ошибки Oracle даже не попадает в вашу процедуру, поэтому она не сможет использовать обработчик исключений. Судя по сообщению, кажется, что есть что-то, что вы ожидаете быть рядом, но нет - возможно, это «NULL»? –
Извините, я только что добавил код java :) – mndeveci