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 просто дает мне сообщение об использовании для выхода.

Например, если я выполняю "выход 15", пакетный файл DOS правильно сообщает код возврата (используя уровень ошибки), так что с этой частью все в порядке.

Есть ли какой-то синтаксис, который мне не хватает? Я должен отметить, что я очень новичок в SQL, так что это может быть очень очевидная вещь, которую я не вижу... Спасибо!

1 ответ

Решение

Обходной путь - просто распечатать результат, а затем записать его, как это делают оболочки 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%

Сейчас я иду с этим.

Другие вопросы по тегам