У меня есть пакетный файл DOS, который вызывает sqlplus, который выполняет некоторый базовый SQL, содержащийся в другом файле .sql, и я хочу, чтобы последняя его часть возвращала значение обратно в пакетный файл dos. Однако, несмотря на то, что в Google есть много примеров того, как это сделать с помощью оболочки Unix, самое близкое, что я могу найти для пакетных файлов DOS, - это что-то вроде этого:
SELECT
MAX(magicnumber)
INTO
:ret_val
FROM
ABCD.EFGH
exit :ret_val
Однако у меня это не работает - sqlplus просто дает мне сообщение об использовании для EXIT.
Если, например, я делаю «exit 15», командный файл DOS правильно сообщает код возврата (с использованием уровня ошибок), так что с этой частью все в порядке.
Есть ли какой-то синтаксис, который мне не хватает? Должен отметить, что я новичок в SQL, поэтому может быть какая-то очевидная вещь, которую я не вижу ... Спасибо!
Обходной путь заключается в том, чтобы просто распечатать результат, а затем записать его так же, как это делают оболочки unix. Пользователь shoblock на dbforums.com приводит здесь следующий пример:
http://www.dbforums.com/oracle/1034420-how-return-value-pl-sql-script.html
По сути, в bat-файле есть:
FOR /F "usebackq delims=!" %%i IN (`sqlplus -s u/p@db @t`) DO set xresult=%%i
echo %xresult%
А пока я собираюсь с этим.