Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / [игнор отключен] [закрыт для гостей] / Получить переменную типа ГЛОБ из Оракла / 7 сообщений из 7, страница 1 из 1
17.11.2010, 14:58
    #36961817
kashitsina
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить переменную типа ГЛОБ из Оракла
Добрый день.

Люди, очень прошу - помогите плиз, сама уже всю голову сломала:(

Без отрыва несколько дней изучаю как можно из 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), все время ругается.

Подскажите, как быть в этой ситуации?
Может быть кто-то сталкивался, и такая ошибка возникает по другим причинам, не из за несовместимости типов?
Может быть через какой то другой компонент, не АДО, подключаться к базе и запускать там процедуру?
Или может быть знатоки связи с Оракл подскажут как можн получить переменную типа ГЛОБ? или какой то другой тип в Оракл, в которуй можно передавать огромную строку?
...
Рейтинг: 0 / 0
17.11.2010, 16:17
    #36962080
Программист 1с
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить переменную типа ГЛОБ из Оракла
А если уменьшить длину строки - все проходит?

А если туже процедуру выполнять из оракла - все проходит?

А если в 1с в региональных настройках поменять значение символа разделителя (. на ,)?
...
Рейтинг: 0 / 0
18.11.2010, 10:17
    #36963168
kashitsina
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить переменную типа ГЛОБ из Оракла
Программист 1с,

длину строки не уменьшить, необходимо принимать всю, какая они есть.

на стороне Оракл процедура выполняется, программисты это видят по логам

символ разделителя поменяла - ничего не изменилось. А как это могло повлиять на прием строки?:)
...
Рейтинг: 0 / 0
18.11.2010, 10:32
    #36963201
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
...
Рейтинг: 0 / 0
18.11.2010, 10:56
    #36963263
kashitsina
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить переменную типа ГЛОБ из Оракла
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с, при вызове процедуры или обявлении переменных?
...
Рейтинг: 0 / 0
18.11.2010, 11:18
    #36963321
KuzEv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить переменную типа ГЛОБ из Оракла
Какой результат вы получаете при запуске кода в SQL Plus (или как он у Вас там называется)?
...
Рейтинг: 0 / 0
20.11.2010, 23:53
    #36967832
PA
PA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить переменную типа ГЛОБ из Оракла
авторПолучить переменную типа ГЛОБ
Видимо, всё-таки CLOB.

Далее, MS ODBC не поддерживает BLOB типы.
Надо использовать OraOLEDB провайдера и перед выполнением команды включать свойство SPPrmsLOB (после выполнения выключать).
Вот здесь есть примеры.
...
Рейтинг: 0 / 0
Форумы / [игнор отключен] [закрыт для гостей] / Получить переменную типа ГЛОБ из Оракла / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]