
oracleにアクセスするシェルを作成しており、期間指定の部分を変数で
指定したいと思っています。
しかしシングルクォーテーションに囲まれた部分の扱い方がよくわからず、
やむを得ず、変数内にクォーテーションを持たせ対処しました。
具体的には【現状】に示すようなコードです。
【現状】でも動くには動くのですが、将来的にはシェルの引数として
渡して実行したい為、出来れば変数内にはクォーテーションを持たせず
【希望】に示すイメージのコードにしたいと思っています。
単にエスケープの仕方の問題のような気がしているのですが、
なかなかうまくいきません。
変数の定義の部分が【希望】のとおりであれば、SQL部分の文字列は
多少変えてしまっても問題ありません。
シェル内で「'」に囲まれた部分への変数の展開させる方法、
これを教えてください。
よろしくお願いします。
--【現状】-------------------------------------
FROM_DATETIME="'2010-10-10 00:00:00'"
TO___DATETIME="'2010-12-10 00:00:00'"
sqlplus scott/tiger@oracle << EOT
select count(*)
from tablename
where columnname between
to_date(${FROM_DATETIME}, 'YYYY-MM-DD HH24:MI:SS') and
to_date(${TO___DATETIME}, 'YYYY-MM-DD HH24:MI:SS')
/
quit
EOT
-----------------------------------------------
--【希望】-------------------------------------
FROM_DATETIME=2010-10-10 00:00:00
TO___DATETIME=2010-12-10 00:00:00
sqlplus scott/tiger@oracle << EOT
select count(*)
from tablename
where columnname between
to_date(\'${FROM_DATETIME}\', 'YYYY-MM-DD HH24:MI:SS') and
to_date(\'${TO___DATETIME}\', 'YYYY-MM-DD HH24:MI:SS')
/
quit
EOT
-----------------------------------------------
No.2ベストアンサー
- 回答日時:
> FROM_DATETIME=2010-10-10 00:00:00
> TO___DATETIME=2010-12-10 00:00:00
これは
環境変数FROM_DATETIMEを2010-10-10に(一時的に)設定→ 00:00:00 コマンドを実行
と解釈されます。(00:00:00などというコマンドはおそらく無いので、エラーになります)
FROM_DATETIME="2010-10-10 00:00:00"
FROM_DATETIME='2010-10-10 00:00:00'
FROM_DATETIME=2010-10-10\ 00:00:00
など、空白が変数にセットする値の一部であることを明示する必要があります。
これは
> シェルの引数として渡して実行したい
場合でも同じです。
(この「シェル」が「シェルスクリプト」だとして)
foo.sh 2010-10-10 00:00:00 2010-12-10 00:00:00
としたら
$1:2010-19-10
$2:00:00:00
$3:2010-12-10
$4:00:00:00
となります。$1が2010-10-10 00:00:00になるようにするには、
foo.sh "2010-10-10 00:00:00" "2010-12-10 00:00:00"
foo.sh '2010-10-10 00:00:00' '2010-12-10 00:00:00'
foo.sh 2010-10-10\ 00:00:00 2010-12-10\ 00:00:00
等とする必要があります。あるいは、前のコマンドラインのまま
FROM_DATETIME="$1 $2"
TO___DATETIME="$3 $4"
とするか。
今のを直すなら
FROM_DATETIME='2010-10-10 00:00:00'
TO___DATETIME='2010-12-10 00:00:00'
# このシングルクオートは「ひとまとめ」にするためのもので、
# 変数の中にはシングルクオート自体は含まれない。
# ダブルクォートでも(今回は展開されるような記述がないので)同等。
# \による空白のエスケープでも同等
to_date('${FROM_DATETIME}', 'YYYY-MM-DD HH24:MI:SS') and
to_date('${TO___DATETIME}', 'YYYY-MM-DD HH24:MI:SS')
# ヒアドキュメントの中のシングルクオートは特殊な意味のないただの文字なので、エスケープは不要
でいいはずです。
直接的な回答だけでなく、対処方法のバリエーションを
いくつか教えていただき参考になしました。
>ヒアドキュメントの中のシングルクオートは
>特殊な意味のないただの文字なので、エスケープは不要
特にこれも勉強になりました。
No.1さんのご回答で直面している問題自体は回避できたのですが、
いろいろ勉強になりました。ありがとうございました。
No.1
- 回答日時:
まず、
>FROM_DATETIME=2010-10-10 00:00:00
>TO___DATETIME=2010-12-10 00:00:00
これができないですね。
FROM_DATETIME="2010-10-10 00:00:00"
TO___DATETIME="2010-12-10 00:00:00"
のように"か'で囲まないと。
これでできますよ。
FROM_DATETIME="2010-10-10 00:00:00"
TO___DATETIME="2010-12-10 00:00:00"
sqlplus scott/tiger@oracle << EOT
set echo on
select count(*)
from msn3
where dcol between
to_date('${FROM_DATETIME}', 'YYYY-MM-DD HH24:MI:SS') and
to_date('${TO___DATETIME}', 'YYYY-MM-DD HH24:MI:SS')
/
quit
EOT
おっと。これでいいんですか。どこでつまづいているかすら
きちんと把握できていなかったようですね。
助かりました。ご回答ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- MySQL SQLについて質問です。 SELECT TO_CHAR(TO_DATE('90-10-08.'YY- 4 2022/05/13 20:55
- Visual Basic(VBA) vb.net どうしてイコールにならないのでしょうか 4 2022/09/29 12:21
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2023/05/23 16:28
- Visual Basic(VBA) テーブルを配列に入れて、元のテーブルの行番号を取得したい 1 2022/08/16 20:15
- Excel(エクセル) Excel 数行を1組とする300組ほどあるデータの項目を揃えたいです。 3 2023/01/26 19:38
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/01/23 09:24
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2023/01/23 17:13
- Access(アクセス) エクセルのVBAについて教えてください。 4 2023/01/21 10:21
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/01/23 11:02
- 公認会計士・税理士 会計学初心者です。 xeroという会計ソフトを実際に使用して決算整理仕訳?を行うという課題が出ました 1 2022/10/07 14:57
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CentOSが起動時にフリーズ
-
LinuxでWine使うとどのくらいWi...
-
ubuntu(linux)のシャットダウン...
-
Core 2 Duo の古いパソコンに最...
-
Ubuntu on Xorgのログインについて
-
apacheでリバースプロキシを設...
-
ubuntu 24 へのCanon 複合機ス...
-
サーバー間のデータコピー(デ...
-
linuxのIMEの件
-
ubuntuのシャットダウンが進ま...
-
VirtualBox ゲストOSにPC内蔵HD...
-
ubntuをインストールしたが、gr...
-
Linuxミントで困っています。 s...
-
ssl_request_logの必要性について
-
Lubuntuのデスクトップのアイコ...
-
初期のSurface Goにubuntuをデ...
-
Windows11のパソコンにAndroid...
-
ubuntuのターミナルで書いたコ...
-
PCが常にBIOS画面が立ち上がっ...
-
Linuxへの移行 来年でWindows10...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
LinuxでWine使うとどのくらいWi...
-
Core 2 Duo の古いパソコンに最...
-
ubuntu(linux)のシャットダウン...
-
bashでシングルクォート内の変...
-
Linux のシェルスクリプトの強...
-
ubuntu が起動しない。
-
「/var/log」内のログの削除の...
-
ubuntuのシャットダウンが進ま...
-
ubuntuで デイスク/deb/loopと...
-
linuxサーバーのキャッシュをク...
-
ログにserver reached MaxReque...
-
tarで纏める際に、複数場外した...
-
ubuntu 24 へのCanon 複合機ス...
-
Ubuntu on Xorgのログインについて
-
LinuxのノートパソコンでDVDコ...
-
Windowsのローカルディレクトリ...
-
ホストオンリーアダプタで接続...
-
VirtualBox ゲストOSにPC内蔵HD...
-
ssh接続しようとしたらエラーメ...
-
Windows11のパソコンにAndroid...
おすすめ情報