2017-03-06 11 views
0

当社にはAS400を管理するベンダーがあります。そのサービスの1つは、iSeriesを使用して照会できる表を介してファイルを提供することです。ただし、表には列が1つしかなく、各レコードはファイルの1行にすぎません。だから私は、入力された順序を維持しながら、テーブルからすべてのレコードを選択する必要がありますが、私はORDER BYを使うことができる列を持っていません。IBM AS400 iSeries - selectステートメントのソート順

私はリレーショナルデータベースでは、ORDER BY句のないselect文に保証されたソート順はありません。 AS400/iSeriesシステムも同様に動作しますか?私が行った読書から、それはDBMSの別の種類であるように見えますが、selectがレコードがテーブルに挿入された順序を変更するかどうかはわかりません。選択を実行するたびに正しいソート順と思われるものが常に表示されますが、可能であれば保証したいと考えています。

ありがとうございました。

+0

SQLを使用している場合、将来予期しないエラーが発生していないことを確認するだけの場合は、「ORDER BY」を含むことで何が問題になりますか? –

+0

1つの列しかなく、その列のデータにはソートする論理的な方法はありません。だから私はORDER BYを使うことは何もない。これはベンダーにテキストファイルとして提供され、ベンダーはそれをファイルの行と同じ順序でテーブルに挿入しますが、自分では並べ替える数値などはありません。 – Mike

+0

SQL SELECTによるすべてのクエリはありますか?それが単一列のテーブルだけの場合、単にコンテンツを読む人以外の "クエリ"が必要なのでしょうか? – user2338816

答えて

3

明示的なORDER BY句を指定しないと、SQLオプティマイザが最も効率的と考える順序でレコードを返すことができます。

DB2/400には「相対レコード番号」の概念があります。テーブルの「再利用されたレコードを再利用する」設定が*YESでない限り、新しいレコードは常にテーブルに追加されます。

あなたはファイル内の物理的な順序でレコードを注文するRRN機能を使用することができます。

SELECT * FROM TABLENAME ORDER BY RRN(TABLENAME) 
+0

これは私の問題を解決しました。ご助力ありがとうございます! – Mike

-2

が、これはFIFOの順序でレコードを取得しますRRN(mytableは)によって句順序を追加します。しかし、ベンダーがどのようにテーブルを読み込むかによって異なります。これを信頼しないで、いつかは失敗するでしょう。これは、ネイティブas400テーブルで動作します。

必要に応じてselect文にorder by句を追加することを検討してください。

これは永遠に機能します。レコードが郵便番号で必要な場合は、郵便番号で注文してください。名前順にレコードが必要な場合は、「名前」で注文します。 order by句を指定しない限り、レコードの順序は保証されません。

ご質問がありましたら、はい選択は、選択項目にorder by節がない場合にselectを使用してDB2(as400)の順序を変更できます。 Db2は、インデックスを使用して結果をより速く提示しようとします。例

select * from customer when cust_name like 'Dan%' 

については

そしてCUST_NAMEすることにより、顧客の索引があります。

結果は、おそらくcust_nameの順に出てきます。他の要素にもよりますが、理論的にはorder by節のないselectはどのような順序でも出てくる可能性がありますが、テーブルまたはテーブルの主キーに対するインデックスの順序が最も可能性が高いでしょう。

+0

OPは以前に質問とコメントの両方でこの可能性がない理由を説明していたので、「Order by Clauseを追加することを検討してください」という理由で投票を停止しました。 – jmarkmurphy

+0

一部の人が盲目的に従います。いくつかはしません。 – danny117