BlogもどきのWeblog

備忘録と日々の呟きとメモとCGIの実験場とされる何か。
プロフィール

GLANSHE
絵描き担当らしい

Total: 30945
Today: 149
Yesterday: 81
最新の記事

コンテンツ

最新のコメント

最新のトラックバック

カテゴリー

リンク

ニコ動MyListLink

DBI.pmのconnectの使い方(DBD::Oracle)
引数はこう。

$dbh = DBI->connect($dsn, $user, $pass, $attr, $old_driver);

■説明
・$dsn

$dsn ||= $ENV{DBI_DSN} || $ENV{DBI_DBNAME} || '' unless $old_driver;

$old_driverが引数として渡されていない場合、
$dsn、$ENV{DBI_DNS}、$ENV{DBI_DBNAME} の順に評価して、全部偽の場合は空文字が$dsnに入る。

$dsnの書式

dbi:ドライバ名(.*?):その他

最初のdbiは大文字小文字関係なし

ドライバ名は、DBD::mysqlとか、DBD::Oracleを使う場合、
mysql、Oracleというように、モジュール名を大文字小文字をきちんと合わせて指定する。

・$user
DBのユーザ名

・$pass
DBのパスワード

・$attr
ハッシュで指定する。

%attributes = (
  PrintError => 1,
  AutoCommit => 1,
  ref $attr ? %$attr : (),
  # attributes in DSN take precedence over \%attr connect parameter
  $driver_attrib_spec ? (split /\s*=>?\s*|\s*,\s*/, $driver_attrib_spec, -1) : (),
);

$driver_attrib_specにはドライバ名(.*?)の、「.*?」の部分が入っている。
何に使っているのか不明。

こんな風に設定されて、ドライバの接続メソッドに引数として渡される。

$attr = {AutoCommit => 0};
とか書いておくと最初からオートコミットがオフになる。

・$old_driver
多分内部呼び出し用。
外部から呼び出す時は基本的に使ってはいけない…と思う。

ドライバに対しての接続要求が通ると、その戻り値の$dbhが返る。
その際の引数は、($dsn, $user, $pass, $attr)
このとき、$dsnは "dbi:ドライバ名(.*):"より後の文字列。つまり、「その他」

DBD::Oracleの場合
「その他」の書式
$dbname = 「その他」;

$dbnameを何も記述しない場合
接続先はlocalhostになる?
アクセスするDB名をユーザ名の後ろに@を付けて書く必要がある。

$user = "dbuser@SID";

$dbname = $1 if !$dbname && $user && $user =~ s/\@(.*)//s;
こうなってるので後ろじゃなくてもいいのかも…


$dbnameにアクセスするDB名を書く場合
特に何も考えなくていい。接続先はlocalhostとなる?メソッドの記述箇所がわかんえ…
$dsn = "dbi:Oracle:SID";


$dbnameに接続先情報を色々書く場合
「;」をセパレータとして記述する。こんな感じ?

$dsn = "dbi:Oracle:HOST=example.co.jp;SID=SID;PORT=1521;INSTANCE_NAME=INSTANCE"

SERVER、SERVICE_NAMEとかも指定オプションとしてあるけどこれどう使うんだっけ…

外部に接続する場合はこの記述方法でないとだめ。
その際にHOSTは必須となる。
と言うか、「その他」の情報に「;」を書いた時点でHOSTが必須になる…。

こんなところかな。

■警告
ただし未検証。(苦笑)

参考
DBD::Oracle - DBIモジュールのためのOracleデータベース・ドライバ
DBI - Perl用データベース独立インターフェース


time stamp:2010/03/29 00:48:49
トラックバック(0)|コメント(0)
この記事のトラックバックURL:

コメントを書く
名前:
タイトル:
MAIL:
URL:
コメント:
PASS:
何かしら