SQL Anywhere は、Sybase Adaptive Server Enterprise がサポートする SQL ダイアレクトである Transact-SQL の大部分のサブセットをサポートしています。この項では、SQL Anywhere と Adaptive Server Enterprise 間の SQL の互換性について説明します。
次に、SQL Anywhere の Transact-SQL に対するサポートの目的を示します。
アプリケーションの移植性 アプリケーション、ストアド・プロシージャ、バッチ・ファイルの多くは、Adaptive Server Enterprise と SQL Anywhere データベースの両方で使用できるように作成できます。
データの移植性 SQL Anywhere データベースと Adaptive Server Enterprise データベースの間では、最小限の作業でデータの交換とレプリケートができます。
目的は、Adaptive Server Enterprise と SQL Anywhere の両方で動作するアプリケーションを作成することです。既存の Adaptive Server Enterprise アプリケーションの多くは、SQL Anywhere データベースで実行するには多少の変更が必要です。
次に、SQL Anywhere の Transact-SQL に対するサポート方法を示します。
SQL 文の多くは、SQL Anywhere と Adaptive Server Enterprise 間で互換性があります。
特にプロシージャ、トリガ、バッチで使用されるプロシージャ言語で書かれた文のいくつかでは、これまでの SQL Anywhere のバージョンでサポートされる構文とともに、別の Transact-SQL 文がサポートされます。このような文については、SQL Anywhere では 2 種類の SQL ダイアレクトがサポートされています。これらのダイアレクトは Transact-SQL (Adaptive Server Enterprise のダイアレクト) および Watcom-SQL (SQL Anywhere のダイアレクト) と呼ばれています。
プロシージャ、トリガ、バッチは Transact-SQL または Watcom-SQL ダイアレクトのどちらでも実行されます。バッチまたはプロシージャ内では、1 つのダイアレクトの制御文だけを通して使用します。たとえば、ダイアレクトごとに異なったフロー制御文があります。
2 つのダイアレクトが重なり合う状況を、次の図に示します。
SQL Anywhere は、既存のデータを処理するときの Transact-SQL 言語の要素、関数、文のほとんどをサポートします。たとえば SQL Anywhere は、すべての数値関数、集合関数、日付と時刻関数をサポートし、1 つを除くすべての文字列関数をサポートしています。別の例として、ジョインを使う拡張された DELETE 文と UPDATE 文がサポートされます。
さらに、SQL Anywhere では、Transact-SQL のストアド・プロシージャ言語 (CREATE PROCEDURE 文、CREATE TRIGGER 文、制御文など) の大部分と、Transact-SQL データのデータ定義言語文のほとんどがサポートされます。
それぞれの製品にサポートされる構造と設定については設計上の相違点があります。デバイス管理、ユーザ管理、バックアップなどの管理タスクの多くはシステム固有のものです。ここでは、SQL Anywhere は、Transact-SQL のシステム・テーブルをビューとして提供しますが、意味のないテーブルにはローがありません。また、SQL Anywhere は、一般的な管理タスクの一部として一連のシステム・プロシージャを提供します。
この章では、最初に、相違点の多いシステム・レベルの問題を検討します。互換性の高い、ダイアレクトのデータ操作とデータ定義言語については、後で説明します。
SQL Anywhere がサポートする SQL 文には、一方のダイアレクトに属し、他方には属さないものがあります。このような 2 つのダイアレクトは、1 つのプロシージャ、トリガ、またはバッチ内で混在させることはできません。たとえば、次の文は SQL Anywhere ではサポートされますが、それは Transact-SQL ダイアレクトのみに属するものとしてです。
Transact-SQL 制御文の IF と WHILE
Transact-SQL の EXECUTE 文
Transact-SQL の CREATE PROCEDURE 文と CREATE TRIGGER 文
Transact-SQL の BEGIN TRANSACTION 文
セミコロンで区切られていない SQL 文は、Transact-SQL のプロシージャまたはバッチに属しています。
Adaptive Server Enterprise では、次の文をサポートしません。
制御文の CASE、LOOP、FOR
IF と WHILE の SQL Anywhere バージョン
CALL 文
CREATE PROCEDURE 文、CREATE FUNCTION 文、CREATE TRIGGER 文の SQL Anywhere バージョン
セミコロンで区切られた SQL 文
1 つのプロシージャ、トリガ、またはバッチ内では、2 つのダイアレクトを混在させることはできません。つまり、ダイアレクトは次の条件で使用できます。
Transact-SQL のみの文を、両方のダイアレクトに属する文とともにバッチ、プロシージャ、またはトリガ内に含めることができます。
Adaptive Server Enterprise によってサポートされない文を、両サーバによってサポートされる文とともに、バッチ、プロシージャ、またはトリガ内に含めることができます。
Transact-SQL のみの文を、SQL Anywhere のみの文とともにバッチ、プロシージャ、またはトリガに含めることはできません。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |