Personal Oracle Lite compatibility issues

Top  Previous  Next

Direct Oracle AccessPersonal Oracle Liteで走るアプリケーションを作るために使われます。 POLITE (like PL/SQL)では失われているOracle7からの機能は、ここでは説明されません。 より詳しい情報はPOLITEドキュメントを参照してください。次の章はPOLITEデータベースでDirect Oracle Access を使っている時に発生する互換問題を語ります。

SQL*Net / Net8 versions

データベースに接続するために使われる必要のあるPOLITEは特定のバージョンのSQL*NetNet8 と共に出荷されます。Version 3.0SQL*Net 2.3が使われている必要があります。一方でversion 3.5 Net8を通じてアクセスされますが。Direct Oracle AccessPOLITEコネクションを検知する時、暗示的に要求されたSQL*NetNet8 versionを使います。

Connect strings

SQL*NetNet8クライアントを通じてPOLITEデータベースにアクセスするために、 接続文字列としてODBCデータソースを指定しないといけません。 例えば、もしPOLITEデータベースがMYLITEDBと名づけられていると、TOracleSession.LogonDatabaseプロパティ内でODBC:MYLITEDBを接続文字列として指定しないといけません。

Error handling

POLITEの返すエラーコードはOracle 7 or 8 serverから送られてくるものとは違います。 Oracle エラーコードは通常30021で、メッセージの2行目はなにがおかしかったのかを説明しています。 例えば、もし複製キーを挿入すると、次のエラーテキストを受け取ります:

OCA-30021: エラー準備(error preparing)/ SQL命令の実行

[POL-3220] プライマリー/ユニークキー内の複製キー

Oracleが報告するエラーコードは常に30021なので、特定の状況に対応するにはエラーテキストを解析する必要があります。

TOracleDataSetOnTranslateMessageイベントはこの非互換に悩まされます。 常にエラーコード30021を受け取るだけでなく、制約名は常に空になります。もしこのイベントハンドラーを使いたいなら、エラーメッセージの2番目のメッセージを解析する必要があります。

ToracleDataSetEnforceConstraintsオプションはプライマリー、ユニーク、そしてフォーリンキー制約に対してのみ機能します。 Check制約はPL/SQLブロックはPOLITEでサポートされていないため、評価されません。

Updateable datasets

Oracle 7データベースに対して、ToracleDataSetを更新可能にするために、 SQLselect命令にrowidを含むようにしないといけません。 POLITE内でのrowidのサポートはOracle7レベル次第ではないので、データセットに全てのプライマリーキーカラムを入れるようにしなくてはいけません。 その一方として、ユニークキーからカラムを含むことが出来ます。 Rowidは含めるものの、プライム、ユニークキーカラムは含めない場合、データセットは開こうとする時にエラーを発生します。