Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 зубодробительная задачка с sp_OAGetProperty  [new]
jsmirnoww
Member

Откуда: Москва
Сообщений: 132
есть процедура
create PROCEDURE [dbo].[zz_LoadXMLFromFile] 
      @tcFileName             VARCHAR(4000),    
      @xml_output             xml OUTPUT
AS
BEGIN  
      SET NOCOUNT ON;      
      DECLARE @Obj int 
      DECLARE @Result int 
      DECLARE @HTTPStatus int 


      EXEC @Result = sp_OACreate 'MSXML2.XMLHttp', @Obj OUT 
 
      EXEC @Result = sp_OAMethod @Obj, 'open', NULL, 'GET', @tcFileName, false
      EXEC @Result = sp_OAMethod @Obj, 'setRequestHeader', NULL, 'Content-Type', 'application/x-www-form-urlencoded'
      EXEC @Result = sp_OAMethod @Obj, send, NULL, ''
      EXEC @Result = sp_OAGetProperty @Obj, 'status', @HTTPStatus OUT 

      declare @Tab table (x xml)

      insert into @tab
      EXEC @Result = sp_OAGetProperty @Obj, 'responseXML.xml'-- ,@XML output


      set @xml_output = (Select x from @tab) 
END


и скрипт для вызова:
      declare @xml_String xml
      declare @url varchar(250)
      SET NOCOUNT ON; 

      select @url = '...'

      exec zz_LoadXMLFromFile  
                  @url, 
                  @xml_String output

      select @xml_String


если запускаю скрипт из mssms то всё отрабатывает хорошо и возвращает xml на ~103Kb
если этот же скрипт заворачиваю в JOB, то получаю ошибку:
MS SQL Server
Executed as user: GAZCOMPLECT\AS-SQL. XML parsing: line 2, character 489, '>' expected [SQLSTATE 42000] (Error 9412). The step failed.


Хелп, плз, весь мозг сломал уже. надо, что бы работало из JOB'a

Сообщение было отредактировано: 14 фев 17, 14:27
10 янв 12, 15:28    [11879447]     Ответить | Цитировать Сообщить модератору
 Re: зубодробительная задачка с sp_OAGetProperty  [new]
jsmirnoww
Member

Откуда: Москва
Сообщений: 132
вылетает на втором sp_OAGetProperty:
EXEC @Result = sp_OAGetProperty @Obj, 'responseXML.xml'
10 янв 12, 15:30    [11879479]     Ответить | Цитировать Сообщить модератору
 Re: зубодробительная задачка с sp_OAGetProperty  [new]
jsmirnoww
Member

Откуда: Москва
Сообщений: 132
могу в личку кинуть урл для опытов.
10 янв 12, 15:50    [11879679]     Ответить | Цитировать Сообщить модератору
 Re: зубодробительная задачка с sp_OAGetProperty  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31354
jsmirnoww
Хелп, плз, весь мозг сломал уже. надо, что бы работало из JOB'a
Вы 6 раз получили @Result, но ни разу его не использовали. Зачем получаете тогда, для прикола?

Соответственно, нужно посмотреть, что в @tab, может, там нет никакого XML-я?
10 янв 12, 16:00    [11879791]     Ответить | Цитировать Сообщить модератору
 Re: зубодробительная задачка с sp_OAGetProperty  [new]
Glory
Member

Откуда:
Сообщений: 104760
jsmirnoww
вылетает на втором sp_OAGetProperty:

Т.е. это сообщение об ошибке такое - "Вылетаю на втором !" ?
Полученное через sp_OAGetErrorInfo ?
10 янв 12, 16:01    [11879797]     Ответить | Цитировать Сообщить модератору
 Re: зубодробительная задачка с sp_OAGetProperty  [new]
jsmirnoww
Member

Откуда: Москва
Сообщений: 132
alexeyvg
jsmirnoww
Хелп, плз, весь мозг сломал уже. надо, что бы работало из JOB'a
Вы 6 раз получили @Result, но ни разу его не использовали. Зачем получаете тогда, для прикола?

наверное для прикола. это не мой код.

alexeyvg
Соответственно, нужно посмотреть, что в @tab, может, там нет никакого XML-я?

если запускать из mssms, то на выходе получаю XML, следовательно @tab заполняется и всё работает.
если этот же скрипт вставить как шаг JOB'a, то вылетает с ошибкой

Glory
jsmirnoww
вылетает на втором sp_OAGetProperty:

Т.е. это сообщение об ошибке такое - "Вылетаю на втором !" ?
Полученное через sp_OAGetErrorInfo ?


