2019年01月

PowerShellからOracleデータベースに接続

PowerShellでOracleに接続

Oracle Data Provider for .NET(ODP.NET)を利用する。

この辺りを参照

この辺りを参照

この辺りを参照

準備

  • ODP.NetCoreライブラリをダウンロード。

    odpcorepkg
    • ダウンロードしたnupkgファイルの拡張子をzipに変更後、解凍ソフト等で開く。

    • lib/netstandard2.0と辿りOracle.ManagedDataAccess.dllを適当なフォルダ(今回はc:\work)にコピーする。

  • GitHubからサンプルスキーマをダウンロード

    • 必須ではないが動作確認用にサンプルデータを作成するのが面倒だったため。
    • 中のSQLからとりあえずJOBSテーブルを作成。
    • jobsテーブル

PowerShellからDBを操作


#ライブラリファイルのロード
[void][reflection.assembly]::LoadFile("C:\Work\Oracle.ManagedDataAccess.dll")
#OracleDBへ接続
$conn = New-Object Oracle.ManagedDataAccess.Client.OracleConnection
$conn.ConnectionString = "User Id=<ID>;PassWord=<PassWord>;Data Source=<ホスト名またはIP:ポート番号/サービス名>;"
$conn.Open();

#SELECT文の発行
$sql = "select * from jobs"
$cmd = New-Object Oracle.ManagedDataAccess.Client.OracleCommand($sql, $conn)
$cmd.CommandType = [System.Data.CommandType]::Text
$reader = $cmd.ExecuteReader()
while ($reader.read())
{
    $reader.GetString(0)
    $reader.GetString(1)
    $reader.GetDecimal(2)
    $reader.GetDecimal(3)
    write-host ""         
}

#型の指定が面倒だったり、フィールドがわかりにくかったりする場合は以下の記述でも可
while ($reader.read())
{
    $reader["job_id"].tostring()
    $reader["job_title"].tostring()
    $reader["min_salary"].tostring()
    $reader["max_salary"].tostring()
    write-host ""         
}

#INSERT
$insertsql= "INSERT INTO jobs VALUES 
        ( 'SA_REP'
        , 'Sales Representative'
        , 6000
        , 12008
        )"
$cmd = New-Object Oracle.ManagedDataAccess.Client.OracleCommand($insertsql, $conn)
$cmd.CommandType = [System.Data.CommandType]::Text
$res = $cmd.ExecuteNonQuery()
#$resには件数がセットされる
$res

#UPDATE
$updatesql = "UPDATE jobs SET min_salary = 0 where job_id='SA_REP'"
$cmd = New-Object Oracle.ManagedDataAccess.Client.OracleCommand($updatesql, $conn)
$cmd.CommandType = [System.Data.CommandType]::Text
$res = $cmd.ExecuteNonQuery()
$res

#DELETE
$delsql = "DELETE FROM jobs WHERE job_id='SA_REP'"
$cmd = New-Object Oracle.ManagedDataAccess.Client.OracleCommand($delsql, $conn)
$cmd.CommandType = [System.Data.CommandType]::Text
$res = $cmd.ExecuteNonQuery()
$res

#トランザクション処理
#ODP.NETでのSQL操作はデフォルトでは自動コミットなので
#手動コミットやトランザクション処理したい場合は以下のように記述する
$updatesql = "UPDATE jobs SET min_salary = 0 where job_id='SA_REP'"
$cmd = New-Object Oracle.ManagedDataAccess.Client.OracleCommand($updatesql, $conn)
$cmd.CommandType = [System.Data.CommandType]::Text
$txn = $conn.BeginTransaction();
try {
    $res = $cmd.ExecuteNonQuery()
    if ($res -eq 1) {
        $txn.Commit()
        Write-Host "コミットしました"
    } else {
        throw
    }
} catch{
    $txn.Rollback();
    write-host "ロールバックしました"
}

#処理が終わったらコネクション、DataReaderオブジェクトの解放を必ず行う
$reader.Close()
$reader.Dispose()
$cmd.Dispose() #サイトのよってまちまちだったが念のため
$conn.Close()
$conn.Dispose()

以下のような記述でエラーになるので根本的な使用方法が違うかもしれない

