0

DBI モジュールを使用してこのコードを書きました。コードは次のとおりです。

#!/usr/local/bin/perl -w
  use DBI;
  use strict;
# Open a connection
  my $dbh = DBI->connect("dbi:DB2:awdrt", "db2inst1", "db2inst1", {RaiseError => 1});
# use VALUES to retrieve value from special register
  my $stmt = "select RTRIM(substr(A.TBSP_NAME,1,30)),A.TBSP_TYPE as TYPE,A.TBSP_FREE_PAGES as FREE,B.CONTAINER_NAME as CON_PATH from SYSIBMADM.TBSP_UTILIZATION A ,SYSIBMADM.CONTAINER_UTILIZATION B where A.TBSP_ID=B.TBSP_ID and A.TBSP_AUTO_RESIZE_ENABLED=0 with UR";
  my $sth = $dbh->prepare($stmt);
  $sth->execute();
# associate variables with output columns...
  my ($col1,$col,$col3,$col4);
  $sth->bind_col(1,\$col1);
  $sth->bind_col(3,\$col3);
  $sth->bind_col(4,\$col4);
  while ($sth->fetch) { if ($col3 <= 2000){
  print "$col1 has $col3 pages with container $col4\n";}
        }
  $sth->finish();
  $dbh->disconnect();

O/p は次のとおりです。

TRANS_DATA has 1616 pages with container /adrst/bdts/trans_data_container
MASTER_INDEX has 1872 pages with container /adrst/bdts/master_index_container
TRANSACTION_INDEX has 1856 pages with container /adrst/bdts/transaction_index_container

そして、クエリが実行されたときのテーブル データは次のとおりです。

1                              TYPE       FREE                 CON_PATH                                                                                                                                                                                   
------------------------------ ---------- -------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
USERSPACE1                     DMS                       15056 /adrst/bdts/userspc_container                                                                                                                                                              
USERSPACE1                     DMS                       15056 /adrst/bdts/userspc_container1                                                                                                                                                             
MASTER                         DMS                        3584 /adrst/bdts/master_container                                                                                                                                                               
TRANS_DATA                     DMS                        1616 /adrst/bdts/trans_data_container                                                                                                                                                           
MASTER_INDEX                   DMS                        1872 /adrst/bdts/master_index_container                                                                                                                                                         
TRANSACTION_INDEX              DMS                        1856 /adrst/bdts/transaction_index_container                                                                                                                                                    
TEMP_SYS                       DMS                        2192 /adrst/bdts/temp_sys_container                                                                                                                                                             
AUDIT_DATA                     DMS                        3360 /adrst/bdts/audit_data_container                                                                                                                                                           
TEMP_USR                       DMS                        2672 /adrst/bdts/temp_usr_container                                                                                                                                                             
TSASNCA                        DMS                        2840 /home/db2inst1/db2inst1/NODE0000/SQL00002/TSASNCA                                                                                                                                          
TSASNUOW                       DMS                        2880 /home/db2inst1/db2inst1/NODE0000/SQL00002/TSASNUOW                                                                                                                                         
TSASNAA                        DMS                        3712 /home/db2inst1/db2inst1/NODE0000/SQL00002/TSASNAA                                                                                                                                          
TSCDADDRESSMASTER              DMS                        2048 /home/db2inst1/db2inst1/NODE0000/SQL00002/CDADDRESSMASTER                                                                                                                                  

  13 record(s) selected.

ここで私がしようとしているのは、基本的に 2000 ページ未満のテーブルスペースを報告することです。私の質問は、このモジュールなしでどのように行うかです。ハッシュ、正規表現、grep のより良いオプションは何でしょうか? もしそうなら、3つの列を o/p として報告する必要があります 、これらまたは使用される可能性のあるものを使用してそれを行うにはどうすればよいですか?

助けていただければ幸いです.....

4

2 に答える 2

0

クライアントがデータベースへの接続を要求している場合は、適切なドライバーを使用してデータベースに接続できるようにする必要があります。それ以外は狂気です。要するに: を使用しますDBI

root アクセス権を取得することが問題の場合は、システムの Perl インストールを変更せずに、モジュールをスクリプトにローカルにインストールできます。これを参照してください: root 権限なしで Perl モジュールをインストールするにはどうすればよいですか?

もちろん、逆引用符を使用してシェル コマンドの出力を取得し、それを正規表現で処理するものを作成することもできます。ただし、データベースへの接続がプログラムの主な目的ではなく、この 1 つの正確なクエリを実行するだけでよい場合を除き、これはお勧めしません。その場合、おそらくそれを実行してからモジュールをインストールする方が簡単でしょう。

于 2013-02-25T09:02:04.140 に答える
0

mysql クライアントを使用して csv 形式 (タブ区切り) でデータを取得し、それを perl oneliner にパイプします。必要に応じて、出力をフォーマットできます。

db2...| perl -lne '@t=split(/\t/);print $_ if $t[2] >= 2000;'
于 2013-02-25T09:10:54.067 に答える