Home > Tags > oracle
oracle
oracle+phpでもっとも参考にするべき資料
やっぱり基本はオラクル本家のサイトでしょう。
PHP Developer CenterとかPHPとオラクルはオラクルで何か調べたりダウンロードしたりする時の基本中の基本 OTN 内のコンテンツ。
以下の PDF もいい。
「The Underground PHP and Oracle Manual Release 1.5」(PDF)
↓の本はオラクルで今まで一番よく読んだ本。
ソフトバンククリエイティブ
売り上げランキング: 145781

通勤電車で読めるOracle本
チューニングに悩んでいる方におすすめです
必読書です
DBエンジニア必見!
おすすめです。
symfony1.1+oracle用のパッチファイル
- 2009/02/19
- Web開発関連
symfony1.1 + oracle で propel:build-all を実行すると、propel:insert-sql でエラーが発生する。原因は、生成された SQL 内(data/sql/lib.model.schema.sql)のコメントがオラクルのコメントになっていないことと、テーブル名とカラム名がダブルコーテーションで囲まれていることです。
毎回 sql を修正しているわけにもいかないのでパッチを作って対応しました。
これで propel:build-all-load frontend みたいなコマンドもするっと実行できます。
ソフトバンククリエイティブ
売り上げランキング: 166284

2冊目に買うべき本
この本は酷い
誤植が・・・
環境変数の NLS_LANG の使い方
- 2009/02/13
- データベース関連
環境変数の NLS_LANG って今までよくわかってなかった。
今日はまってやっと理解したのが、NLS_LANG はオラクルクライアント側の文字コードを指定するものだということ。オラクルはデータベースの文字コードと NLS_LANG を比較して異なる場合は、データベースにデータを格納する際にデータベースの文字コードに変換して格納するという機能がある。今回 NLS_LANG を間違ってデータベース側の文字コードを設定していたので、文字コード変換がされず不具合になっていた。
PHPfestチュートリアル:Oracle Database 10g Express EditionおよびZend Core for Oracle
Oracleデータベースは指定された文字セットで作成されます。 PHPでは、NLS_LANG環境変数を設定することで独自の文字セットを選択できます。 Oracleクライアント(PHP)のグローバリゼーション設定では、ロケールのための適切なデータ形式、Oracleのエラー・メッセージに使用される言語、言語のソートの順番などのデフォルト値を指定できます。 NLS_LANGは、Webサーバーを起動する環境で設定する必要があります。
Oracle Textを使って複数テーブルにまたがる全文検索インデックスを作ってみた
- 2008/03/26
- データベース関連
まずは OracleText の設定、これは以下の PDF を参考に実施した。
ftp://ftp.ashisuto.co.jp/pub/standard/vol69/oracletext.pdf
次に OracleText について理解する為に、OTN のドキュメントを読み込み。
http://www.oracle.com/technology/global/jp/documentation/products/oracle9i/920/option.html#text
一番苦労したのが、複数テーブルにまたがる全文検索インデックスの作り方。
結果をいうと、user_datastore を使えば実現できる。
下の 3 つのサイトをよく読んで OTN のドキュメントもよく読めばできた。
http://otn.oracle.co.jp/forum/message.jspa?messageID=2016765�
http://www.orafaq.com/forum/t/95509/0/
http://asktom.oracle.com/pls/asktom/f?p=100:11:3872905503304308::::P11_QUESTION_ID:5533095920114
実際にどうやったか知りたい人がいればコメントください。
Oracle の SqlPlus で HELP が使えない
- 2007/04/26
- その他
SqlPlus で HELP コマンドを実行すると以下のようなエラーが発生しました。
SP2-0171: HELPにアクセスできません。
単純に HELP をインストールしていないだけなのでインストールします。
SQL> connect system/xxxxx
接続されました。
SQL> @/xxx/xxx/xxx/hlpbld.sql;
1に値を入力してください: helpus.sql
system ユーザーで hlpbld.sql を実行します。実行すると入力プロンプトが出るので helpus.sql と入力します。
- コメント: 0
- トラックバック(閉): 0
sqlplus の実行結果を整形したい
- 2007/04/25
- その他
普通に sqlplus に接続して、
SQL>select * from sample;
とかを実行すると実行結果がとても見づらい。
SQL>set line 200
と設定すると多少見やすくなる。
でもそれでも見づらい。
- コメント: 0
- トラックバック(閉): 0
oracle で EXPLAIN PLAN を使う
複雑な仕様の場合、SQL も同じように複雑になってしまうことがよくある。
Java や PHP といった言語なら複雑にならないように部品化したり、コンポーネント化したりするリファクタリングといった手法がある程度確立されてきているが、SQL に関してそういったものはあまり見たことがない。
まぁ、とりあえず複雑になるのは仕方がないとして(そのうち勉強する)、レスポンスや負荷に関しては仕様を満たす範囲で最適化したい。そういった場合に活用するのが 実行計画。
実行計画は、1.EXPLAIN PLAN といったコマンドを使って取得する方法と、2.AUTOTRACE を有効にして取得する方法がある。
1.は SQL を実行せずに解析する為、実行計画は取得できるが SQL の統計情報は取得できない。
2.は SQL を実行し解析するので SQL の統計情報も取得できる。
とりあえず1.の方法だけ説明。
EXPLAIN PLAN FOR SELECT * FROM HOGE;
SELECT PLAN_TABLE_OUTPUT FROM TABLE(DBMS_XPLAN.DISPLAY());
上記 2 行で実行計画が取得できる。
実行計画の読み方についてはまたこんど。
- コメント: 0
- トラックバック(閉): 0
Oracle with CakePHP でプレースホルダを使うには
#2294: dbo_oracle_diff.txt – CakePHP : The Rapid Development Framework for PHP – Trac
これをうまく組み込めば Oracle でプレースホルダが使えそう。
とりあえず oracle を使いたい場合は、Oracle 9i with CakePHP (Sylvan) の下の方を参照。はじめ dbo_adodb.php を使おうとして失敗、dbo_oracle.php を使うとうまく動きました。
チケット 2294 は 4000 byte を超えるデータの場合エラーになるのでそのための修正パッチでした。このパッチをあててもプレースホルダは使えません。
○追記
最終的には dbo_oracle.php をカスタマイズしてプレースホルダを利用できるようにしました。
- コメント: 0
- トラックバック(閉): 0
Oracle 9i with CakePHP
- 2007/04/04
- その他
CakePHP で Oracle を使ってアクセスすると以下のようなエラーが発生して困った。
Fatal error: Call to a member function on a non-object in
/...../cake/cake/libs/model/dbo/dbo_adodb.php on line 298
Oracle 9i with CakePHP でも同じ問題で躓いている人がいたが、解決の手がかりはなし。
CakePHP で
CaekPHP の本家を見ていると、
#1526 (Oracle+ADODB+CakePHP Call to a member function MetaType() on a non-object in dbo_adodb.php) – CakePHP : The Rapid Development Framework for PHP – Trac
・resolution set to wontfix.
We are creating a native Oracle driver that will be used instead of Adodb, there are too many changes that are specific to Oracle for us to change the Adodb dbo.
This should be completed shortly and can be placed in your own app/models/dbo
というように、CakePHP としては対応しません、ということになっている。(wontfix)
仕方がないので、いろいろ探していると、バージョン 1.2.x の方に dbo_oracle.php というものがあったので試してみるもやっぱりエラー。
Parse error: parse error, unexpected '&', expecting T_VARIABLE or '$' in
/...../cake/cake/libs/model/dbo/dbo_oracle.php on line 217
もう少し探すと
#2024 (dbo_oracle: Oracle preserved keys and fullTableName) – CakePHP : The Rapid Development Framework for PHP – Trac
にもバグ修正後の dbo_oracle.php があったので使ってみるとエラーはなくなりました。
ただ開発中のソースなのでこのまま問題なく使用できる保障はない。
2007/04/17 追記
オラクルでトランザクションを使いたいので、以下から最新の dbo_oracle.php を取得し置き換えました。
root/branches/1.2.x.x/cake/libs/model/datasources/dbo/dbo_oracle.php
Revision 4620
このままだとエラーになるので、何点か修正。
31 行目ぐらいに
uses('model'.DS.'datasources'.DS.'dbo_source');
を追加。
150、151 行目の execute 文をコメント化
//$this->execute('ALTER SESSION SET NLS_SORT=BINARY_CI');
//$this->execute('ALTER SESSION SET NLS_COMP=ANSI');
217 行目の “&” がエラーになるので削除。※ “&” の意味を調べる必要あり
foreach ($fields as $value) {
これぐらい修正するととりあえず動きます。
トランザクションのテストはまだしてません。
テストしてみてまだエラーだったので、
1.1.x.xの場合 Re: トランザクションを実現するには
にあるように、以下 2 ファイルを修正する
cake/libs/model/datasources/dbo_source.php
cake/libs/model/model_php4.php(サンプルはmodel_php5.php となっているが同じコードを php4 に使っても大丈夫)
ここまでやると、エラーは発生しなくなりました。
あとは複数テーブルのコミット、ロールバックの確認。
2007/04/20 追記
複数テーブルのコミット、ロールバックも OK でした。
- コメント: 0
- トラックバック(閉): 0
ホーム > タグ > oracle

![symfony徹底攻略 [PHP徹底攻略シリーズ] (PHP徹底攻略シリーズ)](http://ecx.images-amazon.com/images/I/51wL5doVKJL._SL160_.jpg)