2.9 既知の制限事項
次の各項では、既知の制限について説明し、可能な場合に対処するための推奨事項を示します。
この項または「既知の問題点」で示されていない非互換性の問題が発生した場合は、Oracleサポート・サービスに連絡してください。
次の制限も適用されます:
SUBSTR
関数の2番目のパラメータとして負の数値が使用されている場合、不正な結果が返されます。 これは、OracleSUBSTR
関数とSybaseでの同等の関数の互換性がないためです。ノート:
制限に関するご質問や懸念がある場合は、Oracle Support Servicesまでお問い合わせください。
- 「トランザクションの整合性」
ゲートウェイは、次の場合にトランザクションの整合性を保証できません。 - 「トランザクション機能」
ゲートウェイは保存ポイントをサポートしていません。 - PL/SQLカーソル・ループのCOMMITまたはROLLBACKによるオープン・カーソルのクローズ
PL/SQLカーソル・ループで発行されたCOMMIT
またはROLLBACK
は、すべてのオープン・カーソルをクローズするため、エラーが発生する可能性があります。 - 「ストアド・プロシージャ」
Oracle Database Gateway for Sybaseおよびストアド・プロシージャ。 - 「パススルー機能」
Sybaseがゲートウェイ・パススルー機能を使用して実行したDDL文は、マルチ・ステートメント・トランザクションで失敗することがあります。 - 「Sybase NCHARおよびNVARCHARデータ型」
ゲートウェイは、SybaseのNCHAR
またはNVARCHAR
データ型で定義された列を選択できません。 - 「SQL構文」
次のトピックでは、SQL構文の制限について説明します。 - 「SQL*Plus小文字の表名を含むCOPYコマンド」
小文字の表名を囲むには、二重引用符を使用する必要があります。 - 「データベース・リンク」
ゲートウェイはマルチスレッドではなく、共有データベース・リンクをサポートできません。
親トピック: Sybase Gatewayの機能と制限
2.9.1 トランザクションの整合性
ゲートウェイは、次の場合にトランザクションの整合性を保証できません。
-
ゲートウェイによって処理された文によってターゲット・データベースで暗黙的なコミットが発生した場合
-
自動コミット・モードで動作するようにターゲット・データベースが構成されている場合
ノート:
Oracleでは、次のことを強くお薦めします:
- 特定の文を実行するとターゲット・データベースで暗黙的なコミットが発生することがわかっている場合は、この文が独自のトランザクションで実行されていることを確認します。
- 自動コミット・モードで動作するようにターゲット・データベースを構成しないでください。
親トピック: 既知の制限事項
2.9.2 トランザクション機能
ゲートウェイは保存ポイントをサポートしていません。
分散更新トランザクションがゲートウェイに関係していて、ユーザーが保存ポイントを作成しようとすると、次のエラーが発生します:
ORA-02070: database dblink does not support savepoint in this context
デフォルトでは、ゲートウェイはCOMMIT_CONFIRM
として構成され、トランザクションによってSybaseデータベースが更新されると、常にコミット・ポイント・サイトになります。
親トピック: 既知の制限事項
2.9.3 PL/SQLカーソル・ループのCOMMITまたはROLLBACKによるオープン・カーソルのクローズ
PL/SQLカーソル・ループで発行されたCOMMIT
またはROLLBACK
は、すべてのオープン・カーソルをクローズするため、エラーが発生する可能性があります。
たとえば:
ORA-1002: fetch out of sequence
このエラーを回避するには、COMMIT
またはROLLBACK
文をカーソル・ループの外に移動します。
親トピック: 既知の制限事項
2.9.4 ストアド・プロシージャ
Oracle Database Gateway for Sybaseおよびストアド・プロシージャ。
ストアド・プロシージャについては、次の点を考慮してください:
- コミットまたはロールバックを埋め込むストアド・プロシージャを介して発行される変更は、Oracleトランザクション・マネージャ、Oracle
COMMIT
またはROLLBACK
コマンドでは制御できません。 - 結果セットを含むストアド・プロシージャにOracle Database Gateway for Sybaseを介してアクセスする場合は、異機種間サービスの順次モードで作業する必要があります。
- Oracle Database Gateway for Sybaseを介して複数の結果セットを持つストアド・プロシージャにアクセスする場合は、続行する前にすべての結果セットを読み取る必要があります。
- ストアド・プロシージャの出力パラメータは、
NULL
値に初期化する必要があります。 - Oracle Database Gateway for Sybaseは、パススルー問合せ内の出力パラメータまたは出力パラメータを含むストアド・プロシージャをサポートしていません。
親トピック: 既知の制限事項
2.9.5 パススルー機能
Sybaseがゲートウェイ・パススルー機能を使用して実行したDDL文は、マルチ・ステートメント・トランザクションで失敗することがあります。
SybaseオプションDDL in tranを設定して、トランザクション内のDDL文を許可します。
Oracleでは、パススルー機能を使用してそのような文を実行するときに、DDL文を独自のトランザクションに配置することをお薦めします。 DDL文の後に明示的なCOMMIT
を発行する必要があります。
ゲートウェイを通過するSQL文によってSybaseデータベースで暗黙的なコミットが発生した場合、Oracleトランザクション・マネージャはコミットを認識せず、Oracle ROLLBACK
コマンドを使用してトランザクションをロールバックすることはできません。
親トピック: 既知の制限事項
2.9.6 Sybase NCHARおよびNVARCHARデータ型
ゲートウェイは、SybaseのNCHAR
またはNVARCHAR
データ型で定義された列を選択できません。
親トピック: 既知の制限事項
2.9.7 SQL構文
次のトピックでは、SQL構文の制限について説明します。
- 「WHERE CURRENT OF句」
WHERE CURRENT OF
句を含むUPDATE
文およびDELETE
文は、OracleROWID
実装に依存するため、ゲートウェイではサポートされていません。 - 「CONNECT BY句」
ゲートウェイは、SELECT
文でCONNECT BY
句をサポートしていません。 - ROWID
OracleROWID
実装はサポートされていません。 - 「INSERT文の副問合せ」
INSERT
文の副問合せでは、同じ表に複数の別名を使用できません。 - 「EXPLAIN PLAN文」
EXPLAIN PLAN
文はサポートされません。
関連項目:
SQL構文に関する制限事項の詳細は、「サポート対象のSQL構文および関数」を参照してください。親トピック: 既知の制限事項
2.9.7.1 WHERE CURRENT OF句
WHERE CURRENT OF
句を含むUPDATE
文およびDELETE
文は、Oracle ROWID
実装に依存するため、ゲートウェイではサポートされていません。
ゲートウェイを通じて特定の行を更新または削除するには、条件スタイルとしてWHERE
句を使用する必要があります。
親トピック: SQL構文
2.9.7.4 INSERT文の副問合せ
INSERT
文の副問合せでは、同じ表に複数の別名を使用できません。
たとえば、次の文はサポートされていません。
SQL> INSERT INTO "emp_target"@SYBS SELECT a."empno" FROM "emp_source"@SYBS a, "emp_source"@SYBS b WHERE b."empno"=9999
親トピック: SQL構文
2.9.8 SQL*Plus小文字の表名を含むCOPYコマンド
小文字の表名を囲むには、二重引用符を使用する必要があります。
たとえば:
copy from tkhouser/tkhouser@inst1 insert loc_tkhodept using select * from "tkhodept"@holink2;
親トピック: 既知の制限事項
2.9.9 データベース・リンク
ゲートウェイはマルチスレッド化されていないため、共有データベース・リンクをサポートできません。
ゲートウェイ・セッションはそれぞれ別のゲートウェイ・プロセスを起動し、接続は共有されません。
親トピック: 既知の制限事項