• 締切済み

ファイルデータ内容を SQL条件へ代入する方法を教えてください。

ファイルデータ内容を SQL条件へ代入する方法を教えてください。 例)ファイル(1) あいう かき さしす あかさたな … これを SQLのWhere区に 条件設定したい。 SELECT XXX FROM VVV where(ZZZ LIKE 'あいう' OR ZZZZ LIKE 'かき' OR …); という風にファイルの行があるだけ すべてLIKE条件にいれられて、一度に計算できるようにしたい。 Perl(またはShell)プログラムで ファイル読込、SQLの実行をして、結果を取得する方法をおしえてください。 プログラムは詳しくないので、詳細に書き方を教えていただけると幸いです。 よろしくお願いいたします。

  • Perl
  • 回答数2
  • ありがとう数2

みんなの回答

  • YkazubonY
  • ベストアンサー率30% (26/86)
回答No.2

これは、俺が年に数回やっている仕事と同じだな。 100万円払えば、土日に教えてあげるよ。

回答No.1

use DBI; # DB Name my $db_name = 'sqlite_test.db'; unlink $db_name; my @user_infos = (   { id => 1, name => 'Alice' },   { id => 2, name => 'Bob' },   { id => 3, name => 'Carol' },   { id => 4, name => 'David' }, ); print '--- Connect DB', "\n"; my $dbh = DBI->connect(   'dbi:SQLite:dbname=' . $db_name,   '', '',   {  AutoCommit => 0,     RaiseError => 1   } ) || die "$db_name : $!"; my $sql; my $table = 'user_info'; print '--- Create Table', "\n"; $sql = 'CREATE TABLE ' . $table . '(id integer primary key, name)'; $dbh->do($sql) or die $dbh->errstr; $dbh->commit  or die $dbh->errstr; my $sth; print '--- Insert Record', "\n"; $sth = $dbh->prepare( 'INSERT INTO ' . $table . '(id, name) VALUES (?, ?)' )   || die $dbh->errstr; for my $info_ref (@user_infos) {   $sth->bind_param( 1, $info_ref->{id} )  or die $sth->errstr;   $sth->bind_param( 2, $info_ref->{name} ) or die $sth->errstr;   $sth->execute or die $dbh->errstr;   $dbh->commit or die $dbh->errstr; } print '--- Select Record', "\n"; $sql = "SELECT * FROM $table WHERE name LIKE ? OR name LIKE ?"; $sth = $dbh->prepare($sql) || die $sth->errstr; $sth->bind_param( 1, '%Bob%' )  or die $sth->errstr; $sth->bind_param( 2, '%Carol%' ) or die $sth->errstr; print '--- use fetch (fetchrow_arrayref)', "\n"; $sth->execute or die $sth->errstr; while ( my $ref = $sth->fetch() ) {   print "@$ref\n"; } if ( $sth->err ) {   die $sth->strerr; } $dbh->commit or die $dbh->errstr; print '--- end of procedure', "\n"; $sth->finish or die $sth->errstr; undef $sth; # fail safe $dbh->disconnect or die $dbh->errstr; unlink $db_name or die "$db_name : $!"; # result # $ perl -w foo.pl # --- Connect DB # --- Create Table # --- Insert Record # --- Select Record # --- use fetch (fetchrow_arrayref) # 2 Bob # 3 Carol # --- end of procedure

