FC5にoracle8iのクライアントが入らない

カエルチュウイホウ

jreって単なるシェルスクリプトだったので、頑張ればGUIインストーラーを起動させられそうな感じが。

jreいじってみたけど、segmentation faultが治らん。

FC2もFC5もkernel2.6系なんだからoracle8iクライアントがFC2にはインストールできてFC5にはできないのは納得いかん。

libgcjがあやしい。

clashes with built-in method

Class::DBI::OracleのおかげでSQL書かなくて快適になったんだが、悩ましいカラム名のついているテーブルがあった。

Column 'qv' in Test::Table clashes with built-in
 method at ./m2desc.pl line 6

あー、qvとは、、、、

aliasってないのかなぁとちょっと探してみたけど、それだと__PACKAGE__->set_up_tableでお気軽に設定する意味なくなっちゃうからないんだろうナァ。

やっぱ、テーブルのカラム名変えるしかないんだろうか?既存のプログラムにも手を入れなきゃならんから、これはちょっと現実的でない。参照したいだけだから、qvだけ名前を変えたviewでしのぐ方法もあるにはあるが、、、、

CDBIでうまいことやる方法はないんだろうか、と探してみたけどいい方法は見つからなかった。

Class::DBI::Pager

職場のTTいじくってたら、

これおかしなことやってんじゃんということに気づいた。prev,next自分で書く必要ないじゃん。

 ### navigation like: prev 20 | next 20
[% IF pager.previous_page %]
<a href="display?page=[% pager.previous_page %]">
prev [% pager.entries_per_page %] |
[% END %]
[% IF pager.next_page %]
<a href="display?page=[% pager.next_page %]">
next [% pager.entries_per_page %]
[% END %]

そしてClass::DBI::Plugin::Pagerてのもみっけたのでどう違うんだろうと思って調べたら、 Limitがきくから大きいDBで速くなるのね。

ProductName 実用 Perlプログラミング 第2版
Simon Cozens
オライリージャパン / 3360円 ( 2006-03-01 )


Class::DBI::PagerはClass::DBIのためのミックスインでと書いてあったのだけど、多重継承とはどう違うんだろうか

とか思ったのでソース見てみたけどわからん。明日もう一度じっくり読もう。

CDBIで日ごとに集計をとりたいが、、、、

Class::DBIでMySQLのDatetime型を日付で集計ってどうやるんだろうか?

つまりはこういうことがやりたいんだけど。

mysql> select substring(subdate,1,10) as date,count(*)
mysql> from items group by date;
+------------+----------+
| date       | count(*) |
+------------+----------+
| 2006-04-26 |       15 |
| 2006-04-27 |        2 |
| 2006-05-01 |        5 |
| 2006-05-02 |        1 |
| 2006-05-09 |        2 |
| 2006-05-10 |        1 |
| 2006-05-11 |       37 |
| 2006-05-12 |        2 |
+------------+----------+

こいつを棒グラフとか折れ線グラフで画像に書き出してやろうと思ったんだけどナァ、、、、

やっぱset_sqlなのかな。

Class:DBI::AutoLoader

mixiみとったら、Class::DBI::AutoLoaderがわかんないとかいうトピックをみっけた。

自動的にサブクラスを作ってくれるらしい。サブクラスの命名則は文字数字以外をsplitして最初の文字を大文字にして連結。

$table = join('', map { ucfirst($_) } split(/[^a-zA-Z0-9]/, $table));

おー、これは便利そうだ、いったいどうやってるんだ?とコードを眺めてみたら、importメソッドからgenerateClassを呼び出して、eval($class)でサブクラスを作ってるみたい。

で、importってドコで呼ばれんの?

ってことで少し調べてみたら、 続・初めてのPerlの12章に書いてあった。

use My::Module qw(kzfm hana yuki);

は以下のコードと等価

require My::Module;
My::Module->import( qw(kzfm hana yuki) );

ProductName 続・初めてのPerl - Perlオブジェクト、リファレンス、モジュール
Randal L.Schwartz
オライリー・ジャパン / ?円 ( 2003-12 )


Class::DBI::OracleでLongTruncOkのエラー

調子にのってClass::DBI::OracleでO/Rマッピングじゃ!とQSARやりやすいようにデータベースのモジュールを片っ端から書いたら、

DBD::Oracle::st fetchrow_array failed: ORA-24345: A Truncation or null fetch error occurred (DBD ERROR: ORA-01406 error on field 7 of 14, ora_type 8, LongReadLen too small and/or LongTruncOk not set) [for Statement "SELECT cmr, nnhoh, mixture, mwt, status, mlogp, smiles, tpsa, ro5_score FROM PHYSICO WHERE id=? " with ParamValues: :p1='99999'] at /usr/lib/perl5/site_perl/5.8.3/DBIx/ContextualFetch.pm line 88, line 203.

とエラーが。

どうも、smilesで突っ込んであった化合物情報が長すぎるっぽい。 今まで、問題にならなかったのはsmilesをselectする必要がなかったかららしい。

use base qw(Class::DBI::Oracle);

our $VERSION = '0.01';

# Preloaded methods go here.
__PACKAGE__->set_db('Main','dbi:Oracle:orcl','kzfm','kzfm',{LongReadLen => 20000});

__PACKAGE__->set_up_table("PHYSICO");

1;
__END__

とやってLongReadLenの値を変えてOKなかんじ。

Class::DBI::Oracle

Class::DBI::mysqlのset_up_table便利すぎなんで、最近もっぱらmysql派なんだけどオラクルにもないかなと探したらあった。

Class::DBI::Oracle

カラム名とか入れなくてもいいのに慣れちゃうとあれだ、ずぼらになる。というか、テーブル作る際にそのままCDBIで使えるようなわかりやすいカラム名付けたり、APIのこと考えたテーブルスキーマにするように努力したりするのでいいことなのかも。