14 Oracle Database Provider for DRDAでのSQL文のサポート
Oracle Database Provider for DRDAでは、ネイティブDB2 SQLの句の使用がサポートされています。
14.1 SQL文のサポートの概要
Oracle Database Provider for DRDAは、サードパーティのネイティブSQL文をOracle Databaseで処理するために送信する前に、SQL文の各部分を変換します。このリリースのOracle Database Provider for DRDAはOracle Databaseリリース11gとの互換性がありますが、このOracle DatabaseではSQL変換がサポートされていないため、OracleバージョンのSQLでサポートされていない多くの句をネイティブで認識できません。SQL翻訳を使用する場合、これはトランスレータが受信するSQLリクエストのデータと内容に影響します。
トランスレータがWITH UR
句を取得することはないため、文の翻訳とその後の結果セットが、ユーザーが予期するものとは異なる可能性があります。
このため、このリリースのOracle Database Provider for DRDAにはいくつかの翻訳機能が含まれています。
例14-1 SQL文からの句の削除
ユーザーがクライアントに次のSQL行を入力するとします。
SELECT * FROM EMPLOYEES WITH UR
Oracle Database Provider for DRDAによりWITH UR
句が削除されます。このため、トランスレータを使用しているユーザーは次のSQL行を受け取ります。
SELECT * FROM EMPLOYEEES
14.2 SQL句に関する制限事項
Oracle Database Provider for DRDAによる変換のためにサポートされているSQL文には、いくつかの制限事項があります。
SQL文を記述する場合は、次の表記法に留意してください。
-
(..)
(カッコ)を使用して、該当するSQL文のコンテキストを囲みます。たとえば(SELECT)
は、句がSELECT
文に適用されることを意味します。 -
{..}
(中カッコ)を使用して、オプションの定数を示します。 -
<..>
は、オプションの変数を示します。
SQL言語の制約事項は、次のグループに分類されます。
-
内部処理されるSQL文
-
セマンティクス上の効果を維持するSQL句の削除
-
無視されるSQL句
-
翻訳されるSQL句
14.2.1 内部処理されるSQL文
次の句は内部処理されます。
GRANT {ALL, BIND, COPY, EXECUTE, DROP, SET} ON PACKAGE <collid>.<pkgnam> TO <authid> GRANT {ALL, BIND, COPY, EXECUTE, DROP, SET} ON PACKAGE <collid>.<pkgnam> TO <authid> WITH GRANT OPTION GRANT {ALL, BIND, COPY, EXECUTE, DROP, SET} ON PROGRAM <collid>.<pkgnam> TO <authid> GRANT {ALL, BIND, COPY, EXECUTE, DROP, SET} ON PROGRAM <collid>.<pkgnam> TO <authid> WITH GRANT OPTION REVOKE {ALL, BIND, COPY, EXECUTE, DROP, SET} ON PACKAGE <collid>.<pkgnam> FROM <authid> REVOKE {ALL, BIND, COPY, EXECUTE, DROP, SET} ON PROGRAM <collid>.<pkgnam> FROM <authid> DROP PACKAGE <collid>.<pkgnam> VERSION <vsn> DROP PACKAGE <collid>.<pkgnam> FREE LOCATOR :H HOLD LOCATOR :H
14.2.2 セマンティクス上の効果を維持するSQL句の削除
次のSQL句はSQL文から削除されます。これらはセマンティクスに影響するため、注意してください。
(SELECT) FOR READ ONLY (SELECT) FOR FETCH ONLY (DECLARE) WITH HOLD (DECLARE) WITHOUT HOLD (DECLARE) WITH ROWSET POSITIONING (DECLARE) WITHOUT ROWSET POSITIONING (DECLARE) NO SCROLL (DECLARE) SCROLL (CALL) WITH RETURN CLIENT (CALL) WITH RETURN CALLER (CALL) <:hostvar> USING DESCRIPTOR <:hostvar> (SAVEPOINT) {UNIQUE} ON ROLLBACK RETAIN CURSORS (SAVEPOINT) ON ROLLBACK RETAIN LOCKS (INSERT) FOR <literal>|<bind-variable> ROWS (INSERT) FOR MULTIPLE ROWS (INSERT) NOT ATOMIC CONTINUE ON SQLEXCEPTION
14.3 特殊レジスタのサポート
DB2では、特殊レジスタと呼ばれる概念が採用されています。特殊レジスタは、SQLコンテキストにおける環境変数と見なすことができます。Oracle Databaseでは、特殊レジスタに対する限定的なネイティブ・サポートが提供されます。
14.3.1 特殊レジスタからの値の取得
例14-2 特殊レジスタからの値の取得
ユーザーがクライアントで次の文を入力するとします。
SELECT CURRENT CLIENT_ACCTNG FROM SYSIBM.SYSDUMMY1;
Oracle Database Provider for DRDAは前述の文を解析して、次のように句CURRENT CLIENT_ACCTNG
を句SYS_CONTEXT('DRDAAS_CTX_NAME','CLIENT_ACCTNG')
に置き換えます。
SELECT SYS_CONTEXT('DRDAAS_CTX_NAME','CLIENT_ACCTNG') FROM SYSIBM.SYSDUMMY1;
したがってCURRENT CLIENT_ACCTNG
句を想定しているトランスレータは、変更後の問合せを受け取ります。
14.3.2 特殊レジスタの設定
例14-3 特殊レジスタの設定
ユーザーがクライアントで次の文を入力したとします。
SET CLIENT_ACCTNG = 'abc';
Oracle Database Provider for DRDAは、次のように句CLIENT_ACCTNG = 'abc'
を句SYS_CONTEXT('DRDAAS_CTX_NAME','CLIENT_ACCTNG')
に置き換え、CLIENT_ACCTNG
レジスタの値を文字列abc
に設定します。
SET SYS_CONTEXT('DRDAAS_CTX_NAME','CLIENT_ACCTNG') = 'abc';
したがってCURRENT CLIENT_ACCTNG
句を想定しているトランスレータは、変更後の文を受け取ります。
14.3.3 Oracle Database Provider for DRDAでサポートされる特殊レジスタ
Oracle Database Provider for DRDAは次のレジスタをサポートしています。
14.3.3.1 APPLICATION ENCODING SCHEME
CURRENT APPLICATION ENCODING SCHEME
問合せ
SYS_CONTEXT('DRDAAS','APPLICATION_ENCODING_SCHEME')
設定
SYS_CONTEXT
を更新します。
セマンティクス
影響はありません。
14.3.3.2 CLIENT_ACCTNG
CURRENT CLIENT_ACCTNG CLIENT ACCTNG
問合せ
SYS_CONTEXT('DRDAAS','CLIENT_ACCTNG')
設定
SYS_CONTEXT
およびCLIENT_INFO
を更新します。
セマンティクス
V$SESSION
のCLIENT_INFO
を更新します
ノート
DSNDQMDA
マクロに記述されているIBMおよびDB2により定義されたMVSおよびDDFアカウンティング情報を参照してください。
14.3.3.3 CLIENT_APPLNAME
CURRENT CLIENT_APPLNAME CLIENT APPLNAME
問合せ
SYS_CONTEXT('DRDAAS','CLIENT_APPLNAME')
設定
SYS_CONTEXT
およびCLIENT_IDENTIFIER
を更新します。
セマンティクス
V$SESSION
のCLIENT_IDENTIFIER
を更新します。
14.3.3.4 CLIENT_PROGRAMID
CURRENT CLIENT_PROGRAMID
問合せ
SYS_CONTEXT('DRDAAS','CLIENT_PROGRAMID')
設定
SYS_CONTEXT
を更新します
セマンティクス
影響なし
14.3.3.5 CLIENT_USERID
CURRENT CLIENT_USERID CLIENT USERID
問合せ
SYS_CONTEXT('DRDAAS','CLIENT_USERID')
設定
設定できません。
セマンティクス
設定できません
14.3.3.6 CLIENT_WRKSTNNAME
CURRENT CLIENT_WRKSTNNAME CLIENT WRKSTNNAME
問合せ
SYS_CONTEXT('DRDAAS','CLIENT_WRKSTNNAME')
設定
SYS_CONTEXT
を更新します
セマンティクス
影響なし
14.3.3.8 DBPARTITIONNUM
CURRENT DBPARTITIONNUM
問合せ
SYS_CONTEXT('DRDAAS','DBPARTITIONNUM')
設定
設定できません
セマンティクス
設定できません
14.3.3.9 DEBUG MODE
CURRENT DEBUG MODE
問合せ
SYS_CONTEXT('DRDAAS','DEBUG_MODE')
設定
SYS_CONTEXT
を更新します
セマンティクス
影響なし
14.3.3.10 DECFLOAT ROUNDING MODE
CURRENT DECFLOAT ROUNDING MODE
問合せ
SYS_CONTEXT('DRDAAS','DECFLOAT_ROUNDING_MODE')
設定
SYS_CONTEXT
を更新します
セマンティクス
影響なし
14.3.3.11 DEFAULT TRANSFORM GROUP
CURRENT DEFAULT TRANSFORM GROUP
問合せ
SYS_CONTEXT('DRDAAS','DEFAULT_TRANSFORM_GROUP')
設定
SYS_CONTEXT
を更新します
セマンティクス
影響なし
14.3.3.12 DEGREE
CURRENT DEGREE
問合せ
SYS_CONTEXT('DRDAAS','DEGREE')
設定
SYS_CONTEXT
を更新します
セマンティクス
影響なし
14.3.3.13 EXPLAIN MODE
CURRENT EXPLAIN MODE
問合せ
SYS_CONTEXT('DRDAAS','EXPLAIN_MODE')
設定
SYS_CONTEXT
を更新します
セマンティクス
影響なし
14.3.3.14 EXPLAIN SNAPSHOT
CURRENT EXPLAIN SNAPSHOT
問合せ
SYS_CONTEXT('DRDAAS','EXPLAIN_SNAPSHOT')
設定
SYS_CONTEXT
を更新します
セマンティクス
影響なし
14.3.3.15 FEDERATED ASYNCHRONY
CURRENT FEDERATED ASYNCHRONY
問合せ
SYS_CONTEXT('DRDAAS','FEDERATED_ASYNCHRONY')
設定
SYS_CONTEXT
を更新します
セマンティクス
影響なし
14.3.3.16 IMPLICIT XMLPARSE OPTION
CURRENT IMPLICIT XMLPARSE OPTION
問合せ
SYS_CONTEXT('DRDAAS','IMPLICIT_XMLPARSE_OPTION')
設定
SYS_CONTEXT
を更新します
セマンティクス
影響なし
14.3.3.17 ISOLATION
CURRENT ISOLATION
問合せ
SYS_CONTEXT('DRDAAS','ISOLATION')
設定
SYS_CONTEXT
を更新します
セマンティクス
影響なし
14.3.3.18 LOCK TIMEOUT
CURRENT LOCK TIMEOUT
問合せ
SYS_CONTEXT('DRDAAS','LOCK_TIMEOUT')
設定
SYS_CONTEXT
を更新します
セマンティクス
影響なし
14.3.3.19 LOCALE LC_TYPE
CURRENT LOCALE LC_TYPE CURRENT_LC_TYPE
問合せ
SYS_CONTEXT('DRDAAS','LC_TYPE')
設定
SYS_CONTEXT
を更新します
セマンティクス
影響なし
14.3.3.20 MAINTAINED TABLE TYPES FOR OPTIMIZATION
CURRENT MAINTAINED TABLE TYPES FOR OPTIMIZATION
問合せ
SYS_CONTEXT('DRDAAS','MAINTAINED_TYPES')
設定
SYS_CONTEXT
を更新します
セマンティクス
影響なし
14.3.3.22 OPTIMIZATION HINT
CURRENT OPTIMIZATION HINT
問合せ
SYS_CONTEXT('DRDAAS','OPTIMIZATION_HINT')
設定
SYS_CONTEXT
を更新します
セマンティクス
影響なし
14.3.3.23 PACKAGE PATH
CURRENT PACKAGE PATH
問合せ
SYS_CONTEXT('DRDAAS','PACKAGE_PATH')
設定
SYS_CONTEXT
を更新します
セマンティクス
影響なし
14.3.3.24 PACKAGESET
CURRENT PACKAGESET
問合せ
SYS_CONTEXT('DRDAAS','PACKAGESET')
設定
SYS_CONTEXT
を更新します
セマンティクス
影響なし
14.3.3.25 PATH
CURRENT PATH CURRENT_PATH CURRENT FUNCTION PATH
問合せ
SYS_CONTEXT('DRDAAS','PATH')
設定
SYS_CONTEXT
を更新します
セマンティクス
影響なし
14.3.3.26 PRECISION
CURRENT PRECISION
問合せ
SYS_CONTEXT('DRDAAS','PRECISION')
設定
SYS_CONTEXT
を更新します
セマンティクス
影響なし
14.3.3.27 QUERY ACCELERATION
CURRENT QUERY ACCELERATION
問合せ
SYS_CONTEXT('DRDAAS','QUERY_ACCELERATION')
設定
SYS_CONTEXT
を更新します
セマンティクス
影響なし
14.3.3.28 QUERY OPTIMIZATION
CURRENT QUERY OPTIMIZATION
問合せ
SYS_CONTEXT('DRDAAS','QUERY_OPTIMIZATION')
設定
SYS_CONTEXT
を更新します
セマンティクス
影響なし
14.3.3.29 REFRESH AGE
CURRENT REFRESH AGE
問合せ
SYS_CONTEXT('DRDAAS','REFRESH_AGE')
設定
SYS_CONTEXT
を更新します
セマンティクス
影響なし
14.3.3.30 ROUTINE VERSION
CURRENT ROUTINE VERSION
問合せ
SYS_CONTEXT('DRDAAS','ROUTINE_VERSION')
設定
SYS_CONTEXT
を更新します
セマンティクス
影響なし
14.3.3.32 SCHEMA
CURRENT SCHEMA CURRENT_SCHEMA
問合せ
SYS_CONTEXT('USERENV','CURRENT_SCHEMA')
設定
SYS_CONTEXT
を更新します
セマンティクス
影響なし
14.3.3.33 SERVER
CURRENT SERVER CURRENT_SERVER
問合せ
SYS_CONTEXT('DRDAAS','SERVER')
設定
設定できません
セマンティクス
設定できません
14.3.3.34 SQL_CCFLAGS
CURRENT SQL_CCFLAGS
問合せ
SYS_CONTEXT('DRDAAS','SQL_CCFLAGS')
設定
SYS_CONTEXT
を更新します
セマンティクス
影響なし
14.3.3.35 SQLID
CURRENT SQLID USER
問合せ
USER
設定
SYS_CONTEXT
('DRDAAS', 'CURRENT_SQLID')
を更新します。
セマンティクス
影響なし