У меня есть текстовый файл, в котором каждая строка является идентификатором. Это выглядит так
008700200107044314929
0049RXPRISE9000000476
0049GMLCLT00000001021
0147RXPRISE0000094208
0111RXPRISE0000043962
0132GDLCLT00000001637
002120001126002858830
0148FI000000000153554
0021JT000000000536614
Я хочу использовать этот файл и передавать каждую строку в качестве параметра SQL * PLUS внутри моего командного файла.
Я хочу сделать что-то вроде этого:
sqlplus -l -s %cfg.pivot.user%/%cfg.pivot.pass%@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=%cfg.pivot.server%)(Port=1521))(CONNECT_DATA=(SID=%cfg.pivot.base%))) @%sql_histo% "%list_id_cli_temp%" >> %logfile%
% list_id_cli_temp% - мой текстовый файл, а% sql_histo% - моя команда SQL, и это примерно так
insert into xyz.clt_reinsert_histo select id_client, sysdate, code_societe , code_etabliss , date_session , date_heure , numero_ordre FROM xyz.ctransaction where id_client='&1';
Но так не работает. У кого-нибудь есть идея разобраться с этим?
Но как, что бывает, когда не работает?
"Вставка" не работает. Я не могу передать все свои переменные из текстового файла
Хорошо, благодаря @aschipfl, я использовал for / F для цикла внутри моего текстового файла и извлечения своих идентификаторов.
for /F "tokens=1-10" %%a in (%list_id_cli_temp%) do (
sqlplus -l -s %cfg.pivot.user%/%cfg.pivot.pass%@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=%cfg.pivot.server%)(Port=1521))(CONNECT_DATA=(SID=%cfg.pivot.base%))) @%sql_histo% "%%a" >> %logfile%
)
Таким образом, я беру свои первые 10 строк и использую %% a, чтобы получить свой идентификатор из каждой строки текстового файла и передать его по параметру моей команде sql
Я не думаю, что «tokens = 1-10» делает то, что вы думаете. FOR /?
@lit "tokens = 1-10" занимает от строки 1 до строки 10 в моем текстовом файле
Это не то, о чем говорится в документации FOR /?
.
@lit tokens = n -> Указывает, какие пронумерованные элементы для чтения из каждой строки (по умолчанию = 1) tokens = 2,4,6 вызовут обработку второго, четвертого и шестого элементов в каждой строке. tokens = 2-6 вызовет обработку второго, третьего, четвертого, пятого и шестого элементов в каждой строке. tokens = * вызовет обработку всех элементов в каждой строке. tokens = 3 * будет обрабатывать третий токен и 4-й + все последующие элементы, это также можно записать как tokens = 3, *
Использование tokens = влияет на количество ITEMS
в каждой строке`. Это не имеет ничего общего с количеством строк. Вам просто повезло, что в ваших строках только один элемент, поэтому все они попали в %% a.
@lit Хорошо, спасибо за точность, я плохо понял документацию.
Что значит "не работает"? Пожалуйста, будьте конкретны! Взгляните на
for /F
петля.