• 締切済み

マルチテーブル・インサート

ご教授よろしくお願い致します。 現在、table_aにInsertされたカラム(no,name)のデータを同時にtable_bにも反映するSQL文を考えております。 【table_a】              no | name | price               ==============         005  apple   500         001  banana  250         【table_b】 no | name | color ================= 005  apple   red 001  banana  yellow Insertをそれぞれのテーブルで実行すれば、もちろん反映はできるのですが一度のInsert文でできるのならそれにこしたことはありません。 いろいろ調べた結果、下記のサイトでできるようなことが記載してあったため、実行したのですが、『ALL』がシンタックスエラーとなってしまいます。 そのため、postgresのマニュアルを確認してみたところ、Insert文にALL句の指定は特別記載されていなかったため、できないとも思っているのですが… サイト↓ http://www.atmarkit.co.jp/fdb/rensai/sqlclinic12/sqlclinic12_1.html サイトを参考にしたSQL文 『INSERT ALL INTO table_a(no,name) VALUES(005,apple) INTO table_b(no,name) VALUES(005,apple); 』 何か良い方法をご存知の方がいましたら、ご教授よろしくお願い致します。同じことをUpadteでもやらなければいけないのですが、それはもう少し自分で考えてみます。 只、できないことが明白な場合は、ご指摘を頂けると有難いです。 環境としましては、 OS 【Windows xp】 DB 【PostgreSQL 8.2】 です。

みんなの回答

  • alte_6
  • ベストアンサー率60% (9/15)
回答No.3

複数tableを同時に追記するなら transaction内でinsertを呼ぶしかないと思います。 table_AとBの関係性がよくわかりませんが 1つのテーブルにできるなら、table_A、BにあたるViewをつくればいいですが

code55
質問者

お礼

ご指摘有難うございました。 いろいろ方法があるのですね。 参考にさせて頂きます。

回答No.2

提示されたINSERTの構文は、Oracleのノウハウとして説明されたものです。 マルチテーブル・インサートは、Oracleの独自機能であり、他の主要なRDBMSでは実装されていません。 主要なRDBMSで特定の表にINSERT、UPDATE、DELETEした時、その背景で他表の更新をしたい場合は、トリガを使います。PostgreSQLでは、「トリガ」と、それと類似した機能で「ルール」があります。

code55
質問者

お礼

返答が遅くなり、申し訳ありませんでした。 やはりマルチテーブル・インサートは、無いのですか... その他のやり方という事で、ご教授して頂いた『ルール』を試してみます。 有難うございました。

  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.1

INSERT ALLはOracle以外には実装されていないと思います。 (SQL Serverにもありません) それぞれのDBMSがSQL標準に準拠しない多くの構文をサポートしています。

code55
質問者

お礼

ご指摘ありがとうございました。 ということは、今回はそれぞれInsert文を発行しなくては いけないということですね。

関連するQ&A