読者です 読者をやめる 読者になる 読者になる

カタカタブログ

SIerで働くITエンジニアがカタカタした記録を残す技術ブログ。Java, Oracle Database, Linuxが中心です。たまにRuby on Railsなども。

SQL テーブル参照先の条件句 JOIN vs EXISTS

昨日の記事に続き、今日もSQLネタ。さて、あるテーブルにある行を検索する際に検索条件が外部キーで参照した別テーブルの列にあり、かつそのテーブルの値をselectしない場合、 そのようなSQLは結合もしくはexists句を使う2パターンで表現できる。今回はこの2…

SQL グループごとの最大値を持つ行を取得するときは分析関数MAXを使う

SQLを書いていて、あるグループごとにある項目を集計して最大値を持つ行だけを検索したいときがある。 これまではあまり気にせずにgroup byと集計関数MAXを使ったサブクエリを検索条件に使うことで求めていたが、 パフォーマンスがよくないことがあり、今回…

Windows7でのOracle Database Client 12c インストール時にINS-30131エラーが出たときの対処法

Windows7にOracle Client 12c (12.1.0.2.0)をインストールしたときにINS-30131というエラーが出たので対処法をメモ。原因としては、一時領域にインストーラがアクセスできなかったためで、対処法としてはC:¥トップをc$という共有設定することで解消した。 イ…

Oracle Database 12c (12.1.0.2.0) で遊んでみた(その3) 〜インメモリ有効化〜

前回、前々回とOracle Database 12cの構築まわりをやってきた。Oracle Database 12cからインメモリオプション(In-Memory Option)がついたと話題になっていたので試してみる。まず、機能を有効化し、テーブル検索時の実行計画にインメモリの計画が表示される…

Oracle Database 12c (12.1.0.2.0) で遊んでみた(その2) 〜プラガブル・データベース〜

前回、Oracle Database 12cをインストールし11gR2と同じ感覚でsysでログインできるところまで見た。Oracle Database 12c (12.1.0.2.0) で遊んでみた(その1) 〜インストール〜 - カタカタブログこのまま続けて、DBスキーマ(ユーザ)を作成してみるが、11gまで…

Oracle Database 12c (12.1.0.2.0) で遊んでみた(その1) 〜インストール〜

やっと会社が終わり休みに入ったので、冬休みの自由研究として、Oracle DB 12cを検証環境にインストールして遊んでみることに。12cはプラガブルデータベースとかインメモリオプションとか、新しい概念も多いのでその辺を触ってみようと思います。まずは、い…

macでのOracleクライアントはSQL Developerがおすすめ

普段はWindowsで仕事をしているので、Oracleクライアントツールはosqleditを使っているのだが、普段使いのmacではいいクライアントツールがないかなと思っていた。探してみたがあまりよさそうなのが見つからないので、Oracle純正のSQL Developerがmac版もあ…

Oracle トリガーイベント時にDDL操作情報を取得する

久々にOracle Databaseの記事を。 Oracle Databaseのトリガーを使っていて、トリガー発生の原因となったイベントに関する情報を取得したいということがあった。例えば、CREATE TABLE文などのDDL発行を起因するシステム・トリガー内で、作成しようとしたテー…

PL/SQLで文字列をbase64でエンコード/デコードする方法

Oracle PL/SQLではbase64エンコード/デコードは標準のutl_encodeというパッケージにてbase64_encodeやbase64_decode関数で簡単にエンコード/デコードすることができる。 ただし、base64は本質的にバイナリ(バイト列)とテキストの可逆変換なので、RAW型のデー…

APEX4.2.4 日本語で文字化けを解消したときのメモ

APEX4.2.4インストール時に日本語対応を入れたものの、画面を開くと、日本語が「?」と化けてしまい、正しく表示されなかった。原因はDB側のキャラクタセットの問題だったので、インスタンスを再作成して解消した。以下、そのときのメモ。以下のように日本語…

Oracle 表関数(table関数)を使ってテーブルオブジェクトを作成する

