2016-11-02 12 views
0

JDBCドライバはROW_NUMBER機能をサポートしていません。テーブルからデータを読み込むときに、どのように行IDを1からnにすることができますか?進行中のROWID取得1からnまでのOpenEdgeデータベース

私はfirstnameとlastnameとして2つの列を持つテーブルを持っている場合、SQL Serverで "SELECT ROW_NUMBER()OVER(ORDER BY(SELECT NULL))AS rowid、* FROM tableName"のようなクエリを実行します。これにより、ResultSetのfirstnameとlastnameの内容とともに、1からnまでのROWIDが得られます。

だから私のような結果が得られます:

1、フェリックス、曹操

2を、ジャック、チャン

3、ニック、ホー

私がしたいです上記のような順序でROWIDを取得できるように、OpenEdgeデータベースの同様のクエリを実行します。

+0

いいえ、ROWIDが何であるかは分かりません。私はあなたが解決したい問題を説明する必要があると思います! – Jensd

+0

さて、もう一度質問します。 –

+0

実際の要件はROWIDとは関係がなく、結果セットを順次列挙することが実際の要件であると思われます。 –

答えて

3

いいえ、OpenEdgeデータベースにROW_NUMBERと同等のものはありません。 ROWIDについて

http://knowledgebase.progress.com/articles/Article/Is-ORACLE-row-number-function-supported-in-OpenEdge

:整数としてROWIDの考えることは良い考えであるかどうかの議論をさておき

...(あなたが再読み込みリンクkbase必要があります)

特定のROWID値が存在することは保証されておらず、ROWIDが0または1などの値で始まる必要はありません。

ROWIDとRECIDが同じソートで、RECIDがブロック#とそのブロック内の位置からなる整数であると考えられる場合は、 ROWID 0は決して存在しません。なぜなら、記憶領域の最初の部分制御データです。行はそこに格納されません。

ROWIDまたはRECIDの推測を使用して(または可能なすべての値を列挙して)表を正常にスキャンできますが、ギャップを処理する準備が必要です。これは、破損したデータベースからデータを回復しようとする場合などに便利です。しかし、それは普通にやることではありません。

あなたはROWIDが問題の解決策であるが、実際の問題は「ROWID 0を取得する方法」ではないと判断したと思います。私が推測しなければならないのは、おそらくNのバッチで結果セットを取得しようとしていることでしょう。How to mimic SELECT ... LIMIT, OFFSET in OpenEdge SQL?

+0

申し訳ありませんが、私は0と言ってはいけません。あなたは正しい、0は決して存在しないでしょう。 ROWIDは一意の番号を与え、それが1だけ増えていることを知っています。乱数の代わりに1からnまでの数字を始めるだけです。あなたの答えをありがとう –

+0

ROWIDを整数として考えるべきではありませんが、それを脇に置くと、ROWIDは1または他の値で増加しません。 ROWIDの値は予測できません。最高値と最低値の間にはギャップがあり、コードはその事実を受け入れる必要があります。そうでないと機能しません。 –

+0

私はいくつかのレコードだけをテストして、その数が1つ増えると思っていました。ギャップがある場合は、アプリケーションでROWIDを使用できません。 –

関連する問題