ヘッダーをスキップ

Oracle Rdb SQLリファレンス・マニュアル リリース7.2 E06178-01 |
| 目次 | 索引

戻る | 次へ |

# 付録B
SQL規格

この付録では、Oracle Rdbで準拠しているSQL規格について説明します。

# B.1 ANSI/ISO/IEC SQL 1999規格

- Oracle RdbへのSQLインタフェースはSQLと呼ばれます。このインタフェースは、通常はANSI/ISO SQL規格またはSQL99と呼ばれるSQL規格のOracle Rdbの実装です。

- 1999年に採用された新しいSQL規格は次の5つの部分で構成されます。

  - ANSI/ISO/IEC 9075-1:1999, Information technology - Database language - SQL - Part 1: Framework (SQL/Framework)

  - ANSI/ISO/IEC 9075-2:1999, Information technology - Database language - SQL - Part 2: Foundation (SQL/Foundation)

  - ANSI/ISO/IEC 9075-3:1999, Information technology - Database language - SQL - Part 3: Call-Level Interface (SQL/CLI)

  - ANSI/ISO/IEC 9075-4:1999, Information technology - Database language - SQL - Part 4: Persistent Stored Modules (SQL/PSM)

  - ANSI/ISO/IEC 9075-5:1999, Information technology - Database language - SQL - Part 5: Host Language Bindings (SQL/Bindings)

  通常、Oracle Rdbリリース7.1ドキュメントでは、SQL:1999としてこの規格を参照しています。SQL:1999はSQL92規格に優先します。
  SQL:1999の最小準拠レベルはCoreと呼ばれます。Core SQL:1999は、SQL92 Entry Level仕様のスーパーセットです。Oracle Rdbは、SQL:1999 Core仕様と広範な互換性があります。ただし、少数のSQL:1999 Core機能は現在Oracle Rdbに実装されていないか、Oracle Rdb実装とは異なります。オラクル社では、将来のリリースではSQL:1999 Core機能を完全にサポートしながら、既存のアプリケーションの上位互換性を提供することを公約しています。

さらに、Oracle RdbはANSI/ISO/IEC 9075-4:1999（Persistent Stored Modules）規格のほとんどに準拠しています。

SQL:1999 Coreの次の機能は現在Oracle Rdbでは使用できません。

- SQL99フラガー
  フラガーは、SQL:1999 SQLデータベース言語の拡張をプログラマに警告します。

- 基本情報スキーマ、およびドキュメント・スキーマ
  Rdbシステム表に内容が類似した、データベース定義を記述する表およびビューのセット。

- 最大6小数秒のTIMEおよびTIMESTAMP精度
  Oracle Rdbでは現在最大2の小数秒精度をサポートしています。

- CREATE TYPE
  SQL:1999 COREのCREATE TYPE文によって、ユーザーはドメインに類似しているが強力な型ルールを備えた型名を定義できます。

- REVOKE ...{ RESTRICT | CASCADE }
  REVOKEのこのようなバリエーションでは、権限の変更が既存のプロシージャおよびファンクションの正しい実行に影響を与えないように、保護更新中にチェックを実行する必要があります。

ANSI規格のコピーは、次の宛先に申し込んでください。

American National Standards Institute
11 West 42nd Street
New York, NY 10036
USA
電話番号: 212.642.4900
FAX番号: 212.398.0023

Webサイトからも入手できます。URLは、次のとおりです。

http://webstore.ansi.org/ansidocstore/default.asp

SQL規格を含むANSI規格のサブセットは、X3またはNCITS規格です。これらは、次のURLのNational Committee for Information Technology Standards（NCITS）から入手できます。

http://www.cssinfo.com/ncitsquate.html

Oracle Rdbが完全にサポートしているCore SQL:1999機能を、表B-1に示します。

表B-1 完全にサポートしているCore SQL:1999機能
機能識別番号 | 機能
--- | ---
E011 | 数値データ型
E021 | 文字データ型
E031 | 識別子
E051 | 基本問合せ仕様
E061 | 基本条件および検索条件
E071 | 基本問合せ式
E081 | 基本権限
E091 | 集合ファンクション
E101 | 基本データ操作
E111 | 単一行のSELECT文
E121 | 基本カーソル・サポート
E131 | NULL値のサポート（値のかわりのNULL）
E141 | 基本整合性制約
E151 | 基本トランザクション・サポート
E152 | 基本SET TRANSACTION文
E153 | 副問合せを持つ更新可能な問合せ
E161 | 先頭に2つの負の符号を付けたSQL文のコメント
E171 | SQLSTATEのサポート
E182 | モジュール言語
F041 | 基本結合表
F081 | ビューのUNIONおよびEXCEPT
F131 | グループ操作
F181 | 複数モジュールのサポート
F201 | CASTファンクション
F221 | 明示的なデフォルト
F261 | CASE式
F311 | スキーマ定義文
F471 | スカラー副問合せの値
F481 | 拡張NULL条件

Oracle Rdbが部分的にサポートしているCore SQL:1999機能を、表B-2に示します。

