From: "竹山 雄也" Date: 2010-01-05T18:08:55+09:00 Subject: [ruby-list:46728] Re: MySQLテーブル数の把握 前川さん こんにちは。竹山と申します。 この ML での投稿は初めてです。 皆様よろしくお願いします。 MySQL テーブル数の取得についてですが、以下の方法でできました。 SHOW TABLES; SELECT FOUND_ROWS(); ちなみに、以下のようなサブクエリを用いた SQL は Syntax Error でした。 SELECT COUNT(*) FROM (SHOW TABLES) Ruby とはあんまり関係ありませんが、勉強になりました。 Yuya Takeyama > 前川です。 > > MySQLのデータで、テーブル数をとりたいのですが、どのようにすればよいのか、途 > 方にくれています。 > dbiを使用するサンプルを見つけ、以下のようなコーディングを実施しましたが、 > テーブル名は取得できましたが、実際に、何個のテーブル名が取得できているのか > は、 > fetchで、取り出した結果で、個数を求めています。 > > fetchを使用せず、直接、テーブル名の数を取得するためには、どうすればよい > か、ご教示いただきたく、 > よろしくお願いします。(ユーザで作成したテーブル数を直接求めるSQL文は、無 > かったと思いますが・・・) > > ご指導いただきますよう、お願いします。 > > バージョンは以下です。 > > ruby 1.8.7 (2009-06-12 patchlevel 174) [i386-mswin32] > > *** LOCAL GEMS *** > actionmailer (2.3.4) > actionpack (2.3.4) > activerecord (2.3.4) > activeresource (2.3.4) > activesupport (2.3.4) > deprecated (2.0.1) > linecache (0.43) > mysql (2.8.1) > rack (1.0.0) > rails (2.3.4) > rake (0.8.7) > ruby-debug-base (0.10.3) > ruby-debug-ide (0.4.5) > sinatra (0.9.4) > sqlite3-ruby (1.2.5) > > > コーディングサンプル > #!D:/Ruby/bin/ruby.exe -Ks > > require 'dbi' > > begin > dbh = DBI.connect('DBI:Mysql:fbsys:a28341', 'dbuser01', 'dbkey')#←データ > ベース MySQL に接続 > sth = dbh.prepare('show tables') #←実行するSQL文を設定 > puts dbh #←デバッグライト > puts sth #←デバッグライト > sth.execute #←SQL文を実行し、結果が、sthにはいる。? > count = 0 #←テーブル名用カウンタの初期化を実施 > sth.fetch { |row| #←この部分で、sthから結果(テーブル名)をfetchで取り出 > し、 > p row #←この部分で、出力しています。 > count = count + 1 #←テーブル名もカウンタを+1しています。 > } > sth.finish # sthの終了? > puts 'count='+count.to_s #←この部分でcount=n を出力しています。 > > #DB例外発生時の処理 > rescue DBI::DatabaseError => e > p "An error occurred" > p "Error code: #{e.err}" > p "Error message: #{e.errstr}" > #切断漏れしないようにensureでdisconnectします。 > ensure > dbh.disconnect if dbh > end > > > #デバッグライトの結果です。 > > # > # > ["aplist"] > ["chistory"] > ["efbinput"] > ["fbginput"] > ["fbinput"] > ["fbninput"] > ["kfiletable"] > ["sffiletable"] > ["sfiletable"] > count=9 #count には、テーブル名の数が入っています。 > > > 了 > > >