TOraStoredProc (dbms_output.get_lines)
TOraStoredProc (dbms_output.get_lines)
Доброе время суток.
ODAC 10.1.3
ORA-02005: implicit (-1) length not valid for this bind or define datatype
OraSession1->ExecSQL("call dbms_output.enable( 20000 )" );
int NumLines = 1;
TOraStoredProc *OraStoredProc = new TOraStoredProc(this);
OraStoredProc->Session = OraSession1;
OraStoredProc->StoredProcName = "dbms_output.get_lines";
OraStoredProc->Prepare();
OraStoredProc->ParamByName("LINES")->Length = NumLines;
OraStoredProc->ParamByName("NUMLINES")->AsInteger = OraStoredProc->ParamByName("LINES")->Length;
/////------Действия на стороне сервера--------------
try {
OraStoredProc->ExecProc();
} catch (Exception &exception) {
//// -------------- ORA-02005: implicit (-1) length not valid for this bind or define datatype --------
Application->ShowException(&exception);
return;
}
Что необходимо подкорректировать для извлечения сообщений ?
ODAC 10.1.3
ORA-02005: implicit (-1) length not valid for this bind or define datatype
OraSession1->ExecSQL("call dbms_output.enable( 20000 )" );
int NumLines = 1;
TOraStoredProc *OraStoredProc = new TOraStoredProc(this);
OraStoredProc->Session = OraSession1;
OraStoredProc->StoredProcName = "dbms_output.get_lines";
OraStoredProc->Prepare();
OraStoredProc->ParamByName("LINES")->Length = NumLines;
OraStoredProc->ParamByName("NUMLINES")->AsInteger = OraStoredProc->ParamByName("LINES")->Length;
/////------Действия на стороне сервера--------------
try {
OraStoredProc->ExecProc();
} catch (Exception &exception) {
//// -------------- ORA-02005: implicit (-1) length not valid for this bind or define datatype --------
Application->ShowException(&exception);
return;
}
Что необходимо подкорректировать для извлечения сообщений ?
Re: TOraStoredProc (dbms_output.get_lines)
Мы проверили приведенный Вами фрагмент кода и не обнаружили проблем. Результаты работы dbms_output.get_lines мы успешно отобразили в TMemo, заменив в Вашем коде строку на
Попробуйте проверить работу данного фрагмента кода в своем окружении. В случае возникновения ошибки ORA-02005, пожалуйста, составьте и пришлите нам небольшой полный пример, при выполнении которого проблема проявляет себя. Это удобно сделать с помощью формы e-support : ( https://www.devart.com меню "Support"\"Request Support" )
Код: Выделить всё
/////------Действия на стороне сервера--------------
Код: Выделить всё
Memo->Lines->Add(OraStoredProc->ParamByName("LINES")->AsString);
Re: TOraStoredProc (dbms_output.get_lines)
Это и был полный текст примера.
Для уточнения:
ODAC 10.1.3
client Oracle 11.2.0.3.0
Windows 7 Service Pack 1
В прикрепленном архиве готовый проект и выполняемый файл.
Для уточнения:
ODAC 10.1.3
client Oracle 11.2.0.3.0
Windows 7 Service Pack 1
В прикрепленном архиве готовый проект и выполняемый файл.
- Вложения
-
- OraStoredProc.zip
- (18.45 КБ) 458 скачиваний
Re: TOraStoredProc (dbms_output.get_lines)
Спасибо за Вашу информацию. В нашем предыдущем ответе закралась небольшая неточность. Естественно вызов Memo->Lines->Add(OraStoredProc->ParamByName("LINES")->AsString); мы разместили после выполнения метода ExecProc:
Мы добавили в Ваш проект следующий код :
после чего, получили в Memo значение 'Test', возвращаемое методом DBMS_OUTPUT.Get_Lines
Код: Выделить всё
OraStoredProc->ExecProc();
Memo->Lines->Add(OraStoredProc->ParamByName("LINES")->AsString);
Код: Выделить всё
OraSession1->ExecSQL("BEGIN dbms_output.put_line('Test'); END;");
Re: TOraStoredProc (dbms_output.get_lines)
В оболочке, после нажатия кнопки 'Execute'
[img] [/img]
[img] [/img]
Re: TOraStoredProc (dbms_output.get_lines)
Мы проверили работу ODAC в точности согласно Вашему описанию. К сожалению нам не удалось воспроизвести данную проблему. При нажатии на кнопку Execute в RAD Studio мы успешно выполнили вызов DBMS_Output.Get_Lines
Re: TOraStoredProc (dbms_output.get_lines)
[img]
Если Size заменить на 3999 - то работает.
В нашей предыдущей версии работало и с 32767.
Как правильно поступать с этим параметром ?
Или что поменять в настройках Oracle ?
[/img]Если Size заменить на 3999 - то работает.
В нашей предыдущей версии работало и с 32767.
Как правильно поступать с этим параметром ?
Или что поменять в настройках Oracle ?
Re: TOraStoredProc (dbms_output.get_lines)
Мы изменили присланный Вами пример с тем, чтобы использовать размер параметра LINES, равным 32767. Мы успешно выполнили вызов DBMS_Output.Get_Lines с данными изменениями в своем тестовом окружении. Проверьте работоспособность такого примера и сообщите нам о результатах. Измените исходный код примера таким образом, чтобы ошибка ORA-02005
проявила себя.
проявила себя.
- Вложения
-
- DevartOraStoredProc.zip
- (6.86 КБ) 401 скачивание
Re: TOraStoredProc (dbms_output.get_lines)
Если ни чего не менять тогда:
'ORA-02005: implicit (-1) length not valid for this bind or define datatype'.
Если заменить:
OraStoredProc->ParamByName("LINES")->Size = 32767;
на
OraStoredProc->ParamByName("LINES")->Size = 3999;
'ORA-06502: PL/SQL: numeric or value error: host bind array too small'
'ORA-06512: at line 2'
У нас есть:
SYS.DBMS_OUTPUT.GET_LINES Как таковой нет
SYS.DBMS_OUTPUT.GET_LINES:1 Parametr: 'LINES'-string 'NUMLINES'-float
SYS.DBMS_OUTPUT.GET_LINES:2 Parametr: 'LINES'-Object 'NUMLINES'-float
P.S.
where field1=:param1
-----в предыдущей версии ODAC 9.3.9 если-----
param1 == Null запрос срабатывал.
-----в новой 10.1.3 версии пришлось разделить-----
if( :param1.isNull ) where field1 is null
else where field1=:param1
'ORA-02005: implicit (-1) length not valid for this bind or define datatype'.
Если заменить:
OraStoredProc->ParamByName("LINES")->Size = 32767;
на
OraStoredProc->ParamByName("LINES")->Size = 3999;
'ORA-06502: PL/SQL: numeric or value error: host bind array too small'
'ORA-06512: at line 2'
У нас есть:
SYS.DBMS_OUTPUT.GET_LINES Как таковой нет
SYS.DBMS_OUTPUT.GET_LINES:1 Parametr: 'LINES'-string 'NUMLINES'-float
SYS.DBMS_OUTPUT.GET_LINES:2 Parametr: 'LINES'-Object 'NUMLINES'-float
P.S.
where field1=:param1
-----в предыдущей версии ODAC 9.3.9 если-----
param1 == Null запрос срабатывал.
-----в новой 10.1.3 версии пришлось разделить-----
if( :param1.isNull ) where field1 is null
else where field1=:param1
Re: TOraStoredProc (dbms_output.get_lines)
Мы продолжаем выяснение причин, которые могут приводить к описываемой Вами ошибке. Мы сообщим Вам о результатах, как только получим их