#author("2024-01-11T21:55:28+09:00","default:irrp","irrp") →データベース関連 →[[SQL一般]] →Oracleに関するメモ →T-SQL関連メモ このページでは主にOracleのSQLに関する情報を載せる。 Sql ServerのSQLに関しては T-SQL関連メモを参照のこと #contents *Tips [#q16930ed] -[[実務に役立つSQLのテクニック集 #SQL - Qiita>https://qiita.com/SimonLee/items/dde1be7c94969697780a]] 2024.1 -[[「なぜ、あのSQLは遅いのか」を正しく的確に調査する方法>http://www.atmarkit.co.jp/ait/articles/1706/28/news006.html]] -[[ROW_NUMBER 分析ファンクションの使用例>http://www.shift-the-oracle.com/sql/functions/row_number-practice.html]] 2016.2.1 -[[SQL 階層問い合わせ>http://gigazine.net/index.php?/news/comments/20090624_kill_girlfriend_used_to_be_man/]] *ストアドプロシージャのソースを見たい [#rfd8229a] -ユーザオブジェクトの中からストアドプロシージャ名を列挙するにはこうする。 select object_name,object_type from user_objects where object_type='PROCEDURE'; -ソースを見たいときはこういうふうにする。 select text from user_source where name='適当なプロシージャ名'; *外部表の使い方 [#k7a093ec] -外部表とは、外部ファイルをあたかも表であるかのように直接参照したもの。ビューの一種と考えられる。 -具体的な設定の仕方は下記URLを参照。 --http://biz.rivus.jp/external_table_practice.html *一時表領域のファイルをリサイズする方法 [#y4dfe796] 一時表領域は通常のalter tablespaceなどではリサイズできない。以下のようにする。 --作成時のCREATE文 CREATE TEMPORARY TABLESPACE WEBGIS_TEMP TEMPFILE 'E:\GISDB\TEMP\WEBGIS_TEMP01.DBF' SIZE 18434M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED このような表領域があるとする。これに対して以下のコマンドを適用する。 SQL> alter database tempfile 'E:\GISDB\TEMP\WEBGIS_TEMP01.DBF' drop including datafiles; データベースが変更されました。 この時点で一時表領域のあるファイル(.DBF)が削除される。~ 次に新しいDBFを希望のサイズで作成する。 SQL>alter database tempfile 'E:\GISDB\TEMP\WEBGIS_TEMP01.DBF' drop including datafiles size 1000M; 表領域が変更されました。 temp領域を使っているセッションがあると失敗するので全部止めてからやること。 *あるテーブルのフィールドにインデックスがあるか調べる [#h1cf2b6f] こんな感じ select * from user_ind_columns where table_name = <table_name> and column_name=<field_name>; 結果が0件ならインデックスはない。そうでないならある。 *DBに入っている文字列の文字コードを16進ダンプする [#t24fdb0b] SELECT RAWTOHEX(フィールド名) from テーブル名 実行例 >select fld_1,rawtohex(fld_1) from kizon FLD_1 ----------------------- RAWTOHEX(FLD_1) ----------------------- 店舗1 935895DC8250 店舗2 935895DC8251 大久保店 91E58B7695DB9358 馬場店 946E8FEA9358 t戸山店 748CCB8E529358 *各テーブルのフィールドプレフィックスを一覧表示するSQL [#s884119b] SELECT table_name, pr FROM ( SELECT table_name, SUBSTR(column_name,1,INSTR(column_name,'_') - 1) pr FROM user_tab_columns ) GROUP BY table_name, pr ORDER BY pr ;