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用データベース独立インターフェース
$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)
トラックバック(0)|コメント(0)
この記事のトラックバックURL:
コメントを書く
何かしら