в процедуре два раза вызывается sp_OAGetErrorInfo.
ошибка возникает именно на втором. если его закомментировать, то ошибки не возникает, но и результата я тоже не получаю.

есть подозрение, что xml обрезается и становится не валидным. но почему при запуске процедуры из JOB'a???
10 янв 12, 16:13    [11879926]     Ответить | Цитировать Сообщить модератору
 Re: зубодробительная задачка с sp_OAGetProperty  [new]
Glory
Member

Откуда:
Сообщений: 104760
jsmirnoww
в процедуре два раза вызывается sp_OAGetErrorInfo.

Да что вы говорите !
И вы даже получили результаты этих вызовов ?

jsmirnoww
ошибка возникает именно на втором. если его закомментировать, то ошибки не возникает, но и результата я тоже не получаю.

Т.е. вы настаиваете, что оригинальный текст ошибки все же "Вылетаю на втором" ?
10 янв 12, 16:22    [11880011]     Ответить | Цитировать Сообщить модератору
 Re: зубодробительная задачка с sp_OAGetProperty  [new]
jsmirnoww
Member

Откуда: Москва
Сообщений: 132
Glory
jsmirnoww
в процедуре два раза вызывается sp_OAGetErrorInfo.

Да что вы говорите !
И вы даже получили результаты этих вызовов ?

опечатался: два раза вызывается sp_OAGetProperty. и причиной ошибки является второй вызов.

Glory
jsmirnoww
ошибка возникает именно на втором. если его закомментировать, то ошибки не возникает, но и результата я тоже не получаю.

Т.е. вы настаиваете, что оригинальный текст ошибки все же "Вылетаю на втором" ?

текст ошибки был приведён в первом сообщении:
ms sql server
XML parsing: line 2, character 489, '>' expected [SQLSTATE 42000] (Error 9412). The step failed
10 янв 12, 16:35    [11880137]     Ответить | Цитировать Сообщить модератору
 Re: зубодробительная задачка с sp_OAGetProperty  [new]
Glory
Member

Откуда:
Сообщений: 104760
jsmirnoww
текст ошибки был приведён в первом сообщении:
ms sql server
XML parsing: line 2, character 489, '>' expected [SQLSTATE 42000] (Error 9412). The step failed

Где обработка ошибки вызова sp_OAGetProperty ?
10 янв 12, 16:47    [11880239]     Ответить | Цитировать Сообщить модератору
 Re: зубодробительная задачка с sp_OAGetProperty  [new]
jsmirnoww
Member

Откуда: Москва
Сообщений: 132
Glory
Где обработка ошибки вызова sp_OAGetProperty ?

Зачем она Вам? Я номер и текст сообщения об ошибке вижу в логе выполнения job'a.
10 янв 12, 16:54    [11880288]     Ответить | Цитировать Сообщить модератору
 Re: зубодробительная задачка с sp_OAGetProperty  [new]
Glory
Member

Откуда:
Сообщений: 104760
jsmirnoww
Зачем она Вам? Я номер и текст сообщения об ошибке вижу в логе выполнения job'a.

И вы так уверены, что это ошибка вызова sp_OAGetProperty ?
10 янв 12, 17:30    [11880527]     Ответить | Цитировать Сообщить модератору
 Re: зубодробительная задачка с sp_OAGetProperty  [new]
jsmirnoww
Member

Откуда: Москва
Сообщений: 132
оформил второй вызов этой процедуры так:
begin try 

      insert into @tab
      EXEC @Result = sp_OAGetProperty @Obj, 'responseXML.xml'-- ,@XML output
end try
begin catch
    declare @err VARCHAR(4000)
    SELECT
        @err=
            'ERROR_NUMBER: '+convert(varchar(4000),ERROR_NUMBER())
            +'    ERROR_SEVERITY: '+convert(varchar(4000),ERROR_SEVERITY())
            +'    ERROR_STATE: '+convert(varchar(4000),ERROR_STATE())
            +'    ERROR_PROCEDURE: '+convert(varchar(4000),ERROR_PROCEDURE())
            +'    ERROR_LINE: '+convert(varchar(4000),ERROR_LINE())
            +'    ERROR_MESSAGE: '+ERROR_MESSAGE() 
        print @err
end catch

при срабатывании обработчика исключения возвращается текст
ms sql server
ERROR_NUMBER: 9412
ERROR_SEVERITY: 16
ERROR_STATE: 1
ERROR_PROCEDURE: sp_OAGetProperty
ERROR_LINE: 1
ERROR_MESSAGE: XML parsing: line 2, character 489, '>' expected

