2017-01-04 3 views
1

シェルスクリプトからDBに接続しようとしていますが、これより下にエラーが発生しています。データベースに接続してシェルスクリプト内でクエリを実行する方法は?

データベース出力:ERROR: ORA-12154:TNSは:無効なオプション:

SP2-0306指定された接続識別子を解決できませんでした。 使用法:CONN [ECT] [ログオン] [AS {SYSDBA | SYSOPER}] :: = [/] [@] |/ SP2-0306:無効なオプションです。 使用法:CONN [ECT] [ログオン] [AS {SYSDBA | SYSOPER}] :: = [/] [@] |/

トレイルコード:

#!/bin/bash 

LogDirectory='/users/users-06/p6***8/scripts/dir' 

ORACLE_HOME=/tools/ver/oracle-10.2.0.1-64 
export ORACLE_HOME 

DBUSER='p6*02*1' 
DBUSERPASSWORD='R****07' 
DB='O**XDA3' 

var=`$ORACLE_HOME/bin/sqlplus -S ${DBUSER}/${DBUSERPASSWORD}@${DB} << EOD 
spool ${LogDirectory}/query.txt 
set linesize 32767 
set feedback off 
set heading off 
SELECT * FROM Omi.ESP_FEED_REQUEST WHERE FEED_NAME='PSAR_TRANSACTION_FEED' AND REQUEST_ID='3694707322503' AND AS_OF='04-Jan-2017' ORDER BY 1 DESC; 
spool off 
exit; 
EOD` 

echo $var > ${LogDirectory}/DB_output.txt 

あなたは、私が "VAR" 変数にSQL出力を取得する方法を私にしてください提案してくださいもらえますか?どうもありがとう !クエリの出力は、パスの下

{LogDirectory}/query.txt 

varでスプールなっている

+0

注:sqlp lusはパス$ ORACLE_HOME/binにあります。 – user7268185

+0

'tnsnames.ora'ファイルがあるところで' TNS_ADMIN'をエクスポートする必要があります。 –

+0

@WernfriedDomscheit、ありがとうございました。あなたのご意見をお寄せください、今私のために働いています。 – user7268185

答えて

-1
echo "SELECT * FROM Omi.ESP_FEED_REQUEST WHERE FEED_NAME='PSAR_TRANSACTION_FEED' AND REQUEST_ID='3694707322503' AND AS_OF='04-Jan-2017' ORDER BY 1 DESC;" | sqlplus -s [email protected]$DB/$DBUSERPASSWORD >> dboutput.txt 
+0

これは、「身体に4文字追加されました」という意味ですか? –

0

はコード1または0の状態になります。ステートメントが正常に実行された場合、varステータスは0以外の1になります。

+0

varの終了ステータスではなく、 'VAR'の出力をエコーし​​ます。 (私の応答を参照してください) –

0

罰金ここで働いています:

#!/bin/bash 

LogDirectory='/home/oracle' 

ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1 
export ORACLE_HOME 

DBUSER='scott' 
DBUSERPASSWORD='scott' 
DB='db11g' 

var=`$ORACLE_HOME/bin/sqlplus -S ${DBUSER}/${DBUSERPASSWORD}@${DB} << EOD 
spool ${LogDirectory}/query.txt 
set linesize 32767 
set feedback off 
set heading off 
select 5 from dual; 
exit; 
EOD` 

echo "Database output: ${var}" 

$ ./stack.sh 
Database output: 
     5 

は、データベースが稼働してますか?チェック:

ps -ef | grep pmon 

これは実行中のプロセスを表示します。 XINGのため

SQL> shu immediate; 
Database closed. 
Database dismounted. 
ORACLE instance shut down. 
SQL> exit 
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production 
With the Partitioning, Oracle Label Security, OLAP, Data Mining, 
Oracle Database Vault and Real Application Testing options 
$ ./stack.sh 
Database output: ERROR: 
ORA-12514: TNS:listener does not currently know of service requested in connect 
descriptor 


SP2-0306: Invalid option. 
Usage: CONN[ECT] [{logon|/|proxy} [AS {SYSDBA|SYSOPER|SYSASM}] [edition=value]] 
where <logon> ::= <username>[/<password>][@<connect_identifier>] 
     <proxy> ::= <proxyuser>[<username>][/<password>][@<connect_identifier>] 
SP2-0306: Invalid option. 
Usage: CONN[ECT] [{logon|/|proxy} [AS {SYSDBA|SYSOPER|SYSASM}] [edition=value]] 
where <logon> ::= <username>[/<password>][@<connect_identifier>] 
     <proxy> ::= <proxyuser>[<username>][/<password>][@<connect_identifier>] 
SP2-0157: unable to CONNECT to ORACLE after 3 attempts, exiting SQL*Plus 

編集:それはあなたが取得しているエラーを取得していないとき

を私がにコードを変更:

select * from t1; 

$ ./stack.sh 
Database output: 
A 
B 

とUSER_TABLESから*

$を選択します./stack.sh

Database output: 
DEPT       USERS                     VALID    10      1  255   65536  1048576   1 2147483645   YES N   4   5   0   0   0   20       0    0   1   1  N ENABLED   4 07-OCT-14 NO    N N NO DEFAULT DEFAULT DEFAULT DISABLED YES NO    DISABLED YES        DISABLED DISABLED    NO NO YES DEFAULT 
SALGRADE      USERS                     VALID    10      1  255   65536  1048576   1 2147483645   YES N   5   5   0   0   0   10       0    0   1   1  N ENABLED   5 07-OCT-14 NO    N N NO DEFAULT DEFAULT DEFAULT DISABLED YES NO    DISABLED YES        DISABLED DISABLED    NO NO YES DE 
+0

ユーザークエリは 'SELECT * FROM ...'です。 select文が2行以上を返す場合はどうなりますか? 'var'はそれを表示しますか?もしそうなら、答えに – XING

+0

@ XINGを含めてください。編集を参照してください - 出力は関係ありません。とにかく結果のエコーだけです。 –

関連する問題