Áö½ÄÀº Çϴ÷Πºñ»óÇÏ´Â ³¯°³¿Í °°´Ù

Àüü |  ¸®´ª½º (139)   À©µµ¿ì (34)   ÇØÅ·/º¸¾È (81)   PHP (12)   PERL (82)   ½© (24)   ±â Ÿ (28)   IT839 (14)   ¿À¶óŬ (8)   ¾ÆÆÄÄ¡ (49) 

 hakkoo ( 2006-03-15 16:26:38, Hit : 3103
 Perl DBI ¸ðµâ ¿¹Á¦

³»¿ë
±âÃÊ
Á¢¼Ó ¸¸µé±â
¿É¼Çµé
SQL »ç¿ëÇϱâ
Áß±Þ
SELECT statements
°í±Þ
Transactions
ÁÖÀÇ
Other Resources
À̹®¼­ÀÇ ¸ñÀûÀº Perl DBI modulesÀ» ÀÌ¿ëÇÑ µ¥ÀÌÅͺ£À̽º Á¢±Ù¿¡ ´ëÇÑ ¿¹Á¦¸¦ Á¦°øÇÏ´Â °ÍÀÌ´Ù. À̰ÍÀ» ÀÛ¼ºÇÏ°Ô µÈ ÀÌÀ¯´Â DBI mailing list¿¡ ³Ê¹« ¸¹Àº Æ®·¡ÇÈÀÌ °É¸®±â ¶§¹®ÀÌ´Ù.

ÀÌ ¹®¼­´ë·Î ÁøÇàÇϸé DBI¸¦ ÀÌ¿ëÇÏ¿© ¿À¶óŬ µ¥ÀÌŸº£À̽º·Î Á¢±ÙÇÏ´Â ¹æ½ÄÀ» ¹è¿ì°Ô µÉ °ÍÀÌ´Ù. DBI ±âÃÊ·Î ºÎÅÍ ½ÃÀÛÇÏ¿© ¼º´É°ú ½Å·Ú¼ºÀ» Çâ»ó½ÃŰ´Â ¹æÇâÀ¸·Î ÁøÇàÇÏ°Ô µÉ°ÍÀÌ´Ù.


±âÃÊ
óÀ½À¸·Î ÇØ¾ß ÇÒ°ÍÀº DBI¸¦ ¼³Ä¡ÇÏ´Â ÀÏÀÌ´Ù. À̰ÍÀ» À§Çؼ­ DBI INSTALL ¹®¼­¸¦ ÂüÁ¶Çϱ⠹ٶõ´Ù. À̰ÍÀÌ ´Ù µÇ°í ³ª¸é database driver ¶Ç´Â DBD¸¦ ¼³Ä¡ÇÒ Çʿ䰡 ÀÖ´Ù. DBD¸¦ ¼³Ä¡Çϱâ À§ÇÑ ¼³¸í ¿ª½Ã °¢°¢ÀÇ package ³»¿¡ Æ÷ÇԵǾî ÀÖ´Ù. ´ëºÎºÐÀÇ perl ¸ðµâµéó·³ DBI/DBD¸¦ ¼³Ä¡ÇÏ´Â °ÍÀº ½±°í °£ÆíÇÏ°Ô µÇ¾î ÀÖ´Ù.

localhost:/opt/src/perl_modules/DBI-1.02$ perl Makefile.PL && make && make test && make install
DBI¿Í DBD¸¦ ÀûÀýÇÏ°Ô ¼³Ä¡ÇÏ°í ³­ ÈÄ, ´ÙÀ½°ú °°Àº ¹æ½ÄÀ¸·Î Á»´õ ÀÚ¼¼ÇÑ Á¤º¸¸¦ ¾òÀ» ¼ö ÀÖ´Ù:

localhost:~$ perldoc DBI
µ¥ÀÌÅͺ£À̽º·Î Á¢¼ÓÇϱâ
µ¥ÀÌÅͺ£À̽º·Î Á¢±ÙÇÏ´Â °ÍÀº µ¥ÀÌÅͺ£À̽ºÀÇ Á¾·ù¿¡ µû¶ó ´Ù¸¥ ¹æ½ÄÀ» ÇÊ¿ä·Î ÇÑ´Ù. ÀÌ·± ±¤¹üÀ§ÇÑ Á¤º¸´Â DBD¿Í ÇÔ²² Á¦°øµÇ´Â ¹®¼­¸¦ ÀÐ¾î º¸±â ¹Ù¶õ´Ù. ÀÌ ¿¹Á¦´Â ¿À¶óŬ·Î Á¢¼ÓÇÏ´Â ¹æ¹ý¿¡ ´ëÇØ¼­ ÁÖ·Î ³íÇÏ°Ô µÉ°ÍÀÌ´Ù.

use strict;
use DBI;

my $dbh = DBI->connect( 'dbi:Oracle:orcl',
                        'jeffrey',
                        'jeffspassword',
                      );
    À§ÀÇ Á¢¼Ó ¹®ÀÚ¿­¿¡´Â data source name, username ±×¸®°í password µîÀÇ ¼¼°³ÀÇ ÀÎÀÚ¸¦ ÇÊ¿ä·Î ÇÑ´Ù. DSNÀº dbi:DriverName:instanceÀÇ ÇüÅ·ΠÀÖ´Ù. ±×·¯³ª Á¢¼ÓÀÌ ¼º°øÇß´ÂÁö ¾ÈÇß´ÂÁö¸¦ ¾î¶»°Ô ¾Ë°ÍÀΰ¡? ¸ÕÀú ¼º°øÇß´Ù¸é connect´Â Âü°ª (true value)À» ±×·¸Áö ¾Ê´Ù¸é °ÅÁþ°ªÀ» µ¹·Á ÁÙ°ÍÀÌ´Ù. µÑ°·Î DBI´Â package ³»¿¡ ÀÖ´Â $DBI::errstr º¯¼ö¿¡ ¿¡·¯ ¸Þ½ÃÁö¸¦ ³Ö¾î µÐ´Ù.

use strict;
use DBI;

my $dbh = DBI->connect( 'dbi:Oracle:orcl',
                        'jeffrey',
                        'jeffspassword',
                      ) || die "Database connection not made: $DBI::errstr";
$dbh->disconnect();
    disconnect() method ¸¦ ÀÌ¿ëÇÏ¿© "Database handle destroyed without explicit disconnect" ¿¡·¯¸¦ ÇÇÇÒ ¼ö ÀÖ´Ù.

¿É¼Çµé
connect() method ´Â ¿É¼Ç hash¸¦ ÃëÇÑ´Ù. ÀÚÁÖ »ç¿ëµÇ´Â ¿É¼Ç¿¡´Â ´ÙÀ½°ú °°Àº °ÍµéÀÌ ÀÖ´Ù: AutoCommit, ÀÌ °ªÀÌ ÂüÀ̶ó¸é µ¥ÀÌÅͺ£À̽º transactionÀ» ÀÚµ¿À¸·Î commit ÇÏ°Ô µÈ´Ù; RaiseError, À̰ÍÀº ¿¡·¯°¡ ¹ß»ýÇßÀ» ¶§ DBIÀÇ ºÒÆòÀ» $DBI::errstr ¿¡°Ô ¾Ë·Á ÁØ´Ù; PrintError, À̰ÍÀº DBI°¡ $DBI::errstr¿¡ °æ°í¸¦ ³Ö¾î ÁØ´Ù.

ÀÌ ÇÁ·Î±×·¥¿¡¼­, Æ®·£Á§¼ÇÀ» »ç¿ëÇÒ·Á°í ÇÑ´Ù. ±×·¡¼­ AutoCommit´Â off·Î, RaiseError´Â onÀ¸·Î, ±×¸®°í PrintError´Â ±âº»°ªÀ¸·Î ³²°Ü µÎ¾ú´Ù.

use strict;
use DBI;

my $dbh = DBI->connect( 'dbi:Oracle:orcl',
                        'jeffrey',
                        'jeffspassword',
                        {
                          RaiseError => 1,
                          AutoCommit => 0
                        }
                      ) || die "Database connection not made: $DBI::errstr";
$dbh->disconnect();
    µ¥ÀÌÅͺ£À̽ºÀÇ AutoCommitÀ» off·Î µÎ¾ú´Ù´Â °ÍÀ» ¸í½ÉÇØ¾ß ÇÑ´Ù. À̰ÍÀº Æ®·£Á§¼Ç¿¡ Ä¡¸íÀûÀÎ ¿À·ù°¡ ¹ß»ýÇßÀ» °æ¿ì¿¡´Â Áö¿øÇÏÁö ¾Ê´Â´Ù´Â °ÍÀÌ´Ù.

SQL »ç¿ëÇϱâ
ÀÌÁ¦ ¿ì¸®´Â µ¥ÀÌŸº£À̽º¸¦ °¡Áö°í ¹«¾ð°¡ À¯¿ëÇÑ °ÍÀ» ÇÒ Áغñ°¡ µÈ°ÍÀÌ´Ù. SQL ¹®À» µ¥ÀÌÅͺ£À̽º¿¡ Àü´ÞÇÏ´Â ¹æ¹ý¿¡´Â µÎ°¡Áö°¡ ÀÖ´Ù. SELECT¿Í °°Àº row¸¦ µ¹·Á ÁÖ´Â ÁúÀǵ鿡 ´ëÇØ ÁغñµÈ ¹æ½ÄÀ» Àû¿ëÇÒ °ÍÀÌ´Ù. CREATE, DELETE¿Í °°Àº ´Ù¸¥ ÁúÀǵéÀº do method¸¦ ÀÌ¿ëÇÒ °ÍÀÌ´Ù. ÈÄÀÚ¸¦ ¸ÕÀú ÇØº¸°í ÀüÀÚ´Â µÚ¿¡ ¼³¸íÇϰڴÙ.

ÀÌ ÇÁ·Î±×·¥Àº µ¥ÀÌÅͺ£À̽º ³»¿¡ employee ¶ó´Â Å×À̺íÀ» ¸¸µå´Â °ÍÀÌ´Ù.

use strict;
use DBI;

my $dbh = DBI->connect( 'dbi:Oracle:orcl',
                        'jeffrey',
                        'jeffspassword',
                        {
                          RaiseError => 1,
                          AutoCommit => 0
                        }
                      ) || die "Database connection not made: $DBI::errstr";

my $sql = qq{ CREATE TABLE employees ( id INTEGER NOT NULL,
                                       name VARCHAR2(128),
                                       title VARCHAR2(128),
                                       phone CHAR(8)
                                     ) };
$dbh->do( $sql );

$dbh->disconnect();
    Áß±Þ
¾î¶»°Ô µ¥ÀÌÅͺ£À̽º·Î Á¢±ÙÇϸç, ¾î¶»°Ô ¿¡·¯¸¦ ¾Ë¾Æ³»¸ç, ¾î¶»°Ô ´Ü¼øÇÑ SQL¹®À» ½ÇÇà ÇÒ°ÍÀÎÁö¿¡ ´ëÇØ º¸°Ô µÉ °ÍÀÌ´Ù. ÀÌÁ¦ Á»´õ ½Ç¿ëÀûÀÎ Äڵ带 ÀÛ¼ºÇØ º¸ÀÚ.

SELECT ±¸¹®
SELECT ±¸¹®Àº SQL¿¡¼­ °¡Àå ¸¹ÀÌ ÀÌ¿ëµÇ´Â ¹®ÀåÀÏ °ÍÀÌ´Ù. SELECT¸¦ ÀÌ¿ëÇϱâ À§ÇÏ¿©, ¸ÕÀú ±¸¹®À» Áغñ(Prepare)ÇÏ°í ±×°ÍÀ» ½ÇÇà(Execute)ÇØ¾ß ÇÑ´Ù. ´ÙÀ½ Äڵ忡¼­ $sth´Â ±¸¹® ÇÚµé(statement handle)ÀÌ´Ù. À̰ÍÀº SELECT¹®ÀÇ °á°ú·Î Á¢±ÙÇϰíÀÚ ÇÒ ¶§ ÀÌ¿ëµÉ °ÍÀÌ´Ù.

use strict;
use DBI;

my $dbh = DBI->connect( 'dbi:Oracle:orcl',
                        'jeffrey',
                        'jeffspassword',
                        {
                          RaiseError => 1,
                          AutoCommit => 0
                        }
                      ) || die "Database connection not made: $DBI::errstr";

my $sql = qq{ SELECT * FROM employees };
my $sth = $dbh->prepare( $sql );
$sth->execute();

$dbh->disconnect();
    À§¿¡ ³ª¿­µÈ ÄÚµå´Â µ¥ÀÌÅͺ£À̽º°¡ ±¸¹®¿¡ ´ëÇØ ½ÇÇà °èȹÀ» ¼¼¿ì°í ±×·¯°í ³ª¼­ ±¸¹®À» ½ÇÇàÇÏ´Â °ÍÀÌ´Ù. °á°ú·Î µ¹¾Æ¿Â rowµéÀ» °¡Áö°í ¾î¶² ÀÛ¾÷À» ÇÏÁö´Â ¾Ê´Â´Ù. ´ÙÀ½¿¡ ³ª¿­µÈ Äڵ忡¼­´Â µ¥ÀÌÅͺ£À̽º·Î ºÎÅÍ ³ª¿Â ·¹ÄÚµåµéÀ» ¾ò±â À§ÇÏ¿© bind_columnsÀ» »ç¿ëÇÏ´Â °ÍÀÌ´Ù. fetch°¡ È£ÃâµÇ¸é ±×°ÍÀº µ¥ÀÌÅͺ£À̽º·Î ºÎÅÍ µ¹¾Æ¿Â °ªµé·Î ä¿öÁö°Ô µÈ´Ù.

use strict;
use DBI;

my $dbh = DBI->connect( 'dbi:Oracle:orcl',
                        'jeffrey',
                        'jeffspassword',
                        {
                          RaiseError => 1,
                          AutoCommit => 0
                        }
                      ) || die "Database connection not made: $DBI::errstr";

my $sql = qq{ SELECT id, name, title, phone FROM employees };
my $sth = $dbh->prepare( $sql );
$sth->execute();

my( $id, $name, $title, $phone );
$sth->bind_columns( undef, \$id, \$name, \$title, \$phone );

while( $sth->fetch() ) {
  print "$name, $title, $phone\n";
}

$sth->finish();
$dbh->disconnect();
    À̰ÍÀº ȸ»ç ÀüÈ­ºÎ¸¦ Ãâ·ÂÇÏ´Â ÁÁÀº ÇÁ·Î±×·¥ÀÌ´Ù. ±×·¯³ª WHEREÀÌ ¾î¶°ÇѰ¡? ¿ì¸®´Â Çѹø SQL ¹®ÀåÀ» ÁغñÇϱâ À§ÇØ bind_paramÀ» »ç¿ëÇϰí, ´ë´ÜÈ÷ ºü¸£°Ô À̰ÍÀ» ¿©·¯¹ø ÀÌ¿ëÇß´Ù.

use strict;
use DBI;

my $dbh = DBI->connect( 'dbi:Oracle:orcl',
                        'jeffrey',
                        'jeffspassword',
                        {
                          RaiseError => 1,
                          AutoCommit => 0
                        }
                      ) || die "Database connection not made: $DBI::errstr";

my @names = ( "Larry%", "Tim%", "Randal%", "Doug%" );

my $sql = qq{ SELECT id, name, title, phone FROM employees WHERE name LIKE ? };
my $sth = $dbh->prepare( $sql );

for( @names ) {
  $sth->bind_param( 1, $_, $DBI::SQL_VARCHAR );
  $sth->execute();

  my( $id, $name, $title, $phone );
  $sth->bind_columns( undef, \$id, \$name, \$title, \$phone );

  while( $sth->fetch() ) {
    print "$name, $title, $phone\n";
  }
}

$sth->finish();
$dbh->disconnect();
    °í±Þ
Transactions
ÀÌÁ¦±îÁö Æ®·£Àè¼ÇÀ» ¿äÇÏ´Â °ÍÀº ´Ù·ç¾î º¸Áö ¾Ê¾Ò´Ù. ¸¸¾à UPDATE ¶Ç´Â DELETE ¹®ÀåÀ» ½ÇÇàÇÒ Çʿ䰡 ÀÖ´Ù¸é Æ®·£Á§¼ÇÀ» »ç¿ëÇØ¾ß ÇÑ´Ù. DBI ¹®¼­¿¡ µû¸£¸é, DBI¸¦ ÀÌ¿ëÇÏ¿© °ß°íÇÑ Æ®·£Á§¼ÇÀ» ±¸ÇöÇÒ·Á¸é ¿¡·¯¸¦ Àâ¾Æ³»±â À§Çؼ­ eval{...} blocksÀ» »ç¿ëÇØ¾ß Çϸç, Á¾·áÇÒ ¶§ commitÀ̳ª rollbackÀ» ÀÌ¿ëÇÑ´Ù. ´ÙÀ½ Äڵ忡¼­ ¿¹Á¦¸¦ º¸¿©ÁÖ°í ÀÖ´Ù.

ÀÌ ÇÁ·Î±×·¥Àº ³×°³ÀÇ ·¹Äڵ带 µ¥ÀÌÅͺ£À̽º·Î ¿Ã¸®´Â °ÍÀÌ´Ù.

use strict;
use DBI;

my $dbh = DBI->connect( 'dbi:Oracle:orcl',
                        'jeffrey',
                        'jeffspassword',
                        {
                          RaiseError => 1,
                          AutoCommit => 0
                        }
                      ) || die "Database connection not made: $DBI::errstr";

my @records = (
                [ 0, "Larry Wall",      "Perl Author",  "555-0101" ],
                [ 1, "Tim Bunce",       "DBI Author",   "555-0202" ],
                [ 2, "Randal Schwartz", "Guy at Large", "555-0303" ],
                [ 3, "Doug MacEachern", "Apache Man",   "555-0404" ]
              );

my $sql = qq{ INSERT INTO employees VALUES ( ?, ?, ?, ? ) };
my $sth = $dbh->prepare( $sql );


for( @records ) {
  eval {
    $sth->bind_param( 1, @$_->[0], $DBI::SQL_INTEGER );
    $sth->bind_param( 2, @$_->[1], $DBI::SQL_VARCHAR );
    $sth->bind_param( 3, @$_->[2], $DBI::SQL_VARCHAR );
    $sth->bind_param( 4, @$_->[3], $DBI::SQL_VARCHAR );
    $sth->execute();
    $dbh->commit();
  };

  if( $@ ) {
    warn "Database error: $DBI::errstr\n";
    $dbh->rollback(); #just die if rollback is failing
  }
}

$sth->finish();
$dbh->disconnect();
    ÁÖÀÇ
¿¹Á¦¿¡¼­ finish¸¦ »ç¿ëÇÏ´Â °ÍÀº ²À ÇÊ¿äÇÑ °ÍÀº ¾Æ´Ï´Ù. ¸¸¾à ´Ù ½ÇÇàÇÏ°í ³ª¸é ±¸¹®ÇÚµé (statement handele)À» ´Ù ½ÇÇàÇÏ°í ³ª¸é È£ÃâÇÏ´Â °ÍÀ̸ç, ÇÁ·Î±×·¥À» ´Ù ½ÇÇàÇÏ°í ³ª¼­ È£ÃâÇÏ´Â °ÍÀº ¾Æ´Ï´Ù.
Ç×»ó use strict.
Other Resources
DBI at Hermetica
DBI mailing list information
DBI mailing list archives
Persistent connections with mod_perl


http://database.sarang.net/database/perl/dbi-example.html#connect



Kazelprw (2008-03-11 11:16:20)
Hi webmaster!

    








82   [PERL] Deprecated: Function eregi() is deprecated ¿¡·¯ ¼öÁ¤ ½ºÅ©¸³Æ®  hakkoo 2010/08/04 290
81   [PERL] Perl script to monitor disk space and send an email [2]  hakkoo 2008/01/16 2232
  [PERL] Perl DBI ¸ðµâ ¿¹Á¦ [1]  hakkoo 2006/03/15 3103
79   [PERL] qmail-remote ÀÎÅͼÁÆ® (¹ß¼Û·Î±× ¸¸µé±â)  hakkoo 2005/10/03 2882
78   [PERL] ¿ø°Ý ¸ð´ÏÅ͸µ [12]  hakkoo 2005/08/25 2998
77   [PERL] ¸ÞÀÏ ¸±·¹ÀÌ Á¡°Ë  hakkoo 2005/08/04 2729
76   [PERL] Using Regular Expression  hakkoo 2005/02/05 2642
75  ºñ¹Ð±ÛÀÔ´Ï´Ù [PERL] B/D¿¡ arp ÆÐŶÀ» º¸³» mac Á¤º¸ °»½Å  hakkoo 2004/11/24 22
74   [PERL] SYN_Flooding °ø°ÝÀ» °¨Áö  hakkoo 2004/10/22 2649
73  ºñ¹Ð±ÛÀÔ´Ï´Ù [PERL] ip_alive.pl  hakkoo 2004/10/13 20
72  ºñ¹Ð±ÛÀÔ´Ï´Ù [PERL] technote_patch.pl  hakkoo 2004/10/09 18
71  ºñ¹Ð±ÛÀÔ´Ï´Ù [PERL] technote_id_search.pl  hakkoo 2004/10/07 8
70  ºñ¹Ð±ÛÀÔ´Ï´Ù [PERL] vuserinfo.pl  hakkoo 2004/08/24 24
69   [PERL] ¡Ù CPAN module·Î ÀνºÅç ¹Ù·ÎÇÏ±â  hakkoo 2004/07/29 2654
68   [PERL] Net::Telnet ¸ðµâ  hakkoo 2004/07/09 2557
67   [PERL] ¿©·¯°³ÀÇ ¹è¿­À̳ª ÇØ½¬ ¹ÝȯÇϱâ(¼­ºê·çƾ) [18]  hakkoo 2004/06/15 3360
66   [PERL] CGI ȯ°æ º¯¼ö  hakkoo 2004/06/15 2716
65   [PERL] ¼­ºê·çƾ ÀÛ¼º ¹× È£Ãâ¹ý  hakkoo 2004/06/15 2513
64   [PERL] ¡Ú ÆÄÀÏ ÀÔÃâ·Â ¹× °ü¸®  hakkoo 2004/06/15 2711
63   [PERL] HTML ¹®Àå Ãâ·ÂÇÏ±â  hakkoo 2004/06/14 2458

1 [2][3][4][5]
 

Copyright 1999-2010 / skin by sattonari