• 締切済み

DB2 INSERT時の格納順序

DB2 UDBで以下のようなINSERT文を発行した場合、 insert into TABLE_A values(行1), (行2), (行3); テーブルへの格納順序が、 行1 行2 行3 のようにならないこともありますか? AIXにDBサーバーがある、 Webアプリケーションからの、 INSERT文です。 ちなみに、 クラスター索引などは 使われていません。 ご教示お願いします。

みんなの回答

noname#182251
noname#182251
回答No.2

#1です。DB2は知らないのでとんでもない勘違いをしているかもしれませんが。 「格納順が違っている」ことを、どのようにして確認しておられるのでしょうか。結局「データを取得」後、表示しているのではないでしょうか? リレーショナルDBは、「指示」が無い限り、出力順(取得順)に関して、何の保証もしない(次回も同じとは限らない)ものと理解しています。 外しているか(^^;

ayumi_kamuro
質問者

お礼

何の保証もしない(次回も同じとは限らない) のですね。 あまり詳しくなかったもので、 格納順が優先されるのだと思っていました。 それというのも、 SQL文のORDER BY句で指定した順番以外の順番が、 該当テーブルをSELECT*(ソートなし)で全件取得した際の結果の順番と、まったく同じだったので。

noname#182251
noname#182251
回答No.1

DB2は知りません(^^; で、リレーショナルDB一般に関していえば、「格納順序」に意味はない(意味を持たせない)と考えています。順序が必要であれば明示的に(フィールドを利用し)書き込むべきと。

ayumi_kamuro
質問者

お礼

ありがとうございます。 アプリケーションでデータを取得する際は、 ソート等を考えれば、 問題ないですよね。 今回、格納順に依存したプログラムが発見され、 修正はともかく、 発生する場合と、しない場合があるということを どう説明しようかと、考えておりました。

関連するQ&A

  • [PostgreSQL]別DBのテーブルのSelect、Insert

    お世話になっております PostgreSQL8.1を使用しまして あるテーブルにInsertがかかると その内容を判断し別のテーブルに insertをする仕組みが必要になり いろいろ試してみて TriggerとFunctionを使用すれば 実装できるとこまでわかりました。 ただしその別テーブルが別DBに配置されているので そのテーブルに以下のようなInsert文を発行しても エラーになってしまいます。 Insert into SUB_DB.TEST_TBL values('test','date'・・・・); (SUB_DB:ストアドを実行しているのとは別のDB) ストアドから別テーブルを参照更新する手段を ご存知のかたご教授いただけますでしょうか。 よろしくお願いいたします。

  • INSERTできません

    以下のSQL文でテーブルに追加したいのですが、実行すると 実行中のメッセージがでたまま動かなくなってしまいます。 他のテーブルで同じようなINSERT文を実行すると追加できるので SQL文の間違いではないと思うのですが、原因がわかりません。 どなたか教えてください。 INSERT INTO table (CODE_A, CODE_B, SAISYUU_KOUSIN_DATE) values('9999', '999999', TO_DATE('2005/11/0716:15:14','YYYY/MM/DD HH24:MI:SS'));

  • [ADO.NET]Accessの日付型にデータをInsertするには?

    言語はVB.NETでDBはAccess2003、OleDbで接続をしています。 テーブルに日付型のフィールドがあるのですが、 SQL文でInsertしようとすると、 System.Data.OleDb.OleDbException: 更新可能なクエリであることが必要です。 という例外がスローされます。 SQL文としては、 INSERT INTO TEST_TABLE (name,updatetime) VALUES ('テスト',DateValue('2006/12/11 18:00:00')); というような構文になっています。 初歩的な不明点ですが、ご教授お願いします。

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

    ご教授よろしくお願い致します。 現在、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】 です。

  • 入力値と外部キーをINSERTするには

    追加したいカラムが3つあるとしまして、そのうち2つはフォームからの入力値で、残り1つは別テーブルのIDをWHEREで引っ張ってきてINSERTしたい場合、INSERT...VALUES()とINSERT...SELECT構文を組み合わせないとダメかと思うのですが、組み合わせるとうまくいきません。2つの文に分けるしかないのでしょうか? やりたいことは下の感じのSQLです。が、解釈してくれません。 INSERT INTO room(A, B, C) VALUES (1, 2, SELECT other_table.id FROM other_table WHERE other_table.id = 1");

    • ベストアンサー
    • MySQL
  • Pear::DBで、インサートしたプライマリーキーを取得したい

    宜しくお願い致します $dbはPear::DBを使用するとして... $db = DB::connect($dsn); $sql = "insert into Hoge (name) values (\"Name\")"; $res = $db->query($sql); これでDBに一行追加されるわけですが このときに追加した行のプライマリーキーを取得したいと考えています 何かいい手はございますでしょうか?

    • ベストアンサー
    • PHP
  • INSERT文でフィールドの1つだけを他のテーブルから取ってきた値を入れたい

    挿入するフィールドの内1つだけを他のテーブルから取ってきた値を使いたいのですが、 insert into table1 (field1, field2, field3) values('a', (select field2 from table2 where field4='xxx'), 'b'); Oracleだと↑の書き方でいけるのですが、PostgreSQL(6.5.3)だとエラーになってしまいます。 2回もDBにアクセスしにいくのはいやなので、1文で書きたいです。上記以外で他の書き方をご存知でしたら教えてください。よろしくお願いします。

  • insertでのエラーについて

    お世話になります。 アップロードしたバイナリデータを変数に入れて、それをinsertしているのですが、DBに入りません。 テーブルでは、data mediumblob not nullと設定しています。Perlスクリプト内で、次のように書いています。 $sql="insert into data_tbl(data)"; $sql.="values('" . $datafile . "')"; 上記の$datafileにバイナリデータが入っています。 このようにして実行しているのですが、You have an error in your SQL syntax. とエラーになりDBに格納できません。ご教授よろしくお願いします。

  • 受け取ったIDに該当する物にデータをDBに格納

    $query = "select * from ki where id= '{$_GET['id']}'"; こんな風に受け取ったIDによって表示が変わるページなんですが、 $sql = 'INSERT INTO kise(gazou2) VALUES ("' . $output . '")'; だと、新たにフィールドを作ってデータを格納してしまいます。 例えば{$_GET['id']}で受け取ったIDに該当するフィールドに格納したい場合 $sql = 'INSERT INTO kise(gazou2) VALUES ("' . $output . '")'; をどう改変したら良いですか?? $sql = 'INSERT INTO kise({$_GET['id']}gazou2) VALUES ("' . $output . '")'; と力ずくでしてみましたがダメでした。

    • 締切済み
    • PHP
  • 変数のinsertに関しまして

    MySQLのインサートに関して質問です。 2つの値を登録したい場合、 下記のように対応すれば、 データの挿入は通常どおり完了しますが、 insert into テーブル名 (フィールド1, フィールド2) values (値1, 値2);  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 私の場合は、 「ken_name」と「machi_name」という変数を、 上記でいうところの、 「値1」と「値2」に入力したいと思っています。 変数の指す部分は、 それぞれ30文字程度の英数字です。 プログラム内で、 以下のように、 インサートのクエリー処理を行ってみたら、 DB接続も正常に出来ているし、 エラーとかも一切出ていないのですが、 DB内のテーブルに何も登録されていませんでした。 insert into テーブル名 (フィールド1, フィールド2) values (ken_name, machi_name);  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ やり方としては、合っていますでしょうか? 何かアドバイスいただけると嬉しいです。 宜しくお願い致します。