Я собираюсь объяснить вам мою проблему. Мне нужно преобразовать сценарий t-sql в сценарий pl/sql. В t-sql есть мой код:
CREATE TABLE #temp_tb ( temp_row nvarchar(max))
if @@error <> 0 goto lbl_end
DECLARE @bulk_cmd varchar(1000)
set @bulk_cmd = 'BULK INSERT #temp_tb FROM ''c:\Communication\Test\MSG_IN\'+'$(nomfic)'+''' WITH
(
CODEPAGE = ''RAW'',
ROWTERMINATOR = '''+CHAR(10)+''',
DATAFILETYPE = ''WIDECHAR''
)'
exec (@bulk_cmd)
if @@error <> 0 goto lbl_end
И после большого количества документов и форумов оракула я пишу это:
CREATE GLOBAL TEMPORARY TABLE temp_tb ( temp_row NCHAR(MAX)) ON COMMIT DELETE ROWS;
BEGIN
EXCEPTION
WHEN OTHERS THEN GOTO lbl_end;
END;
DECLARE bulk_cmd varchar2(1000);
bulk_cmd := 'BULK INSERT temp_tb FROM ''c:\Communication\Test\MSG_IN\'+'$(nomfic)'+''' WITH
(
CODEPAGE = ''RAW'',
ROWTERMINATOR = '''+CHAR(10)+''',
DATAFILETYPE = ''WIDECHAR''
)';
BEGIN
exec (bulk_cmd);
EXCEPTION
WHEN OTHERS THEN GOTO lbl_end;
END;
Но у меня здесь ошибка NCHAR(MAX)
. Я должен поставить большое значение, например 100000? Если я поставлю это, он вернет мне ошибку после синтаксической ошибки EXECEPTION
...
С другой стороны, если кто-то может сказать мне, как адаптировать мой массовый сбор... Я не нашел ни одного документа по массовому сбору для интегрированного файла, такого как я...
Надеюсь, я понял, потому что мне действительно сложно объяснить... Я новичок в Oracle (PL/SQL)...
Спасибо за помощь, ребята, еще раз
РЕДАКТИРОВАТЬ: я запускаю этот скрипт с помощью .bat. Я взял параметры, которые заполнил '$(nomfic)' значениями в зависимости от параметров.
exec
не является допустимой командой PL/SQL - для запуска динамического SQL вы должны использоватьEXECUTE IMMEDIATE
, но здесь это не требуется. Ваш оператор BULK INSERT также не будет работать. - person Jeffrey Kemp   schedule 23.09.2015CREATE OR REPLACE DIRECTORY ext_tab_data AS 'c:\Hardis\reflex\Communication\HM\MSG_IN\'; CREATE TABLE tem_tb( temp_row NCHAR(2000) ) ORGANIZATION EXTERNAL ( TYPE ORACLE_LOADER DEFAULT DIRECTORY ext_tab_data ACCESS PARAMETERS ( RECORDS DELIMITED BY NEWLINE ( temp_row VARCHAR2(1000) ) ) LOCATION ('$(nomfic)'+'.txt') );
Но разработчик SQL возвращает код ошибки ORA-00910, но я уважаю длину типов данных NCHAR... я не понимаю, в чем моя ошибка.. - person S. Guillaume   schedule 24.09.2015LOCATION ('$(nomfic)'+'.txt'
, но это выглядит неправильно. Это разрешается литералом в вашем скрипте или вы ожидаете, что SQL Developer справится с этим? Также внешние таблицы читают файлы с сервера базы данных - находится ли «c:\Hardis\reflex\Communication\HM\MSG_IN\» на сервере и доступен ли процесс Oracle? Если это так, и ваша единственная проблема заключается в слишком большом значении ошибки, кажется, что это часть вашего кода, которую мы не можем видеть. - person William Robertson   schedule 20.10.2015