Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 sp_executesql and Oracle  [new]
hosTuk
Member

Откуда:
Сообщений: 455
declare @exStr nvarchar(max), @res int

set @exStr =
'
declare res int;
begin
res := 1;
end;
'
/*
exec (@exStr, @res output) at OracleServer
select @re
*/

exec OracleServer...sp_executesql @exStr

Ошибка
Поставщик OLE DB "MSDAORA" для связанного сервера "OracleServer" вернул сообщение "Произошла одна или несколько ошибок во время обработки команды.".
Поставщик OLE DB "MSDAORA" для связанного сервера "OracleServer" вернул сообщение "Синтаксическая ошибка в управляющей последовательности ODBC {call...}.".
Location:	 memilb.cpp:1671
Expression:	 pilb->m_cRef == 0
SPID:		 69
Process ID:	 1972
Сообщение 7212, уровень 17, состояние 1, строка 15
Не удалось выполнить процедуру "sp_executesql" на удаленном сервере "OracleServer".
Сообщение 3624, уровень 20, состояние 1, строка 15
Ошибка проверки системного подтверждения. Дополнительные сведения содержатся в журнале ошибок SQL Server. Обычно ошибка подтверждения вызвана ошибкой программного обеспечения или повреждением данных. Для проверки повреждения базы данных попробуйте запустить команду DBCC CHECKDB. Если во время установки вы согласились на отправку дампов в корпорацию Майкрософт, будет отправлен небольшой дамп. Обновление может быть доступно в последнем пакете обновления Майкрософт или в исправлении QFE службы поддержки.
Сообщение 0, уровень 20, состояние 0, строка 0
При выполнении текущей команды возникла серьезная ошибка.. При наличии результатов они должны быть аннулированы.
30 май 11, 17:03    [10733578]     Ответить | Цитировать Сообщить модератору
 Re: sp_executesql and Oracle  [new]
hosTuk
Member

Откуда:
Сообщений: 455
Или с линкед сервер такое не работает.
Тогда не могу вернуть значение запроса из Oracle

declare @exStr nvarchar(max), @res int

	set @exStr = 
	'
	declare res int;
	begin
	  res := 1;
	  ? := res;
	end;
	'

exec (@exStr, @res output) at OracleServer
select @res

Выдает
Поставщик OLE DB "MSDAORA" для связанного сервера "OracleServer" вернул сообщение "ORA-01008: not all variables bound
".

(строк обработано: 1)
Сообщение 7215, уровень 17, состояние 1, строка 13
Не удалось выполнить инструкцию на удаленном сервере "OracleServer".

30 май 11, 17:12    [10733659]     Ответить | Цитировать Сообщить модератору
 Re: sp_executesql and Oracle  [new]
Glory
Member

Откуда:
Сообщений: 104751
А в Oracle уже создали процедуру sp_executesql ?
30 май 11, 17:22    [10733724]     Ответить | Цитировать Сообщить модератору
 Re: sp_executesql and Oracle  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
	declare res int;
	begin
	  res := 1;
	  ? := res;
	end;


такое у вас не пройдёт, передача параметра не произойдёт
30 май 11, 17:24    [10733740]     Ответить | Цитировать Сообщить модератору
 Re: sp_executesql and Oracle  [new]
hosTuk
Member

Откуда:
Сообщений: 455
Glory,

Ладно хорошо. Видимо не создали.
Но к решению задачи передачи параметра в мсскл я не стал ближе.
30 май 11, 17:27    [10733763]     Ответить | Цитировать Сообщить модератору
 Re: sp_executesql and Oracle  [new]
hosTuk
Member

Откуда:
Сообщений: 455
Konst_One,

	declare res int;
	begin
	  res := 1;
	  ? := res;
	end;

Именно такое у меня проходило, с линкованным сервером, где провайдер был OraOLEDB.Oracle
Запрос толькой такой был
CREATE procedure [generalAggregate].[spChangeAttribute]
(@id        numeric(38,0)
,@NAMETABLE VARCHAR(255)  
,@NAMEFIELD VARCHAR(255)  
,@NEWVALUE  VARCHAR(255)
,@Aggregate varchar(255))
/*
  -100    Нет таких параметров p_NAMETABLE, p_NAMEFIELD, p_Aggregate, которые дают не пустую выборку. 
          Неправильное формирование имени объекта;
  
  -101    Неправильный параметр агрегата p_Aggregate;
  
  -103    Ошибка произошла при выполнении инструкции UPDATE;
  
  -1      Прочие ошибки;
  
  0       Выполнение успешно завершено;
*/
as
begin
	declare @strId varchar(100), @exStr varchar(max), @res int
	set @res = 1
	set @strId = cast(@id as varchar(100))

	set @NAMETABLE	= QUOTENAME(@NAMETABLE, '''')
	set @NAMEFIELD	= QUOTENAME(@NAMEFIELD, '''')
	set @NEWVALUE	= QUOTENAME(@NEWVALUE, '''')
	set @Aggregate	= QUOTENAME(@Aggregate, '''')

	set @exStr = 
	'
	declare 
	  res number;
	begin
	  dbms_output.enable;
	  res := a123.func1('+@strId+','
							+@NAMETABLE+','
							+@NAMEFIELD+','
							+@NEWVALUE+','
							+@Aggregate+');

	 ? := res;

	end;
	'
	--select @exStr
	exec(@exStr, @res output) at TEST_XE"
	return @res
end

Но сегодня эти линкованные сервера вдруг стали сообщать мне
При выполнении инструкции или пакета Transact-SQL возникло исключение. (Microsoft.SqlServer.ConnectionInfo)

Не удалось проинициализировать объект источника данных поставщика OLE DB "OraOLEDB.Oracle" для связанного сервера "TEST_XE".
Поставщик OLE DB "OraOLEDB.Oracle" для связанного сервера "TEST_XE" вернул сообщение "". (.Net SqlClient Data Provider)
30 май 11, 17:32    [10733818]     Ответить | Цитировать Сообщить модератору
 Re: sp_executesql and Oracle  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
провайдеры от микрософта и от оракла имеют разную функциональность
30 май 11, 17:34    [10733834]     Ответить | Цитировать Сообщить модератору
 Re: sp_executesql and Oracle  [new]
Glory
Member

Откуда:
Сообщений: 104751
Что-ьл случилось со связанным сервером TEST_XE. Или с внешними компонентами, которые он использует
30 май 11, 17:43    [10733938]     Ответить | Цитировать Сообщить модератору
 Re: sp_executesql and Oracle  [new]
hosTuk
Member

Откуда:
Сообщений: 455
Konst_One
провайдеры от микрософта и от оракла имеют разную функциональность

И...как, есть ли возможность вернуть, результат выполнения процедуры при использовании MSDAORA?
30 май 11, 21:31    [10735085]     Ответить | Цитировать Сообщить модератору
 Re: sp_executesql and Oracle  [new]
hosTuk
Member

Откуда:
Сообщений: 455
Glory
Что-ьл случилось со связанным сервером TEST_XE. Или с внешними компонентами, которые он использует

Смотрел логи, так ничего и не понял, что случилось. + падали репликации с издателем на оракле, точное сообщение сейчас не скажу, ну там что-то про "обновите издателя и про версию mssql сервера, что она с чем-то не совпадает"
30 май 11, 21:34    [10735098]     Ответить | Цитировать Сообщить модератору
 Re: sp_executesql and Oracle  [new]
hosTuk
Member

Откуда:
Сообщений: 455
up.
Кто знает как из оракла вернуть результат выполнения процедуры.
31 май 11, 09:10    [10736392]     Ответить | Цитировать Сообщить модератору
 Re: sp_executesql and Oracle  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
https://www.sql.ru/forum/actualthread.aspx?bid=1&tid=13123&pg=2#938415
31 май 11, 09:32    [10736473]     Ответить | Цитировать Сообщить модератору
 Re: sp_executesql and Oracle  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Наглядно и пару советов: 10177955
31 май 11, 10:28    [10736749]     Ответить | Цитировать Сообщить модератору
 Re: sp_executesql and Oracle  [new]
hosTuk
Member

Откуда:
Сообщений: 455
Mnior
Наглядно и пару советов: 10177955

Посмотрел, вроде бы по примерам все понятно.

Но выдает тоже самое
Поставщик OLE DB "MSDAORA" для связанного сервера "OracleServer" вернул сообщение "ORA-01008: not all variables bound
".
Процедура "spChangeAttribute" попыталась вернуть недопустимое значение NULL для состояния. Вместо этого будет возвращено значение 0.

Вызов
declare @a int;
 execute @a =  generalAggregate.spChangeAttribute 
	348,
	'TB_STWK_GH_HEA',
	'GHHEA_TAPPED_TON',
	'33.6024322509766','DSP'
 select @a 

ALTER procedure [generalAggregate].[spChangeAttribute]
(@id        numeric(38,0)
,@NAMETABLE VARCHAR(255)  
,@NAMEFIELD VARCHAR(255)  
,@NEWVALUE  VARCHAR(255)
,@Aggregate varchar(255))
/*
  -100    Нет таких параметров p_NAMETABLE, p_NAMEFIELD, p_Aggregate, которые дают не пустую выборку. 
          Неправильное формирование имени объекта;
  
  -101    Неправильный параметр агрегата p_Aggregate;
  
  -103    Ошибка произошла при выполнении инструкции UPDATE;
  
  -1      Прочие ошибки;
  
  0       Выполнение успешно завершено;
*/
as
begin
	declare @strId varchar(100), @exStr varchar(max), @res int
	set @res = null
	set @strId = cast(@id as varchar(100))

	set @NAMETABLE	= QUOTENAME(@NAMETABLE, '''')
	set @NAMEFIELD	= QUOTENAME(@NAMEFIELD, '''')
	set @NEWVALUE	= QUOTENAME(@NEWVALUE, '''')
	set @Aggregate	= QUOTENAME(@Aggregate, '''')

	set @exStr = 
	'
	begin
	  dbms_output.enable;
	  :res := aaa.func1('+@strId+','
							+@NAMETABLE+','
							+@NAMEFIELD+','
							+@NEWVALUE+','
							+@Aggregate+');	  
	end;
	'

	--print @exStr
	--select @exStr
	exec(@exStr, @res output) at OracleServer
	return @res
end
31 май 11, 12:19    [10737681]     Ответить | Цитировать Сообщить модератору
 Re: sp_executesql and Oracle  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
Also, each provider has its own way of doing binds. The Oracle provider uses Bind By Position as the default but can be made to use Bind By Name. The Microsoft provider does Bind By Name. That may or may not be relevant.

ищите на оракле ответы
31 май 11, 12:30    [10737780]     Ответить | Цитировать Сообщить модератору
 Re: sp_executesql and Oracle  [new]
hosTuk
Member

Откуда:
Сообщений: 455
Konst_One
Also, each provider has its own way of doing binds. The Oracle provider uses Bind By Position as the default but can be made to use Bind By Name. The Microsoft provider does Bind By Name. That may or may not be relevant.

ищите на оракле ответы


На оракле, в смысле в подфоруме оракла поспрашивать? или самому из субд как-то можно узнать, в каком виде параметры надо передавать.
Все как хитро, придумано.That may or may not be relevant
31 май 11, 12:55    [10738012]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить