2014-09-15 5 views
0

У меня возникла проблема вызова хранимой процедуры из OSB 11g через адаптер JCA. Ошибки я получаю:Сохраненный захват Proc ORA-06502: PL/SQL: числовая или значение ошибки

ORA-06502: PL/SQL: numeric or value error 
ORA-06512: at line 1 

Ошибка короче, как это без какого-либо позади добавления записей описания ошибки. Это происходит только в рабочей среде, и нет проблем, когда я указываю базу данных на UAT. Более удивительно, что он будет работать в производственной среде, если одна из переменных, которые я передаю, составляет менее 128 символов. (иначе я удалю ошибку выше). Тип хранимой процедуры и длина определены правильно. имея столбец таблицы, способный справляться с 4000 символами.

Оба Oracle 9i DB используют одну и ту же основную модификацию модификации. Сохраненная процедура находится в пакете. Я извлек и сравнил хранимую процедуру из среды БД с помощью winmerge, и это показывает, что они зеркально отражают друг друга.

Выполнение хранимой процедуры вручную в рабочей среде обеспечивает, что я объявляю достаточно большой размер varchar. Мне удалось имитировать ошибку ORA-06502, объявив размер переменной меньше длины данных, в которой я прохожу.

Я даже зашел так далеко, как захватил сетевой дамп из обоих исполнений, и обнаружил, что есть небольшие отличия. (Примечание: я повторно использую один и тот же источник данных и только изменяю ip и имя пользователя в WLS и делал перезагрузку перед каждым исполнением)

Когда я указываю на производственную среду (у 1 есть проблемы), tcpdump выглядит примерно так: :

BEGIN packagename.stored_proc_name(V_value1=>:1 , v_value2=>:2, v_value3=>:3); END .... {variable1}... {variable2}... {variable3}) 

Когда я указываю на окружающую среду UAT (успешный 1), свалка выглядит короче и без BEGIN; END тега

.... {variable1}... {variable2}... {variable3}) 

Что еще могло бы пошло не так? Цените для любых помогает!

ответ

2

«хранимая процедура находится в пакете. Я извлек, и сравнили хранимая процедура с обеих сред БД с помощью WinMerge и он показывает они отражают друг друга.»

Это а не о коде, проблема связана с данными. В UAT у вас может не быть данных о производстве, и, следовательно, вы не сможете воспроизвести проблему.

Ваше сообщение об ошибке просто говорит об ошибке в строке 1, что не совсем полезно. Выполняете ли вы код без его форматирования? Если вы отформатируете код и выполните его, и удалите всю обработку исключений, вы правильно знаете номер строки. Например:

SQL> declare 
    2 num number; 
    3 begin 
    4 num := 'a'; 
    5 end; 
    6/
declare 
* 
ERROR at line 1: 
ORA-06502: PL/SQL: numeric or value error: character to number conversion error 
ORA-06512: at line 4 

Престол, он ясно говорит, что ошибка в строке 4.

любой шанс, если у вас есть EXCEPTION блок, убедитесь, что вы используете dbms_utility.format_error_stack и dbms_utility.format_error_backtrace войти сведения об ошибке. Иначе номер строки ошибки никогда не будет корректным.

+0

Я не контролирую, как выполняется хранимая процедура, она завершается под Oracle JCA DB Adapter. Я уверен, что сопоставления JCA/WSDL/XSD соответствуют обоим средам. Данные испытаний не имеют большого значения.как я сказал, это работает, когда я передаю менее 128 символов для столбца описания. –

 Смежные вопросы

  • Нет связанных вопросов^_^