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.2.3 無視されるSQL句

次の句は翻訳中に削除され、無視されます。

WITH RR

WITH RR USE AND KEEP {EXCLUSIVE|UPDATE|SHARE} LOCKS

WITH RS

WITH RS USE AND KEEP {EXCLUSIVE|UPDATE|SHARE} LOCKS

WITH CS

WITH CS KEEP LOCKS

WITH UR

WITH NC

14.2.4 翻訳されるSQL句

次のSQL句は代替構文に翻訳されます。この場合、セマンティクスに影響することがあります。

  • 元の句WHERE CURRENT OF <cursorname>WHERE ROWID = :Nになります。Nは数値です。

  • 元の='' IS NULLになります。

  • 元の!='' IS NOT NULLになります。

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$SESSIONCLIENT_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$SESSIONCLIENT_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.7 DATE
CURRENT DATE CURRENT_DATE

問合せ

CURRENT DATE

設定

設定できません

セマンティクス

設定できません

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.21 MEMBER
CURRENT MEMBER

問合せ

SYS_CONTEXT('DRDAAS','MEMBER')

設定

設定できません

セマンティクス

設定できません

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.31 RULES
CURRENT RULES

問合せ

SYS_CONTEXT('DRDAAS','RULES')

設定

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')を更新します。

セマンティクス

影響なし

14.3.3.36 TIMESTAMP
CURRENT TIMESTAMP CURRENT_TIMESTAMP

問合せ

CURRENT TIMESTAMP

設定

設定できません

セマンティクス

設定できません

14.3.3.37 USER
CURRENT USER CURRENT_USER

問合せ

USER

設定

設定できません

セマンティクス

設定できません

14.3.3.38 SESSION_USER
SESSION_USER

問合せ

USER

設定

設定できません

セマンティクス

設定できません

14.3.3.39 SYSTEM_USER
SYSTE_USER

問合せ

USER

設定

設定できません

セマンティクス

設定できません

14.3.3.40 ENCRYPTION PASSWORD
ENCRYPTION PASSWORD

問合せ

問合せできません。

設定

SYS_CONTEXT('DRDAAS','ENCRYPTION_PASSWORD')を更新します。

セマンティクス

影響なし