ヘッダーをスキップ
Oracle® Database Provider for DRDAユーザーズ・ガイド
12c リリース1 (12.1.0.2) for Linux x86-64
E98592-01
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

14 Oracle Database Provider for DRDAによるSQL文のサポート

この章では、Oracle Database Provider for DRDAでサポートされているSQL句の情報とリストを示します。

この章のトピックは、次のとおりです:

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リクエストのデータと内容に影響します。

例14-1 SQL文からの句の削除

ユーザーがクライアントに次のSQL行を入力するとします。

SELECT * FROM EMPLOYEES WITH UR

Oracle Database Provider for DRDAによりWITH UR句が削除されます。このため、トランスレータを使用しているユーザーは次のSQL行を受け取ります。

SELECT * FROM EMPLOYEEES

トランスレータがWITH UR句を取得することはないため、文の翻訳とその後の結果セットが、ユーザーが予期するものとは異なる可能性があります。

このため、このリリースのOracle Database Provider for DRDAにはいくつかの翻訳機能が含まれています。

SQL句の制限事項

この項では、Oracle Database Provider for DRDAによる変換のためにサポートされているSQL文に関する制限事項について説明します。

SQL文を記述する場合は、次の表記法に留意してください。

  • (..) (カッコ)を使用して、該当するSQL文のコンテキストを囲みます。たとえば(SELECT)は、句がSELECT文に適用されることを意味します。

  • {..} (中カッコ)を使用して、オプションの定数を示します。

  • <..>は、オプションの変数を示します。

SQL言語の制約事項は、次のグループに分類されます。

内部処理される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

セマンティクス上の効果を維持する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

無視される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

翻訳されるSQL句

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

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

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

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

特殊レジスタのサポート

DB2では、特殊レジスタと呼ばれる概念が採用されています。特殊レジスタは、SQLコンテキストにおける環境変数と見なすことができます。Oracle Databaseでは、特殊レジスタに対する限定的なネイティブ・サポートが提供されます。

例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 特殊レジスタの設定

ユーザーがクライアントで次の文を入力するとします。

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句を想定しているトランスレータは、変更後の文を受け取ります。

Oracle Database Provider for DRDAは次のレジスタをサポートしています。

APPLICATION ENCODING SCHEME

CURRENT APPLICATION ENCODING SCHEME

問合せ

SYS_CONTEXT('DRDAAS','APPLICATION_ENCODING_SCHEME')

設定

SYS_CONTEXTを更新します

セマンティクス

影響なし

CLIENT_ACCTNG

CURRENT CLIENT_ACCTNG CLIENT ACCTNG

問合せ

SYS_CONTEXT('DRDAAS','CLIENT_ACCTNG')

設定

SYS_CONTEXTおよびCLIENT_INFOを更新します。

セマンティクス

V$SESSIONCLIENT_INFOを更新します

注意事項

DSNDQMDAマクロに記述されているIBMおよびDB2により定義されたMVSおよびDDFアカウンティング情報を参照してください。

CLIENT_APPLNAME

CURRENT CLIENT_APPLNAME CLIENT APPLNAME

問合せ

SYS_CONTEXT('DRDAAS','CLIENT_APPLNAME')

設定

SYS_CONTEXTおよびCLIENT_IDENTIFIERを更新します。

セマンティクス

V$SESSIONCLIENT_IDENTIFIERを更新します。

CLIENT_PROGRAMID

CURRENT CLIENT_PROGRAMID

問合せ

SYS_CONTEXT('DRDAAS','CLIENT_PROGRAMID')

設定

SYS_CONTEXTを更新します

セマンティクス

影響なし

CLIENT_USERID

CURRENT CLIENT_USERID CLIENT USERID

問合せ

SYS_CONTEXT('DRDAAS','CLIENT_USERID')

設定

設定できません。

セマンティクス

設定できません。

CLIENT_WRKSTNNAME

CURRENT CLIENT_WRKSTNNAME CLIENT WRKSTNNAME

問合せ

SYS_CONTEXT('DRDAAS','CLIENT_WRKSTNNAME')

設定

SYS_CONTEXTを更新します

セマンティクス

影響なし

DATE

CURRENT DATE CURRENT_DATE

問合せ

CURRENT DATE

設定

設定できません。

セマンティクス

設定できません。

DBPARTITIONNUM

CURRENT DBPARTITIONNUM

問合せ

SYS_CONTEXT('DRDAAS','DBPARTITIONNUM')

設定

設定できません。

セマンティクス

設定できません。

DEBUG MODE

CURRENT DEBUG MODE

問合せ

SYS_CONTEXT('DRDAAS','DEBUG_MODE')

設定

SYS_CONTEXTを更新します

セマンティクス

影響なし

DECFLOAT ROUNDING MODE

CURRENT DECFLOAT ROUNDING MODE

問合せ

SYS_CONTEXT('DRDAAS','DECFLOAT_ROUNDING_MODE')

設定

SYS_CONTEXTを更新します

セマンティクス

影響なし

DEFAULT TRANSFORM GROUP

CURRENT DEFAULT TRANSFORM GROUP

問合せ

SYS_CONTEXT('DRDAAS','DEFAULT_TRANSFORM_GROUP')

設定

SYS_CONTEXTを更新します

セマンティクス

影響なし

DEGREE

CURRENT   DEGREE

問合せ

SYS_CONTEXT('DRDAAS','DEGREE')

設定

SYS_CONTEXTを更新します

セマンティクス

影響なし

EXPLAIN MODE

CURRENT EXPLAIN MODE

問合せ

SYS_CONTEXT('DRDAAS','EXPLAIN_MODE')

設定

SYS_CONTEXTを更新します

セマンティクス

影響なし

EXPLAIN SNAPSHOT

