Jak mogę wydać pojedyncze polecenie z linii poleceń za pośrednictwem sql plus?

Używając SQL Plus, możesz uruchomić skrypt z operatorem "@" z linii poleceń, jak w:

c:\>sqlplus username/password@databasename @"c:\my_script.sql"

Ale czy możliwe jest po prostu uruchomienie pojedynczego polecenia o podobnej składni, bez całego osobnego pliku skryptu? Jak w:

c:\>sqlplus username/password@databasename @execute some_procedure

Jestem tym zainteresowany, ponieważ chcę napisać plik wsadowy, który po prostu wykonuje polecenie, bez generowania kilku dwulinijkowych".SQL " pliki.

Author: JosephStyons, 2009-03-12

6 answers

W tym celu należy wysłać zapytanie SQL do SQL*Plus:

@echo select count(*) from table; | sqlplus username/password@database

Give

@echo execute some_procedure | sqlplus username/password@databasename
Spróbuj.
 63
Author: Patrick Cuff,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-03-12 16:15:18

Próbowałeś czegoś takiego?

sqlplus username/password@database < "EXECUTE some_proc /"

Wygląda na to, że w Unixie można to zrobić:

sqlplus username/password@database <<EOF
EXECUTE some_proc;
EXIT;
EOF

Ale nie jestem pewien, jaki byłby odpowiednik windows.

 13
Author: Eric Petroelje,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-03-12 14:36:09

For 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/$DBPASSWD@$DBNAME
 8
Author: javaPlease42,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-09 02:24:03
sqlplus user/password@sid < sqlfile.sql

Będzie to również działać z wiersza poleceń DOS. W tym przypadku plik sqlfile.sql zawiera SQL, który chcesz wykonać.

 5
Author: tale852150,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-10 14:19:57
@find /v "@" < %0 | sqlplus -s scott/tiger@orcl & goto :eof

select sysdate from dual;
 -1
Author: xxoid,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-20 18:57:03

Oto jak rozwiązałem problem:

<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>
 -8
Author: jkob,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-25 21:58:26