#リファレンスを見るとここでAPIの設定を変更して接続時のデータソース名を作成できるはずだがORA-7800が発生して進まなかった。
[Oracle.ManagedDataAccess.Client.OracleConfiguration]::OracleDataSources.Add("CON_TEST","(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.1)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORCL)(SERVER=dedicated)))")
$conn.ConnectionString = "User Id=ID;PassWord=PASS;Data Source=CON_TEST;"

VSCodeでGitHub

GitHubが無料ユーザでもプライベートリポジトリを作成できるようになったので使ってみる。

準備

  • GitHub上でプライベートリポジトリを作成する
  • private_repo
  • 適当なフォルダを作成(c:\work\test_github)

リポジトリのダウンロード

  • VSCodeを起動後F1を押下

  • コマンドGit:Cloneと入力
  • git_clone
  • githubのURLを入力

  • git_url
  • ユーザIDとパスワードを求められたら入力

  • ダウンロードする場所(準備で作成したフォルダ)を指定

ソースの追加

  • ダウンロードしたリポジトリのディレクトリに適当なソースファイルを作成

  • VSCode上のソース管理ビューに変更分が現れるので[+]-[変更のステージング]を押下

    変更のステージング
  • コミットのチェックボタン[レ]を押下

  • ソース管理領域の[...]ボタンから[push先...]を選択、リポジトリのURLを入力 ⇒これでGitHub上のプライベートリポジトリに反映される

    push先
    リモートリポジトリ
  • 内容を修正した後は、[ステージング-コミット]後[push先...]の操作でリモートリポジトリの内容も更新される

セントレアの満空情報

GASのトリガーで動かしていたセントレアの駐車場満空情報が結構たまったので、盆暮れ正月に臨時駐車場が開場になった分を記載。


LCCターミナル工事の関係で臨時駐車場はかなり縮小されたと聞いたが、満空情報上は臨時駐車場が満車になった形跡はなかった。(臨時駐車場は閉鎖と開場の情報しか表示されない可能性が大きいが。。。)