пробовал табличную переменну заменить на временну таблицу - результат тот же

обработчик сработал при вызове из JOB'a и не сработал при вызове из mssms.
можно в этом случае сказать, что проблема локализована и причиной ошибки является именно этот вызов?
...

убрал insert into #tab - ошибки нет!!!
в чём причина?
10 янв 12, 18:07    [11880753]     Ответить | Цитировать Сообщить модератору
 Re: зубодробительная задачка с sp_OAGetProperty  [new]
Glory
Member

Откуда:
Сообщений: 104760
jsmirnoww
убрал insert into #tab - ошибки нет!!!
в чём причина?

В том, что вы полагаете читаемое вами содержимое валидным XML-ем. А оно вовсе не валидный XML.
10 янв 12, 18:09    [11880766]     Ответить | Цитировать Сообщить модератору
 Re: зубодробительная задачка с sp_OAGetProperty  [new]
jsmirnoww
Member

Откуда: Москва
Сообщений: 132
Glory
jsmirnoww
убрал insert into #tab - ошибки нет!!!
в чём причина?

В том, что вы полагаете читаемое вами содержимое валидным XML-ем. А оно вовсе не валидный XML.

загонял этот xml в 2 валидатора - ошибок не было.
заменил тип данных во временной таблице с XML на VARCHAR(max) - ошибка та же самая
почему процедура без проблем отрабатывает при вызове из mssms?
10 янв 12, 18:21    [11880815]     Ответить | Цитировать Сообщить модератору
 Re: зубодробительная задачка с sp_OAGetProperty  [new]
Glory
Member

Откуда:
Сообщений: 104760
jsmirnoww
загонял этот xml в 2 валидатора - ошибок не было.

"Этот xml" - это какой ? Который вы прочитали из sp_OAGetProperty ? Или который скачали отдельно, другими средствами ?
10 янв 12, 18:23    [11880830]     Ответить | Цитировать Сообщить модератору
 Re: зубодробительная задачка с sp_OAGetProperty  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2421
jsmirnoww,

дюже вы упёртый однако, вам же нцать раз намекнули, что тайна вашей беды хранится в результатах работы sp_OAGetErrorInfo,
а вы упорно топчетесь на месте придумывая все новые способы как интереснее это место истоптать.:))
10 янв 12, 18:24    [11880834]     Ответить | Цитировать Сообщить модератору
 Re: зубодробительная задачка с sp_OAGetProperty  [new]
jsmirnoww
Member

Откуда: Москва
Сообщений: 132
Glory
jsmirnoww
загонял этот xml в 2 валидатора - ошибок не было.

"Этот xml" - это какой ? Который вы прочитали из sp_OAGetProperty ? Или который скачали отдельно, другими средствами ?

который получал sp_OAGetProperty @Obj, 'responseXML.xml', запуская из mssms
10 янв 12, 18:31    [11880868]     Ответить | Цитировать Сообщить модератору
 Re: зубодробительная задачка с sp_OAGetProperty  [new]
jsmirnoww
Member

Откуда: Москва
Сообщений: 132
WarAnt
jsmirnoww,
дюже вы упёртый однако, вам же нцать раз намекнули, что тайна вашей беды хранится в результатах работы sp_OAGetErrorInfo,
а вы упорно топчетесь на месте придумывая все новые способы как интереснее это место истоптать.:))

вывел @Result после каждого вызова sp_OAGetProperty и sp_OAMethod, везде 0
вызвал sp_OAGetErrorInfo после каждого вызова sp_OAGetProperty и sp_OAMethod - всё выполняется без ошибок, а результат плачевный.

нашел вот что:
1. если вызвать
EXEC @Result = sp_OAGetProperty @Obj, 'responseXML.xml'
без insert into перед ним, в возвращенном наборе данных XML обрывается на 64Кб

2. если использовать конструкцию:
      create table #tab (x  NVARCHAR(max))
      insert into #tab
      EXEC @Result = sp_OAGetProperty @Obj, 'responseXML.xml'--,@XML output
      select * from #tab
, то выходной xml тоже обрывается на 64Кб

3. а в этих двух случаях:
      create table #tab (x  xml)
      insert into #tab
      EXEC @Result = sp_OAGetProperty @Obj, 'responseXML.xml'--,@XML output
      select * from #tab

и
      declare @xml_output             xml

      create table #tab (x  NVARCHAR(max))

      insert into #tab
      EXEC @Result = sp_OAGetProperty @Obj, 'responseXML.xml'--,@XML output

      Select @xml_output=x from #tab
      select @xml_output

