Oracle

遅延制約

普段、データベースでの外部制約は殆ど設定せず、アプリケーション側で整合性をとるようにしてるんだけど、ちょっと外部制約をつけないと我慢できない人とお仕事することになって色々調べてたら遅延外部制約というものがあるらしい。via 遅延制約 - オラクル…

Window Server 2008 R2 に Oracle 10g をインストール

どうもパッチがあるらしい。パッチがないとだめっぽい。ODBCとか関連のライブラリ群も然り。

OracleでCR+LFを入れる

これで|| CHR(13) || CHR(10) ||

ORA-00439: feature not enabled: Bit-mapped indexes

ビットマップインデックスって Enterprise Edition でしか使えないのね。 知らんかった。パーティションテーブルは元々知ってたけど。。。

OracleのEdition確認

select * from v$version 『Enterprise』という記述が無ければ Standard Edition。でも接続したときに大体分かるけど。

Oracleでの空文字の扱い

OracleではCHAR、VARCHAR2型においてNULLと空の文字列(いわゆる"")は同値扱いでNULLになるみたい。知らんかった。。。どう考えてもNULLと空の文字列は論理的に意味が異なると思うんだけど・・・。ANSI-92では別のものととして定義されているみたい。あと一…

CURRENT_TIMESTAMP

OracleでもSQLServerでも使えるようになってる・・・ちょっと衝撃。未だにsysdateとかやってたし

Oracle Instant Client

インストール不要のOracleのクライアントがあるみたいです。 Instant Client該当のファイルをダウンロードして、解凍するだけです。 SQLPlusも使えます。解凍したフォルダにtnsnames.oraを作ってあげれば参照してくれます。

SQLPlusでCLOB型のカラム内容を表示する。

こんな感じのことを。 set pages 50000; set long 2000000000;

OracleXEをJA16SJISTILDAで使用する。

一回挫折したので、再度。情報はこの辺 Shift_JIS データベース on Oracle XE なんとなく: OracleXEでJA16SJISの利用

透過的データ暗号化

Oracle 11g Enterprise Editionには「透過的データ暗号化(Transparent Data Encryption、TDE)」というのがあるので、試してみました。通常暗号化はアプリケーション側の暗号化ライブラリを使うか、OracleのPL/SQLパッケージのDBMS_OBFUSCATION_TOOLKITを使…

Oracle JDBCの暗号化設定

Oracle JDBCを使った場合でOracleの暗号化が使えるかどうかしらべる透過的データ暗号化というものがあるらしい。

オラクルシーケンスの最大値

大盤振る舞い。シーケンスについての FAQ - オラクル・Oracleをマスターするための基本と仕組みシーケンスの最大値は 28 桁(10^28 -1)、負の場合は 27桁(10^27 -1) ちなみに 0〜10^28-1 を増分1で使い切ろうとすると、毎秒 1000 万回採番して約3兆年かかる…

Oracleで半角カナを全角カナへ変換

Oracle 10g R2 から UTL_I18N パッケージに文字列用変換 UTL_I18N.TRANSLITERATE 関数が用意されているようで、賢くなっているようです。SQL> select UTL_I18N.TRANSLITERATE('アアアア','hwkatakana_fwkatakana') from dual;UTL_I18N.TRANSLITERATE('アアアア','HWK…

カラムにコメント

OracleもMySQLもPostgreSQLもカラムにコメントをつけることができます。 セットされる値がコード且つパターンが限られている場合などはコメントに書いておくと、ExcelやらAccessやらで管理している資料を引っ張り出す必要がありません。そもそもテーブルの情…

Oracleの日付表示

Oracleの日付表示のフォーマットを変更する。 >ALTER SESSION SET NLS_DATE_FORMAT='YYYY/MM/DD HH24:MI:SS';

OracleのGROUP BY句

GROUP BY句を使用する場合オラクルの内部でソート処理が行われますが、10.2からデフォルトのソートアルゴリズムが変更されてます。10.2以前はデフォルトがSORT(GROUP BY)だったのがHASH(GROUP BY)に変更されてます。それが原因でGROUP BY句の対象となるレコ…

SQLPlusの内容をCSV出力

たまに使いたいときはいつも忘れすので。set linesize 1000 set pagesize 0 set trimspool on set colsep ',' set feedback off spool 出力.txt select * from emp; spool off exit

Java-PL/SQL via OCI

JavaでOracleのPL/SQLをコールしている場合、PL/SQLをコンパイルした後にコールするとORA-6508でエラーになる場合があります。おそらくJavaでコネクションプールを使用しているせいで(リ)コンパイルが正しく反映できていないようです。そんな場合は素直にJav…

JDBCでOCI接続

JDBCでOCI接続する場合、最終的にはNativeアプリへ渡されるため.dll(Linux系なら.so)が必要になる。どうもNativeとJDBCバージョンが異なるとなんか怒られる。これではまった・・・。9iまではあまりJDBCのバージョンは気にしないみたい。 10gになったとたんき…

シーケンス

シーケンスの最大とはcreate sequence時に任意に指定できますがデフォルト値は MAX_VALUE INCREMENT = 1.0000E+27 (999999999999999999999999999) になってます。確認するには、 SELECT * FROM USER_SEQUENCES WHERE SEQUENCE_NAME = 'hoge';任意に設定する…

ファイルからSQL文実行

Oracle @file.sql SQLServer2000 PostgreSQL >\i '/path/to/file.sql'; MySQL >source /path/to/file.sql