Open1

SQL memo

チェロチェロ

作ったもの

作った経緯

  • 毎日保管している操業データの自動保存機能
  • UWSCで取得していたけれど、下記の点に難あり
    • 取得に時間がかかり、その間PC操作不可
    • 正確性も低く偶にポップアップが出ると挙動がおかしくなる
  • SQL打てることが判明したので、勉強ついでに高速化、正確性向上を目指した

作ったもの

  1. 24時間のレコード数をカウント
  2. 0件ならば1日遡るのを2週間を上限に実行
  3. 1件以上となった場合、各操業データを取得するSQLを実行しcsvを出力
  4. 出力したcsvを、集計フォルダに移動する

チラシの裏

チラシの裏

Bat

Batはマナー講師レベルで文法にうるさいくせに、どこが悪いのか教えてくれない!!
SQLの勉強のつもりだったのに、Batで一番時間を裂いていた気がする…。

  • For文の内と外で変数使い回すには呪文が必要
  • IF文の変数記号が変化する
  • スペース1つ間違うと動かなくなる
  • 変数の返り値が数字のみ
  • 返り値の変数は%errorlevel%固定
  • 変数が文字列か数値か良くわからん
  • 日付計算が単独だと困難
    チョット触れただけなのにこんだけ不満が出るし、Batはもう触りたくない😭

SQL

SELECTしか使わない以上、文法は単純なので助かる
A5:SQL Mk-2があったおかげで物凄く効率良くできた
25年以上開発されているツールは流石の一言
もっといろんなことできそうなので、色々いじってみよう

Oracle

instant-clientの時点で敷居の高さを感じたが、ググれば情報いっぱい出るので助かった
sqlPlusはbatで簡潔させる上で特にありがたかった
うちのサーバーは11gだけど、ガッツリ使ってないので現行バージョンで特に問題なさそうだなぁ

参考にした ページ一覧

SQL文

Joinの使い方
https://qiita.com/shukan0728/items/d48936928e5ac7aaf7b2
数え方
https://hara-chan.com/it/programming/oracle-count/
csv出力
https://www.projectgroup.info/tips/Oracle/Oracle_000034.html
csvフォーマット変更
https://qiita.com/niwasawa/items/40881356355043d323d6
日付のフォーマット変更
https://www.sql-dbtips.com/architecture/nls_date_format/
超便利なクライアント
https://a5m2.mmatsubara.com/
事故防止の読み取り専用版があって助かった

Bat

自動化させたいのでBat関連
batからの実行、引数
https://www.shift-the-oracle.com/sqlplus/tutorial/sqlplus-script-parameter.html
SQL結果を返り値としてBatに渡す
https://gabekore.org/bat-get-sqlplus-select-result
日付の計算
https://tooljp.com/CommandBank/Windows/Date/date-time-Windows-bats.htmlhttps://tooljp.com/CommandBank/Windows/Date/date-time-Windows-bats.html
for文
https://qiita.com/plcherrim/items/67be34bab1fdf3fb87f9
for文処理中のECHO は <OFF>対策(遅延環境変数)
https://blog.natade.net/2018/10/06/windows-bat-遅延環境変数-for-if/#toc8

Oracle

インストーラーの設定方法
https://www.bnote.net/oracle/instant_sqlplus.html
インストーラー
https://www.oracle.com/jp/database/technologies/instant-client/downloads.html

  • 環境変数でパスを通すのが肝要
  • ODBC接続でExcelVBA使用する場合、ExcelのBitに合わせたクライアントをインストールすること
    違うBitだと以下のエラーが出て使用不可
    指定された DSN には、ドライバーとアプリケーションとのアーキテクチャの不一致が含まれています
  • 通常Excelは32Bit版使用するので、インストールするのは32Bit版で良さそう
  • WindownsのODBC設定も64Bit版と32Bit版があるので、ExcelのBitと合わせたものを使用する
  • WIN7は18Cを使用すること

https://www.oracle.com/jp/system-requirement/db-matrix-195845-ja.html#microsoft

ODBC

設定方法
https://qiita.com/tarosa0001/items/0d68b38b61c1eaaa4bbe

VBA

VBAでODBC接続
https://excelwork.info/excel/databaseoracleodbc/
参照設定項目
Microsoft ActiveX Data Objects X.X Libraryは2.8を使用
https://808hanablog.com/how-to-vba-connect-oracle-database

error while trying to retrieve text for error ora-01019
翌日実行すると上記のエラーで何故か動かなくなった…
原因不明なのでVBAでの読み込みは諦め

PowerQuery

今まで使ったことがなかった機能を使ってみた
ODBCで接続してSQLで取得
更新はVBAからRefreshするだけで読めるしすげえええ!!!
Excel使えこなせてないなぁと色々実感…