Ответ 1
Я могу запустить SQL-запрос, связав его с SQL * Plus:
@echo select count(*) from table; | sqlplus username/[email protected]
Дайте
@echo execute some_procedure | sqlplus username/[email protected]
попробуйте.
Используя SQL Plus, вы можете запустить script с помощью оператора "@" из командной строки, как в:
c:\>sqlplus username/[email protected] @"c:\my_script.sql"
Но можно ли просто запустить одиночную команду с похожим синтаксисом без целого отдельного файла script? Как в:
c:\>sqlplus username/[email protected] @execute some_procedure
Меня это интересует, потому что я хочу написать командный файл, который просто выполняет команду, не создавая кучу двухстрочных файлов .sql.
Я могу запустить SQL-запрос, связав его с SQL * Plus:
@echo select count(*) from table; | sqlplus username/[email protected]
Дайте
@echo execute some_procedure | sqlplus username/[email protected]
попробуйте.
Вы пробовали что-то вроде этого?
sqlplus username/[email protected] < "EXECUTE some_proc /"
Похоже, что в UNIX вы можете:
sqlplus username/[email protected] <<EOF
EXECUTE some_proc;
EXIT;
EOF
Но я не уверен, что такое эквивалент Windows.
Для UNIX (AIX):
export ORACLE_HOME=/oracleClient/app/oracle/product/version
export DBUSER=fooUser
export DBPASSWD=fooPW
export DBNAME=fooSchema
echo "select * from someTable;" | $ORACLE_HOME/bin/sqlplus $DBUSER/[email protected]$DBNAME
sqlplus user/password @sid < sqlfile.sql
также будет работать из командной строки DOS. В этом случае файл sqlfile.sql содержит SQL, который вы хотите выполнить.
@find /v "@" < %0 | sqlplus -s scott/[email protected] & goto :eof
select sysdate from dual;
Вот как я решил проблему:
<target name="executeSQLScript">
<exec executable="sqlplus" failonerror="true" errorproperty="exit.status">
<arg value="${dbUser}/${dbPass}@<DBHOST>:<DBPORT>/<SID>"/>
<arg value="@${basedir}/db/scripttoexecute.sql"/>
</exec>
</target>