Если ни чего не менять тогда:
'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
Найдено 48 результатов
- Чт 07 дек 2017 09:47
- Форум: Oracle Data Access Components
- Тема: TOraStoredProc (dbms_output.get_lines)
- Ответы: 9
- Просмотры: 21023
- Ср 15 ноя 2017 11:44
- Форум: Oracle Data Access Components
- Тема: TOraStoredProc (dbms_output.get_lines)
- Ответы: 9
- Просмотры: 21023
Re: TOraStoredProc (dbms_output.get_lines)
[img]
Если Size заменить на 3999 - то работает.
В нашей предыдущей версии работало и с 32767.
Как правильно поступать с этим параметром ?
Или что поменять в настройках Oracle ?
[/img]Если Size заменить на 3999 - то работает.
В нашей предыдущей версии работало и с 32767.
Как правильно поступать с этим параметром ?
Или что поменять в настройках Oracle ?
- Чт 09 ноя 2017 07:04
- Форум: Oracle Data Access Components
- Тема: TOraStoredProc (dbms_output.get_lines)
- Ответы: 9
- Просмотры: 21023
Re: TOraStoredProc (dbms_output.get_lines)
В оболочке, после нажатия кнопки 'Execute'
[img] [/img]
[img] [/img]
- Ср 08 ноя 2017 13:20
- Форум: Oracle Data Access Components
- Тема: TOraStoredProc (dbms_output.get_lines)
- Ответы: 9
- Просмотры: 21023
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
В прикрепленном архиве готовый проект и выполняемый файл.
- Вт 07 ноя 2017 08:36
- Форум: Oracle Data Access Components
- Тема: TOraStoredProc (dbms_output.get_lines)
- Ответы: 9
- Просмотры: 21023
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;
}
Что необходимо подкорректировать для извлечения сообщений ?
- Пт 03 ноя 2017 11:52
- Форум: Oracle Data Access Components
- Тема: Schema does not exist
- Ответы: 3
- Просмотры: 17431
Re: Schema does not exist
verion odac 10.1.3 - 'Schema does not exist'
вся информация забирается корректно из диалога и прописывается в реестр (где и нашлась устаревшая информация).
Эта ошибка пропала.
При этом в ConnectDialog не воспроизводятся на кириллице (перевод ввели в компоненте) при выполнении следующие свойства:
Schema, Connect Mode, Direct
вся информация забирается корректно из диалога и прописывается в реестр (где и нашлась устаревшая информация).
Эта ошибка пропала.
При этом в ConnectDialog не воспроизводятся на кириллице (перевод ввели в компоненте) при выполнении следующие свойства:
Schema, Connect Mode, Direct
- Чт 12 окт 2017 12:33
- Форум: Oracle Data Access Components
- Тема: Schema does not exist
- Ответы: 3
- Просмотры: 17431
Schema does not exist
Добрый день!
Версия ODAC 9.3.9 - XE5.
Стандартное(ODAC) окно соединения с СУБД - при нажатии кнопки "соединения" выскакивает (на некоторых машинах) сообщение "Schema does not exist" (причем как с драйвером так и direct).
При подтверждении "соединения" несколько раз вроде соединяется ... но запросы проходят с ошибками.
Если в TOraSession заполнить: сервер, пользователь, пароль ... и поставить ConnectPrompt = false соединение проходит нормально и программа работает.
ЧТО поменять в настройках ConnectDialog или настройках Windows или ... ?
Версия ODAC 9.3.9 - XE5.
Стандартное(ODAC) окно соединения с СУБД - при нажатии кнопки "соединения" выскакивает (на некоторых машинах) сообщение "Schema does not exist" (причем как с драйвером так и direct).
При подтверждении "соединения" несколько раз вроде соединяется ... но запросы проходят с ошибками.
Если в TOraSession заполнить: сервер, пользователь, пароль ... и поставить ConnectPrompt = false соединение проходит нормально и программа работает.
ЧТО поменять в настройках ConnectDialog или настройках Windows или ... ?
- Вт 11 июл 2017 06:26
- Форум: Oracle Data Access Components
- Тема: TOraQuery::Params
- Ответы: 9
- Просмотры: 23440
Re: TOraQuery::Params
Однозначно не могу сформировать пример.
Разница чувствуется только на указанной таблице, но при этом:
1) Если ее переименовать - скорость OCI и Direct продолжает отличаться.
2) Если создать полную копию - все работает одинаково.
При просмотре плана выполнения запроса: поиск выполняется по rowid при наличии INDEX (описанного выше).
Разница чувствуется только на указанной таблице, но при этом:
1) Если ее переименовать - скорость OCI и Direct продолжает отличаться.
2) Если создать полную копию - все работает одинаково.
При просмотре плана выполнения запроса: поиск выполняется по rowid при наличии INDEX (описанного выше).
- Пт 23 июн 2017 12:59
- Форум: Oracle Data Access Components
- Тема: TOraQuery::Params
- Ответы: 9
- Просмотры: 23440
Re: TOraQuery::Params
Выяснилась интересная особенность:
если удалить INDEX (item_code, shop) все начинает работать БЫСТРО.
Но почему только при Direct и наличии Params работает МЕДЛЕННО ?
если удалить INDEX (item_code, shop) все начинает работать БЫСТРО.
Но почему только при Direct и наличии Params работает МЕДЛЕННО ?
- Вт 06 июн 2017 10:24
- Форум: Oracle Data Access Components
- Тема: TOraQuery::Params
- Ответы: 9
- Просмотры: 23440
Re: TOraQuery::Params
нашли странную зависимость
если
LENGTH(table_up.item_code)=9
заменить на
table_up.ost_code like '_________'
все начинает работать МОМЕНТАЛЬНО
если
LENGTH(table_up.item_code)=9
заменить на
table_up.ost_code like '_________'
все начинает работать МОМЕНТАЛЬНО
- Пн 05 июн 2017 12:32
- Форум: Oracle Data Access Components
- Тема: TOraQuery::Params
- Ответы: 9
- Просмотры: 23440
Re: TOraQuery::Params
Удалось создать маленький тормозящий запрос:
select table_up.isn_inv, table_up.item_code num_code, table_up.producer kpo, OstCode
from table_sale table_up,
(select table_Down.item_code OstCode, table_Down.isn_inv IT
from table_sale table_Down
where table_Down.isn_inv=:p11612
)
where table_up.isn_inv=IT
and table_up.producer = table_up.shop
and LENGTH(table_up.item_code)=9
and substr(table_up.item_code,1,9)=substr(OstCode,1,9)
При создании полной копии таблицы table_sale с другим именем результат повторился только пару раз.
Возможно Oracle отрабатывает по сценарию составленного на основе первого запуска.
Основная таблица (с кол-вом более миллиона записей) все таки часто используется с различными условиями.
Урезанная часть таблицы:
create table table_sale
(
isn_inv NUMBER(6, 0), --ссылка на накладную
item_code VARCHAR2(30) NOT NULL, --код товара в том числе с расширителем
producer NUMBER(6, 0) NOT NULL, --номер поставщика
shop NUMBER(6, 0) --номер продавца
)
Примерная структура данных:
1,'000000001', 22, 23
1,'00000000101', 22, 24
1,'00000000102', 22, 23
...
Эксперимент N1:
1) OraQuery.Active = true; (моментально)
2) OraQuery.Last(); (Direct = 00:02:30, Driver = 00:00:01)
Эксперимент N2:
Добавляю к запросу union all и повторно тот же самый запрос
1) OraQuery.Active = true; (моментально)
2) OraQuery.Last(); (Direct = 00:00:01, Driver = 00:00:01)
Эксперимент N3:
Добавляю к запросу union all и повторно изначальный запрос
1) OraQuery.Active = true; (моментально)
2) OraQuery.Last(); (Direct = 00:00:02, Driver = 00:00:01)
Эксперимент N4:
Добавляю к запросу union all и изначальный запрос
1) OraQuery.Active = true; (моментально)
2) OraQuery.Last(); (Direct = 00:02:37, Driver = 00:00:02)
При этом(другие пользователи стали жаловаться на падение скорости): на стороне сервера Oracle CPU доходит до 98%, на время выполнения запросов с задержки.
P.S. Первоначальный запрос (из 5000 символов)
1) OraQuery.Active = true; (Direct = 00:03:22, Driver = 00:00:01)
2) OraQuery.Last(); (Direct = 00:00:01, Driver = 00:00:01)
select table_up.isn_inv, table_up.item_code num_code, table_up.producer kpo, OstCode
from table_sale table_up,
(select table_Down.item_code OstCode, table_Down.isn_inv IT
from table_sale table_Down
where table_Down.isn_inv=:p11612
)
where table_up.isn_inv=IT
and table_up.producer = table_up.shop
and LENGTH(table_up.item_code)=9
and substr(table_up.item_code,1,9)=substr(OstCode,1,9)
При создании полной копии таблицы table_sale с другим именем результат повторился только пару раз.
Возможно Oracle отрабатывает по сценарию составленного на основе первого запуска.
Основная таблица (с кол-вом более миллиона записей) все таки часто используется с различными условиями.
Урезанная часть таблицы:
create table table_sale
(
isn_inv NUMBER(6, 0), --ссылка на накладную
item_code VARCHAR2(30) NOT NULL, --код товара в том числе с расширителем
producer NUMBER(6, 0) NOT NULL, --номер поставщика
shop NUMBER(6, 0) --номер продавца
)
Примерная структура данных:
1,'000000001', 22, 23
1,'00000000101', 22, 24
1,'00000000102', 22, 23
...
Эксперимент N1:
1) OraQuery.Active = true; (моментально)
2) OraQuery.Last(); (Direct = 00:02:30, Driver = 00:00:01)
Эксперимент N2:
Добавляю к запросу union all и повторно тот же самый запрос
1) OraQuery.Active = true; (моментально)
2) OraQuery.Last(); (Direct = 00:00:01, Driver = 00:00:01)
Эксперимент N3:
Добавляю к запросу union all и повторно изначальный запрос
1) OraQuery.Active = true; (моментально)
2) OraQuery.Last(); (Direct = 00:00:02, Driver = 00:00:01)
Эксперимент N4:
Добавляю к запросу union all и изначальный запрос
1) OraQuery.Active = true; (моментально)
2) OraQuery.Last(); (Direct = 00:02:37, Driver = 00:00:02)
При этом(другие пользователи стали жаловаться на падение скорости): на стороне сервера Oracle CPU доходит до 98%, на время выполнения запросов с задержки.
P.S. Первоначальный запрос (из 5000 символов)
1) OraQuery.Active = true; (Direct = 00:03:22, Driver = 00:00:01)
2) OraQuery.Last(); (Direct = 00:00:01, Driver = 00:00:01)
- Ср 17 май 2017 12:02
- Форум: Oracle Data Access Components
- Тема: TOraQuery::Params
- Ответы: 9
- Просмотры: 23440
Re: TOraQuery::Params
В вашем новом обновлении (10.0.2) не исправлена черепашья скорость в режиме Direct больших запросов с параметрами.
Есть ли надежда исправления скорости выполнения запроса в режиме Direct (с драйвером все летает ~ 2 сек, без драйвера ~ 50 сек.) ...
или надо искать другие компоненты доступа до Oracle ?
Есть ли надежда исправления скорости выполнения запроса в режиме Direct (с драйвером все летает ~ 2 сек, без драйвера ~ 50 сек.) ...
или надо искать другие компоненты доступа до Oracle ?
- Пн 17 апр 2017 13:26
- Форум: Oracle Data Access Components
- Тема: TOraQuery::Params
- Ответы: 9
- Просмотры: 23440
TOraQuery::Params
Добрый день.
ODAC 9.3.9 и 10.0.1 соединение direct
Общий запрос имеет такой вид и общее кол-во символов в запросе более 5000.
select AA, BB, sum(CC), sum(DD)
from (
select a1 AA, b1 BB, c1 CC, d1 DD from table1 where WW = :param1
union all
select a2 AA, b2 BB, c2 CC, d2 DD from table2 where QQ = :param1
union all
select a3 AA, b3 BB, c3 CC, d3 DD from table3 where YY = :param1
union all
select a4 AA, b4 BB, c4 CC, d4 DD from table4 where XX = :param1
union all
select a5 AA, b5 BB, c5 CC, d5 DD from table5 where SS = :param1
)
group by AA, BB
order by AA, BB
WW, QQ, YY, XX, SS - тип NUMBER - индекс
param1 - пять раз одно и тоже имя
каждая из таблиц (table1, table2, table3, table4, table5) имеет значительно больше 100000 записей, результирующий набор такой же порядок.
1) С драйвером Oracle - работает все моментально.
2) С direct есть особенности.
2.1) Если вместо параметров подставить конкретное значение - работает все моментально.
2.2) В оболочке Borland компонент сильно тормозит при нажатии кнопки 'Execute'.
2.3) все типы параметра кроме Number - сильно тормозят (до 2 минут), результат верный.
2.4) параметр типа Number работает моментально если он ОДИН, результат НЕ верный.
2.5) параметр типа Number работает моментально, выдавая ПУСТОЙ НАБОР если их ПЯТЬ (наш случай, а должно быть тысячи).
Что необходимо сделать, что бы direct с ПАРАМЕТРАМИ тоже работало МОМЕНТАЛЬНО?
ODAC 9.3.9 и 10.0.1 соединение direct
Общий запрос имеет такой вид и общее кол-во символов в запросе более 5000.
select AA, BB, sum(CC), sum(DD)
from (
select a1 AA, b1 BB, c1 CC, d1 DD from table1 where WW = :param1
union all
select a2 AA, b2 BB, c2 CC, d2 DD from table2 where QQ = :param1
union all
select a3 AA, b3 BB, c3 CC, d3 DD from table3 where YY = :param1
union all
select a4 AA, b4 BB, c4 CC, d4 DD from table4 where XX = :param1
union all
select a5 AA, b5 BB, c5 CC, d5 DD from table5 where SS = :param1
)
group by AA, BB
order by AA, BB
WW, QQ, YY, XX, SS - тип NUMBER - индекс
param1 - пять раз одно и тоже имя
каждая из таблиц (table1, table2, table3, table4, table5) имеет значительно больше 100000 записей, результирующий набор такой же порядок.
1) С драйвером Oracle - работает все моментально.
2) С direct есть особенности.
2.1) Если вместо параметров подставить конкретное значение - работает все моментально.
2.2) В оболочке Borland компонент сильно тормозит при нажатии кнопки 'Execute'.
2.3) все типы параметра кроме Number - сильно тормозят (до 2 минут), результат верный.
2.4) параметр типа Number работает моментально если он ОДИН, результат НЕ верный.
2.5) параметр типа Number работает моментально, выдавая ПУСТОЙ НАБОР если их ПЯТЬ (наш случай, а должно быть тысячи).
Что необходимо сделать, что бы direct с ПАРАМЕТРАМИ тоже работало МОМЕНТАЛЬНО?
- Пн 06 июн 2016 11:44
- Форум: Oracle Data Access Components
- Тема: TParam <> TOraParam
- Ответы: 3
- Просмотры: 8648
Re: TParam <> TOraParam
Всё понял.
Спасибо.
Спасибо.
- Пт 03 июн 2016 12:08
- Форум: Oracle Data Access Components
- Тема: TParam <> TOraParam
- Ответы: 3
- Просмотры: 8648
TParam <> TOraParam
Здравствуйте.
ODAC Ver 9.3.9
TOraQuery - создан запрос с одним параметром типа Number.
TOraParam *pParamOra = TOraQuery->Params->Items[0];
TParam *pParam = TOraQuery->Params->Items[0];
pParamOra->Value НЕ РАВНО pParam->Value
хотя TOraParam наследник от TParam.
Как пользоваться pParam->Value ?
ODAC Ver 9.3.9
TOraQuery - создан запрос с одним параметром типа Number.
TOraParam *pParamOra = TOraQuery->Params->Items[0];
TParam *pParam = TOraQuery->Params->Items[0];
pParamOra->Value НЕ РАВНО pParam->Value
хотя TOraParam наследник от TParam.
Как пользоваться pParam->Value ?