日時 P1 P2 臨時
08/11土 06:57 混雑 混雑 開場
08/11土 07:27 満車 混雑 開場
08/11土 07:57 満車 混雑 開場
08/11土 08:27 満車 満車 開場
08/11土 08:57 満車 満車 開場
08/11土 09:27 満車 満車 開場
08/11土 09:57 満車 満車 開場
08/11土 10:27 満車 満車 開場
08/11土 10:57 満車 満車 開場
08/11土 11:27 満車 満車 開場
08/11土 11:57 満車 満車 開場
08/11土 12:27 満車 満車 開場
08/11土 12:57 満車 満車 開場
08/11土 13:27 満車 満車 開場
08/11土 13:57 満車 満車 開場
08/11土 14:27 満車 満車 開場
08/11土 14:57 満車 満車 開場
08/11土 15:27 満車 満車 開場
08/11土 15:57 満車 満車 開場
08/11土 16:27 満車 満車 開場
08/11土 16:57 満車 満車 開場
08/11土 17:29 満車 満車 開場
08/11土 17:57 満車 満車 開場
08/11土 18:27 満車 満車 開場
08/11土 18:57 満車 満車 開場
08/11土 19:27 満車 満車 開場
08/11土 19:57 満車 満車 開場
08/11土 20:27 満車 満車 開場
08/11土 20:57 満車 満車 開場
08/12日 06:57 満車 満車 開場
08/12日 07:27 満車 満車 開場
08/12日 07:57 満車 満車 開場
08/12日 08:27 満車 満車 開場
08/12日 08:57 満車 満車 開場
08/12日 09:27 満車 満車 開場
08/12日 09:57 満車 満車 開場
08/12日 10:27 満車 満車 開場
08/12日 10:57 満車 満車 開場
08/12日 11:27 満車 満車 開場
08/12日 11:57 満車 満車 開場
08/12日 12:27 満車 満車 開場
08/12日 12:57 満車 満車 開場
08/12日 13:27 満車 満車 開場
08/12日 13:57 満車 満車 開場
08/12日 14:27 満車 満車 開場
08/12日 14:57 満車 満車 開場
08/12日 15:27 満車 満車 開場
08/12日 15:57 満車 満車 開場
08/12日 16:27 満車 満車 開場
08/12日 16:57 満車 満車 開場
08/12日 17:28 満車 満車 開場
08/12日 17:57 満車 満車 開場
08/12日 18:27 満車 満車 開場
08/12日 18:57 満車 満車 開場
08/12日 19:27 満車 満車 開場
08/12日 19:57 満車 混雑 開場
08/12日 20:27 満車 混雑 開場
08/12日 20:57 満車 混雑 開場
08/12日 21:27 混雑 混雑 開場
08/12日 21:57 混雑 混雑 開場
08/12日 22:27 混雑 混雑 開場
08/12日 22:57 混雑 混雑 開場
08/12日 23:27 混雑 混雑 開場
08/12日 23:57 混雑 混雑 開場
08/13月 00:27 混雑 混雑 開場
08/13月 00:57 混雑 混雑 開場
08/13月 01:29 混雑 混雑 開場
08/13月 01:57 混雑 混雑 開場
08/13月 02:27 混雑 混雑 開場
08/13月 02:57 混雑 混雑 開場
08/13月 03:27 混雑 混雑 開場
08/13月 03:57 混雑 混雑 開場
08/13月 04:27 混雑 混雑 開場
08/13月 04:57 混雑 混雑 開場
08/13月 05:27 混雑 混雑 開場
08/13月 05:57 混雑 混雑 開場
08/13月 06:27 混雑 混雑 開場
08/13月 06:57 満車 混雑 開場
08/13月 07:27 満車 満車 開場
08/13月 07:57 満車 満車 開場
08/13月 08:27 満車 満車 開場
08/13月 08:57 満車 満車 開場
08/13月 09:27 満車 満車 開場
08/13月 09:57 満車 満車 開場
08/13月 10:27 満車 満車 開場
08/13月 10:57 満車 満車 開場
08/13月 11:27 満車 満車 開場
08/13月 11:57 満車 満車 開場
08/13月 12:27 満車 満車 開場
08/13月 12:57 満車 満車 開場
08/13月 13:27 満車 満車 開場
08/13月 13:57 満車 満車 開場
08/13月 14:27 満車 満車 開場
08/13月 14:57 満車 満車 開場
08/13月 15:27 満車 満車 開場
08/13月 15:57 満車 満車 開場
08/13月 16:27 満車 満車 開場
08/13月 16:57 満車 満車 開場
08/13月 17:27 満車 満車 開場
08/13月 17:57 満車 満車 開場
08/13月 18:27 満車 満車 開場
08/13月 18:57 満車 満車 開場
08/13月 19:27 満車 満車 開場
08/13月 19:57 満車 満車 開場
08/13月 20:27 満車 満車 開場
08/13月 20:57 満車 満車 開場
08/13月 21:27 満車 満車 開場
08/14火 06:27 混雑 混雑 開場
08/14火 06:57 混雑 混雑 開場
08/14火 07:27 満車 満車 開場
08/14火 07:57 満車 満車 開場
08/14火 08:27 満車 満車 開場
08/14火 08:57 満車 満車 開場
08/14火 09:27 満車 満車 開場
08/14火 09:57 満車 満車 開場
08/14火 10:27 満車 満車 開場
08/14火 10:57 満車 満車 開場
08/14火 11:27 満車 満車 開場
08/14火 11:57 満車 満車 開場
08/14火 12:27 満車 満車 開場
08/14火 12:57 混雑 混雑 開場
08/14火 13:27 満車 混雑 開場
08/14火 13:57 混雑 満車 開場
08/14火 14:27 混雑 満車 開場
08/14火 14:57 混雑 満車 開場
08/14火 15:27 混雑 満車 開場
08/14火 15:57 満車 混雑 開場
08/14火 16:27 混雑 満車 開場
08/14火 16:57 混雑 満車 開場
08/14火 17:27 満車 満車 開場
08/14火 17:57 満車 満車 開場
08/14火 18:27 満車 満車 開場
08/14火 18:57 満車 満車 開場
08/14火 19:27 満車 満車 開場
08/14火 19:57 満車 満車 開場
年末年始
日時 P1 P2 臨時
12/29土 00:27 混雑 混雑 開場
12/29土 00:57 混雑 混雑 開場
12/29土 06:57 満車 満車 開場
12/29土 07:27 満車 満車 開場
12/29土 07:57 満車 満車 開場
12/29土 08:27 満車 満車 開場
12/29土 08:57 満車 満車 開場
12/29土 09:27 満車 満車 開場
12/29土 09:57 満車 満車 開場
12/29土 10:27 満車 満車 開場
12/29土 10:57 満車 満車 開場
12/29土 11:27 満車 満車 開場
12/29土 11:57 満車 満車 開場
12/29土 12:27 満車 満車 開場
12/29土 12:57 満車 満車 開場
12/29土 13:27 満車 満車 開場
12/29土 13:57 満車 満車 開場
12/29土 14:27 満車 満車 開場
12/29土 14:57 満車 満車 開場
12/29土 15:27 満車 満車 開場
12/29土 15:57 満車 満車 開場
12/29土 16:27 満車 満車 開場
12/29土 16:57 満車 満車 開場
12/29土 17:27 満車 満車 開場
12/29土 17:57 満車 満車 開場
12/29土 18:27 満車 満車 開場
12/29土 18:57 満車 満車 開場
12/29土 19:27 満車 満車 開場
12/29土 19:57 満車 満車 開場
12/29土 20:27 満車 満車 開場
12/29土 20:57 満車 満車 開場
12/29土 21:27 満車 満車 開場
12/29土 21:57 満車 満車 開場
12/30日 06:57 満車 満車 開場
12/30日 07:27 満車 満車 開場
12/30日 08:27 満車 満車 開場
12/30日 08:57 満車 満車 開場
12/30日 09:27 満車 満車 開場
12/30日 09:57 満車 満車 開場
12/30日 10:27 満車 満車 開場
12/30日 10:57 満車 満車 開場
12/30日 11:27 満車 満車 開場
12/30日 11:57 満車 満車 開場
12/30日 12:27 満車 満車 開場
12/30日 12:57 満車 満車 開場
12/30日 13:27 満車 満車 開場
12/30日 13:57 満車 満車 開場
12/30日 14:27 満車 満車 開場
12/30日 14:57 満車 満車 開場
12/30日 15:27 満車 満車 開場
12/30日 15:57 満車 満車 開場
12/30日 16:27 満車 満車 開場
12/30日 16:57 満車 満車 開場
12/30日 17:27 満車 満車 開場
12/30日 17:57 満車 満車 開場
12/30日 18:27 満車 満車 開場
12/30日 18:57 満車 満車 開場
12/30日 19:27 満車 満車 開場
12/30日 19:57 満車 満車 開場
12/30日 20:27 満車 満車 開場
12/30日 20:57 満車 満車 開場
12/30日 21:27 満車 満車 開場
12/31月 06:57 満車 満車 開場
12/31月 07:27 満車 満車 開場
12/31月 07:57 満車 満車 開場
12/31月 08:27 満車 満車 開場
12/31月 08:57 満車 満車 開場
12/31月 09:27 満車 満車 開場
12/31月 09:57 満車 満車 開場
12/31月 10:27 満車 満車 開場
12/31月 10:57 満車 満車 開場
12/31月 11:27 満車 満車 開場
12/31月 12:27 満車 満車 開場
12/31月 12:57 満車 満車 開場
12/31月 13:27 満車 満車 開場
12/31月 14:27 満車 満車 開場
12/31月 14:57 満車 満車 開場
12/31月 15:27 満車 満車 開場
12/31月 15:57 満車 満車 開場
12/31月 16:27 満車 満車 開場
12/31月 16:57 満車 満車 開場
12/31月 17:27 満車 満車 開場
12/31月 17:57 満車 満車 開場
12/31月 18:27 満車 満車 開場
12/31月 18:57 満車 満車 開場
12/31月 19:27 満車 満車 開場
12/31月 19:57 満車 満車 開場
12/31月 20:57 満車 満車 開場
12/31月 21:27 満車 満車 開場
12/31月 21:57 満車 満車 開場
01/01火 06:27 満車 満車 開場
01/01火 06:57 満車 満車 開場
01/01火 07:27 満車 満車 開場
01/01火 07:57 満車 混雑 開場
01/01火 08:27 満車 混雑 開場
01/01火 08:57 混雑 満車 開場
01/01火 09:27 混雑 満車 開場
01/01火 09:57 満車 満車 開場
01/01火 10:27 満車 満車 開場
01/01火 10:57 満車 満車 開場
01/01火 11:27 満車 満車 開場
01/01火 11:57 混雑 満車 開場
01/01火 12:27 混雑 満車 開場
01/01火 12:57 満車 満車 開場
01/01火 13:27 満車 満車 開場
01/01火 13:57 満車 混雑 開場
01/01火 14:27 満車 満車 開場
01/01火 14:57 満車 満車 開場
01/01火 15:27 混雑 満車 開場
01/01火 15:57 満車 満車 開場
01/01火 16:27 満車 満車 開場
01/01火 16:57 満車 満車 開場
01/01火 17:27 満車 満車 開場
01/01火 17:57 満車 満車 開場
01/01火 18:27 満車 満車 開場
01/01火 18:57 満車 満車 開場
01/01火 19:27 満車 満車 開場
01/01火 19:57 満車 満車 開場
01/01火 20:27 満車 満車 開場
01/01火 20:57 満車 満車 開場
01/01火 21:27 満車 満車 開場
01/01火 21:57 混雑 混雑 開場
01/01火 22:27 混雑 混雑 開場
01/01火 22:57 混雑 混雑 開場
01/01火 23:27 混雑 混雑 開場
01/01火 23:57 混雑 混雑 開場
01/02水 00:27 混雑 混雑 開場
01/02水 00:57 混雑 混雑 開場
01/02水 01:27 混雑 混雑 開場
01/02水 01:57 混雑 混雑 開場
01/02水 02:27 混雑 混雑 開場
01/02水 03:27 混雑 混雑 開場
01/02水 03:57 混雑 混雑 開場
01/02水 04:27 混雑 混雑 開場
01/02水 04:57 混雑 混雑 開場
01/02水 05:27 混雑 混雑 開場
01/02水 06:57 混雑 混雑 開場
01/02水 07:27 満車 満車 開場
01/02水 07:57 満車 満車 開場
01/02水 08:27 満車 満車 開場
01/02水 08:57 満車 満車 開場
01/02水 09:27 満車 満車 開場
01/02水 09:57 満車 満車 開場
01/02水 10:27 混雑 満車 開場
01/02水 10:57 満車 満車 開場
01/02水 11:27 満車 満車 開場
01/02水 11:57 満車 満車 開場
01/02水 12:27 満車 満車 開場
01/02水 13:27 満車 満車 開場
01/02水 13:57 満車 満車 開場
01/02水 15:57 満車 満車 開場
01/02水 16:27 満車 満車 開場
01/02水 16:57 満車 満車 開場
01/02水 17:27 満車 満車 開場
01/02水 17:57 満車 満車 開場
01/02水 18:27 満車 満車 開場
01/02水 18:57 満車 満車 開場
01/02水 19:27 混雑 満車 開場
01/02水 19:57 混雑 混雑 開場
01/03木 07:57 混雑 満車 開場
01/03木 08:27 混雑 満車 開場
01/03木 08:57 満車 混雑 開場
01/03木 09:27 満車 満車 開場
01/03木 10:27 満車 満車 開場
01/03木 10:57 満車 満車 開場
01/03木 11:27 満車 満車 開場
01/03木 12:27 混雑 満車 開場
01/03木 12:57 満車 満車 開場
01/03木 13:27 満車 満車 開場
01/03木 13:57 満車 満車 開場
01/03木 14:27 満車 満車 開場
01/03木 14:57 満車 満車 開場
01/03木 15:27 混雑 満車 開場
01/03木 15:57 混雑 満車 開場
01/03木 16:27 混雑 満車 開場
01/03木 16:57 混雑 満車 開場
01/03木 17:27 混雑 満車 開場
01/03木 17:57 混雑 満車 開場
01/03木 18:27 混雑 満車 開場
01/03木 18:57 混雑 満車 開場
01/03木 19:27 混雑 満車 開場
01/04金 12:27 満車 満車 開場
01/04金 12:57 混雑 混雑 開場
01/04金 13:27 混雑 混雑 開場
01/04金 13:57 満車 混雑 開場
01/04金 14:27 混雑 混雑 開場
01/04金 14:57 混雑 混雑 開場
01/04金 15:27 空車 混雑 開場

PowershellでExcelファイル参照する

PowershellでExcelファイル参照する方法

Excelファイルの読込


$excel = New-Object -ComObject Excel.Application

$book=$excel.Workbooks.Open("C:\Work\books.xlsx") #Excelファイルを開く
$book.Sheets.Count #シートの数
$book.Sheets(1).Name #1番目のシート名
$book.ActiveSheet.Name #アクティブなシート名

$book.ActiveSheet.Cells(1,2).text #B1セルの表示文字列
$book.ActiveSheet.Range("A1:C4").value2 #A1~C4セルの値