関連するQ&A

  • SQLで最大値を検索条件にする場合の方法

    下記のような<検索対象データ>から、<取得したいデータ>を取得するSQLがわからず困っています。 ご教授下さい。 【条件】 同一[ID]で[NO]が最大のレコードのみを取得する。 <検索対象データ> ID NO DATA ---------------- AA 1 あいうえ AA 2 あいう AA 3 あい BB 1 かきく BB 2 かき CC 1 さしす CC 2 さし <取得したいデータ> ID NO DATA ---------------- AA 3 あい BB 2 かき CC 1 さし よろしくお願いします。

  • Pro*CでVARCHAR2項目の検索

    こんにちは。たぶんとても基礎的なことと思うのですが。。。 Pro*CでSELECTするとき、WHERE句の中でVARCHAR2項目を条件に入れています。 が、どうも検索がうまくできなくて質問しました。 ホスト変数の定義…  char VVV[5]; 検索するところ… select xxx into :yyy from ZZZ where ZZZ.varchar2no4BYTE = :VVV ; のような感じです。ZZZ.varchar2no4BYTEの型はVARCHAR2(4)です。 で、ZZZ.varchar2no4BYTE が"1234"と"12"の2つのレコードを 登録しておいて、VVVに"1234"を入れると、ちゃんと検索できました。 んが、VVVに"12"を入れても検索されません。 そんなのあり?と VVVに"12 "を入れてもだめ、 VVVをVARCHAR構造体?にして、"12"で長さ2にしてもだめ、 だけどZZZ.varchar2no4BYTEがCHAR(4)だと"12"でOK、 なんなんだとPro*Cのマニュアル見てもNUMBER型の検索例ばかり、 というところで力尽きました。 (あー、CHAR_MAP=STRING って関係あるですかね) 動的SQLにすればよいのかもしれませんが、事情で使えないのです。 それ以前にホスト変数の理解が間違っているのではないかと思い、 お聞きするしだいです。

  • 複数条件のSQL文

    こんばんは。 SQL文を書いていますが困っています。 複数条件のつなげ方がうまくいかないのです。 通常のSQLでかけば・・・ (1)WHERE(AreaID='OSAKA') (2)WHERE Size BETWEEN 'S' AND 'LL' (3)WHERE Adrs LIKE '豊中市%' と3文になるような複数のSQL条件を・・・ 「SELECT * FROM ordermaster 」につなげたいと思っています。 どのようにつながれば正解なのでしょうか? 是非とも宜しくお願い致します。

  • SQL 複数条件を設定

    使用言語はjavaで処理しており、 SQL Server2005にて下記のようなテーブル(T_Kekka)があります。    ID   a-1   a-2   b-1   b-2   c-1   c-2     ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄    1   bbb   aaa   ddd    ccc   eee   fff       2   ggg   bbb   ccc     hhh   iii    jjj       3   bbb   mmm   ddd   ccc   fff    eee       4   bbb   aaa   ccc    ddd   qqq   rrr       5   zzz   sss   ttt     ccc   vvv   xxx       6   zzz   aaa   ttt     ccc   vvv   fff       7   zzz   zzz   zzz     zzz   zzz    zzz       8   qqq   rrr   ccc     ddd   fff    eee    検索する値は下記の通りです。 検索値 |a-1|a-2|b-1|b-2|c-1|c-2|  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ |aaa|bbb|ccc|ddd|eee|fff| 期待値としては、aはaのグループで検索、bはbのグループで検索、cはcのグループで検索をし、 一致個数の多い順に出力したいと考えております。(理想は下記のような感じです。) また、グループ内であれば逆転していてもOKです。 (例えばID:1のaグループのような感じです。) *1 一致数が同じ場合はcグループの数が多いデータが最優先となり、その他はID順になります。 期待値    ID   a-1   a-2   b-1   b-2   c-1   c-2   一致数  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄    1   bbb   aaa   ddd   ccc   eee   fff     6    3   bbb   mmm   ddd   ccc   fff    eee    5    8   qqq   rrr    ccc   ddd   fff    eee    4・・・*1    4   bbb   aaa   ccc   ddd   qqq   rrr     4    6   zzz   aaa   ttt    ccc   vvv    fff     3    2   ggg   bbb   ccc   hhh   iii     jjj      2    5   zzz   sss   ttt    ccc   vvv    xxx     1    7   zzz   zzz   zzz    zzz   zzz    zzz     0 知識不足のため私には複雑すぎて悩んでいる状況なので、 どなた様か知識がある方にご教授願いたく思います。 また、まだテスト段階なので現状のようなテーブル構造にしてしまいましたが、 他のテーブル構造の方がデータが抽出しやすかったり、レスポンスがいい場合がありましたら、 ご教授いただけると助かります。 説明が分かりづらく表が見づらくて申し訳ございませんが、 宜しくお願い致します。

  • SQLでORを略す方法

    こんにちは、 (SQL server2005環境) ストアドのwhere文なのですが、 codeの条件でtypeが77,88,99のいずれかを検索させたい場合 下記の文になると思いますが、もう少し簡略することは出来ますでしょうか? WHERE TABLE2.[Code] LIKE COALESCE(@Code, TABLE2.[Code], '') and TABLE2.[TYPE] = '77' or TABLE2.[Code] LIKE COALESCE(@Code, TABLE2.[Code], '') and TABLE2.[TYPE] = '88' or TABLE2.[Code] LIKE COALESCE(@Code, TABLE2.[Code], '') and TABLE2.[TYPE] = '99'

  • 複数の条件がある場合のsqlの書き方

    下記の場合、どのようなsqlを書けばいいのでしょうか? 以下のようなテーブルがあるとします。 apple ← テーブル名 name1, name2, name3, hide←カラム 日本, おいしい, 赤りんご, 1←ここからデータ アメリカ, りんご, い, 0 りんご, まずい, 高い, 0 ------------------------------------ 【条件】 name1, name2, name3 のどれかが”りんご”が含まれている かつ hide が 0 どのようにすればいいのでしょうか? ためしに、 select * from apple where hide=0 and name1 lile %りんご% or name2 like %りんご% or name3 like %りんご% で試してみましたが、希望した結果が出ませんでした。 どうぞよろしくお願いします。

    • ベストアンサー
    • MySQL
  • 末尾がスラッシュでないデータを抜き出すSQL文

    テーブルphonelistのsiteurlフィールドにURLが多数入っています。 URLの末尾はhttp://xxx.com/などとスラッシュで終わることを前提としていますが、データのいくつかはhttp://xxx.comなどとスラッシュで終わらないものがあるようです。 現在、このテーブルのデータを基にPHPを動作させたのですが、スラッシュで終わらないもののみ正常に動作しなかったようです。 もう一度プログラムを動かすために、末尾がスラッシュで終わらないデータのみ抜き出したいですが、自分ではうまくいきません。 SELECT * FROM phonelist WHERE NOT siteurl LIKE "*\/$"; みたいに、私も上のようなSQLをいろいろと試しましたが、どうやってもsiteurlの登録データのすべてが検出されてしまいます。 どなたか末尾がスラッシュではないURLのみを抜き出すSQL文を教えてください。 よろしくお願いします。

  • PerlでCSV形式のファイルの一部分だけを抽出する方法

    Perlをやっていて困っていることがあります。 CSV形式のファイルを開いて、変数に代入した後の処理がわかりません。 どのようにしたいかというと・・・ aaa,bbb,ccc,ddd,eee,fff ggg,hhh,iii,jjj,kkk,lll mmm,nnn,ooo,ppp,qqq,rrr sss,ttt,uuu,vvv,www,xxx yyy,zzz,111,222,333,444 というファイルを読み込んだとします。その後 'fff' の部分だけをスカラー変数に取り込みたいときにはどのような 関数を実行すればいいのでしょうか。 困っています、お願いします。

    • ベストアンサー
    • Perl
  • SQL SERVER で大量データの削除

    delete from table1 where id = 1; delete from table1 where id = 2; delete from table1 where id = 3; もしくは、 delete from table1 where (id = 1) or (id = 2) or (id = 1) という具合のSQLを実行します。 条件は大体20万件程度です。 こちらを実行するとかなり遅いので、 なんとか一括で早く実行する方法はないものでしょうか? 今のところ、プログラムの都合上、プロシージャの中で行なってます。 PROCEDURE UPDATE(@DELSQL nvarchar(max)) EXEC (@DELSQL) @DELSQLに上記SQLが入ります。 大量のINSERTの時は、BULK INSERTのようなやり方があり、 回避できたのですが、困ってます。 どうかよろしくお願いします。

  • SQLの検索条件について教えてください

    PL/SQLを使い始めた初心者です。 Oracleのバージョンは9iです。 検索時の条件の設定について教えてください。 例えば、2つテーブルがあるとします。 Aテーブル.TESTNoA ------------- 11111 22222 33333 44444 55555 Bテーブル.TESTNoB ------------- 11111 33333 55555 SQL発行時、 WHERE A.TESTNoA = B.TESTNoB で3件のレコードが取得できますよね。 これと同じ結果が欲しいのですが、 検索条件にテーブル型の変数(索引付表?)は使用できるのでしょうか? 変数 TestHen(0) = 11111 TestHen(1) = 33333 TestHen(2) = 55555 こんな感じで設定しておいて、この変数を利用して 一度のSQLで結果を取得したいのです。 できればLIKEを使って検索したいのですが…。 書き方がおかしかったらすみません。 どなたかお知恵をお貸しください。