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

Откуда:
Сообщений: 70
Приветствую.
Столкнулся с необходимостью вызова с ms sql хранимой процедуры, которая находится на Oracle и имеет входной параметр табличного типа. Запрос выполняю через linked-сервер "DWH2". Код, который выполняю на MS SQL:

if object_id('tempdb..#tmp_xml_table') is not null
       drop table #tmp_xml_table

create table #tmp_xml_table
(
       ID_LOAD int,
       CAT_NAME varchar(1000),
       CAT_NUM varchar(10),
       CAT_PERSON_TYPE varchar(2),
       CAT_BIRTH_DATE varchar(10),
       CAT_DESCRIPTION varchar(1000),
       CAT_ADDRESS varchar(2000),
       CAT_RESOLUTION varchar(50),
       CAT_BIRTH_PLACE varchar(500),
       CAT_PASSPORT varchar(1000),
       CAT_ID bigint,--varchar(30),
       ORG_NAME varchar(500),
       FAM varchar(100),
       NAME varchar(100),
       OTCH varchar(100),
       BIRTH_DATE datetime2,
       TYPE_DOC varchar(200),
       SER_DOC varchar(30),
       NUM_DOC varchar(30),
       DATE_DOC datetime2
)

-- вставка данных в #таблицу
insert into #tmp_xml_table
select * from _tmp

-- вызов хранимой процедуры Oracle с параметром табличного типа
exec ('BEGIN PKG_DC_LOAD.p_ins_dc_as_table(?); END;', #tmp_xml_table) at DWH2;


в Oracle вызывается хранимая процедура:
  PROCEDURE p_ins_dc_rfm_terr_as_table(
    p_PARAM_TABLE IN TABLE_TYPE
  );


Возвращается такая ошибка:
(4622 row(s) affected)
Поставщик OLE DB "OraOLEDB.Oracle" для связанного сервера "DWH2" вернул сообщение "ORA-06550: Строка 1, столбец 7:
PLS-00306: ошибочно число или типы аргументов при обращении к 'P_INS_DC_AS_TABLE'
ORA-06550: Строка 1, столбец 7:
PL/SQL: Statement ignored".
Msg 7215, Level 17, State 1, Line 31
Не удалось выполнить инструкцию на удаленном сервере "DWH2".


Вопрос:
Можно ли вообще передавать таблицу в качестве входного параметра или нужно писать какую-то обёртку в сборке или коде C# ?
Меня интересует реализация именно на MS SQL.
Заранее благодарен за ответы
8 дек 15, 14:53    [18530115]     Ответить | Цитировать Сообщить модератору
 Re: Вызов ХП oracle с табличным взходным параметром из-под ms sql  [new]
Glory
Member

Откуда:
Сообщений: 104751
mikka sikorsky
Можно ли вообще передавать таблицу в качестве входного параметра

В хелпе Оракла разве нет примеров, как вызывать вашу p_ins_dc_rfm_terr_as_table с параметрами ?
8 дек 15, 15:00    [18530169]     Ответить | Цитировать Сообщить модератору
 Re: Вызов ХП oracle с табличным взходным параметром из-под ms sql  [new]
mikka sikorsky
Member

Откуда:
Сообщений: 70
Забыл указать, что в Oracle объявлены типы:
create or replace TYPE IMPORT_TYPE AS OBJECT 
( 
	ID_LOAD			NUMBER,
	CAT_NAME		VARCHAR2(1000 CHAR),
	CAT_NUM			VARCHAR2(10 CHAR),
	CAT_PERSON_TYPE		VARCHAR2(2 CHAR),
	CAT_BIRTH_DATE		VARCHAR2(10 CHAR),
	CAT_DESCRIPTION		VARCHAR2(1000 CHAR),
	CAT_ADDRESS		VARCHAR2(2000 CHAR),
	CAT_RESOLUTION		VARCHAR2(50 CHAR),
	CAT_BIRTH_PLACE		VARCHAR2(500 CHAR),
	CAT_PASSPORT		VARCHAR2(1000 CHAR),
	CAT_ID			VARCHAR2(30 CHAR),
	ORG_NAME		VARCHAR2(500 CHAR),
	FAM			VARCHAR2(100 CHAR),
	NAME			VARCHAR2(100 CHAR),
	OTCH			VARCHAR2(100 CHAR),
	BIRTH_DATE		DATE,
	TYPE_DOC		VARCHAR2(200 CHAR),
	SER_DOC			VARCHAR2(30 CHAR),
	NUM_DOC			VARCHAR2(30 CHAR),
	DATE_DOC		DATE
)

и
create or replace TYPE TABLE_TYPE 
AS TABLE OF IMPORT_TYPE;
8 дек 15, 15:00    [18530170]     Ответить | Цитировать Сообщить модератору
 Re: Вызов ХП oracle с табличным взходным параметром из-под ms sql  [new]
mikka sikorsky
Member

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

Искал и не нашёл...
8 дек 15, 15:01    [18530173]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить