ArcSDE10.2.1使用Oracle12c新特性分页
在Oracle 12c推出之后,其中一个新特性就是分页语句。 Easy Top-N and pagination queries ,更易用的Top-N和页码查 询提供了类似MySQL中limit的语法,Row Limiting Clause 注意:该功能是Oracle12c的新特性,并不是ArcGIS的新特性。 语法介绍 row_limiting_
在Oracle 12c推出之后,其中一个新特性就是分页语句。
Easy Top-N and pagination queries ,更易用的Top-N和页码查
询提供了类似MySQL中limit的语法,Row Limiting Clause
注意:该功能是Oracle12c的新特性,并不是ArcGIS的新特性。
语法介绍
<span>row_limiting_clause</span>
The <span>row_limiting_clause</span>
allows you to limit the rows returned by the query. You can specify an offset, and number of rows or percentage of rows to return. You can use this clause to implement top-N reporting. For consistent results, specify the <span>order_by_clause</span>
to ensure a deterministic sort order.
OFFSET
Use this clause to specify the number of rows to skip before row limiting begins. <span>offset</span>
must be a number. If you specify a negative number, then <span>offset</span>
is treated as 0. If you specify NULL, or a number greater than or equal to the number of rows returned by the query, then 0 rows are returned. If <span>offset</span>
includes a fraction, then the fractional portion is truncated. If you do not specify this clause, then <span>offset</span>
is 0 and row limiting begins with the first row.
ROW | ROWS These keywords can be used interchangeably and are provided for semantic clarity.
FETCH
Use this clause to specify the number of rows or percentage of rows to return. If you do not specify this clause, then all rows are returned, beginning at row <span>offset</span>
+ 1.
FIRST | NEXT These keywords can be used interchangeably and are provided for semantic clarity.
<span>rowcount</span> | <span>percent</span> PERCENT Use <span>rowcount</span>
to specify the number of rows to return. <span>rowcount</span>
must be a number. If you specify a negative number, then <span>rowcount</span>
is treated as 0. If <span>rowcount</span>
is greater than the number of rows available beginning at row <span>offset</span>
+ 1, then all available rows are returned. If <span>rowcount</span>
includes a fraction, then the fractional portion is truncated. If <span>rowcount</span>
is NULL, then 0 rows are returned.
Use <span>percent</span>
PERCENT
to specify the percentage of the total number of selected rows to return. <span>percent</span>
must be a number. If you specify a negative number, then <span>percent</span>
is treated as 0. If <span>percent</span>
is NULL, then 0 rows are returned.
If you do not specify <span>rowcount</span>
or <span>percent</span>
PERCENT
, then 1 row is returned.
ROW | ROWS These keywords can be used interchangeably and are provided for semantic clarity.
ONLY | WITH TIES Specify ONLY
to return exactly the specified number of rows or percentage of rows.
Specify WITH
TIES
to return additional rows with the same sort key as the last row fetched. If you specify WITH
TIES
, then you must specify the<span>order_by_clause</span>
. If you do not specify the <span>order_by_clause</span>
, then no additional rows will be returned.
当然,大家最喜欢看的就是实际的例子,总结上面就是,在Oracle12c
环境下,提供了更加方便的分页语句,而不再使用Rownum对象了。
测试环境:
ArcSDE10.2.1、Oracle12.1.0.1
sde@PDBORCL> select count(*) from point; COUNT(*) ---------- 231774 sde@PDBORCL> select count(*) from poly; COUNT(*) ---------- 13
----------------------------------------------------------------------------------
Blog: http://blog.csdn.net/linghe301
----------------------------------------------------------------------------------
1:获得前N条记录的语句
语法: fetch first N rows only;
sde@PDBORCL> set autotrace on sde@PDBORCL> select a.objectid,a.poi_name from poly b,point a where sde.st_within(a.shape,b.shape)=1 order by a.objectid fetch first 10 rows only; OBJECTID POI_NAME ---------- ---------------------------------------------------------------------- 1326 96699994 1790 96700095 6511 96700093 8761 96698253 9650 96698338 10186 96699086 10597 96700092 12400 96698659 12443 96700465 14594 96699995 已选择10行。 执行计划 ---------------------------------------------------------- Plan hash value: 3842462730 ------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | ------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 76 | 55 (0)| 00:00:01 | |* 1 | VIEW | | 1 | 76 | 55 (0)| 00:00:01 | |* 2 | WINDOW SORT PUSHED RANK | | 1 | 417 | 55 (0)| 00:00:01 | | 3 | NESTED LOOPS | | 1 | 417 | 55 (0)| 00:00:01 | | 4 | TABLE ACCESS FULL | POLY | 13 | 2964 | 3 (0)| 00:00:01 | | 5 | TABLE ACCESS BY INDEX ROWID | POINT | 1 | 189 | 55 (0)| 00:00:01 | |* 6 | DOMAIN INDEX (Sel: .0000043)| A6_IX1 | | | 4 (0)| 00:00:01 | ------------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 1 - filter("from$_subquery$_003"."rowlimit_$$_rownumber"通过SQL的执行计划可以看出,系统还是通过Rownum来进行分页<p><span>的,是否我可以理解Oracle封装了一下,做了个二次开发呢?</span></p><p><span><br></span></p><p></p><p><strong><span>----------------------------------------------------------------------------------</span></strong></p><p></p><p><span><span><br></span></span></p><p><span><span>Blog: http://blog.csdn.net/linghe301</span></span></p><p><strong><span>----------------------------------------------------------------------------------</span></strong></p><br><p><span>2:获得第N条开始后的M条的语句</span></p><p><span>语法:offset N rows fetch next M rows only;</span></p><pre class="brush:php;toolbar:false">sde@PDBORCL> select a.objectid from poly b,point a where sde.st_within(a.shape,b.shape)=1 order by a.objectid offset 11 rows fetch next 10 rows only; OBJECTID ---------- 17833 18358 18710 19544 19719 20030 23028 24001 25139 25257 已选择10行。 执行计划 ---------------------------------------------------------- Plan hash value: 3842462730 ------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | ------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 39 | 55 (0)| 00:00:01 | |* 1 | VIEW | | 1 | 39 | 55 (0)| 00:00:01 | |* 2 | WINDOW SORT PUSHED RANK | | 1 | 417 | 55 (0)| 00:00:01 | | 3 | NESTED LOOPS | | 1 | 417 | 55 (0)| 00:00:01 | | 4 | TABLE ACCESS FULL | POLY | 13 | 2964 | 3 (0)| 00:00:01 | | 5 | TABLE ACCESS BY INDEX ROWID | POINT | 1 | 189 | 55 (0)| 00:00:01 | |* 6 | DOMAIN INDEX (Sel: .0000043)| A6_IX1 | | | 4 (0)| 00:00:01 | ------------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 1 - filter("from$_subquery$_003"."rowlimit_$$_rownumber"=0) THEN 11 ELSE 0 END +10 AND "from$_subquery$_003"."rowlimit_$$_rownumber">11) 2 - filter(ROW_NUMBER() OVER ( ORDER BY "A"."OBJECTID")=0) THEN 11 ELSE 0 END +10) 6 - access("SDE"."ST_WITHIN"("A"."SHAPE","B"."SHAPE")=1) 统计信息 ---------------------------------------------------------- 647 recursive calls 0 db block gets 2481 consistent gets 0 physical reads 0 redo size 457 bytes sent via SQL*Net to client 359 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 1 sorts (memory) 0 sorts (disk) 10 rows processed
第一步:先把过滤第1到第N-1的数据
第二步:然后再获得第N到M的数据
----------------------------------------------------------------------------------
Blog: http://blog.csdn.net/linghe301
----------------------------------------------------------------------------------
3:获得前百分比N的语句
语法: fetch first N percent rows only;
sde@PDBORCL> select a.objectid from poly b,point a where sde.st_within(a.shape,b.shape)=1 order by a.objectid fetch first 10 percent rows only; OBJECTID ---------- 1326 1790 6511 8761 9650 10186 10597 12400 12443 14594 15163 17833 18358 18710 19544 19719 已选择16行。 执行计划 ---------------------------------------------------------- Plan hash value: 2419008321 ------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | ------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 52 | 55 (0)| 00:00:01 | |* 1 | VIEW | | 1 | 52 | 55 (0)| 00:00:01 | | 2 | WINDOW SORT | | 1 | 417 | 55 (0)| 00:00:01 | | 3 | NESTED LOOPS | | 1 | 417 | 55 (0)| 00:00:01 | | 4 | TABLE ACCESS FULL | POLY | 13 | 2964 | 3 (0)| 00:00:01 | | 5 | TABLE ACCESS BY INDEX ROWID | POINT | 1 | 189 | 55 (0)| 00:00:01 | |* 6 | DOMAIN INDEX (Sel: .0000043)| A6_IX1 | | | 4 (0)| 00:00:01 | ------------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 1 - filter("from$_subquery$_003"."rowlimit_$$_rownumber"<br><p><span>从这些语句可以看到,原来使用比较麻烦的分页SQL写法,现在变得</span></p><p><span>比较简单和方便了。</span></p><p><span><br></span></p><p><span>目前来说,我在ArcGIS10.2.1 for Server进行Rest测试,还不支持该</span></p><p><span>方法,希望Esri能够尽快改进吧。</span></p><p></p><p><strong><span>----------------------------------------------------------------------------------</span></strong></p><p></p><p><span><span><br></span></span></p><p><span><span>Blog: http://blog.csdn.net/linghe301</span></span></p><p><strong><span>----------------------------------------------------------------------------------</span></strong></p><br><p><span>另外需要说明一个问题。</span></p><p><span>很多情况下都会出现这种现象,比如在一个班级里面的数据成绩,从</span></p><p><span>最高排序有100、99、97、97、94等</span></p><p><span>那么,第一名就是100,第二名就是99,第三名应该是并列两个97,</span></p><p><span>那么在上面的语句中我们看到有一个ONLY关键字。</span></p><p><span><br></span></p><p><span>如果使用ONLY关键字,那么如果用户需要获得排序后的前三名,那么</span></p><p><span>只有100、99、97,显然这个不符合实际情况,所以用户应该使用</span></p><p><span>WITH TIES关键字,这样虽然获得前三名,得到的结果是真实的四个</span></p><p><span>数据。</span></p><pre class="brush:php;toolbar:false">sde@PDBORCL> select objectid,num from aaa; OBJECTID NUM ---------- ---------- 1 1 2 2 3 3 4 3 5 3 6 4 7 4 8 5 已选择8行。 sde@PDBORCL> sde@PDBORCL> select objectid,num from aaa order by num fetch first 3 rows only; OBJECTID NUM ---------- ---------- 1 1 2 2 3 3 sde@PDBORCL> select objectid,num from aaa order by num fetch first 3 rows with ties; OBJECTID NUM ---------- ---------- 1 1 2 2 3 3 4 3 5 3
----------------------------------------------------------------------------------
Blog: http://blog.csdn.net/linghe301
----------------------------------------------------------------------------------
PS:该功能目前可以在ArcGIS Desktop中使用,但是不能再
REST中使用。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











マグネット リンクは、リソースをダウンロードするためのリンク方法であり、従来のダウンロード方法よりも便利で効率的です。マグネット リンクを使用すると、中間サーバーに依存せずに、ピアツーピア方式でリソースをダウンロードできます。この記事ではマグネットリンクの使い方と注意点を紹介します。 1. マグネット リンクとは? マグネット リンクは、P2P (Peer-to-Peer) プロトコルに基づくダウンロード方式です。ユーザーはマグネット リンクを通じてリソースの発行者に直接接続し、リソースの共有とダウンロードを完了できます。従来のダウンロード方法と比較して、磁気

mdf ファイルと mds ファイルの使用方法 コンピューター技術の継続的な進歩により、さまざまな方法でデータを保存および共有できるようになりました。デジタル メディアの分野では、特殊なファイル形式に遭遇することがよくあります。この記事では、一般的なファイル形式である mdf および mds ファイルについて説明し、その使用方法を紹介します。まず、mdf ファイルと mds ファイルの意味を理解する必要があります。 mdf は CD/DVD イメージ ファイルの拡張子で、mds ファイルは mdf ファイルのメタデータ ファイルです。

foobar2000 は、音楽リソースをいつでも聴くことができるソフトウェアです。あらゆる種類の音楽をロスレス音質で提供します。音楽プレーヤーの強化版により、より包括的で快適な音楽体験を得ることができます。その設計コンセプトは、高度なオーディオをコンピュータ上で再生可能 デバイスを携帯電話に移植し、より便利で効率的な音楽再生体験を提供 シンプルでわかりやすく、使いやすいインターフェースデザイン 過度な装飾や煩雑な操作を排除したミニマルなデザインスタイルを採用また、さまざまなスキンとテーマをサポートし、自分の好みに合わせて設定をカスタマイズし、複数のオーディオ形式の再生をサポートする専用の音楽プレーヤーを作成します。過度の音量による聴覚障害を避けるために、自分の聴覚の状態に合わせて調整してください。次は私がお手伝いさせてください

CrystalDiskMark は、シーケンシャルおよびランダムの読み取り/書き込み速度を迅速に測定する、ハード ドライブ用の小型 HDD ベンチマーク ツールです。次に、編集者が CrystalDiskMark と Crystaldiskmark の使用方法を紹介します。 1. CrystalDiskMark の概要 CrystalDiskMark は、機械式ハード ドライブとソリッド ステート ドライブ (SSD) の読み取りおよび書き込み速度とパフォーマンスを評価するために広く使用されているディスク パフォーマンス テスト ツールです。 ). ランダム I/O パフォーマンス。これは無料の Windows アプリケーションで、使いやすいインターフェイスとハード ドライブのパフォーマンスのさまざまな側面を評価するためのさまざまなテスト モードを提供し、ハードウェアのレビューで広く使用されています。

簡単に始めましょう: pip ミラー ソースの使用方法 世界中での Python の人気により、pip は Python パッケージ管理の標準ツールになりました。ただし、pip を使用してパッケージをインストールするときに多くの開発者が直面する一般的な問題は速度の遅さです。これは、デフォルトでは、pip は Python 公式ソースまたはその他の外部ソースからパッケージをダウンロードしますが、これらのソースが海外のサーバーに配置されている可能性があるため、ダウンロード速度が遅くなることがあります。ダウンロード速度を向上させるために、pip ミラー ソースを使用できます。ピップミラーソースとは何ですか?簡単に言えば、ただ、

MetaMask (中国語ではリトル フォックス ウォレットとも呼ばれます) は、無料で評判の高い暗号化ウォレット ソフトウェアです。現在、BTCC は MetaMask ウォレットへのバインドをサポートしており、バインド後は MetaMask ウォレットを使用してすぐにログイン、値の保存、コインの購入などが可能になり、初回バインドで 20 USDT のトライアル ボーナスも獲得できます。 BTCCMetaMask ウォレットのチュートリアルでは、MetaMask の登録方法と使用方法、および BTCC で Little Fox ウォレットをバインドして使用する方法を詳しく紹介します。メタマスクウォレットとは何ですか? 3,000 万人を超えるユーザーを抱える MetaMask Little Fox ウォレットは、現在最も人気のある暗号通貨ウォレットの 1 つです。無料で使用でき、拡張機能としてネットワーク上にインストールできます。

NetEase Mailbox は、中国のネットユーザーに広く使用されている電子メール アドレスとして、その安定した効率的なサービスで常にユーザーの信頼を獲得してきました。 NetEase Mailbox Master は、携帯電話ユーザー向けに特別に作成された電子メール ソフトウェアで、電子メールの送受信プロセスが大幅に簡素化され、電子メールの処理がより便利になります。 NetEase Mailbox Master の使い方と具体的な機能について、以下ではこのサイトの編集者が詳しく紹介しますので、お役に立てれば幸いです。まず、モバイル アプリ ストアで NetEase Mailbox Master アプリを検索してダウンロードします。 App Store または Baidu Mobile Assistant で「NetEase Mailbox Master」を検索し、画面の指示に従ってインストールします。ダウンロードとインストールが完了したら、NetEase の電子メール アカウントを開いてログインします。ログイン インターフェイスは次のとおりです。

クラウド ストレージは今日、私たちの日常生活や仕事に欠かせない部分になっています。中国有数のクラウド ストレージ サービスの 1 つである Baidu Netdisk は、強力なストレージ機能、効率的な伝送速度、便利な操作体験により多くのユーザーの支持を得ています。また、重要なファイルのバックアップ、情報の共有、オンラインでのビデオの視聴、または音楽の聴きたい場合でも、Baidu Cloud Disk はニーズを満たすことができます。しかし、Baidu Netdisk アプリの具体的な使用方法を理解していないユーザーも多いため、このチュートリアルでは Baidu Netdisk アプリの使用方法を詳しく紹介します。まだ混乱しているユーザーは、この記事に従って詳細を学ぶことができます。 Baidu Cloud Network Disk の使用方法: 1. インストール まず、Baidu Cloud ソフトウェアをダウンロードしてインストールするときに、カスタム インストール オプションを選択してください。
