[pgsql-jp: 25143] Re: INSERT文に関して

KAWAI,Takanori GCD00051 @ nifty.ne.jp
2002年 3月 7日 (木) 22:43:41 JST


川合孝典です。

----- Original Message -----
From: "Tadashi Kanbayashi" <Tadashi.Kanbayashi @ toppan.co.jp>
To: <pgsql-jp @ ml.postgresql.jp>
Sent: Thursday, March 07, 2002 12:12 PM
Subject: [pgsql-jp: 25121] Re: INSERT文に関して


> 神林です。
>
> 下記の件、参考になりました。
>
> ところで、
>
> my $sth = $dbh->prepare('INSERT INTO tbl VALUES(?, ?)');
>
> のprepare句で、ある配列にinsert文を100個保持しておいて、
> その配列をprepareに食わせることも可能だと思いますけど、
>
> @ins = (insert・・・ insert・・・ insert・・・ ・・・・・100個)
> my $sth = $dbh->prepare(”@ins”);
(以下略)

実際にやってみましたか?
#なにしろ出張中で手元に環境が無いんで。
ただできたとしても自分としてはやらないでしょうね。
複数のINSERT文を同時に実行できるかどうかは、対応する
データベースやDBDによりますし。あんまり長いSQL文では
受け付けてくれないこともありえます。
そうでなくても変数の値をそのまま埋め込むよりは、DBIとしては
「正しい」(^^)使い方なんだろうと思っています。

ちなみに送信済みメールを見たら、copyコマンドのサンプルが
見つかったので。ついでに。詳しくはDBD::Pgのドキュメントを
ご覧ください。

[DBIによる例]
use strict;
use DBI;
my $hDb = DBI->connect('dbi:Pg:dbname=gotdate', 'postgres', '',
      {AutoCommit=>1, RaiseError=>1}) || die $DBI::errstr;
eval {
#Export
    $hDb->do('copy emp to stdout');
    my $sLine;
    open OUT, '>data';
        $hDb->func($sLine, 1000, 'getline');
        while($sLine ne '\\.') {
                   print OUT $sLine, "\n";
                $hDb->func($sLine, 1000, 'getline');
        }
        close OUT;
        $hDb->func('endcopy');
#Import
        $hDb->do('copy emp from stdin');
        open IN, '<data';
        while($sLine = <IN>) {
                $hDb->func($sLine, 'putline');
        }
        close IN;
        $hDb->func("\\.\n", 'putline');
        $hDb->func('endcopy');
};
die $@ if($@);
$hDb->disconnect;

===================================================
川合 孝典 (Hippo2000)
   DBI日本語メーリングリスト管理人、Kansai.pm所属
   kwitknr @ cpan.org GCD00051 @ nifty.ne.jp
   http://member.nifty.ne.jp/hippo2000
   http://www.hippo2000.net/
「Perlを256倍使うための本 DBI編」 3/14発売
http://www.ascii.co.jp/books/detail/4-7561/4-7561-4058-0.html
===================================================




pgsql-jp メーリングリストの案内