実際のテーブルは存在しないけど、プログラム上で二次元配列構造を定義し、 それをテーブルのように扱うために表関数(table()関数)というものがある。 PL/SQLプログラム上で配列の配列を定義する場合にも使えるので、使用方法をまとめてみた。今回は例として…

chcsvをコンパイルしたときのメモ

Oracle DBにSQLを投げて検索結果をCSVやTSV等のフォーマットで標準出力してくれるchcsvというツールがある。 Pro*Cのソースからコンパイルが必要なため、そのときの手順をまとめてみる。 環境はCentOS6.5で、Oracle Database11gR2が入っている。公式サイト =…

PL/SQLからOSコマンド・シェルスクリプトを実行する

PL/SQLでアプリを書いていると、たまにOSコマンドやシェルスクリプトを実行したくなる。 まあOracle DB上からJavaを実行することはできるので、どうにかできるかなあとは思っていると、 すでにPLSQL_OSCOMMANDなるものがあるらしい。Oracle PL/SQL executing…

Oracle Application Express(APEX 4.2.4) インストール手順

以前インストールしたOracle DBにApexをインストールしてみた。 Apex(Oracle Application Express)とはOracle DB上で動くWebアプリケーションのことで、SQLとGUI操作だけで簡単にWebアプリが作れるものである。 以下の資料が詳しいので、こちらの手順に従っ…

Oracle SQL実行計画でヒントの一覧を表示するためのDBMS_XPLAN.display(format=>'ADVANCED')オプションが便利

SQLの実行計画を見るためによく使うDBMS_XPLAN.display。 ここに'OUTLINE'または'ADVANCED'オプションを渡すと、実際に付与されるヒント句が表示されるようになる。 これは'ALL'オプションでは表示されず、ドキュメントにも記載がないが、以下の本に詳細が書…

DBを落とさずOSを落とすとORA-27154エラーが出てDBが起動しなくなったときの対処法

Oracle DBのインスタンスを落とさずにOSをshutdownすると 次回OS起動時にDBが上がらなくなった。。 セマフォのカーネルパラメータを増やすと解消できたので、対処法をメモ。[環境] DB: Oracle DB 11gR2 OS: CentOS6.3OSシャットダウン後にDBスタートアップし…

SQL 外部結合と等価なスカラサブクエリについて

SQLの外部結合とスカラサブクエリの等価性について調べてみたので結果をまとめてみる。 スカラサブクエリとは スカラサブクエリとはスカラ値(つまり単一値)を返すクエリのことである。 SQLにおけるスカラ値を返すとは、単一列の値を1行だけ返すようなクエリ…

RubyでOracle Databaseにアクセスしてみる

RubyからOracle Databaseにアクセスしselect文を発行してみる。今回はWindows7上のRubyで実行。 まず、RubyからOracleにアクセスするためのライブラリruby-oci8をgemでインストール。 >gem install ruby-oci8 Fetching: ruby-oci8-2.1.7-x86-mingw32.gem (10…

Oracle Database11gの起動停止をスクリプト化してみる

Oracle DBの起動と停止をスクリプト化してみた。11g 起動 リスナー起動とデータベースのスタートアップまで。start_db.sh export ORACLE_HOME=/u01/app/oracle/product/db/11.1.0/orcl export ORACLE_SID=orcl $ORACLE_HOME/bin/lsnrctl start $ORACLE_HOME/…

Oracle Database 11gR2 インストール手順

(2014/12/29追記) Oracle Database 12cのインストール手順に関する記事も執筆しました。 Oracle Database 12c (12.1.0.2.0) で遊んでみた(その1) 〜インストール〜 - カタカタブログ Oracle Database 11gR2をインストールしたときのメモ。[環境情報] CentOS6…

Oracle Database 11gR2 起動

Oralce Databaseの起動時の手順をメモ。 DBとリスナーとEnterprise Manager Oracle Database sqlplusでOracle DBにローカル接続 $ sqlplus / as sysdbastartupコマンドで起動 SQL> startup リスナー $ lsnrctl start EM $ emctl start dbconsole