Я пытаюсь передать двоичные данные из SQL Server в столбец Oracle LONG RAW. У меня есть связанный сервер, созданный на SQL Server, который подключается к серверу Oracle. У меня есть хранимая процедура на стороне Oracle, которую я пытаюсь вызвать с SQL Server. Кажется, я не могу передать двоичный файл в хранимую процедуру. Я пробовал менять типы с и на; однако данные в конечном итоге должны оказаться в столбце LONG RAW. У меня есть контроль над хранимой процедурой Oracle и кодом SQL Server, но у меня нет контроля над предопределенной структурой таблицы Oracle.
varbinary (max) -> long raw ORA-01460: запрошено нереализованное или необоснованное преобразование
varbinary (max) -> blob PLS-00306: неправильное количество или типы аргументов при вызове ADDDOC
varbinary -> long raw Без ошибок, но происходит усечение или повреждение данных
Varbinary (max) работает, если я установил @doc = null.
Ниже представлена процедура Oracle и SQL Server.
Оракул:
CREATE OR REPLACE
PROCEDURE ADDDOC (param1 IN LONG RAW)
AS
BEGIN
-- insert param1 into a LONG RAW column
DBMS_OUTPUT.PUT_LINE('TEST');
END ADDDOC;
SQL Server:
declare @doc varbinary(max)
select top 1 @doc = Document from Attachments
execute ('begin ADDDOC(?); end;', @doc) at ORACLE_DEV
-- tried this too, same error
--execute ('begin ADDDOC(utl_raw.cast_to_raw(?)); end;', @doc) at ORACLE_DEV
Я также попытался создать запись в таблице Oracle Documents, а затем обновить поле LONG RAW с SQL Server без вызова хранимой процедуры, но запрос просто запускается, запускается, запускается и запускается ...
--already created record and got the Id of the record I want to put the data in
--hard coding for this example
declare @attachmentId, @documentId
set @attachmentId = 1
set @documentId = 1
update ORACLE_DEV..MYDB.Documents
set Document = (select Document from Attachments where Id = @attachmentId)
where DocumentId=@documentId
LONG
иLONG RAW
были отключены с Oracle 8.0 дней ~ 20 лет назад. Они были обесценены, потому что поддерживать их было королевской головной болью, и относительно небольшое количество API-интерфейсов способно с ними справиться. Возможно, кто-нибудь сможет прийти и предложить способ подключения к связанному серверу для поддержкиLONG RAW
, но я не был бы шокирован, если бы вам пришлось использовать другой подход. - person Justin Cave   schedule 08.02.2014LONG
илиLONG RAW
. Единственное разумное совпадение дляvarbinary
SQL Server -BLOB
. - person a_horse_with_no_name   schedule 08.02.2014