サーバー メタデータの作成と変更

提供: RAD Studio
移動先: 案内検索

レコードを返さないコマンドの実行 への移動


データを返さないコマンドのほとんどは、2 種類に分類できます。データを編集するためのコマンド(INSERT、DELETE、UPDATE など)と、サーバー上でテーブルやインデックスやストアド プロシージャなどのエンティティを作成または変更するためのコマンドです。

編集のために明示的な SQL コマンドを使用したくない場合は、dbExpress データセットをクライアント データセットにリンクして、編集に関するすべての SQL コマンドの生成を任せることができます。実際に、この方法は推奨されています。データベース対応コントロールは、TClientDataSet などのデータセットを通して編集を行うように設計されているためです。

ただし、アプリケーションがサーバー上のメタデータを作成または変更するには、コマンドを送信するしかありません。すべてのデータベース ドライバが同じ SQL 構文をサポートしているわけではありません。データベースの種類ごとにサポートされている SQL 構文や、データベースの種類による違いについては、このトピックでは触れません。特定のデータベース システムの SQL 実装についての最新の詳しい解説は、そのシステムに付属のドキュメントを参照してください。

一般に、データベース内にテーブルを作成するには CREATE TABLE 文を、そのテーブルに新しいインデックスを作成するには CREATE INDEX 文を使用します。その他に CREATE DOMAIN、CREATE VIEW、CREATE SCHEMA、CREATE PROCEDURE などの CREATE 文がサポートされている場合には、それを使ってさまざまなメタデータ オブジェクトを追加することができます。

CREATE 文ごとに、そのメタデータ オブジェクトを削除するための対応する DROP 文が存在します。DROP TABLE、DROP VIEW、DROP DOMAIN、DROP SCHEMA、DROP PROCEDURE などです。

テーブルの構造を変更するには、ALTER TABLE 文を使用します。ALTER TABLE には ADD 句と DROP 句があり、テーブル内に新しい要素を作成したり、その要素を削除することができます。たとえば、ADD COLUMN 句でテーブルに新しい列を追加したり、DROP CONSTRAINT 句でテーブルから既存の制約を削除することができます。

次の文では、InterBase データベースに GET_EMP_PROJ というストアド プロシージャを作成しています。

CREATE PROCEDURE GET_EMP_PROJ (EMP_NO SMALLINT)
RETURNS (PROJ_ID CHAR(5))
AS
BEGIN
  FOR SELECT PROJ_ID
  FROM EMPLOYEE_PROJECT
  WHERE EMP_NO = :EMP_NO
  INTO :PROJ_ID
  DO
    SUSPEND;
END

次のコードは、TSQLDataSet を使って同じストアド プロシージャを作成しています。ParamCheck プロパティが使われているのは、ストアド プロシージャ定義内のパラメータ(:EMP_NO および :PROJ_ID)とストアド プロシージャを作成するクエリのパラメータとをデータセットが混同しないようにするためです。

with SQLDataSet1 do
begin
  ParamCheck := False;
  CommandType := ctQuery;
  CommandText := 'CREATE PROCEDURE GET_EMP_PROJ (EMP_NO SMALLINT) ' +
      'RETURNS (PROJ_ID CHAR(5)) AS ' +
      'BEGIN ' +
        'FOR SELECT PROJ_ID FROM EMPLOYEE_PROJECT ' +
        'WHERE EMP_NO = :EMP_NO ' +
        'INTO :PROJ_ID ' +
          'DO SUSPEND; ' +
       END';
  ExecSQL;
end;
SQLDataSet1->ParamCheck = false;
SQLDataSet1->CommandType = ctQuery;
SQLDataSet1->CommandText = "CREATE PROCEDURE GET_EMP_PROJ (EMP_NO SMALLINT) RETURNS (PROJ_ID CHAR(5)) AS BEGIN FOR SELECT PROJ_ID FROM EMPLOYEE_PROJECT WHERE EMP_NO = :EMP_NO INTO :PROJ_ID DO SUSPEND; END";
SQLDataSet1->ExecSQL();

関連項目