CURRENT EXPLAIN SNAPSHOT

問合せ

SYS_CONTEXT('DRDAAS','EXPLAIN_SNAPSHOT')

設定

SYS_CONTEXTを更新します

セマンティクス

影響なし

FEDERATED ASYNCHRONY

CURRENT FEDERATED ASYNCHRONY

問合せ

SYS_CONTEXT('DRDAAS','FEDERATED_ASYNCHRONY')

設定

SYS_CONTEXTを更新します

セマンティクス

影響なし

IMPLICIT XMLPARSE OPTION

CURRENT IMPLICIT XMLPARSE OPTION

問合せ

SYS_CONTEXT('DRDAAS','IMPLICIT_XMLPARSE_OPTION')

設定

SYS_CONTEXTを更新します

セマンティクス

影響なし

ISOLATION

CURRENT ISOLATION

問合せ

SYS_CONTEXT('DRDAAS','ISOLATION')

設定

SYS_CONTEXTを更新します

セマンティクス

影響なし

LOCK TIMEOUT

CURRENT LOCK TIMEOUT

問合せ

SYS_CONTEXT('DRDAAS','LOCK_TIMEOUT')

設定

SYS_CONTEXTを更新します

セマンティクス

影響なし

LOCALE LC_TYPE

CURRENT LOCALE LC_TYPE CURRENT_LC_TYPE

問合せ

SYS_CONTEXT('DRDAAS','LC_TYPE')

設定

SYS_CONTEXTを更新します

セマンティクス

影響なし

MAINTAINED TABLE TYPES FOR OPTIMIZATION

CURRENT MAINTAINED TABLE TYPES FOR OPTIMIZATION

問合せ

SYS_CONTEXT('DRDAAS','MAINTAINED_TYPES')

設定

SYS_CONTEXTを更新します

セマンティクス

影響なし

MEMBER

CURRENT MEMBER

問合せ

SYS_CONTEXT('DRDAAS','MEMBER')

設定

設定できません。

セマンティクス

設定できません。

OPTIMIZATION HINT

CURRENT OPTIMIZATION HINT

問合せ

SYS_CONTEXT('DRDAAS','OPTIMIZATION_HINT')

設定

SYS_CONTEXTを更新します

セマンティクス

影響なし

PACKAGE PATH

CURRENT PACKAGE PATH

問合せ

SYS_CONTEXT('DRDAAS','PACKAGE_PATH')

設定

SYS_CONTEXTを更新します

セマンティクス

影響なし

PACKAGESET

CURRENT PACKAGESET

問合せ

SYS_CONTEXT('DRDAAS','PACKAGESET')

設定

SYS_CONTEXTを更新します

セマンティクス

影響なし

PATH

CURRENT PATH CURRENT_PATH CURRENT FUNCTION PATH

問合せ

SYS_CONTEXT('DRDAAS','PATH')

設定

SYS_CONTEXTを更新します

セマンティクス

影響なし

PRECISION

CURRENT PRECISION

問合せ

SYS_CONTEXT('DRDAAS','PRECISION')

設定

SYS_CONTEXTを更新します

セマンティクス

影響なし

QUERY ACCELERATION

CURRENT QUERY ACCELERATION

問合せ

SYS_CONTEXT('DRDAAS','QUERY_ACCELERATION')

設定

SYS_CONTEXTを更新します

セマンティクス

影響なし

QUERY OPTIMIZATION

CURRENT QUERY OPTIMIZATION

問合せ

SYS_CONTEXT('DRDAAS','QUERY_OPTIMIZATION')

設定

SYS_CONTEXTを更新します

セマンティクス

影響なし

REFRESH AGE

CURRENT REFRESH AGE

問合せ

SYS_CONTEXT('DRDAAS','REFRESH_AGE')

設定

SYS_CONTEXTを更新します

セマンティクス

影響なし

ROUTINE VERSION

CURRENT ROUTINE VERSION

問合せ

SYS_CONTEXT('DRDAAS','ROUTINE_VERSION')

設定

SYS_CONTEXTを更新します

セマンティクス

影響なし

RULES

CURRENT RULES

問合せ

SYS_CONTEXT('DRDAAS','RULES')

設定

SYS_CONTEXTを更新します

セマンティクス

影響なし

SCHEMA

CURRENT SCHEMA CURRENT_SCHEMA

問合せ

SYS_CONTEXT('USERENV','CURRENT_SCHEMA')

設定

SYS_CONTEXTを更新します

セマンティクス

影響なし

SERVER

CURRENT SERVER CURRENT_SERVER

問合せ

SYS_CONTEXT('DRDAAS','SERVER')

設定

設定できません。

セマンティクス

設定できません。

SQL_CCFLAGS

CURRENT SQL_CCFLAGS

問合せ

SYS_CONTEXT('DRDAAS','SQL_CCFLAGS')

設定

SYS_CONTEXTを更新します

セマンティクス

影響なし

SQLID

CURRENT SQLID USER

問合せ

USER

設定

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

セマンティクス

影響なし

TIMESTAMP

CURRENT TIMESTAMP CURRENT_TIMESTAMP

問合せ

CURRENT TIMESTAMP

設定

設定できません。

セマンティクス

設定できません。

USER

CURRENT USER CURRENT_USER

問合せ

USER

設定

設定できません。

セマンティクス

設定できません。

SESSION_USER

SESSION_USER

問合せ

USER

設定

設定できません。

セマンティクス

設定できません。

SYSTEM_USER

SYSTE_USER

問合せ

USER

設定

設定できません。

セマンティクス

設定できません。

ENCRYPTION PASSWORD

ENCRYPTION PASSWORD

問合せ

問合せできません。

設定

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

セマンティクス

影響なし