Я создал два командных файла для запуска двух отдельных файлов .sql в Планировщике задач Windows. Пакетный файл для обоих выглядит следующим образом:Как написать командный файл, который запускает блок PL/SQL, чтобы сообщить мне, что многие записи вставлены/удалены/и т. Д. в файле журнала?
sqlplus userid/[email protected] @C:\XXX.sql>>C:\output.log
echo commit; | userid/[email protected]
Файл первый .sql (SQL1) является PL/SQL блок, как это:
SET SERVEROUT ON
DECLARE
....
BEGIN
IF ...
....
ELSE
@D:\DM_FIX.sql;
END IF
END
Файл DM_FIX.sql, чтобы вставить кучу записей в таблицу, и начинается с команды INSERT.
Файл second.sql не является файлом блока. Это делает кучу DDL/DML комманды. файл выглядит, как показано ниже:
Truncate Table YYY
Reuse Storage;
Commit;
Insert into Table YYY
Select ... from
Commit;
Delete from Table YYY
where ...
Commit;
При запуске второго файла .sql, я получаю выход, который указывает на «Стол был усечен, #### записи вставлены, #### записи удаляются ... "
Но когда я запускаю первый, хотя процедура PL/SQL выполнена успешно, я не получаю строку, в которой указано, сколько записей вставлено, и я пытаюсь выяснить способ сделай это.
Кто-нибудь знает, что может быть трюком?
Спасибо!
SQL * Plus позволяет то, что делает OP; '@' заставляет содержимое файла DM_FIX.sql быть включенным в сценарий PL/SQL перед его анализом и исполнением. Не сказать, что это отличная идея, но она действительна. (Я только что подтвердил это для своего собственного здравомыслия, но получается [я показал это раньше] (http://stackoverflow.com/a/21112230/266304)). –
@Alex Poole: Huh. Я не знал этого. Хотя даже в этом случае должна была произойти ошибка, так как второй блок содержит DDL. – Allan
Правда, он не понимает 'truncate', но OP работает только с первым файлом (' DM_FIX.sql') и имеет только DML ... Я думаю ... это немного запутанно. –