この記事は
SQL*PLUSもどきを作る その1(PowerShell Tips)SQL*PLUSもどきを作る その1の説明(PowerShell Tips)SQL*PLUSもどきを作る その2(PowerShell Tips)SQL*PLUSもどきを作る その3(PowerShell Tips)
の続きです。
今回はSQL*PLUSのdescコマンドです。
describeコマンドを表現する関数を下記のように作ってみました。
#================================================================================================ # desc: Oracleのdescコマンド # # UPDATE: 2008-04-28 Ver.1.0.0 # # copyright HIRO's.NET(http://hiros-dot.net/) #================================================================================================ function global:desc ([string]$TABLE_NAME) { $TBL = $TABLE_NAME.ToUpper() #descコマンドを実現させるためのSQL文作成 $QueryString = "SELECT " $QueryString += "COLUMN_ID," $QueryString += "COLUMN_NAME," $QueryString += "DECODE(NULLABLE,'N','NOT NULL') NULLABLE," $QueryString += "DATA_TYPE || '(' || " $QueryString += "DECODE(DATA_PRECISION, NULL, TO_CHAR(DATA_LENGTH)," $QueryString += "DECODE(DATA_SCALE,0," $QueryString += "TO_CHAR(DATA_PRECISION)," $QueryString += "TO_CHAR(DATA_PRECISION) || ',' || TO_CHAR(DATA_SCALE))) || ')' DATATYPE " $QueryString += "FROM " $QueryString += "ALL_TAB_COLUMNS WHERE TABLE_NAME = '$TBL' ORDER BY COLUMN_ID" #DataSetに取得する $dtSet = (Execute-QueryString $QueryString) if ( $dtSet.Tables.Count -gt 0 ) { #format-tableコマンドレットでデータを表示 $dtSet.Tables[0].Rows | format-table } }
使用方法はSQL*PLUSのdescコマンドと一緒で desc テーブル名/ビュー名 とします。
PS > desc emp COLUMN_ID COLUMN_NAME NULLABLE DATATYPE --------- ----------- -------- -------- 1 EMPNO NOT NULL NUMBER(4) 2 ENAME VARCHAR2(10) 3 JOB VARCHAR2(9) 4 MGR NUMBER(4) 5 HIREDATE DATE(7) 6 SAL NUMBER(7,2) 7 COMM NUMBER(7,2) 8 DEPTNO NUMBER(2)
一応 More コマンドも使用可能で
PS > desc emp | more
と入力して1ページずつの表示も可能です。
リダイレクトも可能で
PS > desc emp > C:\Work\emp.txt
のようにすると 出力結果をC:\Work\emp.txtに作成します。
開発ポイントですが
descコマンドを実現するために、情報を ALL_TAB_COLUMNS から取得する。
結果の出力にformat-tableコマンドレットを使用する。
といったところでしょうか。出力をどうするかかなり悩みました。DataReaderで1行ずつ取得するとテキストの整形(列ごとにきれいに表示させる)処理を書く必要が出てくるためどうしたものかと考えていましたが、パイプでformat-tableコマンドレットへデータを渡したところきれいに表示されました。
見ていただけばわかるように、データセットにあるテーブルの行を丸投げしているだけです。
PowerShellってこういうところが非常によくできていますね。改めてすばらしいツールだと思いました。
Theme design by Jelle Druyts
Pick a theme: BlogXP business calmBlue Candid Blue dasBlog dasblogger DirectionalRedux Discreet Blog Blue Elegante essence Just Html MadsSimple Mobile Mono Movable Radio Blue Movable Radio Heat nautica022 orangeCream Portal Project84 Project84Grass Slate Sound Waves Tricoleur useit.com Voidclass2 BlogXP business calmBlue Candid Blue dasBlog dasblogger DirectionalRedux Discreet Blog Blue Elegante essence Just Html MadsSimple Mobile Mono Movable Radio Blue Movable Radio Heat nautica022 orangeCream Portal Project84 Project84Grass Slate Sound Waves Tricoleur useit.com Voidclass2
Powered by: newtelligence dasBlog 2.0.7226.0
The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.
© Copyright 2009, HIRO
E-mail