Согласно Oracle 11g – SQLPlus Command Line Options и Starting SQLPlus, то можно указать имя пользователя, пароль и базу данных уже в командной строке sqlplus.exe.
Я не sqlplus.exe, чтобы проверить это, но что-то вроде ниже, должны работать с соответствующим содержанием приспосабливания файла conn.sql.
@echo off
setlocal
set "SqlUserName="
set "SqlPassword="
set "SqlDatabase="
:Credentials
set /P "SqlUserName=Enter username: "
set /P "SqlPassword=Enter password: "
set /P "SqlDatabase=Enter database: "
sqlplus.exe -L "%SqlUserName%/%SqlPassword%@%SqlDatabase%" /nolog @C:\Users\myuser\Desktop\conn.sql
if errorlevel 1 goto Credentials
echo About to exit.
timeout /t 30
endlocal
Вы можете улучшить этот командный код далее, например, с кодом, чтобы проверить, если партия пользователь действительно вошел имя пользователя, пароль и базу данных.
Значения трех переменных окружения могут быть повторно использованы повторно на других линиях партии, вставленных выше команды endlocal.
Edit: Добавлен простой цикл в случае sqlplus.exe выходов с любым кодом больше или равно 1. Пользователь пакетного кода имеет возможность просто нажать клавишу RETURN или ENTER, чтобы использовать имя пользователя , пароль или имя базы данных, введенное ранее. Окончательное решение должно быть, скорее всего, лучше, чем то, что опубликовано здесь, так как ввод учетных данных еще раз должен выполняться только при ошибке доступа к базе данных, а не о других ошибках. Поэтому командные файлы должны различать различные коды выхода, возвращаемые SQL * PLUS.
Смотрите также ответы на переполнение стека вопросы Sql*plus always return exit code 0? и How do I capture a SQLPlus exit code within a shell script?
Единственное отличие состоит в том, что в сценарии оболочки Unix if [ $? != 0 ]
эквивалентно if errorlevel 1
в пакетный файл Windows, (если код завершения не является отрицательным, который, как правило, верно). См. Статьи поддержки Microsoft Testing for a Specific Error Level in Batch Files и Correct Testing Precedence of Batch File ERRORLEVELs об оценке кодов выхода с помощью if errorlevel
.
Какой же выход из 'ECHO о том, чтобы выйти% ERRORLEVEL% '? Скажем, '1017', если возникает ошибка _invalid credential_? Тогда 'if% errorlevel% EQU 1017 goto: back' может помочь – JosefZ
Я не могу ECHO, потому что я пытаюсь подключиться через .SQL-файл. – ladiesman1792
Im работает над чем-то, что выглядит следующим образом: '@echo от SQLPLUS && пользователя @ && дб/NoLog @C: \ Users \ njediaz \ Desktop \ conn.sql ECHO о том, чтобы выйти. timeout t/30 : pause' – ladiesman1792