PowerShellの開発でお困りのことはありませんか?
そんな悩みは
当サイトで解決!!
05.SQL*PLUSもどきを作る その5
UPDATE:2008/05/03
SQL*PLUSもどきを作る その1
SQL*PLUSもどきを作る その2
SQL*PLUSもどきを作る その3
SQL*PLUSもどきを作る その4
の続きです。
ユーザーが入力したQueryStringを実行し結果を表示する関数 Execute-Query を紹介します。
この関数は、SQL*PLUS同様、複数行にわたるQueryStringを実行し、結果を表示することができます。
ただし、SQL*PLUSのようにいきなりSELECT文を書き始めることはできず、List1のように
Execute-Query SELECT文[Enter]
と入力する必要があります。
Execute-Query.ps1
#========================================================================================= # Execute-Query: QueryStringを実行する # # UPDATE 2008/04/28 Ver.1.0.0 # # copyright HIRO's.NET(http://hiros-dot.net/) #========================================================================================= function global:Execute-Query { #複数行のQueryStringを受け取る $strSQL = Read-MultiLine #QueryStringを実行する $dtSet = Execute-QueryString $strSQL if ( $dtSet.Tables.Count -gt 0 ) { #format-tableコマンドレットでデータを表示 $dtSet.Tables[0].Rows | format-table } }
#エイリアス設定 Set-Alias -name EQS -value Execute-Query -scope "Global"
|
開発ポイントですが、
複数行の入力を受け取ることができるようにSQL*PLUSもどきを作る その5(PowerShell Tips)で紹介した Read-MultiLine関数を使用しています。
入力を受け取った後は SQL*PLUSもどきを作る その3(PowerShell Tips) で紹介したExecute-QueryString関数を実行し、結果を表示しています。
QueryStringを実行するたびに関数名 Execute-Query と入力するのは面倒なので、エイリアス設定をすることをおすすめします。(今回エイリアス名をEQSとしました)
使用方法および実行結果は下記の通りです。
List1
PS > eqs select * from emp ;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ----- ----- --- --- -------- --- ---- ------ 7369 SMITH CLERK 7902 1980/12/17 ... 800 20 7499 ALLEN SALESMAN 7698 1981/02/20 ... 1600 300 30 7521 WARD SALESMAN 7698 1981/02/22 ... 1250 500 30 7566 JONES MANAGER 7839 1981/04/02 ... 2975 20 7654 MARTIN SALESMAN 7698 1981/09/28 ... 1250 1400 30 7698 BLAKE MANAGER 7839 1981/05/01 ... 2850 30 7782 CLARK MANAGER 7839 1981/06/09 ... 2450 10 7788 SCOTT ANALYST 7566 1987/04/19 ... 3000 20 7839 KING PRESIDENT 1981/11/17 ... 5000 10 7844 TURNER SALESMAN 7698 1981/09/08 ... 1500 0 30 7876 ADAMS CLERK 7788 1987/05/23 ... 1100 20 7900 JAMES CLERK 7698 1981/12/03 ... 950 30 7902 FORD ANALYST 7566 1981/12/03 ... 3000 20
|
List2
PS > eqs select * from emp where JOB='CLERK';
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ----- ----- --- --- -------- --- ---- ------ 7369 SMITH CLERK 7902 1980/12/17 ... 800 20 7876 ADAMS CLERK 7788 1987/05/23 ... 1100 20 7900 JAMES CLERK 7698 1981/12/03 ... 950 30
|