выводится необрезанный, валидный xml - 103Кб.

64Кб - это ограничение MSXML2.XMLHttp? (пробовал 3 и 6 версии - результат тот же)
как они превращаются в 103Кб?
при конвертации в тип XML пустые теги <teg></teg> сокращаются до <teg /> - т.е. размер должен уменьшаться
мозг разрушен.
почему так?
и как это связано с вызовом из JOB'a?
я понимаю, что топчусь на месте. дайте мне пинка в нужном направлении, плз.
11 янв 12, 10:24    [11883111]     Ответить | Цитировать Сообщить модератору
 Re: зубодробительная задачка с sp_OAGetProperty  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31354
jsmirnoww
64Кб - это ограничение MSXML2.XMLHttp?
Нет, вы же пишете, что "выводится необрезанный, валидный xml - 103Кб."

jsmirnoww
мозг разрушен.
почему так?
и как это связано с вызовом из JOB'a?
я понимаю, что топчусь на месте. дайте мне пинка в нужном направлении, плз.
Так это утверждение относится к вызову из JOB или нет?
jsmirnoww
3. а в этих двух случаях:
...
выводится необрезанный, валидный xml - 103Кб.
11 янв 12, 10:46    [11883232]     Ответить | Цитировать Сообщить модератору
 Re: зубодробительная задачка с sp_OAGetProperty  [new]
jsmirnoww
Member

Откуда: Москва
Сообщений: 132
alexeyvg
jsmirnoww
64Кб - это ограничение MSXML2.XMLHttp?
Нет, вы же пишете, что "выводится необрезанный, валидный xml - 103Кб."

он таким становится после преобразования к типу xml. если вывести результат как nvarchar(max), то получим 64Кб

alexeyvg
Так это утверждение относится к вызову из JOB или нет?
jsmirnoww
3. а в этих двух случаях:
...
выводится необрезанный, валидный xml - 103Кб.

нет это из ssms
11 янв 12, 11:07    [11883360]     Ответить | Цитировать Сообщить модератору
 Re: зубодробительная задачка с sp_OAGetProperty  [new]
Slava_Nik
Member

Откуда: из России
Сообщений: 888
jsmirnoww,
помню была такая же проблема, то что шло обрезание данных
вот как решил не помню и и не нашел :(
если не ошибаюсь надо работать с nvarchar(max) и соединять данные.
11 янв 12, 11:18    [11883453]     Ответить | Цитировать Сообщить модератору
 Re: зубодробительная задачка с sp_OAGetProperty  [new]
jsmirnoww
Member

Откуда: Москва
Сообщений: 132
Slava_Nik
jsmirnoww,
помню была такая же проблема, то что шло обрезание данных
вот как решил не помню и и не нашел :(
если не ошибаюсь надо работать с nvarchar(max) и соединять данные.

а что с чем соединять? насколько я понимаю приведение к нормальному виду происходит в момент преобразования к типу xml и только при вызове из ssms. из job'a же этого не происходит. я не понимаю природу этих преобразований, поэтому и "топчусь на месте". может подскажете статейку какую-нибудь на эту тему. или другой способ, которым можно получить ответ от http сервера?
11 янв 12, 13:06    [11884374]     Ответить | Цитировать Сообщить модератору
 Re: зубодробительная задачка с sp_OAGetProperty  [new]
Glory
Member

Откуда:
Сообщений: 104760
jsmirnoww
и только при вызове из ssms. из job'a же этого не происходит.

Надо полагать, что вы в sms и агент в job-е работают под разными логинами
11 янв 12, 13:15    [11884468]     Ответить | Цитировать Сообщить модератору
 Re: зубодробительная задачка с sp_OAGetProperty  [new]
jsmirnoww
Member

Откуда: Москва
Сообщений: 132
Glory
jsmirnoww
и только при вызове из ssms. из job'a же этого не происходит.

Надо полагать, что вы в sms и агент в job-е работают под разными логинами

да. какая настройка пользователя на это влияет?
11 янв 12, 13:20    [11884529]     Ответить | Цитировать Сообщить модератору
 Re: зубодробительная задачка с sp_OAGetProperty  [new]
Glory
Member

Откуда:
Сообщений: 104760
jsmirnoww
какая настройка пользователя на это влияет?

это может влиять на политики windows. Поскольку вы доступаетесь в внешнему ресурсу
Вы мониторили траффик туда и обратно для обеих вызовов ?
11 янв 12, 13:25    [11884613]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить