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

Откуда:
Сообщений: 28
Всем добрый день. Второй день бьюсь над задачей. Необходимо сделать из запроса ms sql выборку по таблице Оракла по определенному параметру. Пытался делать так:

SELECT
 table1.row1,
table1.row2,
table1.row3,
(select * from OPENQUERY(TRMBO,'SELECT ora_tab.name FROM DOCS@AAA ora_tab where ''' + table1.row3 + '''')) as "name doc"
FROM  table1


не пропускает, ругается на синтаксис (как я понял так разбивать строку нельзя...)

далее пробовал через функцию

USE [databasename]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER FUNCTION [dbo].[TestIt] (@acc_num varchar (50))
RETURNS varchar (50) 
AS BEGIN
declare @@result varchar (50);
declare @stm nvarchar (max);



SET @stm = '@@result = (select * from OPENQUERY(TRMBO,''SELECT ora_tab.name FROM DOCS@AAA ora_tab where ''''''' + @acc_num + ''''''' ''))'

exec @stm

RETURN @@result


END


но select * from dbo.TestIt ('sss') возвращает Invalid object name 'dbo.TestIt'.

Гугли, но так и не нашел, как реализовать подобную задачу.

Кто сталкивался, подскажите как корректно написать запрос? Буду весьма признателен за помощь!
27 мар 14, 17:16    [15796263]     Ответить | Цитировать Сообщить модератору
 Re: выборка данных из ORACLE через ms sql  [new]
Just_Serg
Member

Откуда:
Сообщений: 498
Делаю примерно так:

	declare @dt varchar(10)
	select	@dt = convert(varchar(10),convert(datetime, str(@ip_date)),104)
		
	-- наполняем таблицу информацией по сделкам
	exec(
		' 
		insert into 
			#table
		(
			pole1,
			pole2 
		)
		select	pole1	   ,
			pole2  
		from openquery(CONNSRV, ''select * from table(user.package.function(to_date('''''+ @dt +''''',''''dd.mm.yyyy'''')))'')'
	    )
27 мар 14, 17:31    [15796350]     Ответить | Цитировать Сообщить модератору
 Re: выборка данных из ORACLE через ms sql  [new]
chiffacff
Member

Откуда:
Сообщений: 28
Just_Serg,
спасибо за ответ! С передачей "внешней" переменной проблемы нету, а вот как передать, то что я получают во время выборки с других таблиц ms sql ?

SELECT
 table1.row1,
table1.row2,
table1.row3,
(select * from OPENQUERY(TRMBO,'SELECT ora_tab.name FROM DOCS@AAA ora_tab where ''' + table1.row3 + '''')) as "name doc"
FROM  table1
27 мар 14, 17:47    [15796468]     Ответить | Цитировать Сообщить модератору
 Re: выборка данных из ORACLE через ms sql  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
chiffacff
как передать, то что я получают во время выборки с других таблиц
Распределённые запросы?
Не занимайтесь ерундой.

Или запрос выполняется там или здесь. Поэтому пусть та или иная сторона передест все данные и "соединит" их где эффективнее.

Можно настроить линкед чтобы можно было делать запросы вида:
SELECT	*
FROM	TRMBO...ora_tab	OT
JOIN	dbo.table1	LT ON LT.Col1 = OT.Col2
Как правильно смотреть полные имена таблиц, и можно ли вообще, смотрите в соответствующем линкеде.

Скалярные функции - зло. (на самом деле это скалярные процедуры)
27 мар 14, 20:00    [15797077]     Ответить | Цитировать Сообщить модератору
 Re: выборка данных из ORACLE через ms sql  [new]
chiffacff
Member

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

А так:

SELECT
 table1.row1,
table1.row2,
table1.row3,
OT.name
JOIN select * from OPENQUERY(TRMBO,'SELECT name FROM DOCS@AAA ora_tab') OT on OT.ora_row = table1.row3
FROM  table1


ничего не находит.... хотя записи с подобными условия есть
28 мар 14, 13:56    [15800685]     Ответить | Цитировать Сообщить модератору
 Re: выборка данных из ORACLE через ms sql  [new]
chiffacff
Member

Откуда:
Сообщений: 28
Всмысле так:

SELECT
 table1.row1,
table1.row2,
table1.row3,
OT.name
JOIN select * from OPENQUERY(TRMBO,'SELECT name, ora_row  FROM DOCS@AAA ora_tab') OT on OT.ora_row = table1.row3
FROM  table1
28 мар 14, 13:58    [15800699]     Ответить | Цитировать Сообщить модератору
 Re: выборка данных из ORACLE через ms sql  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
chiffacff
Всмысле так:
SELECT
 table1.row1,
table1.row2,
table1.row3,
OT.name
JOIN select * from OPENQUERY(TRMBO,'SELECT name, ora_row  FROM DOCS@AAA ora_tab') OT on OT.ora_row = table1.row3
FROM  table1
ничего не находит.... хотя записи с подобными условия есть
Вы даёте повод сомневаться в ваших словах.
SELECT	T1.row1
,	T1.row2
,	T1.row3
,	OT.name
FROM	dbo.table1							T1
JOIN	OpenQuery(TRMBO,'SELECT name, ora_row  FROM DOCS@AAA ora_tab')	OT ON OT.ora_row = T1.row3
Я бы проверил какие данные приходят с оракала на скуль.
Возможно, как частенько бывает, и у вас проблемы к колейшинами и кракозябры.

Вы не спешите, 90% ошибок и неправильного понимания из-за спешки.
28 мар 14, 16:52    [15802274]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить