Вывод sqlplus из командной строки
Можно ли сделать что-то вроде этого?
$ sqlplus -s user/pass "select 1 from dual"
или
$ echo "select 1 from dual" | sqlplus -s user/pass
Я знаю, что могу положить select 1 from dual
в файл и сделать это:
$ sqlplus -s user/pass @myFile.sql
но мне интересно, действительно ли нужно создать файл, чтобы удовлетворить sqlplus
Ответы
Ответ 1
Просто помните, что в Unix/Linux ваше имя пользователя/пароль может быть замечено любым, кто может запускать команду "ps -ef", если вы поместите ее непосредственно в командной строке. Может быть большой проблемой безопасности (или стать большой проблемой безопасности).
Обычно я рекомендую создать файл или использовать здесь документ, чтобы вы могли защитить имя пользователя/пароль от просмотра командой "ps -ef" в Unix/Linux. Если имя пользователя/пароль содержится в файле script или sql файле, который вы можете защитить, используя соответствующие права доступа для пользователей/групп. Затем вы можете сохранить пользователя/пройти внутри файла, как это, в оболочке script:
sqlplus -s /nolog <<EOF
connect user/pass
select blah;
quit
EOF
Ответ 2
Я могу выполнить ваш точный запрос, просто убедившись, что в конце моего оператора select есть точка с запятой. (Выход действителен, параметры связи удалены.)
echo "select 1 from dual;" | sqlplus -s username/[email protected]:1521/service
Вывод:
1
----------
1
Обратите внимание, что это важно, но это работает на Mac OS X Snow Leopard и Oracle 11g.
Ответ 3
Моя версия
$ sqlplus -s username/[email protected]:port/service <<< "select 1 from dual;"
1
----------
1
EDIT:
Для многострочной вы можете использовать этот
$ echo -e "select 1 from dual; \n select 2 from dual;" | sqlplus -s username/[email protected]:port/service
1
----------
1
2
----------
2
Ответ 4
Я предполагаю, что это * nix?
Используйте "здесь документ":
sqlplus -s user/pass <<+EOF
select 1 from dual;
+EOF
EDIT: Я должен был попробовать ваш второй пример. Он также работает (даже в Windows, без клещей):
$ echo 'select 1 from dual;'|sqlplus -s user/pw
1
----------
1
$
Ответ 5
Я хочу выполнить этот код командной строки из VB6, как показано ниже. Я не хочу передавать файл для выполнения команды.
Set exec1 = New SubprocessRunner
With exec1
.WaitUntilDone = True
.StandardInput = "|"
.CreationFlags = .CreationFlags Or cfCREATE_NO_WINDOW
.StandardOutput = OutputString(propOverwriteLog) & propLogFileName
.StandardError = "@"
.CommandLine = "echo ALTER USER test identified by amruth88 REPLACE amruth99; | Sqlplus test/[email protected]"
'.CommandLine = "SQLPlus.exe test/[email protected] @" & SQLPScript1