Perl -> Module

DBI OracleDBにアクセス

Oracle 10g にアクセスする

オラクルのモジュールを使用するので、perl も以下の場所を指定する。

#!/opt/oracle/product/10.2.0/db_1/perl/bin/perl
次に、ライブラリ検索パス @INC に DBI.pm のパスを指定する。

ライブラリのパスは find /opt/oracle -name DBI.pm で検索する。

use DBI; が使えるか確認


ora01.pl
-------------------------------------------------------------------------------------
#!/opt/oracle/product/10.2.0/db_1/perl/bin/perl

$ORACLE_HOME="/opt/oracle/product/10.2.0/db_1";

push(@INC,"$ORACLE_HOME/perl/lib");
push(@INC,"$ORACLE_HOME/perl/lib/5.8.3");
push(@INC,"$ORACLE_HOME/perl/lib/5.8.3/i86pc-solaris-thread-multi");
push(@INC,"$ORACLE_HOME/perl/lib/5.8.3/i86pc-solaris-thread-multi/auto");
push(@INC,"$ORACLE_HOME/perl/lib/site_perl/5.8.3/i86pc-solaris-thread-multi");
push(@INC,"$ORACLE_HOME/perl/lib/site_perl/5.8.3/i86pc-solaris-thread-multi/auto");
push(@INC,"$ORACLE_HOME/perl/lib/site_perl/5.8.3/i86pc-solaris-thread-multi/Bundle");

use DBI;
-------------------------------------------------------------------------------------
実行する。。が、エラーになる

# ora00.pl
Can't locate Carp.pm in @INC (@INC contains: 
 /build/630/perl/bin/Solaris/Opt/lib/5.8.3/i86pc-solaris-thread-multi
 /build/630/perl/bin/Solaris/Opt/lib/5.8.3 
 /build/630/perl/bin/Solaris/Opt/lib/site_perl/5.8.3/i86pc-solaris-thread-multi
 /build/630/perl/bin/Solaris/Opt/lib/site_perl/5.8.3 
 /build/630/perl/bin/Solaris/Opt/lib/site_perl .) at DBI.pm line 155.
BEGIN failed--compilation aborted at DBI.pm line 155.
Compilation failed in require at ./ora00.pl line 11.
BEGIN failed--compilation aborted at ./ora00.pl line 11.
#




 BEGEIN{ push(@INC,...)  }で囲まないとだめらしい。
-------------------------------------------------------------------------------------
#!/opt/oracle/product/10.2.0/db_1/perl/bin/perl
BEGIN {
        $ORACLE_HOME="/opt/oracle/product/10.2.0/db_1";
        push(@INC,"$ORACLE_HOME/perl/lib");
        push(@INC,"$ORACLE_HOME/perl/lib/5.8.3");
        push(@INC,"$ORACLE_HOME/perl/lib/5.8.3/i86pc-solaris-thread-multi");
        push(@INC,"$ORACLE_HOME/perl/lib/5.8.3/i86pc-solaris-thread-multi/auto");
        push(@INC,"$ORACLE_HOME/perl/lib/site_perl/5.8.3/i86pc-solaris-thread-multi");
        push(@INC,"$ORACLE_HOME/perl/lib/site_perl/5.8.3/i86pc-solaris-thread-multi/auto");
        push(@INC,"$ORACLE_HOME/perl/lib/site_perl/5.8.3/i86pc-solaris-thread-multi/Bundle");
}

use DBI;
-------------------------------------------------------------------------------------

# ora00.pl
#
とりあえず OK!

selectでTABLEのデータを表示する


ora02.pl
-------------------------------------------------------------------------------------

   ※省略 

use DBI;

$db="dbi:Oracle:host=127.0.0.1;sid=orcl";
$uid="ora01";
$pass="ora01";

$dbh = DBI->connect($db,$uid,$pass);

$sql = "select * from test";