表B-2 部分的にサポートしているCore SQL:1999機能
機能識別番号 | 機能 | 部分的なサポート
--- | --- | ---
F031 | 基本スキーマ | Oracle Rdbでは次の操作の副機能を完全にサポートしている。 F031-01、11節「スキーマ定義および操作」: この機能の副機能に示した選択された機能 F031-02、CREATE VIEW文 F031-03、GRANT文 F031-04、ALTER TABLE文: ADD COLUMN句 F031-13、DROP TABLE文: RESTRICT句 F031-16、DROP VIEW文: RESTRICT句 Oracle Rdbでは次の副機能はサポートしていない。 F031-19、REVOKE文: RESTRICT句
F051 | 基本日付および時刻 | Oracle Rdbでは次の副機能を完全にサポートしている。 F051-01、DATEデータ型（DATEリテラルのサポートを含む） F051-02、最小限0の小数秒精度のTIMEデータ型（TIMEリテラルのサポートを含む） F051-03、最大2の小数秒精度のTIMESTAMPデータ型（TIMESTAMPリテラルのサポートを含む） F051-04、DATEデータ型、TIMEデータ型およびTIMESTAMPデータ型の比較条件 F051-05、日時データ型とキャラクタ・タイプ間の明示的なCAST F051-06、CURRENT_DATE F051-07、LOCALTIME F051-08、LOCALTIMESTAMP Oracle Rdbでは次の副機能はサポートしていない。 F051-03、2を超える小数秒精度
T321 | 基本SQL起動ルーチン | Oracle Rdbでは次の副機能を完全にサポートしている。 T321-01、オーバーロードしないユーザー定義ファンクション T321-02、オーバーロードしないユーザー定義ストアド・プロシージャ T321-03、ファンクションの起動 T321-04、CALL文 T321-05、RETURN文 Oracle Rdbでは次の副機能はサポートしていない。 T321-06、ROUTINESビュー T321-07、PARAMETERSビュー

Oracle RdbがサポートしていないCore SQL:1999機能を、表B-3に示します。

表B-3 サポートしていないCore SQL:1999機能
機能識別番号 | 機能
--- | ---
F021 | 基本情報スキーマ: この情報はOracle Rdbシステム表から入手可能
F501 | 機能および準拠するビュー
F812 | 基本フラグ付け: Oracle RdbのSQLフラガーはSQL92を介してのみ表示
S011 | Distinctデータ型

# B.2 RdbのSQL:1999機能

Oracle Rdbリリース7.1では、SQLに次のSQL:1999機能を追加しています。

- COMMITおよびROLLBACKのAND CHAIN句

- LOCALTIMEファンクション、LOCALTIMESTAMPファンクション、ABSファンクション

- START TRANSACTION文

- ITERATEループ制御文

- 改訂SQL:1999構文を使用するWHILEループ文

- REPEATループ文

- 検索済CASE文

- DETERMINISTIC属性、およびNOT DETERMINISTIC属性
  それぞれNOT VARIANT属性およびVARIANT属性の代替

- ファンクションのRETURNS NULL ON NULL INPUT句およびCALLED ON NULL INPUT句

- モジュールのすべてのルーチンによってアクセス可能なモジュールのグローバル変数のサポート

- INSERTのDEFAULT VALUES句

- INSERTおよびUPDATEのDEFAULTキーワード

- 完全なSIGNAL文の構文

- BETWEEN SYMMETRIC条件のサポート

- GRANT/REVOKEの機能拡張を含むUSERおよびROLEのサポート

- 制約のINITIALLY IMMEDIATE句およびINITIALLY DEFERRED句

- UNIQUE条件

- TABLE問合せ仕様
  SELECT * FROMの省略形

- UNIONのDISTINCTキーワード

- FOREIGN KEY参照セマンティクス
  REFERENCES句によってリストされる列は、一致するPRIMARY KEYまたはUNIQUE制約の順序とは異なる場合があります。SQL99言語が必要です。

- ALTER MODULE文、ALTER PROCEDURE文およびALTER FUNCTION文

- EXCEPT DISTINCT演算子

- INTERSECT DISTINCT演算子

- UNION演算子、EXCEPT演算子およびINTERSECT演算子のCORRESPONDING句

- VAR_POP統計演算子、VAR_SAMP統計演算子、STDDEV_POP統計演算子、STDDEV_SAMP統計演算子

- 統計関数のFILTER修飾子

# B.3 SQL:1999セマンティクスの確立

次のコマンドは、SQL:1999データベース言語規格セマンティクスの確立に使用できます。

- SET DIALECT

- SET QUOTING RULES

- SET KEYWORD RULES

- SET DEFAULT DATE FORMAT

次に例を示します。

    SQL> SET DIALECT 'SQL99';

通常、SQL99言語のセマンティクスはSQL92と同じです。新機能が追加されたため、この2つの言語はセマンティクスが異なる場合があります。

次のコマンドは、この接続の現在の設定を示します。

    SQL> SHOW CONNECTION <connectionname>

次に例を示します。

    SQL> show connection rdb$default_connection
    Connection: RDB$DEFAULT_CONNECTION
    Default alias is RDB$DBHANDLE
    Default catalog name is RDB$CATALOG
    Default schema name is SMITHI
    Dialect: SQL99
    Default character unit: CHARACTERS
    Keyword Rules: SQL99
    View Rules: ANSI/ISO
    Default DATE type: DATE ANSI
    Quoting Rules: ANSI/ISO
    Optimization Level: DEFAULT
    Hold Cursors default: WITH HOLD PRESERVE NONE
    Quiet commit mode: ON
    Compound transactions mode: EXTERNAL
    Default character set is DEC_MCS
    National character set is DEC_MCS
    Identifier character set is DEC_MCS
    Literal character set is DEC_MCS
    Display character set is UNSPECIFIED

セッション変数DIALECT、DATE_FORMAT、QUOTING_RULESおよびKEYWORD_RULESも文字列SQL99を返すことができます。

次に例を示します。

    SQL> declare :a, :b, :c, :d char(10);
    SQL> get environment (session)
    cont>     :a = DIALECT,
    cont>     :b = DATE_FORMAT,
    cont>     :c = QUOTING_RULES,
    cont>     :d = KEYWORD_RULES;
    SQL> print :a, :b, :c, :d;
     A            B            C            D
     SQL99        SQL99        SQL99        SQL99