|
|
|
Получить переменную типа ГЛОБ из Оракла
|
|||
|---|---|---|---|
|
#18+
Добрый день. Люди, очень прошу - помогите плиз, сама уже всю голову сломала:( Без отрыва несколько дней изучаю как можно из 1с связаться с Оракл, выполнить там хранимую процедуру и пролучить ответ в виды выходного параметра. Возникла большая проблема: в хранимой процедуре в выходном параметре выдается ХМЛ строка - переменная типа ГЛОБ (программисты ОРАКЛ говорят, что это просто очень большая стрка, 4000 байт). Я в 1с устанавлиаю содинение и создаю команду: Код Соединение = Новый COMОбъект ("adodb.Connection"); Соединение.ConnectionString="driver={oracle in oraclient10g_home1};Data Source=oradb;user ID=samaratest;password=samaratest"; Соединение.CursorLocation = 3; Соединение.Open(); Команда = Новый COMОбъект ("adodb.Command"); Команда.ActiveConnection = Соединение; Команда.CommandType = 4; Команда.CommandText = "P_GET_DOCUMENT"; после этого перечисляю все параметры процедуры и выполняю команду: Код //передаем число Параметр = Команда.CreateParameter("SESSION_ID",3,1,4,Session_ID); Команда.Parameters.Append(Параметр); //передаем строку Параметр = Команда.CreateParameter("DOC_TYPE",200,1,10,"BSO_MOVE"); Команда.Parameters.Append(Параметр); //выходной параметр типа adLongVarChar Параметр = Команда.CreateParameter("DOC_BODY",201,2,40000); Команда.Parameters.Append(Параметр); //выходной параметр числовой Параметр = Команда.CreateParameter("RET_CODE",3,2,100); Команда.Parameters.Append(Параметр); //выходной параметр строковый Параметр = Команда.CreateParameter("ERR_MSG",200,2,500); Команда.Parameters.Append(Параметр); пРС = Команда.Execute(); Со стороны Оракл процедура выполняется и передает ХМЛ-строку через переменную DOC_BODY, просто 1с не может её считать. Эта ХМЛ строка записывается в переменную типа ГЛОБ (Оракл программисты сказали, что это просто очень длинная строка) А в 1с в строке пРС = Команда.Execute(); выдается ошибка мол "[Oracle][ODBC][Ora]ORA-06502: PL/SQL: : ошибка преобразования символа в число ошибка числа или значения". Как я понимаю, такая ошибка или из за несовместимости данных, или из за того, что принимающая строка недостаточно большая. я уже в качестве типа параметра DOC_BODY перебрала все возможные строковые типы (отсюда http://www.sql.ru/forum/actualthread.aspx?...1&hl=adodb), все время ругается. Подскажите, как быть в этой ситуации? Может быть кто-то сталкивался, и такая ошибка возникает по другим причинам, не из за несовместимости типов? Может быть через какой то другой компонент, не АДО, подключаться к базе и запускать там процедуру? Или может быть знатоки связи с Оракл подскажут как можн получить переменную типа ГЛОБ? или какой то другой тип в Оракл, в которуй можно передавать огромную строку? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2010, 14:58 |
|
||
|
Получить переменную типа ГЛОБ из Оракла
|
|||
|---|---|---|---|
|
#18+
А если уменьшить длину строки - все проходит? А если туже процедуру выполнять из оракла - все проходит? А если в 1с в региональных настройках поменять значение символа разделителя (. на ,)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2010, 16:17 |
|
||
|
Получить переменную типа ГЛОБ из Оракла
|
|||
|---|---|---|---|
|
#18+
Программист 1с, длину строки не уменьшить, необходимо принимать всю, какая они есть. на стороне Оракл процедура выполняется, программисты это видят по логам символ разделителя поменяла - ничего не изменилось. А как это могло повлиять на прием строки?:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2010, 10:17 |
|
||
|
Получить переменную типа ГЛОБ из Оракла
|
|||
|---|---|---|---|
|
#18+
Мне кажется, что ошибка все-таки у вас в коде. Гляньте на ссылки: - http://www.firststeps.ru/sql/oracle/r.php?91 - http://all-oracle.ru/content/view/?part=1&id=71 - http://www.sql.ru/forum/actualthread.aspx?tid=113869 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2010, 10:32 |
|
||
|
Получить переменную типа ГЛОБ из Оракла
|
|||
|---|---|---|---|
|
#18+
KuzEvМне кажется, что ошибка все-таки у вас в коде. Гляньте на ссылки: - http://www.firststeps.ru/sql/oracle/r.php?91 - http://all-oracle.ru/content/view/?part=1&id=71 - http://www.sql.ru/forum/actualthread.aspx?tid=113869 в смысле ошибка на стороне Оракла, в их коде? Или в 1с, при вызове процедуры или обявлении переменных? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2010, 10:56 |
|
||
|
Получить переменную типа ГЛОБ из Оракла
|
|||
|---|---|---|---|
|
#18+
Какой результат вы получаете при запуске кода в SQL Plus (или как он у Вас там называется)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2010, 11:18 |
|
||
|
Получить переменную типа ГЛОБ из Оракла
|
|||
|---|---|---|---|
|
#18+
авторПолучить переменную типа ГЛОБ Видимо, всё-таки CLOB. Далее, MS ODBC не поддерживает BLOB типы. Надо использовать OraOLEDB провайдера и перед выполнением команды включать свойство SPPrmsLOB (после выполнения выключать). Вот здесь есть примеры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2010, 23:53 |
|
||
|
|

start [/forum/topic.php?fid=28&fpage=94&tid=1521808]: |
0ms |
get settings: |
11ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
87ms |
get topic data: |
13ms |
get forum data: |
4ms |
get page messages: |
61ms |
get tp. blocked users: |
2ms |
| others: | 264ms |
| total: | 471ms |

| 0 / 0 |
