2012-01-02 2 views
2
#my code 

echo \ 
'create database link remotec101 \ 
connect to "os_user" \ 
identified by "password" \ 
using ' \ 
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP) \ 
(HOST=c101) \ 
(PORT=1521)) \ 
(CONNECT_DATA=(SID=XE)))';'|sqlplus 

このようにいくつかのSQLを実行しようとしましたが、うまくいきました。しかし、データベースリンクを作成するときにエラーが発生しました。ひどく置いてありました。tcshでoracleデータベース・リンクを作成するときにひどく配置されました(

このコードはtcshにあります。

私を助けてください。

おかげ

+0

括弧はエコーさ文字列の外側であるので、シェルによって解析されます:あなたはtcshの両方の引用符の種類をサポートしており、echoは複数の引数を許可することを利用しなければなりません。文字列の外側に接続情報を置く理由はありますか? –

答えて

2

は括弧は引用されていないので、それらはシェルのメタ文字として扱われています。あなたがしたい場合

sqlplus <<'EOF' 
create database link remotec101 
connect to "os_user" 
identified by "password" 
using 
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP) 
(HOST=c101) 
(PORT=1521)) 
(CONNECT_DATA=(SID=XE))); 
'EOF' 

この:

echo \ 
'create database link remotec101 \ 
connect to "os_user" \ 
identified by "password" \ 
using \ 
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP) \ 
(HOST=c101) \ 
(PORT=1521)) \ 
(CONNECT_DATA=(SID=XE)));' | sqlplus 

sqlplusコマンドに以下のフィードます:

create database link remotec101 
connect to "os_user" 
identified by "password" 
using 
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP) 
(HOST=c101) 
(PORT=1521)) 
(CONNECT_DATA=(SID=XE))); 

しかし、 "ここに文書が" おそらくクリーナーです最後の4行はsqlplusへの入力の単一の行になるために、私はあなたが必要と思うあなたのスクリプトの中にそれらをすべて1行に入れる。それとも、それが簡単に例えば、あなたの出力を整理するprintfコマンドを使用することを見つけるかもしれない:

printf '%s\n%s\n%s\n%s\n%s %s %s %s\n' \ 
    'create database link remotec101' \ 
    'connect to "os_user"' \ 
    'identified by "password"' \ 
    'using' \ 
    '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)' \ 
    '(HOST=c101)' \ 
    '(PORT=1521))' \ 
    '(CONNECT_DATA=(SID=XE)));' | sqlplus 

これは、単一の行として最後の4行を出力します。必要に応じて書式文字列を調整することができます。

+1

OPの問題は、最後の4行を文字列内の文字列にすることです。 – Dan

+0

@Dan: "文字列内の文字列"とはどういう意味ですか? OPが私たちに 'sqlplus'コマンドが標準で見たいものを正確に教えてくれれば助けになるでしょう。 ( 'sqlplus'が何を期待しているか分かっていれば助けになります。) –

+0

申し訳ありませんが、私が言ったのは、文字列を' echo'コマンドに渡していることでしょうか?しかし、その中では特に、かっこのある部分は、文字列が必要です。つまり、彼らが属していないように見える2つのアポストロフィは、実際にはエコーされることを意図したものの本体の一部です。 '\\'でエスケープする返信を投稿しましたが、明らかにtcshでは動作しません。 – Dan

1

私はそれを理解しました。

echo 'create database link remotec101 \ 
connect to "os_user" \               
identified by "password" \              
using ' "'" ' (DESCRIPTION= (ADDRESS= (PROTOCOL=TCP) 
(HOST=c101) 
(PORT=1521)) 
(CONNECT_DATA= (SID=XE))) ' "';" 
関連する問題