$sth = $dbh->prepare($sql);
$sth->execute();

while ( @row = $sth->fetchrow_array ){
        print $list = join(",",@row) ."\n";
}

$dbh->disconnect;

-------------------------------------------------------------------------------------

実行すると正しく表示されたのでok

# ora02.pl
1,taro                ,01-FEB-08
2,goro                ,03-JAN-08
3,jiro                ,03-MAR-08
#

insertでTABLEにデータを追加する


ora03.pl

   ※省略 

-------------------------------------------------------------------------------------
use DBI;


$db="dbi:Oracle:host=127.0.0.1;sid=orcl";
$uid="ora01";
$pass="ora01";
$dbh = DBI->connect($db,$uid,$pass);

### INSERT ###


prepare()では、カラム数分 ?,?,? を指定して、
execute()でデータをセットする。
※プレースホルダ:値を安全にするための機構らしい

$sql = "insert into test values(?,?,?)";
$sth = $dbh->prepare($sql) or die $dbh->errstr;

@arr = ("4","siro","22-AUG-08");

$sth->execute(@arr);


### SELECT  ###

$sql = "select * from test";

$sth = $dbh->prepare($sql);
$sth->execute();

while ( @row = $sth->fetchrow_array ){
        print $list = join(",",@row) ."\n";
}

$dbh->disconnect;
-------------------------------------------------------------------------------------

追加された。

# ora03.pl
1,taro                ,01-FEB-08
2,goro                ,03-JAN-08
3,jiro                ,03-MAR-08
4,siro                ,22-AUG-08
#

updateでTABLEのデータを修正する


	$sql = "update test set hizuke=to_date(?,'YYYY-MM-DD') where name=? ";
	@arr = ("2008-02-01","taro");
	
	$sth = $dbh->prepare($sql) or die $dbh->errstr;
	$sth->execute(@arr);

deleteでTABLEのデータを削除する


	$sql = "delete from test where name=? ";
	@arr = ("siro");
	
	$sth = $dbh->prepare($sql) or die $dbh->errstr;
	$sth->execute(@arr);



      Document-Folder          一覧
HP-UX
HULFT
JAVA
JP1
JavaScript
Linux
MAC
PHP
Perl
Python
Ruby
SOA
Solaris
Unix全般
Windows
XML
エクセル
スタイルシート
セキュリティー
データベース
ネットワーク
パソコン
ブラウザ
プログラム構文
仮想化
          RSS-Folder
ニュース
   アットマーク・アイティ(@IT)
   シンクイット(ThinkIT)
   インターネットコム
   インターネットウォッチ
   日経IT-Pro
   日経パソコン
   CNET Japan
   ZD-NetJapan
   MYCOM
   RBB-Today
ベンダー
   日本IBM
   日本HP
   サンマイクロシステムズ
   NEC
   富士通
   日立
ソフトウェア
   マイクロソフト
   トレンドマイクロ
   オラクル
   サイボウズ
   Mozilla
   野村総合研究所
   (その他ソフトウェア企業)
更新履歴 一覧
 07/08 PERF
プログラム構文
 07/07 PERF
プログラム構文
 06/25 オブジェクトプログラミング2
Perl>サンプル
 07/12 クローン作成
仮想化>vCenter
 07/12 vyatta設定
ネットワーク>vyatta
 07/12 vyattaインストール
ネットワーク>vyatta
 07/12 リポジトリサーバ
Linux>サーバ構築
 07/05 VMwareのインストール
仮想化>VMware
 07/05 PXEブート
仮想化>KVM
 07/01 DHCPでのPXEブート
仮想化>KVM
 06/27 qcow2仮想DISK作成
仮想化>KVM
 06/13 NWの設定
仮想化>VMwareEsxi
 06/13 IPアドレスの変更
仮想化>VMwareEsxi
 06/12 自動ssh
Unix全般>シェル>Bash
 06/12 diffプログラミング
Python
Google