У меня то, что начиналось как довольно сложная хранимая процедура, сводится к очень простому варианту использования, который, похоже, работает не так, как я ожидал.
Теперь хранимая процедура для моего теста выглядит так:
CREATE OR REPLACE PROCEDURE proc_test(
v_someString varchar2
) as
BEGIN
dbms_output.put_line('test');
END;
Я могу вызвать эту хранимую процедуру из java, используя вызываемый оператор API
java.sql.CallableStatement stmt = conn.prepareCall("call proc_test(?)");
stmt.setObject(1,null);
stmt.execute();
Вышеупомянутое работает, как и ожидалось. Метод выполняется и завершается успешно. Теперь, когда это становится сложным. Мы создали набор типов объектов оракула, чтобы позволить нам передавать более сложные структуры, подобные следующим
CREATE OR REPLACE
type SOMETYPE_TYPE force UNDER BASE_TYPE (value varchar2(255),
CONSTRUCTOR FUNCTION SOMETYPE_TYPE RETURN SELF AS RESULT) NOT FINAL;
если я просто изменю процедуру, чтобы принять эти типы в качестве параметров, например:
CREATE OR REPLACE PROCEDURE proc_test(
v_someString SOMETYPE_TYPE
) as
BEGIN
dbms_output.put_line('test');
END;
Oracle порвет с PLS-00306: wrong number or types of arguments in call to 'CNV_CREATE_PERSON'
Что дает? Если я вызываю эту процедуру из другой процедуры с нулевым значением в качестве значения, она работает нормально. Только вызывая его из java API, он ломается.
Я искал документацию для любого решения и не могу найти его. Возможно, кто-нибудь из вас, мудрых и образованных людей, укажет мне правильное направление.
Спасибо
TYPE
s в параметрах, используете ли вы STRUCT в вашемJDBC
? - person Maheswaran Ravisankar   schedule 08.09.2014proc_test(null);
- person Beta033   schedule 08.09.2014