| Oracle Databaseプラットフォーム共通日本語README 10g リリース2(10.2) B19227-09 |
|
![]() 戻る | ![]() 次へ |
原典情報: %ORACLE_HOME%\product\10.2.0\db_1\oo4o\doc\ja\readme.htm
目次
このファイルには、Oracle Objects for OLEリリース5.0に固有の重要な情報が含まれます。
インストール・ノート: Oracle Objects for OLEは、複数のOracleホームにインストールできます。ただし、COMコンポーネントであるため、コンピュータ上で有効にできるのは1つのインスタンスのみです。つまり、現在の(最新の)インストレーションにより前のインストレーションが無効となります。
オペレーティング・システム: Windows 2000 SP1、Windows XP、Windows 2003。
OLEスクリプト記述が可能な32ビット・アプリケーション(Visual Basic、Excelなど)、またはサポートされるC++コンパイラ(Microsoft Visual C++)。
ローカル接続を介した、またはNet Clientを使用するネットワークを介した、Oracle8i、Oracle9iまたはOracle10gデータベースへのアクセス。 ネットワークを介してOracleデータベースにアクセスする場合、Oracle Netをインストールする必要があります。
Oracle 10.1.0.2.0クライアント。
このリリースは、32ビット・バージョンのOracle Objects for OLEです。
このリリースに含まれる内容
32ビットの稼動中のOLEオートメーション・サーバーについてサポートされる新機能
このリリースでは、OO4Oを使用すると、開発者は10iデータベースに導入された2つの新規数値データ型、BINARY_FLOATおよびBINARY_DOUBLEにアクセスしたり操作できます。これらの型のインスタンスは、データベースからフェッチするか、または入出力変数としてSQL文およびPL/SQLブロック(ストアド・プロシージャおよびファンクションなど)に渡すことができます。
OO4Oを使用すると、oraconst.txtで定義されている次の値を使用して、これらのデータ型をバインドできます。
| Oracleデータ型 | 定数 | 値 |
| BINARY_FLOAT | ORATYPE_BFLOAT | 100 |
| BINARY_DOUBLE | ORATYPE_BDOUBLE | 101 |
リリース9.2.0.4.8で導入された新機能
OO4Oで提供される4つの新規オブジェクトを使用すると、開発者は、Oracle9iで導入された新規日時および期間データ型にアクセスしたり操作できます。
| OO4Oオブジェクト | Oracleデータ型 |
| OraIntervalDS | INTERVAL DAY TO SECOND |
| OraIntervalYM | INTERVAL YEAR TO MONTH |
| OraTimeStamp | TIMESTAMP TIMESTAMP WITH LOCAL TIME ZONE |
| OraTimeStampTZ | TIMESTAMP WITH TIME ZONE |
これらの型のインスタンスは、データベースからフェッチするか、または入出力変数としてSQL文およびPL/SQLブロック(ストアド・プロシージャおよびファンクションなど)に渡すことができます。
これらの新規データ型は、PL/SQL索引付き表、VARRAYまたはネストされた表などのコレクション内の要素としてはサポートされません。詳細は、OO4Oのマニュアルを参照してください。
XMLサポート
LONGまたはLONG RAWフィールドのデータはレンダリングされません。
RAW型のオブジェクトまたはコレクション属性のデータはレンダリングされません。
拡張型のパラメータについて、OraParameters.Removeをコールした場合のオートメーション・エラー
OraObject、OraRef、OraCollection、OraBlob、OraClobまたはOraBfile型のOraParameterについてOraParameters.Removeをコールすると、オートメーション・エラーになる場合があります。回避策は、Removeをコールしないことです。
一時LOBを解放した場合のアクセス違反
このバグは、一時LOBが範囲を外れたり、「nothing」に設定されることで解放されると発生します。回避策としては、LOBのOraDatabaseの親がLOBの後に解放されることを確認します。
Set OraClob = nothing
Set OraDatabase = nothing
ORA-4108 索引構成表に基づいてダイナセットを更新する場合
現在、OO4OではOraDynasetを使用した索引構成表の更新はサポートしていません。更新はOraDatabase.ExecuteSQLメソッドにより実行できます。
CLOBと可変幅キャラクタ・セットの使用: ドキュメントの訂正
OraClobのドキュメントが訂正されているので注意してください。CLOBを可変幅キャラクタ・セットとともに使用する場合は、必ず最新バージョンのドキュメントを参照してください。
その他の訂正:
OraClob.Write
chunksize引数が文字で指定されています。
OraLob.Pollingamount = 0であるが、OraLob.WriteのpiecetypeがORALOB_ONE_PIECEでない場合、ポーリングが依然として発生します。ORALOB_LAST_PIECEがWriteへのコールに対する引数として送信されると、ポーリングは完了します。これは特に、事前の合計文字数のカウントに負荷がかかる場合、可変幅キャラクタ・セットでOraClob.Writeをコールする際に役立ちます。
OraParameter値により空の文字列ではなくNULLの変数が戻される問題
以前のバグ修正の一部として、OraParameter.Valueにより、データベースのNULL値に対応するNULL型の変数が戻されます。以前のケースでは、空の文字列を戻すことがありました(バグ)。現在は、文字列変数をOraParameter.Valueに設定してNULLが戻される場合は、文字列変数をNULLに設定できないため、Visual Basicによりエラーが出されます。かわりに変数を使用してください。
接頭辞「Db」で始まるメソッドのドキュメントからの削除
接頭辞「Db」で始まるメソッドはドキュメント(OraSession.DbOpenDatabaseなど)から削除されましたが、
下位互換性を確保するために引き続きサポートされます。接頭辞「Db」が付かない同じメソッドは、完全に同じものです。
NCHARまたはNVARCHAR2データ型に関するORA-12704
NCHARおよびNVARCHAR2データ型は、このリリースではサポートされません。これらの型に対して操作が試行された場合、エラー「キャラクタ・セットが一致しません。」が発生する可能性があります。
ORADYN_ORAMODEを使用したダイナセットにおけるLOB列
ORADYN_ORAMODEオプションで作成されたダイナセットにおけるLOB列の追加は、このリリースでは機能しません。
LOB、オブジェクト、REF、コレクションの内容を保証しない書込み
他のすべての列型で更新を試行し、フィールドの値が別のユーザーによって変更されている場合、エラーOIP-4119「データが変更されました」を受け取ります。このエラーは、BLOBおよびCLOB、オブジェクト、REFおよびコレクション・タイプでは発生せず、データは関係なく更新されます。
OpenDatabaseのORADB_NOWAITオプション
このオプションの影響は、バージョン2.3における動作とは大きく異なります。このオプションは、現在ではOraDynasetにのみ適用されます。OraSqlStmtオブジェクトまたはExecuteSQLコールには影響しません。また、ロックされた行ではエラーが発生します(2.3では、データベース・リソースの競合が存在する場合、短時間の競合であっても、通常は混乱を生じさせるため、エラーが発生していました)。
LONG、LONG RAW列のChunkSize
オンライン・ドキュメントに示しているとおり、ChunkSizeを65280バイト以下、64K以外の値にできます。これは、GetChunk、GetChunkByte、GetChunkByte、GetChunkByteExおよびReadChunkのすべてのチャンク・メソッドに当てはまります。
MoveTo、MoveRel、Movexxxxnの動作
MoveTo:
このメソッドの動作は正確ですが、ドキュメントではこのメソッドの動作について明らかになっていません。リフレッシュ間の行番号は静的です。行番号は行IDと非常によく似ています。行番号は、削除後は動的に再割当てされません。したがって、MoveFirstの後にMoveTo 4を実行する場合、行2および3が削除されたかどうかにかかわらず、同じ行で終了します。このため、行が削除されていないことを保証できる場合(リフレッシュ直後など)は除き、行番号の値に基づいて算術を実行しないでください。つまり、有効な(削除されていない)行を基準にした行1および行4の距離は確認できないということです。行番号はラベルまたはIDとしてのみ機能しますが、行が削除された場合は常に、行番号の実際の値は相対位置の点では意味のないものになります。
MoveRel、Movexxxxn
これらのメソッドは、行が削除された場合には正しく機能しません。これらのメソッドは、指定したオフセットを行番号の値に不正に追加し、その場所(または、結果の行が削除されている場合は、次の使用可能かつ有効な行)に移動します。行が削除されていないことを保証できる場合(リフレッシュの直後など)を除き、これらのメソッドは使用しないでください。かわりに、MoveNextまたはMovePrevのループを使用して、同じ結果を達成します。
検索メソッド
like演算子は、マルチバイト言語では機能しません。
ユーザーのスキーマには、DUALという表またはシノニムが必要です。
日付値は、「コントロールパネル」で指定された書式であるVB書式で取り出され、比較されます。したがって、デフォルトのOracle書式「DD-MON-YYYY」などの他の書式が使用されている場合は、日付の比較は失敗します。
1つ目の引数が固有のOracle書式の日付である必要があり、OO4Oでは文字列の日付のみが処理されるため、SQL関数TO_CHAR(date, fmt)を使用できません。
SQL関数TO_DATEでは、文字列が日付に変換されますが、OIPでは、前述のように日付がVB書式の文字列に再変換されるため、依然として比較に失敗する可能性があります。
NO_CACHEダイナセットのFindPreviousおよびFindLastは機能しません。NoMatchはTRUEに設定されます。
CLOBと可変幅キャラクタ・セットの使用: ドキュメントの訂正
最近のバージョンでは、OraClobのドキュメントが訂正されているため注意してください。CLOBを可変幅キャラクタ・セットとともに使用する場合、必ず最新バージョンのドキュメントを参照してください。
その他の訂正
unsigned long OClob::Read
バッファ・サイズ: ストリーミングが有効である場合はバイト数、無効である場合は文字数
オフセット: 文字数
戻り値: 読取りバイト数
void OClob::CopyToFile
ファイルはNLS_LANG設定と同じ形式になります。
void OClob::CopyFromFile
ファイルはNLS_LANG設定と同じ形式である必要があります。
OShutdown()コール後のプログラム終了時のアクセス違反
OShutdown()がコールされてプログラムが終了した場合、スタックにあるOO4Oオブジェクトは、コンパイラで生成されたクリーンアップ・コードにより削除されます。OO4Oオブジェクトが削除されると、関連付けられたOIP COMオブジェクトについてRelease()がコールされます。COMがすでに停止している場合は、これによりアクセス違反となる可能性があります。したがって、このような場合は、ユーザーはOShutdown()をコールする前にスタック上の各オブジェクトについてClose()をコールするか(オブジェクトが含まれるOValueの場合はClear())、または、いずれにしてもプログラムは終了するため、OShutdown()を一切コールしないようにする必要があります。OO4OオブジェクトについてClose()をコールする必要はなく、OO4Oオブジェクトが削除されると自動的に処理されます。ただし、こうした特殊なケースでは、必ずOShutdownの前にClose()をコールする必要があります。
例:
main()
{
OSession sess;
ODatabase db;
OValue val;
OStartup();
db.Open(sess, "exampledb", "scott", "tiger", 0);
sess.Close();
db.Close();
oval.Clear(); //only needed if OValue can contain an object
OShutdown();
}
RAWデータ型に対する追加サポート
C++ライブラリに、RAWデータ型のサポートを有効にする他のメソッドが追加されました。
ODynaset:
oresult GetFieldValue(int index, char *val, unsigned short maxlen, unsigned short *outlen) const;
oresult GetFieldValue(const char *fieldname, char *val, unsigned short maxlen, unsigned short *outlen) const;
oresult SetFieldValue(int index, const char *val, int len);
oresult SetFieldValue(const char *fieldname, const char *val, int len);
OField:
oresult GetValue(const char **val, int *len) const;
oresult SetValue(const char *val, int len);
OParamArray:
oresult GetValue(const char **val, int *len, int index) const;
oresult SetValue(const char *val, int len, int index);
OParameter:
oresult GetValue(const char **val, int *len) const;
oresult SetValue(const char *val, int len);
OParameterCollection:
OParameter Add(const char *name, const char *value, int len, int iotype, int serverType);
サンプル・コードは、¥ORACLE_HOME¥OO4O¥CPP¥WORKBOOK¥RAWディレクトリに提供しています。
ORACLM32.LIBのリンク付けを試行した場合のエラー
最近のリリースのC++クラス・ライブラリに同梱されたORACLM32.LIBは、VC++ 6.0より以前のリンカーでは認識されません。
ApartmentThreaded(デフォルト)オプションを使用したOStartup
OSTARTUP_MULTITHREADEDオプションを使用せずにC++クラス・ライブラリからOStartupをコールすると、
同じユーザー名、パスワードおよび接続別名による接続が共有されます。これは、バージョン2.3以前との下位互換性を確保するためのものです。
VC++におけるデータ制御の使用
エラー条件により、MFC42.DLLに例外が発生します。たとえば、データ制御とともにVC++アプリケーションを実行していると、他の条件下ではOIPエラーとなる無効なデータ入力により、MFC42.DLLで未処理の例外が発生します。
IIS
IISでは、OO4Oのインスタンス化に<OBJECT>タグを使用する必要があります。
<OBJECT RUNAT=Server SCOPE=Application ID=OraSession PROGID="OracleInProcServer.XOraSession"></OBJECT>
アプリケーション(「OraSession」)構文を使用せずにOraSessionオブジェクトを参照するのみで、このオブジェクトにアクセスできます。SCOPE=Applicationにより処理されます。
サンプルのglobal.asaファイルを次に示します。
<OBJECT RUNAT=Server SCOPE=Application ID=OraSession PROGID="OracleInProcServer.XOraSession"></OBJECT>
<SCRIPT LANGUAGE=VBScript RUNAT=Server>
Sub Application_OnStart
End Sub
Sub Application_OnEnd
End Sub
</SCRIPT>
ASPでのLONGおよびLONG RAW列の読取り
OraFieldオブジェクトのメソッドGetChunkByteExを使用して、ASPからLONGおよびLONG RAW列を読み取る必要があります。詳細は、オンライン・ヘルプを参照してください。かわりにLOBを使用することをお薦めします。
3254960: ADDNEWRECORD() METHOD ON ODYNASET OPENED WITH ODYNASET_NOCACHE OPTION CAUSES MEMORY LEAK
3205954: GETFIELDVALUE METHOD CAUSES DELAY ON MULIT-THREADED APPLICATION
3149198: WRONG RESULT RETURNED WHEN USING CREATECUSTOMDYNASET AND MOVELAST
3133433: VARCHAR2 BIND VARIABLE IN TABLE OF OBJECT IS BEING PASSED INCORRECTLY
3125350: OO4O CALL INVALID OLNG() WHEN CLIENT NLS_LANG IS UTF8
2951102: OCOLLECTION.GETVALUE ON OBJECTS LEAKS MEMORY