Назад | Перейти на главную страницу

SQL, pl / sql, sqlplus: как вернуть переменную в командный файл DOS?

У меня есть пакетный файл 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%

А пока я собираюсь с этим.