Casser Notes

SASメインで使っていたエンジニアのステップアップの記録

ソート順の話

仕様書をレビューしていてふと気になって質問したことで意外と話が膨らんだのでメモ

 

SASは慣例的にDATAステップ、PROCすテップでデータセットを作成した後にキー項目でソートしておく事が多い(結合でソートが前提だったりする)が、OracleのようなRDBだとInsert時にOrderByしてもソート順を保証しないということを初めて知った

InsertQueryでORDER BY句を使用できます。ターゲット表に結果セットを挿入する際に、ORDER BY句を使用してソート順序が変更されますが、順序は保証されません。
https://docs.oracle.com/cd/E16662_01/doc/timesten.1121/b56051/ttsql322.htm

select部でorder byを指定することが出来るが、新しいテーブルからデータを取ってくる際の並び順を指定したいという目的なら、意味が無い。
というのは、結局新しいテーブルからselectする際にorder byを指定しない限り、取得できる並び順は不定になるのが仕様だから。
(が、テーブルのデータの物理的な配置の面では、意味がある…のかなあ?)
https://www.ne.jp/asahi/hishidama/home/tech/oracle/insert.html

SASOracleに書き込むとソート順が保証されなくなります、は知っていたが、単にSAS/ACCSESSの相性なんだろうなと思っていた

Oracleを5年ほど触っていながら…恥ずかしい

 

ちなみに、SASもPROC SQLのINSERT INTO文ではORDER BY句を使えないが、これは理にかなっていると思う(使っても意味がないから、という理由なのかな)

 

また1つ賢くなった