interbase xe 言語リファレンス...

284
言語リファレンス ガイド InterBase XE 2010 9

Upload: hamien

Post on 12-Dec-2018

264 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

言語リファレンス ガイド

InterBase XE

2010 年 9 月

Page 2: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

Copyright © 1994-2010 Embarcadero Technologies, Inc.

Embarcadero Technologies, Inc. 100 California Street, 12th FloorSan Francisco, CA 94111 U.S.A.All rights reserved.

すべてのブランドおよび製品名は各社の商標または登録商標です。本ソフトウェア / 文書には Embarcadero Technologies, Inc. の知的財産情報が含まれています。これは使用および公開の制限を含む

使用契約に基づいて提供されるものであり、著作権法によっても保護されています。

本ソフトウェアのリバース エンジニアリングは禁じられています。

本ソフトウェア / 文書が米国国防総省の米国政府機関に引き渡される場合には、制限付き権利で

引き渡されるものとし、以下の表示が適用されます。

制限付き権利の表示。政府による使用、複製または公開は、DFARS 252.227-7013 の「Rights in Technical Data and Computer Software」条項(1988 年 10 月)の副項目 (c)(1)(ii) に規定される制限に従います。

本ソフトウェア / 文書が米国国防総省以外の米国政府機関に引き渡される場合には、

FAR 552.227-14 の「Rights in Data-General」(Alternate III を含む)(1987 年 6 月)で定められた

制限付き権利で引き渡されます。

本ドキュメントに含まれる情報は、予告なしに変更されることがあります。

それらの変更や追加を通知するために改訂版が発行される場合があります。

Embarcadero Technologies, Inc. は、本ドキュメントにエラーが含まれないことを保証しません。

Page 3: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

目次

表 . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

第 1 章InterBase の使い方: 言語リファレンス対象読者 . . . . . . . . . . . . . . . . . . . . . . 1-1このガイドの内容 . . . . . . . . . . . . . . . . . 1-1

第 2 章SQL 文と関数のリファレンスSQL の差異 . . . . . . . . . . . . . . . . . . . . 2-1

埋め込み SQL(ESQL) . . . . . . . . . . . 2-1動的 SQL(DSQL) . . . . . . . . . . . . . . 2-2ストアドプロシージャ / トリガー言語 . . . . 2-2対話型 SQL(isql) . . . . . . . . . . . . . . 2-2

SQL ダイアレクト . . . . . . . . . . . . . . . . 2-2ダイアレクト . . . . . . . . . . . . . . . . . . 2-2過渡的機能 . . . . . . . . . . . . . . . . . . . 2-2

データベースオブジェクトの命名規則 . . . . . 2-3ステートメントの一覧 . . . . . . . . . . . . . . 2-4関数の一覧 . . . . . . . . . . . . . . . . . . . . . 2-5データ型 . . . . . . . . . . . . . . . . . . . . . . 2-6高精度数値 . . . . . . . . . . . . . . . . . . . . . 2-7

加算と減算 . . . . . . . . . . . . . . . . . . . 2-7乗算 . . . . . . . . . . . . . . . . . . . . . . . 2-8除算 . . . . . . . . . . . . . . . . . . . . . . . 2-8

エラー処理 . . . . . . . . . . . . . . . . . . . . . 2-8ステートメントと関数のリファレンス . . . . . 2-9

ALTER DATABASE . . . . . . . . . . . . . 2-10ALTER DOMAIN . . . . . . . . . . . . . . . 2-12ALTER EXCEPTION . . . . . . . . . . . . 2-13ALTER INDEX . . . . . . . . . . . . . . . . 2-14ALTER PROCEDURE . . . . . . . . . . . 2-15ALTER TABLE . . . . . . . . . . . . . . . . 2-16ALTER TRIGGER . . . . . . . . . . . . . . 2-21ALTER USER . . . . . . . . . . . . . . . . . 2-23AVG( ) . . . . . . . . . . . . . . . . . . . . . . 2-24BASED ON . . . . . . . . . . . . . . . . . . 2-25BEGIN DECLARE SECTION . . . . . . . 2-25CASE . . . . . . . . . . . . . . . . . . . . . . 2-26CAST( ) . . . . . . . . . . . . . . . . . . . . . 2-26CLOSE . . . . . . . . . . . . . . . . . . . . . 2-27CLOSE (BLOB) . . . . . . . . . . . . . . . .2-28COALESCE( ). . . . . . . . . . . . . . . . . 2-29COMMIT . . . . . . . . . . . . . . . . . . . . 2-29CONNECT . . . . . . . . . . . . . . . . . . . 2-30

COUNT( ) . . . . . . . . . . . . . . . . . . . 2-33CREATE DATABASE. . . . . . . . . . . . 2-34CREATE DOMAIN . . . . . . . . . . . . . 2-37CREATE ENCRYPTION. . . . . . . . . . 2-40CREATE EXCEPTION . . . . . . . . . . . 2-40CREATE GENERATOR . . . . . . . . . . 2-41CREATE INDEX . . . . . . . . . . . . . . . 2-42CREATE JOURNAL . . . . . . . . . . . . 2-43CREATE JOURNAL ARCHIVE . . . . . 2-45CREATE PROCEDURE . . . . . . . . . . 2-48CREATE ROLE . . . . . . . . . . . . . . . 2-53CREATE SHADOW. . . . . . . . . . . . . 2-54CREATE TABLE . . . . . . . . . . . . . . . 2-56CREATE TRIGGER . . . . . . . . . . . . 2-63CREATE USER . . . . . . . . . . . . . . . 2-69CREATE VIEW . . . . . . . . . . . . . . . 2-70DECLARE CURSOR . . . . . . . . . . . . 2-72DECLARE CURSOR (BLOB) . . . . . . 2-73DECLARE EXTERNAL FUNCTION . . 2-75DECLARE FILTER . . . . . . . . . . . . . 2-76DECLARE STATEMENT . . . . . . . . . 2-77DECLARE TABLE. . . . . . . . . . . . . . 2-78DELETE . . . . . . . . . . . . . . . . . . . . 2-79DESCRIBE . . . . . . . . . . . . . . . . . . 2-81DISCONNECT . . . . . . . . . . . . . . . . 2-82DROP DATABASE . . . . . . . . . . . . . 2-83DROP DOMAIN . . . . . . . . . . . . . . . 2-83DROP ENCRYPTION . . . . . . . . . . . 2-83DROP EXCEPTION . . . . . . . . . . . . 2-84DROP EXTERNAL FUNCTION . . . . . 2-84DROP FILTER . . . . . . . . . . . . . . . . 2-85DROP GENERATOR . . . . . . . . . . . . 2-86DROP INDEX . . . . . . . . . . . . . . . . 2-86DROP JOURNAL . . . . . . . . . . . . . . 2-87DROP JOURNAL ARCHIVE . . . . . . . 2-87DROP PROCEDURE . . . . . . . . . . . 2-87DROP ROLE . . . . . . . . . . . . . . . . . 2-88DROP SHADOW . . . . . . . . . . . . . . 2-88DROP TABLE . . . . . . . . . . . . . . . . 2-89DROP TRIGGER . . . . . . . . . . . . . . 2-89DROP USER . . . . . . . . . . . . . . . . . 2-90DROP VIEW . . . . . . . . . . . . . . . . . 2-90END DECLARE SECTION . . . . . . . . 2-91EVENT INIT . . . . . . . . . . . . . . . . . 2-91EVENT WAIT. . . . . . . . . . . . . . . . . 2-92EXECUTE. . . . . . . . . . . . . . . . . . . 2-92EXECUTE IMMEDIATE . . . . . . . . . . 2-94

3

Page 4: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

EXECUTE PROCEDURE . . . . . . . . .2-94EXTRACT( ) . . . . . . . . . . . . . . . . . . 2-96FETCH . . . . . . . . . . . . . . . . . . . . . 2-96FETCH (BLOB) . . . . . . . . . . . . . . . .2-98GEN_ID( ) . . . . . . . . . . . . . . . . . . . 2-99GRANT . . . . . . . . . . . . . . . . . . . . 2-100INSERT . . . . . . . . . . . . . . . . . . . . 2-103INSERT CURSOR (BLOB) . . . . . . . 2-105MAX( ) . . . . . . . . . . . . . . . . . . . . 2-106MIN( ) . . . . . . . . . . . . . . . . . . . . . 2-106NULLIF( ). . . . . . . . . . . . . . . . . . . 2-107OPEN . . . . . . . . . . . . . . . . . . . . . 2-107OPEN (BLOB) . . . . . . . . . . . . . . . 2-108PREPARE . . . . . . . . . . . . . . . . . . 2-109RELEASE SAVEPOINT . . . . . . . . . 2-110REVOKE . . . . . . . . . . . . . . . . . . . 2-110ROLLBACK . . . . . . . . . . . . . . . . . 2-113SAVEPOINT . . . . . . . . . . . . . . . . . 2-114SELECT . . . . . . . . . . . . . . . . . . . 2-114SET DATABASE . . . . . . . . . . . . . . 2-119SET GENERATOR . . . . . . . . . . . . 2-121SET NAMES . . . . . . . . . . . . . . . . 2-122SET SQL DIALECT . . . . . . . . . . . . 2-123SET STATISTICS . . . . . . . . . . . . . 2-124SET TRANSACTION . . . . . . . . . . . 2-125SHOW SQL DIALECT . . . . . . . . . . 2-127SUM( ) . . . . . . . . . . . . . . . . . . . . 2-127UPDATE . . . . . . . . . . . . . . . . . . . 2-128UPPER( ). . . . . . . . . . . . . . . . . . . 2-130WHENEVER . . . . . . . . . . . . . . . . 2-130

第 3 章プロシージャとトリガートリガーとストアドプロシージャの作成 . . . . 3-1サポートされないステートメントの種類 . . . . 3-2用語 . . . . . . . . . . . . . . . . . . . . . . . . . 3-2代入文 . . . . . . . . . . . . . . . . . . . . . . . . 3-3BEGIN … END . . . . . . . . . . . . . . . . . . 3-3コメント . . . . . . . . . . . . . . . . . . . . . . 3-4DECLARE VARIABLE . . . . . . . . . . . . . 3-5EXCEPTION . . . . . . . . . . . . . . . . . . . 3-5EXECUTE PROCEDURE . . . . . . . . . . . 3-6EXECUTE STATEMENT . . . . . . . . . . . . 3-7

データ行が返されないもの . . . . . . . . . . 3-8データが 1 行だけ返されるもの . . . . . . . 3-8複数のデータ行が返されるもの . . . . . . . 3-8要件と制約 . . . . . . . . . . . . . . . . . . . 3-9

FOR SELECT…DO . . . . . . . . . . . . . . . 3-9IF…THEN … ELSE . . . . . . . . . . . . . . . 3-10

入力パラメータ . . . . . . . . . . . . . . . . . . 3-11NEW コンテキスト変数 . . . . . . . . . . . . . 3-11OLD コンテキスト変数 . . . . . . . . . . . . . 3-12出力パラメータ . . . . . . . . . . . . . . . . . . 3-13POST_EVENT. . . . . . . . . . . . . . . . . . 3-14SELECT. . . . . . . . . . . . . . . . . . . . . . 3-14SUSPEND . . . . . . . . . . . . . . . . . . . . 3-15WHEN … DO . . . . . . . . . . . . . . . . . . 3-16

例外の処理 . . . . . . . . . . . . . . . . . . . 3-17SQL エラーの処理 . . . . . . . . . . . . . . 3-17InterBase エラーコードの処理 . . . . . . . 3-18

WHILE … DO . . . . . . . . . . . . . . . . . . 3-18

第 4 章キーワードInterBase のキーワード. . . . . . . . . . . . . . 4-1

第 5 章エラーコードとメッセージエラーの発生源 . . . . . . . . . . . . . . . . . . . 5-1エラーの報告と処理 . . . . . . . . . . . . . . . . 5-2

WHENEVER によるエラーのトラップ . . . 5-2SQLCODE 値の直接チェック . . . . . . . . 5-2InterBase ステータス配列 . . . . . . . . . . 5-3その他の情報. . . . . . . . . . . . . . . . . . . 5-4

SQLCODE エラーコードとエラーメッセージ . 5-5SQLCODE エラーメッセージの概要 . . . . 5-5SQLCODE のコードとメッセージ. . . . . . 5-5

InterBase のステータス配列エラーコード . . 5-23

第 6 章システムテーブル、一時テーブル、ビュー概要 . . . . . . . . . . . . . . . . . . . . . . . . . . 6-1システムテーブル . . . . . . . . . . . . . . . . . . 6-2

RDB$CHARACTER_SETS . . . . . . . . . . . 6-3RDB$CHECK_CONSTRAINTS . . . . . . . . 6-4RDB$COLLATIONS . . . . . . . . . . . . . . . 6-4RDB$DATABASE . . . . . . . . . . . . . . . . 6-5RDB$DEPENDENCIES . . . . . . . . . . . . . 6-6RDB$ENCRYPTIONS. . . . . . . . . . . . . . 6-6RDB$EXCEPTIONS. . . . . . . . . . . . . . . 6-8RDB$FIELD_DIMENSIONS . . . . . . . . . . 6-8RDB$FIELDS . . . . . . . . . . . . . . . . . . 6-9RDB$FILES . . . . . . . . . . . . . . . . . . 6-14RDB$FILTERS . . . . . . . . . . . . . . . . . 6-14RDB$FORMATS . . . . . . . . . . . . . . . . 6-15RDB$FUNCTION_ARGUMENTS . . . . . . 6-15

4

Page 5: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

RDB$FUNCTIONS . . . . . . . . . . . . . . . 6-16RDB$GENERATORS . . . . . . . . . . . . . 6-17RDB$INDEX_SEGMENTS . . . . . . . . . . 6-18RDB$INDICES . . . . . . . . . . . . . . . . . 6-18RDB$JOURNAL_ARCHIVES . . . . . . . . .6-20RDB$LOG_FILES . . . . . . . . . . . . . . . 6-20RDB$PAGES . . . . . . . . . . . . . . . . . . 6-20 RDB$PROCEDURE_PARAMETERS . . . . 6-21RDB$PROCEDURES . . . . . . . . . . . . . 6-21RDB$REF_CONSTRAINTS . . . . . . . . . . 6-23RDB$RELATION_CONSTRAINTS . . . . . .6-23RDB$RELATION_FIELDS . . . . . . . . . . . 6-24RDB$RELATIONS . . . . . . . . . . . . . . . 6-26RDB$ROLES . . . . . . . . . . . . . . . . . . 6-28RDB$SECURITY_CLASSES . . . . . . . . .6-28RDB$TRANSACTIONS . . . . . . . . . . . . 6-29RDB$TRIGGER_MESSAGES . . . . . . . . 6-30RDB$TRIGGERS . . . . . . . . . . . . . . . .6-30RDB$TYPES . . . . . . . . . . . . . . . . . . 6-31RDB$USER_PRIVILEGES . . . . . . . . . . 6-32RDB$USERS . . . . . . . . . . . . . . . . . . 6-33RDB$VIEW_RELATIONS . . . . . . . . . . . 6-34

システム一時テーブル . . . . . . . . . . . . . . 6-34TMP$ATTACHMENTS . . . . . . . . . . . . . 6-35TMP$DATABASE . . . . . . . . . . . . . . . .6-36TMP$HEAPS . . . . . . . . . . . . . . . . . . 6-38TMP$POOL_BLOCKS . . . . . . . . . . . . .6-38TMP$POOLS . . . . . . . . . . . . . . . . . . 6-41

TMP$PROCEDURES . . . . . . . . . . . . . 6-41TMP$RELATIONS . . . . . . . . . . . . . . . 6-42TMP$STATEMENTS . . . . . . . . . . . . . 6-44TMP$TRANSACTIONS . . . . . . . . . . . . 6-45TMP$TRIGGERS . . . . . . . . . . . . . . . 6-46

システムビュー . . . . . . . . . . . . . . . . . . 6-48CHECK_CONSTRAINTS . . . . . . . . . . . 6-49CONSTRAINTS_COLUMN_USAGE . . . . 6-49REFERENTIAL_CONSTRAINTS . . . . . . 6-49TABLE_CONSTRAINTS . . . . . . . . . . . 6-50

第 7 章キャラクタセットと照合順序InterBase のキャラクタセットと照合順序 . . . 7-1

キャラクタセット登録の必要条件. . . . . . . 7-5Paradox と dBASE のサポート . . . . . . . 7-6追加キャラクタセットと照合順序. . . . . . . 7-7

キャラクタセットの指定 . . . . . . . . . . . . . . 7-7データベースのデフォルトキャラクタセット7-7テーブルの列のキャラクタセット. . . . . . . 7-8クライアント接続のキャラクタセット . . . . 7-8列の照合順序. . . . . . . . . . . . . . . . . . . 7-9比較演算での照合順序 . . . . . . . . . . . . . 7-9ORDER BY 句での照合順序 . . . . . . . . . . 7-9GROUP BY 句での照合順序 . . . . . . . . . 7-10

索引 . . . . . . . . . . . . . . . . . . . . . . . . . . I-1

5

Page 6: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

6

Page 7: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

1.1 『言語リファレンス』の構成. . . . . . . . 1-22.1 SQL 関数 . . . . . . . . . . . . . . . . . . 2-52.2 InterBase でサポートされているデータ型

. . . . . . . . . . . . . . . . . . . . . . . . 2-62.3 SQLCODE とメッセージの概要 . . . . . . 2-92.4 ステートメントと関数の形式 . . . . . . . 2-92.5 ALTER TABLE 文 . . . . . . . . . . . . . . 2-192.6 CAST() で変換できるデータ型 . . . . . .2-272.7 プロシージャ / トリガー言語の拡張 . . . 2-502.8 プロシージャ / トリガー言語の拡張 . . . 2-662.9 取り出される部分. . . . . . . . . . . . . . 2-962.10 SQL 特権 . . . . . . . . . . . . . . . . . 2-1122.11 SQL ダイアレクト . . . . . . . . . . . . 2-1242.12 SQL ダイアレクト . . . . . . . . . . . . 2-1273.1 SUSPEND、EXIT、END . . . . . . . . . . 3-155.1 ロールバックと再実行が必要なステータス配

列コード . . . . . . . . . . . . . . . . . . . 5-45.2 エラー処理に関する参照箇所 . . . . . . . 5-45.3 SQLCODE とエラーメッセージの概要 . . 5-55.4 SQLCODE のコードとメッセージ . . . 5-65.5 InterBase のステータス配列エラーコード

. . . . . . . . . . . . . . . . . . . . . . . . 5-246.1 システム テーブル . . . . . . . . . . . . . 6-26.2 RDB$CHARACTER_SETS . . . . . . 6-36.3 RDB$CHECK_CONSTRAINTS . . . . 6-46.4 RDB$COLLATIONS . . . . . . . . . . . 6-46.5 RDB$DATABASE . . . . . . . . . . . . . 6-56.6 RDB$DEPENDENCIES . . . . . . . . . 6-66.7 RDB$ENCRYPTIONS . . . . . . . . . . . 6-76.8 RDB$EXCEPTIONS . . . . . . . . . . . 6-86.9 RDB$FIELD_DIMENSIONS . . . . . . 6-86.10 RDB$FIELDS . . . . . . . . . . . . . . . 6-96.11 RDB$FILES . . . . . . . . . . . . . . . . 6-146.12 RDB$FILTERS . . . . . . . . . . . . . . 6-146.13 RDB$FORMATS . . . . . . . . . . . . . 6-156.14 RDB$FUNCTION_ARGUMENTS . . 6-156.15 RDB$FUNCTIONS . . . . . . . . . . . . 6-176.16 RDB$GENERATORS . . . . . . . . . . 6-17

6.17 RDB$INDEX_SEGMENTS . . . . . . 6-186.18 RDB$INDICES . . . . . . . . . . . . . . 6-186.19 RDB$JOURNAL_ARCHIVES . . . . . . . 6-206.20 RDB$PAGES . . . . . . . . . . . . . . . 6-216.21 RDB$PROCEDURE_PARAMETERS

. . . . . . . . . . . . . . . . . . . . . . . . 6-216.22 RDB$PROCEDURES . . . . . . . . . 6-226.23 RDB$REF_CONSTRAINTS . . . . . 6-236.24 RDB$RELATION_CONSTRAINTS . 6-236.25 RDB$RELATION_FIELDS . . . . . . 6-246.26 RDB$RELATIONS. . . . . . . . . . . . 6-266.27 RDB$ROLES . . . . . . . . . . . . . . . 6-286.28 RDB$SECURITY_CLASSES . . . . . 6-286.29 RDB$TRANSACTIONS . . . . . . . . 6-296.30 RDB$TRIGGER_MESSAGES . . . . 6-306.31 RDB$TRIGGERS . . . . . . . . . . . . 6-306.32 RDB$TYPES . . . . . . . . . . . . . . . 6-316.33 RDB$USER_PRIVILEGES . . . . . . 6-326.34 RDB$USERS . . . . . . . . . . . . . . . . 6-336.35 RDB$VIEW_RELATIONS . . . . . . . 6-346.36 TMP$ATTACHMENTS . . . . . . . . . 6-356.37 TMP$DATABASE . . . . . . . . . . . . 6-366.38 TMP$HEAPS . . . . . . . . . . . . . . . 6-386.39 TMP$POOL_BLOCKS . . . . . . . . . 6-396.40 TMP$POOLS . . . . . . . . . . . . . . . 6-416.41 TMP$PROCEDURES . . . . . . . . . 6-416.42 TMP$RELATIONS. . . . . . . . . . . . 6-426.43 TMP$STATEMENTS . . . . . . . . . . 6-446.44 TMP$TRANSACTIONS . . . . . . . . 6-456.45 TMP$TRIGGERS . . . . . . . . . . . . 6-466.46 CHECK_CONSTRAINTS . . . . . . . 6-496.47 CONSTRAINTS_COLUMN_USAGE 6-496.48 REFERENTIAL_CONSTRAINTS . . 6-496.49 TABLE_CONSTRAINTS . . . . . . . . 6-507.1 キャラクタセットと照合順序 . . . . . . . 7-27.2 DOS コードページに対応するキャラクタ

セット . . . . . . . . . . . . . . . . . . . . . 7-6

7

Page 8: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

8

Page 9: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

第 章

第 1 章 InterBase の使い方:言語リファレンス

『言語リファレンス』は、埋め込みアプリケーションプログラミングや InterBase の対話型

SQL ユーティリティ isql に使用する SQL 文と動的 SQL(DSQL)文の構文とセマンティクス

(意味)を詳しく説明します。 InterBase のストアドプロシージャとトリガーに固有の言語と

構文についても解説します。

対象読者

『言語リファレンス』の読者は、SQL、データ定義、データ操作、およびプログラミングに

関する一般知識があることを前提としています。 構文やリソースの使い方について、次の読

者を対象として説明します。

• 埋め込み SQL や DSQL のデータベースアプリケーションを書くプログラマ

• サポートされている SQL 構文の知識を有し、InterBase アプリケーションプログラミングイ

ンターフェース(API)を使用しようとするプログラマ

• isql を使ってデータベースやテーブルの作成や保守を行うデータベース設計担当者

• isql を使ってクエリーやデータの操作を行うユーザー

このガイドの内容

次の表に『言語リファレンス』の構成と各章の内容をまとめます。

第 1 章 I n t e r B a s e の使い方: 言語リファレンス 1-1

Page 10: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

このガイドの内容

メモ InterBase UDF ライブラリで提供される関数については、『開発者ガイド』の「UDF と

BLOB フィルタの操作」の章を参照してください。

表 1.1 『言語リファレンス』の構成

章 説明

第 1 章「InterBase の使い方: 言語リファレンス」 このマニュアルの概要と対象となる読者を説明します。

第 2 章「SQL 文と関数のリファレンス」 SQL 文と DSQL 文の構文と使い方を説明します。

第 3 章「プロシージャとトリガー」 ストアドプロシージャ / トリガー言語の構文と使い方を説明します。

第 4 章「キーワード」 InterBase にとって特別な意味を持つキーワード、記号、句読文字ついて説明します。

第 5 章「エラーコードとメッセージ」 メタデータを記録している InterBase のシステムテーブルとシステムビューについて説明します。

第 6 章「システムテーブル、一時テーブル、ビュー」 各種の環境と使用を対象としたキャラクタセットと照合順序(コレーション オーダー)について詳しく説明します。

第 7 章「キャラクタセットと照合順序」 このマニュアルで構文の説明やオブジェクトの識別に使用されている書体と特殊文字の一覧を示しています。

1-2 言語リファレンス

Page 11: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

第 章

第 2 章 SQL 文と関数のリファレンス

この章では、InterBase の SQL 言語要素の構文と使い方を説明します。 記載する項目は次のとおりです。

• SQL の差異とダイアレクト

• データベースオブジェクトの命名規則

• SQL 文および関数のリスト

• InterBase データ型の記述

• SQLCODE によるエラー処理

• 文および関数の定義要素とその使い方

• InterBase でサポートされる SQL 文のリファレンス

SQL の差異

InterBase の SQL は、ISO/IEC 9075:1992 規格にほとんどしたがっていますが、わずかに違いがあります。 違いは、 InterBase の SQL、埋め込み SQL、動的 SQL(DSQL)、およびプロシージャ / トリガー言語の間に存在します。

埋め込み SQL(ESQL)

埋め込み形式の SQL は、C や Pascal などの従来の言語で記述されるプログラム内で使用されます。 プリプロセッサは、SQL 文をホスト言語のデータ構造と InterBase サーバーへの呼び出しに変換します。 埋め込み言語はプログラムに直接書き込まれます。文を動的に生成することはできません。 埋め込み SQL 内の各文は、セミコロンで終わります。

第 2 章 S Q L 文と関数のリファレンス 2-1

Page 12: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

S Q L ダイアレクト

動的 SQL(DSQL)

DSQL を使用すると、プログラムの実行時に文を作成できます。 DSQL は、従来の言語から InterBase API を通して使用できます。 通常は、API の細部を隠蔽してくれる Delphi などの開発環境から使用されます。 完成した DSQL 文は、"EXEC SQL" と末尾のセミコロンがないこと以外は、「埋め込み」言語によく似ています。

ストアドプロシージャ / トリガー言語

トリガーとストアドプロシージャは埋め込み言語のバリアントによって記述され、フロー制御や条件式、エラー処理などの機能を提供することができます。 すべての DDL(データ定義言語)を含む一部の構文は除外されています。 トリガーまたはストアドプロシージャの中では、文はセミコロンで区切られます。

対話型 SQL(isql)

対話型クエリー言語 isql は DSQL によく似ています。ただし、カーソルなど一部の機能が除外され、SET 文と SHOW 文が追加されています。 埋め込み SQL と同様に、isql の文はセミコロンで終わらなければなりません。

SQL ダイアレクト

InterBase バージョン6以降、ISO/IEC 9075:1992 標準の規格に準ずるためのいくつかの修正が行われています。この修正の一部は SQL の初期の実装と互換性がありません。 現在の InterBase では、各クライアントとデータベースにはそれぞれ SQL ダイアレクトが設定されます。 ダイアレクトは、過渡的機能(InterBase のバージョン間で意味が変化した機能) を InterBase サーバーがどのように解釈するかを示すインジケータです。 ダイアレクトの使い方と過渡的機能については、『操作ガイド』の移行に関する付録を参照してください。

ダイアレクト

• ダイアレクト 1:過渡的機能は、InterBase バージョン 5.6 以前のものとして解釈される

• ダイアレクト 2:診断モード。過渡的機能は認識され、警告によって示される

• ダイアレクト 3:過渡的機能は、SQL-92 準拠として解釈される

過渡的機能

• 二重引用符("):単引用符(')のシノニムから、オブジェクト名のデリミタ(区切り文字)

に変更された

• 大きなサイズの高精度値:有効桁数が 9 桁を超える DECIMAL および NUMERIC データ型は、

DOUBLE PRECISION ではなく INT 64 として格納される

• DATE、TIME、および TIMESTAMP データ型:

2-2 言語リファレンス

Page 13: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

データベースオブジェクトの命名規則

• DATE:日付と時刻の情報を保持する 64 ビットデータから、日付情報だけを保持す

る 32 ビットデータに変更された

• TIME:時刻情報だけを保持する 32 ビットデータ

• TIMESTAMP:日付と時刻の情報を保持する 64 ビットデータ(バージョン 5 以前の SQL の DATE と同じ)

データベースオブジェクトの命名規則

アプリケーションプログラマやエンドユーザーがデータベースオブジェクトを作成したり、オブジェクト名を指定する場合は、大文字と小文字の区別は必要ありません。 データベースオブジェクトの命名については、次の規則にしたがってください。

• 名前の先頭は、英字(A ~ Z、または a ~ z)から開始します。

• 名前に使用する文字は、ドル記号($)、下線(_)、数字(0 ~ 9)、英字(A ~ Z、a ~ z)を

含め、67 文字以下でなければなりません。制約名など一部のオブジェクトは、27 バイト以

下に制限されます。

• オブジェクト名は、一意なものを使用します。 テーブルやビューなど、同じ型のオブジェ

クトは、どれも一意でなければなりません。 通常は、データベース内でも一意にする必要

があります。

キーワード、ASCII 文字、大文字と小文字が区別される文字列、およびスペース(末尾のスペースは除く)を含むオブジェクト名を使用する場合は、二重引用符で囲みます。 この二重引用符で囲んだ識別子を区切り付き識別子と呼びます。 区切り付き識別子は、常に二重引用符内で参照される必要があります。 InterBase のダイアレクト 3 では、二重引用符で囲まれた名前は大文字と小文字が区別されます。 次に例を示します。

SELECT “CodAR” FROM MyTable

これは、次の文とは異なります。

SELECT “CODAR” FROM MyTable

この動作は、区切り付き識別子に関する ANSI SQL のセマンティクスにしたがっています。

CREATE 文や DECLARE 文でデータベースオブジェクトに命名する方法については、『言語リファレンス』を参照してください。

第 2 章 S Q L 文と関数のリファレンス 2-3

Page 14: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントの一覧

ステートメントの一覧

次の表は、この章で説明する SQL 文の一覧です。

ALTER DATABASE ALTER DOMAIN ALTER EXCEPTION

ALTER INDEX ALTER PROCEDURE ALTER TABLE

ALTER TRIGGER ALTER USER BASED ON

BEGIN DECLARE SECTION CASE CLOSE

CLOSE (BLOB) COALESCE( ) COMMIT

CONNECT CREATE DATABASE CREATE DOMAIN

CREATE ENCRYPTION CREATE EXCEPTION CREATE GENERATOR

CREATE INDEX CREATE JOURNAL CREATE JOURNAL ARCHIVE

CREATE PROCEDURE CREATE ROLE CREATE SHADOW

CREATE TABLE CREATE TRIGGER CREATE USER

CREATE VIEW DECLARE CURSOR DECLARE CURSOR (BLOB)

DECLARE EXTERNAL FUNCTION

DECLARE FILTER DECLARE STATEMENT

DECLARE TABLE DELETE DESCRIBE

DISCONNECT DROP DATABASE DROP DOMAIN

DROP ENCRYPTION DROP EXCEPTION DROP EXTERNAL FUNCTION

DROP FILTER DROP GENERATOR DROP INDEX

DROP JOURNAL DROP JOURNAL ARCHIVE DROP PROCEDURE

DROP ROLE DROP SHADOW DROP TABLE

DROP TRIGGER DROP VIEW DROP USER

END DECLARE SECTION EVENT INIT EVENT WAIT

EXECUTE EXECUTE IMMEDIATE EXECUTE PROCEDURE

FETCH FETCH (BLOB) GRANT

INSERT INSERT CURSOR (BLOB) NULLIF( )

OPEN OPEN (BLOB) PREPARE

RELEASE SAVEPOINT REVOKE ROLLBACK

2-4 言語リファレンス

Page 15: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

関数の一覧

関数の一覧

次の表は、この章で説明する SQL 関数の一覧です。

集計関数は、SELECT 文で抽出した列などの値を対象として演算を行います。

変換関数は、ある型を別の型に変換すること、数値の有効桁数または小数点以下の桁数を変更すること、または CHARACTER をすべて大文字に変換することなどにより、特定のデータ型のデータを作成します。

数値関数 GEN_ID() は、数値データ型の列に挿入できるシステム生成値を返します。

SAVEPOINT SELECT SET DATABASE

SET GENERATOR SET NAMES SET SQL DIALECT

SET STATISTICS SET TRANSACTION SHOW SQL DIALECT

UPDATE WHENEVER

表 2.1 SQL 関数

関数 型 用途

AVG() 集計 集計値の組から平均値を計算します。

CAST() 変換 指定のデータ型の列を別のデータ型に変換します。

COUNT() 集計 集計クエリーの検索条件に適合する行の数を返します。

EXTRACT() 変換 DATE、TIME、および TIMESTAMP の値から日付と時刻の情報を取り出します。

GEN_ID() 数値 システムが生成する値を返します。

MAX() 集計 集計値の組から 大値を抽出します。

MIN() 集計 集計値の組から 小値を抽出します。

SUM() 集計 集計値の組から合計値を計算します。

UPPER() 変換 文字列をすべて大文字に変換します。

第 2 章 S Q L 文と関数のリファレンス 2-5

Page 16: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

データ型

データ型

InterBase はほとんどの SQL データ型をサポートします。 標準の SQL データ型に加えて、動的にサイズが変化する BLOB データ型と、データ型の配列もサポートします。 次の表は、InterBase の SQL 文で使用できるデータ型の一覧です。

表 2.2 InterBase でサポートされているデータ型

名前 サイズ 範囲 / 有効桁数 説明

BLOB 変数 • なし

• BLOB セグメントのサイズは 64KB に限られる

• グラフィック、文字、デジタル化した音声などの大量データを格納し、サイズが動的に決まるデータ型

• 基本的な構造単位はセグメント

• 内容は、サブタイプによって記述される

BOOLEAN 16 ビット • TRUE• FALSE• UNKNOWN

• 真偽値の TRUE、FALSE、および UNKNOWN を表す

• ODS 11 以上(任意のダイアレクト)が必要

CHAR(n) n 文字 • 1 ~ 32,767 バイト

• キャラクタセットの文字サイズにより、32KB 以内に収まる 大文字数が決まる

• 固定長の CHAR 型またはテキスト文字列型

• 代用できるキーワード:CHARACTER

DATE 32 ビット、符合付き1

西暦 100 年 1 月 1 日~ 32768 年 2 月 29 日

ISC_DATE は、日付を 32 ビットのロングワードとして格納します。

DECIMAL (precision、scale) 変数 (16、32、または 64 ビット)

• precision = 1 ~ 18。正確に格納される有効桁数を指定する

• scale = 1 ~ 18。格納可能な小数点以下の桁数(precision 以下でなければならない)

•(precision 以下でなければならない)

• scale で指定した小数点以下の桁数を持つ数値

• 例:たとえば、DECIMAL(10,3) は、次の形式による数値を正しく格納することを意味する。 ppppppp.sss

DOUBLE PRECISION 64 ビット2 2.225 × 10–308 ~ 1.797 x 10308 IEEE 倍精度: 有効桁数 15 桁

FLOAT 32 ビット 1.175 x 10–38 ~ 3.402 x 1038 IEEE 単精度: 有効桁数 7 桁

INTEGER 32 ビット –2,147,483,648 ~ 2,147,483,647 符号付き long(ロングワード)

NUMERIC (precision, scale) 変数

(16、32、または 64 ビット)

• precision = 1 ~ 18。正確に格納される有効桁数を指定する

• scale = 1 ~ 18。格納可能な小数点以下の桁数(precision 以下でなければならない)

•(precision 以下でなければならない)

• scale で指定した小数点以下の桁数を持つ数値

• 例:たとえば、NUMERIC(10,3) は、次の形式による数値を正しく格納することを意味する。 ppppppp.sss

SMALLINT 16 ビット –32,768 ~ 32,767 符号付き short(ワード)

2-6 言語リファレンス

Page 17: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

高精度数値

高精度数値

すべての NUMERIC および DECIMAL データ型は、有効桁数にしたがって 16、32、または 64 ビットの高精度数値として格納されます。 有効桁数が 9 桁を超える NUMERIC と DECIMAL は大きな高精度数値と呼ばれます。

• 一方のオペランドが低精度数値の場合、四則演算(加算、減算、乗算、除算)の結果は

DOUBLE PRECISION になります。

• DECIMAL(18,S) に格納できる値は、列またはドメインのデフォルト値としても指定できま

す。

加算と減算

両方のオペランドが高精度数値の場合、加算または減算の結果は高精度数値となり、その有効桁数は 18 桁、小数点以下の桁数は大きい方のオペランドと等しくなります。 たとえば、次のテーブルがあるとします。

CREATE TABLE t1 (n1 NUMERIC(16,2), n2 NUMERIC(16,3));INSERT INTO t1 VALUES (12.12, 123.123);COMMIT;

これに対して、次のクエリーは数値 135.243 を返します。 2 つのオペランドの小数点以下桁数が大きい方は 3 で、結果の小数点以下桁数は 3 になるためです。

SELECT n1 + n2 FROM t1;

同様に、次のクエリーは整数 -111.003 を返します。

SELECT n1 - n2 FROM t1;

一方のオペランドが低精度数値(FLOAT、REAL、または DOUBLE PRECISION)の場合、結果は DOUBLE PRECISION になります。

TIME 32 ビット、符号なし

0:00 AM ~ 23:59.9999 PM ISC_TIME

TIMESTAMP 64 ビット 西暦 100 年 1 月 1 日~ 32768 年 2 月 29 日

時間情報も含む

VARCHAR (n) n 文字 • 1 ~ 32,765 バイト

• キャラクタセットの文字サイズにより、32KB 以内に収まる 大文字数が決まる

• 可変長の CHAR 型(テキスト文字列型)

• 代用できるキーワード: CHAR VARYING、CHARACTER VARYING

1. InterBase バージョン 5 には、64 ビット長で日付と時刻の両方を保持する DATE データ型がありました。 InterBase バージョン 6 以降で、ダイアレクト 1 が指定されている場合は、この型が認識されます。ダイアレクト 3 では、この型は TIMESTAMP となります。

2. DOUBLE 型の実際のサイズはプラットフォームに依存しますが、 ほとんどのプラットフォームは 64 ビットをサポートします。

表 2.2 InterBase でサポートされているデータ型 ( 続き )

名前 サイズ 範囲 / 有効桁数 説明

第 2 章 S Q L 文と関数のリファレンス 2-7

Page 18: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

エラー処理

乗算

両方のオペランドが高精度数値の場合、乗算の結果は高精度数値となり、その有効桁数は 18 桁、小数点以下の桁数は 2 つのオペランドの小数点以下桁数の合計になります。 たとえば、次のテーブルがあるとします。

CREATE TABLE t1 (n1 NUMERIC(16,2), n2 NUMERIC(16,3));INSERT INTO t1 VALUES (12.12, 123.123);COMMIT;

これに対して、次のクエリーは数値 1492.25076 を返します。n1 と n2 の小数点以下桁数はそれぞれ 2 および 3 で、小数点以下桁数の合計は 5 になるためです。

SELECT n1*n2 FROM t1

一方のオペランドが低精度数値(FLOAT、REAL、または DOUBLE PRECISION)の場合、結果は DOUBLE PRECISION になります。

除算

両方のオペランドが高精度数値の場合、乗算の結果は高精度数値となり、その有効桁数は 18 桁、小数点以下の桁数は 2 つのオペランドの小数点以下桁数の合計になります。 除算演算のオペランドの一方または両方が低精度数値(FLOAT、REAL、または DOUBLE PRECISION)の場合、結果は DOUBLE PRECISION になります。

たとえば、次の数値を使った除算によって、さまざまな結果が生成されます。

CREATE TABLE t1 (i1 INTEGER), i2 INTEGER, n1 NUMERIC(16,2)n2 NUMERIC(16,2));

INSERT INTO t1 VALUES (1, 3, 1.00, 3.00);COMMIT;

次のクエリーは数値 0 を返します。2 つのオペランドの小数点以下桁数がともに 0 で、その合計も 0 になるためです。

SELECT i1/i2 FROM t1

次のクエリーは NUMERIC(18,2) 値 0.33 を返します。2 つのオペランドの小数点以下桁数がそれぞれ 0 と 2 で、その合計は 2 になるためです。

SELECT i1/n2 FROM t1

次のクエリーは NUMERIC(18,4) 値 0.3333 を返します。2 つのオペランドの小数点以下桁数の合計が 4 になるためです。

SELECT n1/n2 FROM t1

InterBase 5 以前のバージョンでは、上の除算はすべて DOUBLE PRECISION 値 0.3333333333333333 を返していました。

エラー処理

実行可能な SQL 文を実行すると SQLCODE が設定され、成功したか失敗したかを示します。 DECLARE CURSOR、DECLARE TABLE、DECLARE STATEMENT のように実行されない宣言文については、SQLCODE は出力されません。

次の表は、SQLCODE に返される値の一覧です。

2-8 言語リファレンス

Page 19: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

isql でエラーが発生した場合は、エラーメッセージが表示されます。

埋め込みアプリケーションでエラーが発生した場合は、プログラマが SQLCODE の値をチェックし、エラーを処理しなければなりません。

SQLCODE は、次のいずれか、またはその組み合わせでチェックします。

• WHENEVER 文により、SQLCODE の値をテストする。

• SQLCODE を直接チェックする。

• isc_print_sqlerror() ルーチンにより、エラーメッセージを表示する。

エラー処理の詳細は、『埋め込み SQL ガイド』を参照してください。

ステートメントと関数のリファレンス

次に、InterBase で使用できる SQL 文と関数について説明します。

文と関数の定義は、次の要素で構成されています。

SQL、DSQL、isql では、ほとんどの文を使用できます。 どの構文もほぼ同じですが、埋め込み SQL 文では、文の前に EXEC SQL キーワードを挿入します。 構文の説明では、わかりやすくするために EXEC SQL キーワードが省略されています。

SQL、DSQL、isql の構文には、多少ですが、重要な相違もあります。構文が異なる場合は、見出しの下に記載されています。

表 2.3 SQLCODE とメッセージの概要

SQLCODE メッセージ 意味

< 0 SQLERROR エラーが発生。文は実行されませんでした

0 SUCCESS 実行完了

+1–99 SQLWARNING システムの警告メッセージまたは情報メッセージ

+100 NOT FOUND 対応する行が見つかりません。または、現在のアクティブな行セットの終わりに達しました

表 2.4 ステートメントと関数の形式

要素 説明

タイトル 文の名前

定義 文の主な用途と、使用できる範囲

構文 文とパラメータの図解

引数 文に使用できるパラメータ

説明 文の使い方に関する説明

例 プログラムおよび isql における文の使用例

参照 関連する他の文や情報の参照項目

第 2 章 S Q L 文と関数のリファレンス 2-9

Page 20: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

ALTER DATABASE

現在のデータベースの特性を変更します。gpre、DSQL、isql で使用できます。ストアドプロシージャ / トリガー言語では使用できません。

構文 ALTER {DATABASE | SCHEMA}{ADD add_clause | DROP drop_clause | ENCRYPT key_name | DECRYPT

key_name | SET set_clause};

add_clause = FILE 'filespec' [fileinfo] [add_clause] | ADMIN OPTION

fileinfo = LENGTH [=] int [PAGE[S]] | STARTING [AT [PAGE]] int [fileinfo]

drop_clause = ADMIN OPTION

key_name = ENCRYPT | DECRYPT

set_clause = {FLUSH INTERVAL <number> | NO FLUSH INTERVAL | GROUP COMMIT | NO GROUP COMMIT | LINGER INTERVAL <number> | NO LINGER INTERVAL | PAGE CACHE <number>|RECLAIM INTERVAL <number> | NO RECLAIM INTERVAL | SYSTEM ENCRYPTION PASSWORD <255-character string> |NO SYSTEM ENCRYPTION PASSWORD}

重要 DSQL に渡す SQL 文で使用する場合は、ターミネータのセミコロンを省略してください。

C か C++ で記述した埋め込みアプリケーションと isql では、セミコロンがターミネータに

なるので省略できません。

引数 説明

SCHEMA DATABASE のかわりに使用できるキーワード

ADD FILE 'filespec' 一次ファイルの容量が限界になったときにデータベースページを受信する二次ファイルを追加します。リモートデータベースの場合は、同一ノードの二次ファイルを指定します。

LENGTH [=] int [PAGE[S]] 二次ファイルのページ範囲を、ファイル当たりのページ数で指定します。

STARTING [AT [PAGE]] int 二次ファイルのページ範囲を開始ページ番号で指定します。

ADD ADMIN OPTION 埋め込みユーザー認証を有効にします。

DROP ADMIN OPTION 埋め込みユーザー認証を無効にします。

ENCRYPT key_name 名前を指定した暗号化キーを使用してデータベースを暗号化します。データベースの暗号化により、すべてのページが暗号化されます。データベース所有者のみがデータベースを暗号化できます。

DECRYPT key_name 名前を指定した暗号化キーを使用してデータベースの暗号を解除します。データベースの暗号解除により、すべてのページで暗号が解除され、プレインテキストに再び書き込まれます。データベース所有者のみがデータベースの暗号を解除できます。

SET FLUSH INTERVAL <number>

データベースのフラッシュを有効にします。 間隔 <number> は秒単位です。

SET NO FLUSH INTERVAL データベースのフラッシュを無効にします。

2-10 言語リファレンス

Page 21: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

説明 ALTER DATABASE は、既存のデータベースに二次ファイルを追加します。二次ファイル

は、データベースの拡張や格納場所の制御に使用します。 データベースファイルは、複数の

格納媒体に分散させることができますが、一次データベースファイルと同じノードでなけ

ればなりません。データベースを変更できるのは、データベースの作成者、SYSDBA ユー

ザー、オペレーティングシステムのルート特権を持っているユーザーです。

ALTER DATABASE を実行するには、データベースに対する排他アクセスが必要です。

メモ InterBase は、データベース内の 後のファイルを必要であれば動的に拡張します。 後の

ファイルの 大サイズはシステムによって異なります。これらのファイルに LENGTH を指定しても、効果がないことに注意してください。

ALTER DATABASE で既存のデータベースファイルを分割することはできません。 たとえば、長さ 80,000 ページのデータベースがあり、これに STARTING AT 50000 を指定した二次ファイルを追加した場合、新しいデータベースファイルはページ 80,001 から始まります。

ヒント 既存のデータベースファイルを小さいファイルに分割するには、バックアップしてから復

元します。 データベースを復元するときは、元のファイルの個数とサイズとは無関係に、二

次ファイルのサイズを任意に指定できます。

例 次の isql 文は、既存のデータベースに 2 つの二次ファイルを追加します。 このコマンド

は、10,000 ページの二次データベースファイル employee2.ib と、もう 1 つ employee3.ib を作成します。 InterBase は、一次ファイルが 10,000 ページに達した場合にのみ、

employee2.ib の使用を開始します。

SET GROUP COMMIT バックグラウンドのキャッシュライタスレッドでトランザクションをコミットできるようにします。

SET NO GROUP COMMIT グループコミットを無効にします。

SET LINGER INTERVAL 後のユーザーがデータベース接続を解除した後もデータベースがメモリに残るようにします。 間隔は秒です。

SET NO LINGER INTERBAL データベースの残置を無効にします。

SET RECLAIM INTERVAL 回収間隔は秒単位です。 未使用のプロシージャ、トリガー、および内部システムクエリーのメモリを解放して InterBase メモリヒープに戻すために、ガベージコレクタスレッドを実行する頻度を決定します。

SET NO RECLAIM INTERVAL メモリの回収を無効にします。

SET SYSTEM ENCRYPTION PASSWORD

このパスワードは、暗号化キーの作成および暗号化の実行に必要です。InterBase では SEP(システム暗号化パスワード)を使用して、データベースやデータベースの列を暗号化するために使用する暗号化キーを保護します。メモ:SYSDSO(Data Security Owner)のみがこのパスワードを作成できます。InterBase での暗号化の詳細については、『データ定義ガイド』の第 13 章「データの暗号化」を参照してください。

SET NO SYSTEM ENCRYPTION PASSWORD

既存の暗号化キーがなければパスワードを削除します。メモ: SYSDSO のみがパスワードを削除できます。

SET PAGE CACHE データベース ページ バッファ キャッシュの上限を設定します。また、キャッシュをその上限まで拡張しようと試みます。

引数 説明

第 2 章 S Q L 文と関数のリファレンス 2-11

Page 22: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

ALTER DATABASE ADD FILE 'employee2.ib' STARTING AT PAGE 10001 LENGTH 10000ADD FILE 'employee3.ib';

参照 CREATE DATABASE, DROP DATABASE

マルチファイルデータベースの詳細は、『データ定義ガイド』を参照してください。データベースへの排他アクセスについては、『操作ガイド』を参照してください。

暗号化と暗号化解除の詳細は、『データ定義ガイド』の第 13 章の「データの暗号化」と「データの暗号化解除」を参照してください。

ALTER DOMAIN

ドメインの定義を変更します。gpre、DSQL、isql で使用できます。ストアドプロシージャ / トリガー言語では使用できません。

ALTER DOMAIN { name | old_name TO new_name }SET DEFAULT {literal | NULL | USER} | DROP DEFAULT | ADD [CONSTRAINT] CHECK (dom_search_condition) | DROP CONSTRAINT| new_col_name| TYPE datatype;

dom_search_condition = VALUE operator val | VALUE [NOT] BETWEEN val AND val | VALUE [NOT] LIKE val [ESCAPE val] | VALUE [NOT] IN (val [, val …]) | VALUE IS [NOT] NULL | VALUE [NOT] CONTAINING val | VALUE [NOT] STARTING [WITH] val| (dom_search_condition)| NOT dom_search_condition| dom_search_condition OR dom_search_condition| dom_search_condition AND dom_search_condition

operator = {= | < | > | <= | >= | !< | !> | <> | !=}

重要 DSQL に渡す SQL 文で使用する場合は、ターミネータのセミコロンを省略してください。

C か C++ で記述した埋め込みアプリケーションと isql では、セミコロンがターミネータに

なるので省略できません。

2-12 言語リファレンス

Page 23: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

説明 ALTER DOMAIN は、NOT NULL 設定を除く、既存のドメインの任意項目を変更するこ

とができます。 ドメインの定義を変更すると、テーブルレベルで設定した優先項目を除く、

ドメインを基本としたすべての列定義が影響を受けます。

メモ ドメインのデータ型または NOT NULL 設定を変更するには、そのドメインを削除し、必

要な機能を組み合わせて新しいドメインを作成します。

ALTER DOMAIN の TYPE 句では、データの損失につながるようなデータ型の変換を行うことはできません。

ドメインを変更できるのは、ドメインの作成者、SYSDBA ユーザー、オペレーティングシステムのルート特権を持っているユーザーです。

例 次の isql 文は、1000 より大きい値のドメインを作成し、デフォルトを 9999 に変更しま

す。

CREATE DOMAIN CUSTNOAS INTEGERCHECK (VALUE > 1000);

ALTER DOMAIN CUSTNO SET DEFAULT 9999;

参照 CREATE DOMAIN, CREATE TABLE, DROP DOMAIN

ドメインの作成、およびドメインを使った列定義の作成の詳細は、『データ定義ガイド』を参照してください。

ALTER EXCEPTION

既存の例外に関連したメッセージを変更します。 DSQL、isql で使用できます。

引数 説明

name 既存のドメイン名

SET DEFAULT 列の値が入力されなかった場合に使用する、列のデフォルト値を指定します。有効な値は次のとおりです。

• リテラル — 指定した文字列、数値、日付のいずれかを挿入します。

• NULL—NULL 値を入力します。

• USER— 現在のユーザー名を入力します。対象となる列は、デフォルトを使用できるテキスト型でなければなりません。

• 列レベルで設定したデフォルトは、ドメインレベルで設定したデフォルトより優先します。

DROP DEFAULT 既存のデフォルトを削除します。

ADD [CONSTRAINT] CHECKdom_search_condition

ドメイン定義に CHECK 制約を追加します。ドメイン定義に指定できる CHECK 制約は 1 つだけです。

DROP CONSTRAINT ドメインの定義から CHECK 制約を削除します。

new_col_name ドメイン名を変更します。

TYPE data_type ドメインのデータ型を変更します。

第 2 章 S Q L 文と関数のリファレンス 2-13

Page 24: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

構文 ALTER EXCEPTION name 'message'

説明 ALTER EXCEPTION は、例外エラーメッセージのテキストを変更します。

例外を変更できるのは、例外の作成者、SYSDBA ユーザー、オペレーティングシステムのルート特権を持っているユーザーです。

例 次の isql 文は、例外のメッセージを変更します。

ALTER EXCEPTION CUSTOMER_CHECK 'Hold shipment for customerremittance.';

参照 ALTER PROCEDURE, ALTER TRIGGER, CREATE EXCEPTION, CREATE PROCEDURE, CREATE TRIGGER, DROP EXCEPTION

例外の作成、発行、処理については、『データ定義ガイド』を参照してください。

ALTER INDEX

インデックスの使用を可能または停止に切り替えます。埋め込み SQL、DSQL、isql で使用できます。ストアドプロシージャ / トリガー言語では使用できません。

構文 ALTER INDEX name {ACTIVE | INACTIVE};

重要 DSQL に渡す SQL 文で使用する場合は、ターミネータのセミコロンを省略してください。

C か C++ で記述した埋め込みアプリケーションと isql では、セミコロンがターミネータに

なるので省略できません。

説明 ALTER INDEX は、使用停止インデックスを使用可能にしたり、使用可能インデックスを

使用停止にします。 インデックスを使用停止にするのは、インデックス定義がデータベース

内に残ることを除けば、インデックスを削除するのと同じです。 インデックスを使用可能に

すると、新しいインデックス構造が作成されます。

大量の行を挿入または更新する場合は、テーブル全体のインデックスを使用停止にして、インクリメント方式のインデックス変更ができないようにします。 挿入や更新が終了してから、インデックスを使用可能にします。 目安としては、テーブル全体の 15% を超える行

引数 説明

name 既存の例外メッセージ名

'message' ASCII 値を含む引用符で囲んだ文字列

引数 説明

name 既存のインデックス名

ACTIVE 使用停止インデックスを使用可能インデックスに変更します。

INACTIVE 使用可能インデックスを使用停止インデックスに変更します。

2-14 言語リファレンス

Page 25: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

を追加または削除しようとする場合、または 10% を超える行のインデックスが設定されている列を更新しようとする場合は、インデックスを使用停止にして再度使用可能にすることを検討してください。

インデックスが使用中の場合は、使用が終了してから切り換わります。

UNIQUE 制約、PRIMARY KEY 制約、FOREIGN KEY 制約が設定されているインデックスを切り替えると、エラーが返されます。このようなインデックスを変更するには、DROP INDEX で削除してから、CREATE INDEX で再作成してください。

インデックスを変更できるのは、インデックスの作成者、SYSDBA ユーザー、オペレーティングシステムのルート特権を持っているユーザーです。

メモ インデックスの列やキーの追加や削除を行うには、DROP INDEX で削除してから、

CREATE INDEX で再作成してください。

例 次の isql 文は、インデックスの使用を停止してから可能に切り替え、インデックスを再作

成します。

ALTER INDEX BUDGETX INACTIVE;ALTER INDEX BUDGETX ACTIVE;

参照 ALTER TABLE, CREATE INDEX, DROP INDEX, SET STATISTICS

ALTER PROCEDURE

既存のストアドプロシージャの定義を変更します。 DSQL、isql で使用できます。ストアドプロシージャ / トリガー言語では使用できません。

構文 ALTER PROCEDURE name[(param datatype [, param datatype …])] [RETURNS (param datatype [, param datatype …])]AS procedure_body ;

説明 ALTER PROCEDURE 従属関係を変更せずに、既存のストアドプロシージャを変更しま

す。 変更できるのは、プロシージャの入力パラメータ、出力パラメータ、本文です。

ALTER PROCEDURE 文には、プロシージャのヘッダーと本文をすべて入力します。 構文は、CREATE が ALTER に置き換わる以外は CREATE PROCEDURE とまったく同じです。

引数 説明

name 既存のストアドプロシージャ名

param datatype プロシージャが使用する入力パラメータ。有効なデータ型は、CREATE PROCEDURE を参照してください。

RETURNS param datatype プロシージャが使用する出力パラメータ。有効なデータ型は、CREATE PROCEDURE を参照してください。

procedure_body 次の項目を含むプロシージャの本文

• ローカル変数の宣言

• プロシージャ / トリガー言語で記述された文のブロック

詳細は、CREATE PROCEDURE を参照してください。

第 2 章 S Q L 文と関数のリファレンス 2-15

Page 26: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

重要 入力パラメータと出力パラメータの型、数、順序を変更する場合は、注意が必要です。既

存のアプリケーションコードが、元の形式を前提としている場合があります。 パラメータを

変更する前に、他のプロシージャとの依存関係を調べてください。 パラメータを変更したと

きに、別のプロシージャがその新しいパラメータを受け付けるように変更できない、また

はそのプロシージャを削除できない場合は、パラメータの変更をいったん元に戻し、呼び

出し元のプロシージャを修正してから、呼び出されるプロシージャのパラメータを変更し

てください。

プロシージャを変更できるのは、プロシージャの作成者、SYSDBA ユーザー、オペレーティングシステムのルート特権を持っているユーザーです。 使用中のプロシージャは、使用が終わるまで変更されません。 ALTER PROCEDURE による変更は、コミットされたときに有効になります。 再コンパイルや再リンクしなくても、そのプロシージャを使用するアプリケーションに変更が反映されます。

例 次の isql 文は、GET_EMP_PROJ というプロシージャについて、戻り値のデータ型を VARCHAR (20) に変更します。

ALTER PROCEDURE GET_EMP_PROJ (EMP_NO SMALLINT) RETURNS (PROJ_ID VARCHAR(20)) AS

BEGINFOR SELECT PROJ_IDFROM EMPLOYEE_PROJECTWHERE EMP_NO = :emp_noINTO :proj_idDO

SUSPEND;END;

参照 CREATE PROCEDURE, DROP PROCEDURE, EXECUTE PROCEDURE

プロシージャの作成と使い方については、『データ定義ガイド』を参照してください。

プロシージャ / トリガー言語の各文については、第 3 章の「プロシージャとトリガー」を参照してください。

ALTER TABLE

列や整合性制約を追加または削除し、テーブルを変更します。 SQL、DSQL、isql で使用できます。

重要 SQL グローバル一時テーブルの変更については、『データ定義ガイド』の第 6 章の「SQLグローバル一時テーブルの変更」節を参照してください。

構文 ALTER TABLE table operation [, operation …];

operation = ADD col_def | ADD tconstraint| ALTER [COLUMN] column_name alt_col_clause| DROP col | DROP CONSTRAINT constraint

alt_col_clause = TO new_col_name | TYPE new_col_datatype | POSITION new_col_position

2-16 言語リファレンス

Page 27: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

col_def = col {datatype | COMPUTED [BY] (expr) | domain}[DEFAULT {literal | NULL | USER}][NOT NULL] [col_constraint][COLLATE collation]

datatype = {SMALLINT | INTEGER | FLOAT | DOUBLE PRECISION}[array_dim]| (DATE | TIME | TIMESTAMP}[array_dim] | {DECIMAL | NUMERIC} [(precision [, scale])] [array_dim] | {CHAR | CHARACTER | CHARACTER VARYING | VARCHAR} [(int)]

[array_dim] [CHARACTER SET charname] | {NCHAR | NATIONAL CHARACTER | NATIONAL CHAR}

[VARYING] [(int)] [array_dim] | BLOB [SUB_TYPE {int | subtype_name}] [SEGMENT SIZE int]

[CHARACTER SET charname]| BLOB [(seglen [, subtype])]array_dim = [[x:]y [, [x:]y …]] | BOOLEAN

expr = A valid SQL expression that results in a single value.

col_constraint = [CONSTRAINT constraint] { UNIQUE | PRIMARY KEY | REFERENCES other_table [(other_col [, other_col …])]

[ON DELETE {RESTRICT|NO ACTION|CASCADE|SET DEFAULT|SET NULL}][ON UPDATE {RESTRICT|NO ACTION|CASCADE|SET DEFAULT|SET NULL}]

| CHECK (search_condition)}

tconstraint = [CONSTRAINT constraint] {{PRIMARY KEY | UNIQUE} (col [, col …]) | FOREIGN KEY (col [, col …])

REFERENCES other_table [(other_col [, other_col …])][ON DELETE {RESTRICT|NO ACTION|CASCADE|SET DEFAULT|SET NULL}][ON UPDATE {RESTRICT|NO ACTION|CASCADE|SET DEFAULT|SET NULL}]

| CHECK (search_condition)}

search_condition = val operator {val | (select_one)} | val [NOT] BETWEEN val AND val | val [NOT] LIKE val [ESCAPE val] | val [NOT] IN (val [, val …] | select_list) | val IS [NOT] NULL | val {>= | <=} | val [NOT] {= | < | >} | {ALL | SOME | ANY} (select_list) | EXISTS (select_expr) | SINGULAR (select_expr) | val [NOT] CONTAINING val | val [NOT] STARTING [WITH] val | (search_condition) | NOT search_condition | search_condition OR search_condition

第 2 章 S Q L 文と関数のリファレンス 2-17

Page 28: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

| search_condition AND search_condition

val = { col [array_dim] | :variable| constant | expr | function| udf ([val [, val …]])| NULL | USER | RDB$DB_KEY | ? }[COLLATE collation]

constant = num | 'string' | charsetname 'string'

function = COUNT (* | [ALL] val | DISTINCT val)| SUM ([ALL] val | DISTINCT val)| AVG ([ALL] val | DISTINCT val)| MAX ([ALL] val | DISTINCT val)| MIN ([ALL] val | DISTINCT val)| CAST (val AS datatype)| UPPER (val)| GEN_ID (generator, val)

operator = {= | < | > | <= | >= | !< | !> | <> | !=}

select_one = SELECT on a single column; returns exactly one value.

select_list = SELECT on a single column; returns zero or more values.

select_expr = SELECT on a list of values; returns zero or more values.

重要 DSQL に渡す SQL 文で使用する場合は、ターミネータのセミコロンを省略してください。

C か C++ で記述した埋め込みアプリケーションと isql では、セミコロンがターミネータに

なるので省略できません。

ALTER TABLE の構文についての注意

• 参照整合性の列制約は、InterBase 5 以降の新しい機能です。2.5 の「constraint_def」およ

び 2-20 ページの ALTER TABLE の説明を参照してください。

• BLOB 値では、COLLATE 句を使用できません。

• 配列を宣言する場合は、太字で示されている も外側のかっこを入力しなければなりませ

ん。 たとえば、次の文は、各要素が VARCHAR(6) の 5 × 5 の 2 次元配列を作成します。

my_array = varchar(6)[5,5]

• 添字が 1 以外から始まる配列を指定するにはコロン(:)を使用します。次の文で作成され

る整数配列は、添字が 20 から始まり、30 で終わります。

my_array = integer[20:30]

• search_condition の完全な構文については、CREATE TABLE を参照してください。

2-18 言語リファレンス

Page 29: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

表 2.5 ALTER TABLE 文

引数 説明

table 変更する既存のテーブル名

operation テーブルに対して行う動作。有効なオプションは次のとおりです。

• ADD:新しい列やテーブルの制約を、テーブルに追加します。

• DROP:既存の列やテーブルの制約を、テーブルから削除ます。

col_def 追加する新しい列の記述。

• 列名と datatype を指定します。

• デフォルト値、列の制約、照合順序を指定できます。

col 追加または削除する列名。列名は、テーブル内で一意でなければなりません。

datatype 列のデータ型。2-6 ページの「データ型」を参照してください。

ALTER [COLUMN] 列名、データ型、および位置を変更します。列の暗号化および暗号化解除を行うために ENCRYPT および DECRYPT オプションと共に使用することもできます。InterBase での暗号化の詳細については、『データ定義ガイド』の第 13 章「データの暗号化」を参照してください。

COMPUTED [BY] expr 実行時に <expr> から算出される列を指定します。このため、データベースの格納領域には割り当てられません。

• expr は、式のデータ型に適合する有効な算術式です。

• expr の中で他の列を参照する場合は、既存の列でないと使用できません。

• expr は、BLOB 列は、参照できません。

• expr は、1 つの値を返す式とし、配列を返すことはできません。

domain 既存のドメイン名

DEFAULT 列の値が入力されなかった場合に使用する列のデフォルト値を指定します。許容値は次のとおりです。

• リテラル:指定した文字列、数値、日付のいずれかを挿入します。

• NULL:NULL 値を入力します。これが DEFAULT のデフォルトです。

• USER:現在のユーザー名を入力します。対象となる列は、デフォルトを使用できるテキスト型でなければなりません。

列レベルで設定したデフォルトは、ドメインレベルで設定したデフォルトより優先します。

CONSTRAINT constraint 列制約またはテーブル制約の名前。制約名は、テーブル内で一意でなければなりません。

constraint_def 列制約の種類を指定します。有効なオプションは、UNIQUE、PRIMARYKEY、CHECK、および REFERENCES です。

CHECK search_condition 列に入力しようとした値が search_condition を満たさない場合、値を入力できません。

第 2 章 S Q L 文と関数のリファレンス 2-19

Page 30: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

説明 ALTER TABLE は、既存のテーブルの構造を変更します。 1 つの ALTER TABLE 文で、

複数の追加や削除を行うことができます。

• テーブルを変更できるのは、テーブルの作成者、SYSDBA ユーザー、オペレーティング

システムのルート特権を持っているユーザーです。

• テーブルの現在のデータが、テーブルに追加する PRIMARY KEY 制約や UNIQUE 制約

に違反する場合は、ALTER TABLE 文が失敗に終わります。 次のような列を削除または変

更する場合も失敗します。

• 列が UNIQUE、PRIMARY KEY、または FOREIGN KEY 制約の一部に使用され

ている場合

• 列が CHECK 制約で使用されている場合

• 列が計算列の値式で使用されている場合

• 列が、ビューなどの他のデータベースオブジェクトから参照されている場合

重要 列の変更や削除を行うと、列に格納されていたデータは失われます。

REFERENCES 列の値が別のテーブルの列を参照することを指定します。参照先の列名を指定しない場合は、InterBase が、参照元の列と同じ名前の列を参照先のテーブルで探します。

ON DELETE | ON UPDATE REFERENCES とともに使用します。 参照される主キーが変更されたときに、外部キーをどのように扱うかを指定します。有効なオプションは次のとおりです。

• NO ACTION(デフォルト):外部キーを変更しません。参照整合性チェックによって、主キーの更新が失敗する場合があります。

• CASCADE:ON DELETE では、対応する外部キーを削除します。ON UPDATE では、対応する外部キーに、主キーの新しい値を入れて更新します。

• SET NULL: 対応する外部キーのすべての列を NULL に設定します。

• SET DEFAULT:参照整合性制約が定義されている場合は、対応する外部キーの各列に有効なデフォルト値を設定します。参照整合性が定義された後で、外部列のデフォルトが変更された場合、その変更は参照整合性制約で使用されているデフォルト値には反映されません。

NOT NULL 列が NULL 値を保持できないことを指定します。

• テーブルにすでに行がある場合、新しい列に NOT NULL を指定することはできません。

• NOT NULL は、列だけの属性です。

DROP CONSTRAINT 指定したテーブル制約を削除します。

table_constraint テーブル制約を指定します。指定できる制約は、PRIMARY KEY、UNIQUE、FOREIGN KEY、または CHECK です。

COLLATE collation 列のデフォルトのソート動作を指定します。詳細は、第 7 章「キャラクタセットと照合順序」を参照してください。

表 2.5 ALTER TABLE 文 ( 続き )

引数 説明

2-20 言語リファレンス

Page 31: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

参照整合性制約

• 参照整合性制約には、オプションとして ON UPDATE 句と ON DELETE 句があります。

これらは、参照先の列が更新または削除された場合の、参照元の列に対する変更を定義し

ます。 このカスケード参照整合性オプションの値については、19 ページの 表 2.5「ALTER TABLE 文」を参照してください。

• 計算列で参照している列を削除する場合は、先に計算列を削除しなければなりません。

FOREIGN KEY 制約で参照している列を削除する場合は、その制約を先に削除しなけれ

ばなりません。 FOREIGN KEY 制約で参照している PRIMARY KEY または UNIQUE制約を削除するには、先に FOREIGN KEY 制約を削除してから、参照されていた

PRIMARY KEY または UNIQUE のキーを削除します。

• 他のユーザーが所有するテーブルに対して FOREIGN KEY 参照を作成できるのは、その

オーナーから GRANT を使って明示的にテーブルに対する REFERENCES 特権を許可さ

れている場合だけです。 外部キーのテーブルを更新するユーザーは、参照される主キーの

テーブルに対する REFERENCES または SELECT 特権を持っていなければなりません。

• ドメインに基づく列に CHECK 制約を追加することはできますが、CHECK 制約を持つ

テーブルをサブクエリーで変更すると制約違反が発生する点に注意してください。

• 列制約に名前を付けるかどうかは任意です。 名前が指定されない場合は、InterBase がシス

テム生成による名前を与えます。 説明的な名前を割り当てれば、変更や削除のために制約

を探すことが容易になり、制約違反のエラーメッセージにも説明的な名前が示されます。

• データが入っているテーブルに新しい列を作成する場合は、UNIQUE 制約を使用しないで

ください。 データが入っているテーブルに NOT NULL 制約を使用する場合は、同時にデ

フォルト値も指定してください。

例 次の isql 文は、テーブルに列を 1 つ追加し、別の 1 列を削除します。

ALTER TABLE COUNTRYADD CAPITAL VARCHAR(25),DROP CURRENCY;

この文を実行すると、削除される CURRENCY 列のデータはすべて失われます。

次の isql 文は、LARGEST_CITY 列の名前を BIGGEST_CITY に変更します。

ALTER TABLE COUNTRY ALTER LARGEST_CITY TO BIGGEST_CITY;

参照 ALTER DOMAIN, CREATE DOMAIN, CREATE TABLE

テーブルの変更の詳細は、『埋め込み SQL ガイド』を参照してください。

暗号化と暗号化解除の詳細は、『データ定義ガイド』の第 13 章の「データの暗号化」と「データの暗号化解除」を参照してください。

ALTER TRIGGER

既存のトリガーを変更します。DSQL、isql で使用できます。

構文 ALTER TRIGGER name[ACTIVE | INACTIVE][{BEFORE | AFTER} {DELETE | INSERT | UPDATE}][POSITION number][AS trigger_body] ;

第 2 章 S Q L 文と関数のリファレンス 2-21

Page 32: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

説明 ALTER TRIGGER は、既存のトリガー定義を変更します。 引数を省略すると、CREATETRIGGER か 後の ALTER TRIGGER で指定した現在値がデフォルトになります。

ALTER TRIGGER 文は、次の情報を変更できます。

• ヘッダー情報のみ。トリガー動作を行うときのトリガーの起動状態、トリガーを起動する

イベント、トリガーを起動する相対的な順序

• 本文の情報のみ。AS 句の後に続くトリガー文

• ヘッダーとトリガー本文。 既存のトリガー定義が、新しいトリガー定義に置き換わります。

トリガーを変更できるのは、トリガーの作成者、SYSDBA ユーザー、オペレーティングシステムのルート特権を持っているユーザーです。

メモ CHECK 制約によって自動的に定義されたトリガーを変更する場合は、ALTER TABLE を使って制約の定義を変更してください。

例 次の文は、SET_CUST_NO というトリガーを変更して、非アクティブにします。

ALTER TRIGGER SET_CUST_NO INACTIVE;

次の文は、SET_CUST_NO というトリガーを変更し、NEW_CUSTOMERS というテーブルに新規顧客を 1 行ずつ挿入します。

ALTER TRIGGER SET_CUST_NO FOR CUSTOMERBEFORE INSERT AS

BEGINNEW.CUST_NO = GEN_ID(CUST_NO_GEN, 1);INSERT INTO NEW_CUSTOMERS(NEW.CUST_NO, TODAY)

END ;

引数 説明

name 既存のトリガー名

ACTIVE トリガーが起動したときにトリガー動作が発生することを指定します(デフォルト)。

INACTIVE トリガーが起動したときにトリガー動作が発生しないことを指定します。

BEFORE 連動した動作が発生する前にトリガーが起動することを指定します。

AFTER 連動した動作が発生した後でトリガーが起動することを指定します。

DELETE|INSERT |UPDATE

トリガーを起動させるテーブル操作を指定する

POSITION number 同一動作の前後に発生させるトリガーの順序を指定します。

• number は、0 ~ 32767 の整数です。

• 数字が小さいトリガーから順に起動します。

• テーブルに対するトリガーは、連続していなくてもかまいません。動作対象と位置番号が同じトリガーの起動順序はランダムになります。

trigger_body トリガーの本文、つまりプロシージャ/トリガー言語で記述された文のブロック。

• 詳細は、CREATE TRIGGER を参照してください。

2-22 言語リファレンス

Page 33: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

参照 CREATE TRIGGER, DROP TRIGGER

プロシージャ / トリガー言語の各文については、第 3 章の「プロシージャとトリガー」を参照してください。

プロシージャの作成方法と使い方については、『データ定義ガイド』を参照してください。

ALTER USER

既存のユーザーを変更します。 DSQL、isql で使用できます。

構文 ALTER USER name SET [PASSWORD password][[NO] DEFAULT ROLE name][[NO] SYSTEM USER NAME name][[NO] GROUP NAME name][[NO] UID number][[NO] GID number][[NO] DESCRIPTION string][[NO] FIRST NAME string][[NO] MIDDLE NAME string][[NO] LAST NAME string][ACTIVE][INACTIVE];

説明 Alter user は、既存のユーザーの定義を変更します。 埋め込みユーザー認証を使用するデー

タベースでのみ使用されます。

引数 説明

PASSWORD ユーザーのパスワード

[NO] DEFAULT ROLE デフォルトのロール

[NO] SYSTEM USERNAME

ターゲットユーザーのシステムユーザー名

[NO] GROUP NAME ターゲットユーザーのグループ名

[NO] UID ターゲットユーザーの ID

[NO] GID ターゲットユーザーのグループ ID

[NO] DESCRIPTION 説明

[NO] FIRST NAME ターゲットユーザーの名

[NO] MIDDLE NAME ターゲットユーザーのミドルネーム

[NO] LAST NAME ターゲットユーザーの姓

ACTIVE デフォルト。 一度非アクティブにしたユーザーを選択してアクティブに戻します。

INACTIVE ユーザーがデータベースにログインできないようにします。

第 2 章 S Q L 文と関数のリファレンス 2-23

Page 34: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

メモ NO を指定するオプションには、引数を指定してはなりません。 NO は、そのオプションを

NULL 状態に設定します。

例 次の文は、JDOE というユーザーを変更して、非アクティブにします。

ALTER USER JDOE SET INACTIVE;

次の文は、JDOE というユーザーを変更し、アクティブにします。

ALTER USER JDOE SET ACTIVE;

参照 CREATE USER、DROP USER

埋め込みユーザー認証の詳細は、『操作ガイド』を参照してください。

AVG( )

指定した列または式の数値から、平均値を算出します。 gpre、DSQL、isql で使用できます。

構文 AVG ([ALL] value | DISTINCT value)

説明 AVG() は、指定した列または式の数値から平均値を算出する集計関数です。 入力できるの

は、数値型のデータに限られます。

計算にかかわる項目値が NULL または不定の場合は自動的に除外され、 無意味なデータによって平均値が不正確になることを防ぎます。

指定した範囲の行について、平均値が算出されます。 SELECT が返した行数が 0 の場合、AVG() からは NULL 値が返されます。

例 次の埋め込み SQL 文は、テーブルの行をすべて集計し、平均値を返します。

EXEC SQLSELECT AVG (BUDGET) FROM DEPARTMENT INTO :avg_budget;

次の埋め込み SQL 文は、テーブルの一部の行について、SUM()、AVG()、MIN()、MAX() の使い方を示します。

EXEC SQLSELECT SUM (BUDGET), AVG (BUDGET), MIN (BUDGET), MAX (BUDGET)FROM DEPARTMENTWHERE HEAD_DEPT = :head_deptINTO :tot_budget, :avg_budget, :min_budget, :max_budget;

参照 COUNT( ), MAX( ), MIN( ), SUM( )

引数 説明

ALL すべての数値を集計し、平均値を返します。

DISTINCT 重複値を除外してから、平均値を算出します。

value 数値データ型の列または式

2-24 言語リファレンス

Page 35: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

BASED ON

列の内容を基本として、ホスト言語変数を宣言します。 gpre で使用できます。

構文 BASED [ON] [dbhandle.]table.col[.SEGMENT] variable;

説明 BASED ON は、列定義を基本として、ホスト言語変数を作成するプリプロセッサ指令で

す。 ホスト言語は、記述された列属性を継承すると同時に、使用するプログラミング言語に

変数の型を適合させるために必要な特性を継承します。 たとえば C 言語の場合は、CHAR変数と VARCHAR 変数に 1 バイトずつ追加し、NULL 文字をターミネータとして使用で

きるようにします。

BASED ON は、プログラムの変数宣言セクションで使用します。

メモ BASED ON には、EXEC SQL キーワードは必要ありません。

FETCH 動作中に BLOB セグメントを格納できる、大きなサイズのホスト言語変数を宣言するには、BASED ON 句の SEGMENT オプションを使用します。 変数のサイズは、BLOB 列のセグメント長から導き出されます。 BLOB 列のセグメント長が変更された場合は、プログラムを再コンパイルし、BASED ON で作成したホスト変数のサイズを調整してください。

例 次の埋め込み SQL 文は、列に基づいてホスト変数を宣言します。

EXEC SQLBEGIN DECLARE SECTION

BASED_ON EMPLOYEE.SALARY salary;EXEC SQL

END DECLARE SECTION;

参照 BEGIN DECLARE SECTION, CREATE TABLE, END DECLARE SECTION

BEGIN DECLARE SECTION

ホスト言語変数の宣言部の開始位置を判定します。 gpre で使用できます。

構文 BEGIN DECLARE SECTION;

説明 BEGIN DECLARE SECTION は、埋め込み SQL アプリケーション内で使用し、その後の

SQL 文で使用する変数のホスト言語変数宣言の開始位置を判定します。 BEGINDECLARE SECTION は、プログラマに代わって SQLCODE を自動的に宣言するように

gpre に指示するプリプロセッサ指令です。

引数 説明

dbhandle マルチデータベースプログラムで、テーブルが常駐するデータベースのハンドル名を指定します。SET DATABASE 文により、すでに宣言されていなければなりません。

table.col 宣言する変数の基本となるテーブルと列の名前

.SEGMENT BLOB FETCH 動作中に、BLOB 列のセグメント長に基づいてローカル変数のサイズを決定します。table.col が BLOB データ型の列である場合にのみ使用します。

variable データベース列の特性を継承するホスト言語変数名

第 2 章 S Q L 文と関数のリファレンス 2-25

Page 36: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

重要 BEGIN DECLARE SECTION は、モジュールのグローバル変数宣言のセクション必ず含

まれなければなりません。

例 次の埋め込み SQL 文は、セクションとホスト言語変数を宣言します。

EXEC SQLBEGIN DECLARE SECTION;

BASED ON EMPLOYEE.SALARY salary;EXEC SQL

END DECLARE SECTION;

参照 BASED ON, END DECLARE SECTION

CASE

CASE 関数を使用すると、1 つの行の 1 つの列値を複数の条件と比較できます。この各条件から、それぞれ異なる値を返すことができます。

構文 CASE <expression>WHEN <expression> THEN <expression> | NULL[ELSE <expression> | NULL][COALESCE <expression>][NULLIF <expression, expression, ...>]

END

説明 CASE 式は、いくつかの値式で構成される条件値式です。各値式は 1 つの条件式に関連付けられます。 CASE 式の結果は、関連付けられた条件式が TRUE になる 初の値式になります。CASE 式は、簡単な検索形式の構文です。

COALESCE 式と NULLIF 式は、NULL 状態を含む CASE 式でよく使用される省略形式です。COALESCE 式は、いくつかの値式で構成されます。 その結果は、非 NULL になる 初の値式になります。 非 NULL になる値式がない場合、COALESCE 式の結果は NULL になります。

NULLIF 式は、2 つの値式で構成されます。 2 つの式が等しくない場合、NULLIF 式の結果は初の値式になります。 そうでない場合は、NULL になります。

例 次の例は、employee.ib サンプルデータベースを使用して、CASE の使い方を示します。

select emp.first_name || ' ' || emp.last_name as name,case proj.proj_name when 'DigiPizza' then 'Digital Pizza' when 'AutoMap' then 'AutoMobile Map' when 'Translator upgrade' then 'Universal Language Translator' else 'Other'end as projectfrom employee emp inner join employee_project emp_proj on emp.emp_no = emp_proj.emp_noinner join project proj on emp_proj.proj_id = proj.proj_id

CAST( )

列のデータ型を別のデータ型に変換します。 gpre、DSQL、isql で使用できます。

2-26 言語リファレンス

Page 37: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

構文 CAST (value AS datatype)

説明 CAST() は、val のデータ型を変換し、1 つの式で数値と文字の両方を表せるようにします。

通常の検索条件では、型が同じデータしか比較できません。 CAST() を検索条件に使用すると、あるデータ型を他の型に変換して比較することができます。

変換できるデータ型は次のとおりです。

指定したデータ型に変換できない場合は、エラーが発生します。 たとえば、数値型を日付にキャストしようとすると、文字列変換エラーになります。

例 次の WHERE 句では、CAST() を使用して、CHARACTER データ型の INTERVIEW_DATE を DATE データ型に変換し、HIRE_DATE と比較できるようにしま

. . .WHERE HIRE_DATE = CAST (INTERVIEW_DATE AS DATE);

VARCHAR データ型をキャストする場合は、次のように文字列の長さを指定する必要があります。

UPDATE client SET charef = CAST (clientref AS VARCHAR(20));

参照 UPPER( )

CLOSE

開いているカーソルを閉じます。 gpre で使用できます。

構文 CLOSE cursor;

引数 説明

val 列、定数、式のいずれかを指定します。SQL では、ホスト言語変数、関数、UDF も使用できます。

datatype 変換後のデータ型

表 2.6 CAST() で変換できるデータ型

変換元 変換先

Numeric CHARACTER, VARCHAR, Date, Time, Timestamp, Numeric

CHARACTER, VARCHAR CHAR, Date, Time, Timestamp

Date CHAR, VARCAHR, Timestamp

Time CHAR, VARCHAR, Timestamp

Timestamp CHAR, VARCHAR, Date, Time

BLOB, Array —

Boolean CHAR, VARCHAR

第 2 章 S Q L 文と関数のリファレンス 2-27

Page 38: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

説明 CLOSE は、指定されたカーソルを閉じ、有効な行セットと、関連するシステムリソースを

解放します。 カーソルは、DECLARE CURSOR 文の選択式で抽出され、順序が定められ

た行セットを指示する一方向ポインタです。 カーソルは、抽出した行を順次アクセスして更

新するために使用します。

CURSOR 文には、次の 4 種類があります。

FETCH 文は、終了したカーソルに対しては実行できません。 検索条件の対象として受け渡された値は、カーソルを終了してから再び開かないと評価されません。 カーソルがオープンの間は、他のユーザーがデータベースの変更をコミットし、カーソル再開時の有効セットを変更することができます。

メモ CLOSE 以外の文でも、カーソルを終了することができます。COMMIT と ROLLBACKは、トランザクション中のすべてのカーソルを自動的に終了します。

例 次の埋め込み SQL 文は、カーソルを終了します。

EXEC SQL CLOSE BC;

参照 CLOSE (BLOB), COMMIT, DECLARE CURSOR, FETCH, OPEN, ROLLBACK

CLOSE (BLOB)

指定された BLOB カーソルを閉じ、関連するシステムリソースを解放します。 gpre で使用できます。

構文 CLOSE blob_cursor;

説明 CLOSE は、読み取り型または挿入型の BLOB カーソルを解放します。 BLOB カーソルを

解放する必要があるのは次の場合に限られます。

引数 説明

cursor 開いているカーソルの名前

段階 文 用途

1 DECLARE CURSOR カーソルを宣言します。カーソルの対象となる抽出行は、SELECT 文によって決まります。

2 OPEN DECLARE CURSOR で指定された行を抽出します。抽出された行は、カーソルの有効セットと呼ばれます。

3 FETCH 有効セットの 1 行めから順に、現在の行を抽出します。FETCH文を実行するたびに、カーソルが 1 行ずつ前進します。

4 CLOSE カーソルを閉じ、システムリソースを解放します。

引数 説明

blob_cursor 開いている BLOB カーソル名

2-28 言語リファレンス

Page 39: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

• BLOB READ 動作に使用する BLOB セグメントを取り出した後

• BLOB INSERT 動作に使用するセグメントを挿入した後

例 次の埋め込み SQL 文は、BLOB カーソルを解放します。

EXEC SQL CLOSE BC;

参照 DECLARE CURSOR (BLOB), FETCH (BLOB), INSERT CURSOR (BLOB), OPEN (BLOB)

COALESCE( )

COALESCE 関数の結果は、非 NULL になる 初の値式になります。 非 NULL になる値式がない場合、COALESCE 式の結果は NULL になります。

構文 COALESCE(<expression1>,<expression2>,...<expression_n>)

説明 COALESCE 式と NULLIF 式は、NULL 状態を含む CASE 式でよく使用される省略形式です。COALESCE 式は、いくつかの値式で構成されます。 その結果は、非 NULL になる 初の値式になります。 非 NULL になる値式がない場合、COALESCE 式の結果は NULL になります。

例 次の例は、employee.ib サンプルデータベースを使用して、CASE の使い方を示します。

select coalesce(department, head_dept, location) from department

COMMIT

トランザクションの変更内容をデータベースの永久データとして保存し、トランザクションを終了します。 gpre、DSQL、isql で使用できます。

構文 COMMIT [WORK] [TRANSACTION name] [RELEASE] [RETAIN [SNAPSHOT]];

重要 DSQL に渡す SQL 文で使用する場合は、ターミネータのセミコロンを省略してください。

C か C++ で記述した埋め込みアプリケーションと isql では、セミコロンがターミネータに

なるので省略できません。

説明 COMMIT は、トランザクションを終了し、次の動作を行います。

• すべての更新内容をデータベースに書き込みます。

引数 説明

WORK 他の関連データベースと互換性があることを示す任意引数

TRANSACTION name トランザクション name をコミットします。 指定がなければ、デフォルトのトランザクションがコミットされます。

RELEASE 旧バージョンの InterBase と互換性がある場合に使用できます。

RETAIN [SNAPSHOT] 変更内容をコミットし、現在のトランザクションコンテキストを保持します。

第 2 章 S Q L 文と関数のリファレンス 2-29

Page 40: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

• 以降の SNAPSHOT トランザクションまたは READ COMMITTED トランザクションか

ら変更内容が見えるようにします。

• RETAIN 引数が指定されている場合を除き、開いているカーソルを閉じます。

COMMIT によって終了するトランザクションは、正常に終了したと見なされます。 デフォルトトランザクションの終わりには、必ず COMMIT か ROLLBACK を使用してください。

ヒント データベースを変更しない読み取り専用トランザクションの終わりには、ROLLBACK ではなく、COMMIT を使用してください。 結果は同じですが、その後のトランザクションが

効率的になり、使用するシステムリソースが少なくなります。

重要 RELEASE 引数は、旧バージョンの InterBase と互換性がある場合しか使用できません。

データベースとの接続を解除するには DISCONNECT を使用します。

例 次の isql 文は、デフォルトトランザクションによるデータベースの変更を、永久データと

してコミットします。

COMMIT;

次の埋め込み SQL 文は、指定したトランザクションをコミットします。

EXEC SQLCOMMIT TR1;

次の埋め込み SQL 文は、COMMIT RETAIN によって、変更をコミットし、現在のトランザクションコンテキストを維持します。

EXEC SQL COMMIT RETAIN;

参照 DISCONNECT, ROLLBACK

トランザクションの操作の詳細は、『埋め込み SQL ガイド』を参照してください。

CONNECT

1 つまたは複数のデータベースにアタッチします。 gpre で使用できます。 isql では、CONNECT の一部のオプションを使用できます。

構文 isql の場合:

CONNECT 'filespec' [USER 'username'][PASSWORD 'password'][CACHE int] [ROLE 'rolename']

SQL の場合:

CONNECT [TO] {ALL | DEFAULT} config_opts| db_specs config_opts [, db_specs config_opts...];

<db_specs = dbhandle | {'filespec' | :variable} AS dbhandle

<config_opts = [USER {'username' | :variable}] [PASSWORD {'password' | :variable}][ROLE {'rolename' | :variable}] [CACHE int [BUFFERS]]

2-30 言語リファレンス

Page 41: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

説明 CONNECT 文は、以下のことを行います。

• データベースのデータ構造を初期化します。

• データベースが元のノードにあるローカル データベースか、他のノードにあるリモート

データベースかを判定します。 データベースが見つからない場合は、エラーメッセージが

発生します。

• データベースとの接続に使用する 1 つ以上のユーザー名、パスワード、またはロールを指

定します(任意)。 PC クライアントは、有効なユーザー名とパスワードを必ず指定します。

InterBase では、パスワードの先頭から 8 文字だけが認識されます。

引数 説明

{ALL | DEFAULT} SET DATABASE で指定したすべてのデータベースと接続します。CONNECT TO ALL で指定したオプションは、すべてのデータベースに対して動作します。

'filespec' データベースのファイル名。 パスとノードも指定できます。

dbhandle 事前に SET DATABASE 文を使って宣言したデータベースハンドル。 埋め込み SQL で使用できますが、isql では使用できません。

:variable データベース、ユーザー名、パスワードを指定するホスト言語変数

AS dbhandle データベースに接続し、宣言済みのデータベースハンドルを割り当てます。

USER {'username' | :variable} データベースとの接続に使用するユーザー名を指定する、文字列またはホスト言語変数。 ユーザー名は、セキュリティデータベースと照合されます。 サーバー上でのユーザー名では、大文字と小文字を区別しません。

PASSWORD {‘password’ | :variable}

データベースとの接続に使用するパスワードを指定する 大 8 文字の文字列またはホスト言語変数。 ユーザー名とパスワードは、セキュリティデータベースと照合されます。 照合では、大文字と小文字が区別されます。

ROLE {‘rolename’ | :variable}

ユーザーがデータベースへの接続に使用するロールを指定する文字列またはホスト言語変数。 大 67 文字まで。ユーザーには、事前にそのロールのメンバーとして設定され、ロールの特権を取得している必要があります。 メンバーとして設定されているかどうかにかかわらず、接続で ROLE 句が指定された場合にのみ、ユーザーは接続中にロールの特権を持つことができます。 ユーザーは 1 回の接続で大 1 つのロールを使用でき、接続し直さない限りロールを切り替えることはできません。

CACHE int [BUFFERS] データベースのキャッシュバッファ数を設定します。これにより、プログラムが一度に使用できるデータベースページ数が決まります。 int の許容値は次のとおりです。

• デフォルト: 256

• 大値: システムによって異なる

キャッシュの割り当てには、filespec 型のデータベース名は使用できません。

第 2 章 S Q L 文と関数のリファレンス 2-31

Page 42: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

InterBase ユーザーが ISC_USER および ISC_PASSWORD 環境変数を設定し、その環境変数に定義されたユーザーが InterBase のセキュリティデータベース(デフォルトでは admin.ib)に登録されていない場合、そのユーザーがローカルサーバーマネージャの接続からユーザーを見ようとすると、 "undefined user name and password"(ユーザー名とパスワードが未定義です)というエラーが発生します。これはローカル接続でのみ生じ、Server Manager による自動接続ではユーザーセキュリティのチェックは省略されます。

• データベースに接続し、ヘッダーページを確認します。データベースファイルには、有効

なデータベースが収められ、データベースのオンディスク構造体(ODS)のバージョン番

号は、サーバーにインストールされた InterBase バージョンが認識できるものでなければな

りません。そうでない場合は、エラーが返されます。

• SET DATABASE 文で宣言されたデータベースのハンドル名を設定します(任意)。

• データベースに接続するプロセスのキャッシュバッファを指定します。

SQL プログラムの CONNECT 文で開くデータベースは、SET DATABASE 文で宣言しておかなければなりません。isql では SET DATABASE は使用しません。

SQL プログラムでは、1 つの CONNECT 文で複数のデータベースを開くことができますが、データベースごとに 1 つの文を使った方がコードが読みやすくなります。

CONNECT によるデータベースとの接続では、デフォルトのキャラクタセット(NONE)か、SET NAMES 文で指定したキャラクタセットが使用されます。

SQL プログラムで CACHE オプションを使用すると、データベースのキャッシュサイズ(使用可能なバッファ総数)をデフォルトの 75 から変更することができます。このオプションは、次の場合に使用します。

• CONNECT 文で指定したキャッシュサイズが未定のすべてのデータベースについて、新し

いデフォルトサイズを設定する場合

• 単一データベースを使用するプログラムのキャッシュサイズを指定する場合

• プログラムが使用するデータベースのデフォルトを変えずに、特定のデータベースの

キャッシュサイズを変更する場合

接続が有効な限り、キャッシュサイズは有効です。 マルチクライアント / サーバーを通じてデータベースがすでに接続されている場合、新規の接続で大きくしたキャッシュサイズは、すべての接続が切断されるまで有効です。 キャッシュサイズを小さくした場合、サーバーを通じて接続済みのデータベースは対象になりません。

CONNECT 機能のサブセット (データベースファイル名、USER、PASSWORD)は isql で使用できます。isql では、一度に 1 つのデータベースとしか接続できません。 CONNECT でデータベースと接続するたびに、前の接続は切断されます。

例 次の文は、isql で使用するデータベースを開きます。 isql で使用できる CONNECT オプ

ションをすべて使用しています。

CONNECT 'employee.ib' USER 'ACCT_REC' PASSWORD 'peanuts';

次の埋め込み SQL 文は、ホスト言語変数に格納されたデータベースファイルに接続し、宣言済みのデータベースハンドルを割り当てます。

EXEC SQL SET DATABASE DB1 = 'employee.ib';

EXEC SQL CONNECT :db_file AS DB1;

次の埋め込み SQL 文は、employee.ib というデータベースに接続し、150 のキャッシュバッファを割り当てます。

2-32 言語リファレンス

Page 43: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

EXEC SQL CONNECT 'accounts.ib' CACHE 150;

次の埋め込み SQL 文は、SET DATABASE 文で指定したすべてのデータベースに接続します。

EXEC SQL CONNECT ALL USER 'ACCT_REC' PASSWORD 'peanuts' CACHE 50;

次の埋め込み SQL 文は、employee.ib と employee2.ib の 2 つのデータベースに接続し、それぞれ 80 とデフォルトの 75 のキャッシュバッファを割り当てます。

EXEC SQL CONNECT 'employee.ib' CACHE 80, 'employee2.ib';

次の埋め込み SQL 文は、すべてのデータベースに接続し、50 のキャッシュバッファを割り当てます。

EXEC SQL CONNECT ALL CACHE 50;

次の埋め込み SQL 文は、EMP1 と EMP2 という 2 つのデータベースに接続し、それぞれ 80 のキャッシュバッファを割り当てます。

EXEC SQL CONNECT EMP1 CACHE 80, EMP2 CACHE 80;

次の埋め込み SQL 文は、変数名で指定した 2 つのデータベースに接続し、それぞれ違うユーザー名とパスワードを割り当てます。

EXEC SQL CONNECT :orderdb AS DB1 USER 'ACCT_REC' PASSWORD 'peanuts',:salesdb AS DB2 USER 'ACCT_PAY' PASSWORD 'payout';

参照 DISCONNECT, SET DATABASE, SET NAMES

キャッシュバッファの詳細は、『データ定義ガイド』を参照してください。データベースセキュリティと isql の詳細は、『操作ガイド』を参照してください。

COUNT( )

クエリーの検索条件に適合する行数を算出します。 gpre、DSQL、isql で使用できます。

構文 COUNT ( * | [ALL] value | DISTINCT value)

引数 説明

* 指定したテーブルから、NULL 値も含めた行数を抽出します。

ALL 列の NULL 以外の値をすべてカウントします。

DISTINCT 列の NULL 以外の一意な値の数を返します。

val 列または式

第 2 章 S Q L 文と関数のリファレンス 2-33

Page 44: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

説明 COUNT() は、クエリーの検索条件に適合する行数を算出する集計関数です。 テーブルだけ

でなく、ビューや結合データにも使用できます。

例 次の埋め込み SQL 文は、一意な通貨値の数を COUNTRY テーブルから返します。

EXEC SQLSELECT COUNT (DISTINCT CURRENCY) INTO :cnt FROM COUNTRY;

参照 AVG( ), MAX( ), MIN( ) SUM( )

CREATE DATABASE

新しいデータベースを作成します。 gpre、DSQL、isql で使用できます。

構文 CREATE {DATABASE | SCHEMA} 'filespec'[USER 'username' [PASSWORD 'password']][PAGE_SIZE [=] int][LENGTH [=] int [PAGE[S]]][WITH ADMIN OPTION][DEFAULT CHARACTER SET charset][secondary_file];

secondary_file = FILE 'filespec' [fileinfo] [secondary_file]

fileinfo = [LENGTH [=] int [PAGE[S]] | STARTING [AT [PAGE]] int }[fileinfo]

重要 DSQL に渡す SQL 文で使用する場合は、ターミネータのセミコロンを省略してください。

C か C++ で記述した埋め込みアプリケーションと isql では、セミコロンがターミネータに

なるので省略できません。

引数 説明

'filespec' • 新しいデータベースファイル。

• ファイル名の表記規則は、プラットフォームに依存します。

USER ‘username’ • 任意項目。username を入力すると、データベースが常駐するサーバーのセキュリティデータベースに格納されている、有効なユーザー名とパスワードの組み合わせと照合されます。

• Windows のクライアントアプリケーションは、サーバーとの接続に使用したユーザー名を指定しなければなりません。

PASSWORD ‘password’ • 大 8 文字の password を入力すると、データベースが常駐するサーバーのセキュリティデータベースに格納されている、有効なユーザー名とパスワードの組み合わせと照合されます。

• Windows のクライアントアプリケーションは、サーバーとの接続に使用したパスワードを指定しなければなりません。

PAGE_SIZE [=] int • データベースページのサイズをバイト単位で指定します。

• int には 1024(デフォルト)、2048、4096、8129、16384 のいずれかを指定できます。

WITH ADMIN OPTION

• 埋め込みユーザー認証を有効にして、新しいデータベースを作成します。

2-34 言語リファレンス

Page 45: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

説明 CREATE DATABASE は、新しい空白のデータベースを作成し、次の特性を設定します。

• データベースを識別する一次ファイル名。

デフォルトを使用すると、各ファイルにデータベースが 1 つずつ収められます。

• データベースを格納する二次ファイル名。

二次ファイルを指定すると、複数のディスクにデータベースを常駐させることができま

す。 リモートサーバーでデータベースを作成する場合は、二次ファイルの指定にノード

名を使用することはできません。

• データベースのページサイズ。

ページサイズを拡大すると、次の理由でパフォーマンスが向上します。

• インデックスの階層レベルが低く保たれるので、インデックスが高速で機能します。

• 長い行が 1 ページに収まるため、効率が上がります。

• BLOB データが 1 ページに収まるため、格納や抽出を効率よく行うことができま

す。

受け渡すデータの量と、ディスクキャッシュに使用するメモリが少なくて済むので、行

数の少ないトランザクションが大部分を占める場合は、ページサイズを小さくします。

• データベースファイルのページ数

• データベースのダイアレクト。

データベースの初期ダイアレクトは、そのデータベースを作成したクライアントのダイ

アレクトです。 たとえば isql を使用する場合は、-sql_dialect n スイッチで起動するか、

CREATE DATABASE コマンドを実行する前に SET SQL DIALECTn コマンドを実行

します。 通常は、ダイアレクト 3 でデータベースを作成します。ダイアレクト 1 は、レ

ガシーデータベースの移植を容易にするために用意されています。

データベースのダイアレクトを変更するには、gfix を使用するか、IBConsole の[プ

ロパティ]ダイアログを使用します。 データベースの移行の詳細は、InterBase の『操

作ガイド』の移行に関する付録を参照してください。

DEFAULT CHARACTER SET charset

• データベースのデフォルトキャラクタセットを指定します。

• charset にはキャラクタセット名を指定し、省略すると、デフォルトの NONE に設定されます。

FILE ‘filespec’ • 一次ファイルの容量が限界になったときにデータベースページを格納する二次ファイルの名前を指定します。

• リモートサーバーでデータベースを作成する場合、二次ファイルの指定にノード名を使用することはできません。

STARTING [AT[PAGE]] int

二次ファイルの開始ページ番号を指定します。

LENGTH [=] int [PAGE[S]]

• 一次ファイルまたは二次ファイルの長さを指定します。

• 同じ文で二次ファイルを設定する場合は、一次ファイルの長さだけを指定することになります。

引数 説明

第 2 章 S Q L 文と関数のリファレンス 2-35

Page 46: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

• データベースに使用するキャラクタセット。

InterBase が認識できるキャラクタセットについては、第 7 章「キャラクタセットと照

合順序」を参照してください。

DEFAULT CHARACTER SET を選択すると、使用できる照合順序が限られます。 キャラクタセットを指定した場合は、列データの選択、挿入、更新を行うときに照合順

序を指定することができます。

デフォルトのキャラクタセットを指定しなかった場合、キャラクタセットはデフォルト

の NONE に設定されます。 デフォルトが NONE であるということは、列で使用される

キャラクタセットが存在しないことを意味します。したがって、データは、入力の時点

で使用しているキャラクタセットを使って列に格納され、また取り出されることになり

ます。 NONE が設定されている列には、後で任意のキャラクタセットをロードするこ

とができますが、異なるキャラクタセットが設定されている列にそのデータをロードす

ることはできません。 その場合には、移動元のキャラクタセットと移動先のキャラクタ

セットとの間でコード変換は行われず、このため、移動中にコード変換エラーが発生す

ることがあります。

• データベースの構造体を記述するシステムテーブル

データベースを作成した後は、テーブル、ビュー、インデックス、システムビューのほ

か、ジェネレータ、ストアドプロシージャ、および UDF を設定することができます。

重要 DSQL では、CREATE DATABASE は EXECUTE IMMEDIATE と組み合わせないと実

行できません。 データベースのハンドル名やトランザクション名がある場合は、0 に初期化

しておかないと使用できません。

読み取り専用データベース

データベースは、常に読み書きモードで作成されます。 テーブルを読み取り専用モードに変更するには、 バックアップを復元するときに mode -read_only を指定するか、gfix -mode read_only を使用します。 データベースの設定と保守の詳細は、『操作ガイド』の第 6 章を参照してください。

ファイルサイズ

InterBase は、データベース内の 後のファイルを必要であれば動的に拡張します。 大ファイルサイズはシステムによって異なります。 この機能は、単一ファイルデータベースと、マルチファイルデータベースの 後のファイルに適用されます。これらのファイルに LENGTH を指定しても、効果がないことに注意してください。

ファイルサイズ自体は、データベースのページ数にページサイズを掛けた値になります。 デフォルトのページサイズは 4KB、 大ページサイズは 16KB です。 ただし、InterBase ファイルは、作成時には小さく、必要に応じて大きくなります。ページ数 × ページサイズは、作成時のサイズではなく、可能な 大サイズを表します。

例 次の isql 文は、isql を使用する現在のディレクトリにデータベースを作成します。

CREATE DATABASE 'employee.ib';

次の埋め込み SQL 文は、デフォルトの 4096 バイトではなく、2048 バイトのページサイズでデータベースを作成します。

EXEC SQLCREATE DATABASE 'employee.ib' PAGE_SIZE 2048;

次の埋め込み SQL 文は、2 つのファイルにデータベースを作成し、デフォルトのキャラクタセットを指定します。

2-36 言語リファレンス

Page 47: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

EXEC SQLCREATE DATABASE 'employee.ib'

DEFAULT CHARACTER SET ISO8859_1FILE 'employee2.ib' STARTING AT PAGE 10001;

参照 ALTER DATABASE, DROP DATABASE

二次ファイル、キャラクタセット、照合順序については、『データ定義ガイド』を参照してください。ページサイズの詳細は、『操作ガイド』を参照してください。

CREATE DOMAIN

データベースに対してグローバルな列定義を作成します。 gpre、DSQL、isql で使用できます。

構文 CREATE DOMAIN domain [AS] datatype[DEFAULT {literal | NULL | USER}] [NOT NULL] [CHECK (dom_search_condition)][COLLATE collation];

datatype> = {SMALLINT|INTEGER|FLOAT|DOUBLE PRECISION}[array_dim]| {DATE|TIME|TIMESTAMP}[array_dim]| {DECIMAL | NUMERIC} [(precision [, scale])] [array_dim] | {CHAR | CHARACTER | CHARACTER VARYING | VARCHAR} [(int)]

[array_dim] [CHARACTER SET charname] | {NCHAR | NATIONAL CHARACTER | NATIONAL CHAR}

[VARYING] [(int)] [array_dim] | BLOB [SUB_TYPE {int | subtype_name}] [SEGMENT SIZE int]

[CHARACTER SET charname]| BLOB [(seglen [, subtype])]| BOOLEAN

array_dim> = [[x:]y [, [x:]y …]]dom_search_condition> =

VALUE operator value | VALUE [NOT] BETWEEN value AND value | VALUE [NOT] LIKE value [ESCAPE value] | VALUE [NOT] IN (value [, value …]) | VALUE IS [NOT] NULL | VALUE [NOT] CONTAINING value | VALUE [NOT] STARTING [WITH] value| (dom_search_condition)| NOT dom_search_condition| dom_search_condition OR dom_search_condition| dom_search_condition AND dom_search_condition

operator> = {= | < | > | <= | >= | !< | !> | <> | !=}

CREATE DOMAIN の構文についての注意

• COLLATE 句は、テキストデータについてだけ意味があり、数値データに対しては意味が

ありません。また、BLOB 値では、COLLATE 句を使用できません。

第 2 章 S Q L 文と関数のリファレンス 2-37

Page 48: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

• 配列を宣言する場合は、太字で示されている も外側のかっこを入力しなければなりませ

ん。 たとえば、次の文は、各要素が VARCHAR(6) の 5 × 5 の 2 次元配列を作成します。

my_array = varchar(6)[5,5]

• 添字が 1 以外から始まる配列を指定するにはコロン(:)を使用します。次の文で作成され

る整数配列は、添字が 20 から始まり、30 で終わります。

my_array = integer[20:30]

重要 DSQL に渡す SQL 文で使用する場合は、ターミネータのセミコロンを省略してください。

C か C++ で記述した埋め込みアプリケーションと isql では、セミコロンがターミネータに

なるので省略できません。

説明 CREATE DOMAIN は、CREATE TABLE や ALTER TABLE で定義される列のテンプ

レートとして使用する、継承可能な列の定義を作成します。 ドメインの定義には、次のよう

な特性が含まれます。

• データ型

• デフォルト値(任意)

• NULL 値の禁止(任意)

• CHECK 制約(任意)

• COLLATE 句(任意)

CHECK 制約をドメイン定義に指定すると、dom_search_condition のドメイン検索条件が設定されます。ドメインを基本とする列にデータを入力する場合は、ドメイン検索条件が真でなければなりません。 CHECK 制約は、ドメインや列を参照することはできません。

メモ ドメインを作成するときは制約の矛盾に注意してください。たとえば、NOT NULL で宣言

したドメインに DEFAULT 値として NULL を割り当てることはできません。

引数 説明

domain 一意なドメイン名

datatype SQL データ型

DEFAULT 列の値が入力されなかった場合に使用する、列のデフォルト値を指定します。指定できる値は次のとおりです。

リテラル — 指定した文字列、数値、日付のいずれかを挿入します。

NULL—NULL 値を入力します。

USER—現在のユーザーのユーザー名を入力します。対象となる列は、デフォルトを使用できる文字型に限られます。

NOT NULL NULL 値を列に入力することを禁止します。

CHECK (dom_search_condition) ドメインに対する CHECK 制約を設定します。

VALUE ドメインを基本として定義する、列名に代わるプレースホルダ

COLLATE collation ドメインの照合順序を指定します。

2-38 言語リファレンス

Page 49: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

CHAR または BLOB のテキストドメインについては、データ型の指定中に CHARACTER SET 句を使用して、ドメインのキャラクタセットを指定することができます。 指定がなければ、デフォルトのデータベースキャラクタセットが使用されます。InterBase が認識できるキャラクタセットについては、第 7 章「キャラクタセットと照合順序」を参照してください。

デフォルトのキャラクタセットの指定がなければ、NONE に設定されます。 NONE のキャラクタセットを使用すると、列のキャラクタセットに条件がなくなり、入力したとおりにデータが格納、抽出されます。 NONE を設定した列には、どのキャラクタセットもロードできますが、他のキャラクタセットを設定した列にはロードできないことがあります。 この場合、設定元と設定先でのキャラクタセットの変換は行われず、データの処理中にエラーが発生します。

CHAR、VARCHAR、NCHAR テキストデータ型については、COLLATE 句を使って特定の照合順序を指定することができます。 照合順序の選択は、ドメインのキャラクタセットに使用できるものに限られています。つまり、データベース全体に使用するデフォルトのキャラクタセットか、データ型の指定中に CHARACTER SET 句を使って設定したキャラクタセットです。 InterBase が認識できるキャラクタセットについては、第 7 章

「キャラクタセットと照合順序」を参照してください。

ドメインの定義を基本とする列は、ドメインの特性をすべて継承しますが、 ドメインのデフォルト、照合順序、NOT NULL の属性の設定を変更したり、 CHECK 制約を追加することもできます。

例 次の isql 文は、1000 より大きい正の値を持つドメインを作成し、デフォルトを 9999 に設

定します。VALUE キーワードは、このドメインを基本とする列の名前に代わるものです。

CREATE DOMAIN CUSTNOAS INTEGERDEFAULT 9999CHECK (VALUE > 1000);

次の isql 文は、ドメインの入力値を 4 つに制限します。

CREATE DOMAIN PRODTYPEAS VARCHAR(12) CHECK (VALUE IN ('software', 'hardware', 'other', 'N/A'));

次の isql 文は、CHAR データ型の配列を定義するドメインを作成します。

CREATE DOMAIN DEPTARRAY AS CHAR(67) [4:5];

次の isql の例では、 初の文は、USER をデフォルトとするドメインを作成します。 その次の文は、USERNAME ドメインに基づき、ENTERED_BY 列を含むテーブルを作成します。

CREATE DOMAIN USERNAME AS VARCHAR(20)DEFAULT USER;

CREATE TABLE ORDERS (ORDER_DATE DATE, ENTERED_BY USERNAME, ORDER_AMT DECIMAL(8,2));

INSERT INTO ORDERS (ORDER_DATE, ORDER_AMT)VALUES ('1-MAY-93', 512.36);

INSERT 文には、ENTERED_BY 列の値が指定されていないため、JSMITH という現在のユーザー名が自動的に挿入されます。

SELECT * FROM ORDERS;

1-MAY-93 JSMITH 512.36

第 2 章 S Q L 文と関数のリファレンス 2-39

Page 50: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

次の isql 文は、テキスト型の BLOB ドメインを作成し、キャラクタセットを割り当てます。

CREATE DOMAIN DESCRIPT AS BLOB SUB_TYPE TEXT SEGMENT SIZE 80CHARACTER SET SJIS;

参照 ALTER DOMAIN, ALTER TABLE, CREATE TABLE, DROP DOMAIN

キャラクタ セットの指定と照合順序の詳細については、『データ定義ガイド』を参照してください。

CREATE ENCRYPTION

暗号処理中に使用する暗号化キーを作成します。

構文 CREATE ENCRYPTION key-name FOR AES | FOR DES

説明 CREATE ENCRYPTION は暗号化キーを作成します。 SYSDSO(Data Security Owner)のみ

が暗号化キーを作成できます。 暗号化キーは、データベースのページやデータベースの列を

暗号化するために使用されます。 データベース所有者は暗号化キーを使用して、特定のデー

タベースや列を暗号化します。 InterBase では暗号化キーを RDB$ENCRYPTIONS システム

テーブルに格納します。

RDB$RELATIONS_FIELDS テーブルに、3 つの列が追加されています。データベース ページや列レベルの暗号化をサポートするための、RDB$ENCRYPTION_ID、RDB$DECRYPT_DEFAULT_VALUE、および RDB$DECRYPT_DEFAULT_SOURCE です。

例 次の isql 文では、revenue_key 暗号化キー(AES 暗号スキーム、長さ 192 ビット)を作

成します。

CREATE ENCRYPTION revenue_key FOR AES WITH LENGTH 192 BITS

参照 DROP ENCRYPTION、GRANT、REVOKE、ALTER DATABASE、ALTER TABLE

暗号化と暗号化解除の詳細は、『データ定義ガイド』の第 13 章の「データの暗号化」と「データの暗号化解除」を参照してください。

CREATE EXCEPTION

ストアドプロシージャやトリガーで使用するユーザー定義エラーや関連メッセージを作成します。DSQL、isql で使用できます。

引数 説明

Key-name 暗号化キーに関連付けられた名前。 名前は一意であることが必要です。

FOR AES|DES InterBase によりデータが暗号化されるときに使用される暗号レベルを示します。 AES (Advanced Encryption Standard)は強力な暗号スキームと考えられます。InterBase で使用する場合にランセンスが必要です。 DES (Data Encryption Standard)は強力ではない暗号スキームと考えられます。特別なライセンスは必要ありません。

2-40 言語リファレンス

Page 51: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

構文 CREATE EXCEPTION name 'message';

重要 DSQL に渡す SQL 文で使用する場合は、ターミネータのセミコロンを省略してください。

C か C++ で記述した埋め込みアプリケーションと isql では、セミコロンがターミネータに

なるので省略できません。

説明 CREATE EXCEPTION は、例外(ユーザー定義のエラー)と関連メッセージを作成しま

す。 例外は、トリガーおよびストアドプロシージャの中で発行されます。

データベースに対してグローバルな例外なので、 アプリケーション内のあらゆるストアドプロシージャとトリガーに使用することができます。 たとえば、同一内容の例外メッセージを英語版とフランス語版で作成した場合、必要であればどちらかのメッセージセットを使用することができます。

トリガーまたはストアドプロシージャで発行された例外は、次の動作を行います。

• 例外を発行したトリガーまたはストアドプロシージャを終了し、直接または間接に実行動

作を取り消します。

• 呼び出し元のアプリケーションに対して、エラーメッセージを返します。 isql では、出力先

を変更しない限り、エラーメッセージは画面に表示されます。

例外は、ストアドプロシージャまたはトリガー内の WHEN 文でトラップして処理できます。

例 次の isql 文は、UNKNOWN_EMP_ID という例外を作成します。

CREATE EXCEPTION UNKNOWN_EMP_ID 'Invalid employee number or project id.';

次の文はストアドプロシージャ内で使用され、SQLCODE に FOREIGN KEY 制約の違反を示す -530 が設定されると、作成済みの例外を発行します。

. . .WHEN SQLCODE -530 DO

EXCEPTION UNKNOWN_EMP_ID;. . .

参照 ALTER EXCEPTION, ALTER PROCEDURE, ALTER TRIGGER, CREATE PROCEDURE, CREATE TRIGGER, DROP EXCEPTION

EXECUTE 文の詳細は、第 3 章の「プロシージャとトリガー」を参照してください。

例外の作成、発行、処理については、『データ定義ガイド』を参照してください。

CREATE GENERATOR

データベースに対してジェネレータを宣言します。 gpre、DSQL、isql で使用できます。

引数 説明

name 例外メッセージに関連した名前。データベース内にある例外名の中で一意なものにします。

‘message’ 英数字と句読点記号を含む、引用符で囲んだ文字列。 大長は 78 文字です。

第 2 章 S Q L 文と関数のリファレンス 2-41

Page 52: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

構文 CREATE GENERATOR name;

重要 DSQL に渡す SQL 文で使用する場合は、ターミネータのセミコロンを省略してください。

C か C++ で記述した埋め込みアプリケーションと isql では、セミコロンがターミネータに

なるので省略できません。

説明 CREATE GENERATOR は、データベースに対してジェネレータを宣言し、初期値を 0 に設定します。 ジェネレータとは、GEN_ID() 関数によって列に自動挿入される、連続した数

値のことです。 ジェネレータは、PRIMARY KEY を確実に一意な値にするのによく使用さ

れます。たとえば、請求書の番号は、特定の行に対応する一意な値でなければなりません。

データベースには、任意数のジェネレータを収めることができます。 ジェネレータはデータベースに対してグローバルなので、どのトランザクションでも使用、更新することができます。 トランザクション間でジェネレータの値が重複することはありません。

作成したジェネレータについては、SET GENERATOR を使って現在値の設定や変更を行うことができます。ジェネレータは、GEN_ID() を呼び出すトリガー、プロシージャ、SQL 文で使用することができます。

メモ ジェネレータを削除する「DROP GENERATOR」文はありません。 ジェネレータを削除す

る場合は、システムテーブルから削除します。 次に例を示します。

DELETE FROM RDB$GENERATOR WHERE RDB$GENERATOR_NAME = ‘EMPNO_GEN’;

この DELETE 文を使用するには、システムテーブルへの書き込み権限が必要です。したがって、この文を使用するには、データベースの所有者または SYSDBA ユーザーであるか、それらのユーザーによって、自分または PUBLIC に書き込み権限が与えられている必要があります。

例 次の isql 文は、EMPNO_GEN というジェネレータと、CREATE_EMPNO というトリ

ガーを作成します。 トリガーはジェネレータを使用し、連続した数値キーを作成します。

キー値は NEW.EMPNO 列に対応し、新入社員ごとに 1 ずつ増やされます。

CREATE GENERATOR EMPNO_GEN;COMMIT;CREATE TRIGGER CREATE_EMPNO FOR EMPLOYEES

BEFORE INSERT POSITION 0 AS BEGIN

NEW.EMPNO = GEN_ID(EMPNO_GEN, 1); END

参照 GEN_ID( ), SET GENERATOR

CREATE INDEX

テーブル内の 1 つ以上の列について、対応するインデックスを作成します。 gpre、DSQL、isql で使用できます。

構文 CREATE [UNIQUE] [ASC[ENDING] | DESC[ENDING]] INDEX index ON table (col [, col …]);

引数 説明

name ジェネレータ名

2-42 言語リファレンス

Page 53: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

重要 DSQL に渡す SQL 文で使用する場合は、ターミネータのセミコロンを省略してください。

C か C++ で記述した埋め込みアプリケーションと isql では、セミコロンがターミネータに

なるので省略できません。

説明 テーブル内の単数列または複数列について、対応するインデックスを作成します。 インデッ

クスの作成は、データのアクセス速度を上げるために行います。 WHERE 句に指定する列

にインデックスを使用すると、検索のパフォーマンスが向上します。

重要 BLOB および配列型の列には、インデックスを設定できません。

重複値または NULL 値がすでに入力されている列には、UNIQUE を指定できません。

ASC と DESC は、インデックスのソート順を指定します。 ソート済みの値を必要とするクエリーに速く応答するには、クエリーの ORDER BY 句と一致する順序でインデックスを作成してください。 同一の列に対して、昇順と降順のインデックスを両方作成し、必要に応じた順序でデータをアクセスすることができます。

ヒント SET STATISTICS によってインデックスの選択性を再計算すると、インデックスのパ

フォーマンスを向上させることができます。インデックスを一度使用停止にした後、

ALTER INDEX を逐次呼び出して使用可能にするという方法でインデックスを再作成し

ても、パフォーマンスは向上します。

例 次の isql 文は、一意なインデックスを作成します。

CREATE UNIQUE INDEX PRODTYPEX ON PROJECT (PRODUCT, PROJ_NAME);

次の isql 文は、降順のインデックスを作成します。

CREATE DESCENDING INDEX CHANGEX ON SALARY_HISTORY (CHANGE_DATE);

次の isql 文は、2 つの列を対象としたインデックスを作成します。

CREATE INDEX NAMEX ON EMPLOYEE (LAST_NAME, FIRST_NAME);

参照 ALTER INDEX, DROP INDEX, SELECT, SET STATISTICS

CREATE JOURNAL

ジャーナル ファイルを作成し、ジャーナル機能を有効化します。

構文 CREATE JOURNAL [<journal-file-specification>] [LENGTH <ページ数 >]

引数 説明

UNIQUE インデックスを設定した列に重複値を挿入したり、重複値を更新することを禁止します。

ASC[ENDING] 昇順で列をソートします。指定がなければ、デフォルトの順序でソートされます。

DESC[ENDING] 降順で列をソートします。

index 一意なインデックス名

table インデックスの対象となるテーブル名

col インデックスに対応するテーブルの列

第 2 章 S Q L 文と関数のリファレンス 2-43

Page 54: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

[CHECKPOINT LENGTH <ページ数 > [PAGES]][CHECKPOINT INTERVAL <秒数 > [SECONDS]][PAGE SIZE <バイト数 > [BYTES]][PAGE CACHE <バッファ数 > [BUFFERS]][[NO] TIMESTAMP NAME]

[[NO] PREALLOCATE <ページ数 > [PAGES]];

引数 説明

journal-file-specification 引用符で囲まれた文字列で、ジャーナル ファイルのフル パスとベース ファイル名を指定します。 ベースのジャーナル ファイル名は、実際に作成されるジャーナル ファイル名のテンプレートとして使われます。 デフォルト値はフル データベース パスとファイル名です。

LENGTH この句では新規のジャーナル ファイルに切り替えるまでに、ジャーナルファイルに書き込まれるページ数を指定します。 大長は 4,000 ページ(2GB)です。

CHECKPOINT LENGTH

この句では、チェックポイントが発生するまでにジャーナル ファイルに書き込み可能なページ数を指定します。 デフォルト値は 500 です。

CHECKPOINT INTERVAL

データベースのチェックポイントの間隔を秒数で指定します。 チェックポイントの間隔では、サーバー クラッシュ後に復旧するのにかかる時間を決定します。 デフォルト値は 0 です。

メモ: CHECKPOINT LENGTH と CHECKPOINT INTERVAL の両方を指定した場合は、この 2 つのうちの先に発生したイベントによって、データベースのチェックポイントが開始されます。

PAGE SIZE ジャーナル ページのサイズをバイト数で指定します。 ジャーナル ページサイズは、少なくともデータベース ページ サイズの 2 倍は必要です。 2 倍より小さいジャーナル ページ サイズを指定した場合は、ジャーナル ページサイズがデータベース ページ サイズの 2 倍まで切り上げられて、警告が返されます。 ジャーナル ページ サイズを 2 のべき乗にする必要はありません。 デフォルト値はデータベース サイズの 2 倍です。

PAGE CACHE メモリにキャッシュが作成されるジャーナル ページの数を指定します。 この数値は、キャッシュ ライターが他のバッファに書き込むときに、ワーカー スレッドがバッファに書き込めるように十分大きい必要があります。数値が小さすぎる場合は、ワーカー スレッドは待機し、パフォーマンスが低下します。デフォルト値は 100 バッファです。

[NO] TIMESTAMP NAME

ベースのジャーナル ファイル名に、ファイル作成時のタイムスタンプを付加するかどうかを指定します。 デフォルト値は有効です。

使用すると、ベースのジャーナル ファイル名に、次の形式のタイムスタンプが付加されます。

YYYY_MM_DDTHH_MM_SSZ.sequence_number.journal

[NO] PREALLOCATE 領域が事前に割り当てられることを同時に保証しながら、ジャーナル ファイル領域の要件を決定します。 デフォルト値はデータベース サイズの 2 倍です。

2-44 言語リファレンス

Page 55: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

説明 ジャーナルは 1 つまたは複数のジャーナル ファイルで構成されます。 ジャーナル ファイル

は、各データベース トランザクションを発生時に記録します。 データベース キャッシュに

あるジャーナルの変更ページをハード ディスクに保存するには、自動的に実行される

ジャーナル機能のチェックポイントを設定します。 チェックポイントでは、データベース

キャッシュのすべての変更ページが InterBase によりデータベース ファイルに保存される

時間を指定します。

CREATE JOURNAL 文を実行すると、その後のデータベースへの書き込み操作は、すべて非同期に実行されます。 ジャーナル ファイルの I/O は常に非同期で、これを変更できません。 すべてのトランザクションの変更は、トランザクションがコミットされる前に、永続ストレージに安全に記録されます。

ジャーナル機能は、さらに災害復旧を確実にするためにジャーナル アーカイブ機能とともに使用できます。

例 たとえば、次の例

CREATE JOURNAL 'e:\database\test'LENGTH 4000CHECKPOINT LENGTH 10000PAGE CACHE 2500;

LENGTH パラメータ(65000)によって、1 GB(65000 x 16 KB)ごとに新規ジャーナル ファイルに切り替えられます。 CHECKPOINT LENGTH パラメータの 10000 は、データベースのチェックポイントが 160 MB (10000 x 16 KB)ごとに発生することを意味します。 ジャーナル バッファを 2500 に設定しておけば、ワーカー スレッドがジャーナル変更をダンプするために、2000 個の予備のバッファが残っていることになります。 PAGE CACHE のデフォルト値の 100 では、ジャーナル バッファが頻繁に待ち状態になり、ワーカー スレッドは停止します。

参照 DROP JOURNAL、CREATE JOURNAL ARCHIVE、DROP JOURNAL ARCHIVE

ジャーナル、ジャーナル ファイルとジャーナル アーカイブの詳細については、『操作ガイド』を参照してください。

CREATE JOURNAL ARCHIVE

ジャーナル アーカイブ機能が有効化され、アーカイブ ディレクトリに 初のデータベースのダンプが作成されます。

構文 CREATE JOURNAL ARCHIVE <journal archive directory>

引数 説明

journal archive directory

InterBase によりジャーナル アーカイブが格納される場所です。 指定のディレクトリが存在しない、またはそのディレクトリにアクセスできない場合は、InterBase からエラー メッセージが返ります。 UNC パス(基本のファイル API が使用してファイルをオープンできる場合のみ)、マップしたドライブ、ローカル ドライブとしてディレクトリ パスを指定できます。 CREATE JOURNAL ARCHIVE 文でジャーナル アーカイブのディレクトリを指定しない場合は、InterBase は CREATE JOURNAL 文で作成されたジャーナル ディレクトリを使用します。

第 2 章 S Q L 文と関数のリファレンス 2-45

Page 56: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

説明 CREATE JOURNAL ARCHIVE コマンドは次の 2 種類の機能を実行します。 InterBase データ

ベースでジャーナル アーカイブ機能を有効化し、データベースの初期の、フル物理ダンプ

を自動的に実行します。 InterBase は CREATE 文に指定したジャーナル アーカイブのディ

レクトリにダンプを格納します。 ジャーナル アーカイブにより、直近にアーカイブが作成

され、完了されたジャーナル ファイルで 後にコミットされたトランザクションに復旧で

きます。

重要 CREATE JOURNAL ARCHIVE はアーカイブを作成し、 初のダンプを実行します。 ただし、特

定の gbak コマンドを発行し、完了したジャーナル ファイルをジャーナル アーカイブにコ

ピーする必要があります。 別の gbak コマンドで、アーカイブに後続のダンプを作成するこ

ともできます。 gbak のアーカイブ コマンドとジャーナル機能とジャーナル アーカイブ機

能の実装方法の詳細については、InterBase の『操作ガイド』を参照してください。

参照 DROP JOURNAL ARCHIVE、CREATE JOURNAL、DROP JOURNAL

ジャーナル アーカイブ管理InterBase V8 のジャーナル アーカイブ機能を管理することができます。アーカイブはジャーナル ファイルを保持するディレクトリであり、そのジャーナル ファイルはデータベースに関連付けられたローカルのジャーナル ディレクトリからアーカイブされます。ローカルのジャーナル ファイルのコピーの他に、このアーカイブには、定期的にアーカイブにバックアップされるデータベース ダンプも格納されます。

説明 アーカイブされたデータベース ダンプは、長期間のデータベース復旧のスタート地点となります。アーカイブ データベースの 1 つのコピーに対して、一連のアーカイブ ジャーナル ファイルが適用されます。これは、短期間の復旧の際に、ローカルのジャーナル ファイル群が、1 つの実働データベースに適用されるのと同様です。また、InterBase タイムスタンプを指定して、どの時点のジャーナル ファイルまでを適用するかを示すこともできます。

アーカイブを使用してデータベースを復旧した場合、復旧後のデータベースはジャーナル機能が適用されたデータベースではありません。つまり、RDB$LOG_FILES、RDB$JOURNAL_FILES、およびデータベースのログ ページは空だということでです。これにより、データベースが、既存のデータベースのジャーナルとジャーナル アーカイブを誤って使用するのを防ぐことができます。通常、データベースの復旧が行われるのは、ハードウェア故障などのために元のデータベースが破損したり利用できなくなった場合です。ただし、ジャーナル ディレクトリとジャーナル アーカイブ ディレクトリの名前が異なっているなら、本番稼働中のデータベースと同じマシン上や別のマシン上でデータベースを復旧させることもできます。したがって、復旧したデータベースでジャーナルやジャーナル アーカイブを作成する必要があれば、そのための適切な DDL 文を実行する必要があります。

例 gbak を使用して、データベースとジャーナル ファイルをアーカイブに保存します。また、ユーザーが指定したローカル ディレクトリにアーカイブからデータベースを復旧します。

データベースをアーカイブに保存するには:

gbak -archive_database <データベース名 >

ローカルのジャーナル ファイルをアーカイブに保存するには:

gbak -archive_journals <データベース名 >

データベースを復旧するには(オプションで、どの時点まで復旧するかを指定可能):

2-46 言語リファレンス

Page 57: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

gbak -archive_recover [-until <タイムスタンプ >] <アーカイブ _データベース名 > <ローカル _データベース名 >

-until コマンド ライン スイッチを指定しなければ、可能な限り多くのジャーナル ファイルを使って、 新の時点までデータベースが復旧されます。可能であれば、アーカイブからローカル ジャーナル ディレクトリへジャンプして、まだアーカイブにコピーされていなかったジャーナル ファイルを適用できるかを試みます。こうすることで、元のデータベースで 後にトランザクションをコミットした状態までデータベースを復旧できる可能性があります。

特に制限をしなければ、データベースと 新のジャーナル ファイルが継続的にアーカイブされるのに伴って、アーカイブのストレージ サイズは無限に増加し続けます。gfix を使用すると、必要でなくなったアーカイブ項目を管理し、ガベージ コレクションを行うことができます。新しくデータベース ダンプを作成せずにアーカイブ内のジャーナル ファイルの数を増やしていくと、アーカイブからデータベースを復旧するのに必要な時間も増えていきます。したがって、定期的にアーカイブ内に新しいデータベース ダンプを作成することをお勧めします。いずれ、新しいデータベース ダンプとジャーナル ファイルを使って復旧を行うようになるため、それより古いデータベース ダンプとそれに関連するジャーナル ファイルが必要でないと判断できます。

すべてのアーカイブ項目は、アーカイブ シーケンス番号で識別できます。アーカイブ シーケンス番号は、その項目がアーカイブ内に作成された順番に対応しています。

指定したアーカイブ シーケンス番号より小さい番号のアーカイブ項目のガベージ コレクションを行うには:

gfix -archive_sweep [-force] <アーカイブ _シーケンス番号 >

何らかの理由で、アーカイブ項目のスイープができない場合は、スイープは停止し、エラー ステータスが返ります。場合によっては、そのためにコマンドが停止することもあります。たとえば、アーカイブが OS のシェル コマンドによって手動で削除されている場合は、削除すべきファイルが見つからないため、スイープは常に失敗します。-force オプションを付けると、エラーが発生しても処理を継続して、できるだけ多くのアーカイブを削除することができます。-force スイッチを付けた場合、エラー ステータスが返る代わりに、エラーが InterBase のエラー ログに記録されます。

アーカイブ内に保存できるデータベース ダンプの数を指定するには:

gfix -archive_dumps <数 >

アーカイブ内のデータベース ダンプ数が指定された < 数 > を超えると、シーケンス番号の小さいものから順にアーカイブ項目がアーカイブから削除されます。シーケンス番号が小さい削除対象項目をすべて削除できない場合もあります。たとえば、あるデータベース ダンプから復旧を開始するために、シーケンス番号の小さいジャーナル ファイルが必要になるような場合です。この場合は、依存関係が保たれるよう、InterBase が指定されたシーケンス番号を小さい番号に自動的に調節します。

アーカイブのこの状態を追跡するために、新しいシステム テーブル RDB$JOURNAL_ARCHIVES が ODS 12 データベースに追加されました。前述の gbak コマンドと gfix コマンドでは、このシステム テーブルを使用して、コマンドの処理対象となるアーカイブ項目がどれかを決定します。

重要 以下は、ジャーナル アーカイブを管理するための要件と制約です。

1 アーカイブはプラットフォームに固有です。Windows 用の InterBase を使用して作成されたアーカイブを、Unix 用の InterBase での復元に直接使用することはできません。その代わりに、アーカイブ データベース ダンプの移植可能な形式のバックアップを論理的に作成すれば、他のプラットフォームで論理的に復元できます。

第 2 章 S Q L 文と関数のリファレンス 2-47

Page 58: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

2 ジャーナルとジャーナル アーカイブは 1 つのディレクトリに格納されるという制限があります。アーカイブを作成可能な項目数は、対象ファイル システムで 1 つのディレクトリに格納できるファイル数までに限られます。

3 アーカイブできるのは、フル データベース ダンプだけです。具体的には、インクリメンタル データベース ダンプをアーカイブすることはできません。

4 データベースのジャーナル アーカイブ機能を構成する前に、そのデータベースのジャーナル機能を有効にする必要があります。

CREATE PROCEDURE

ストアドプロシージャを作成し、入出力パラメータと説明を設定します。DSQL、isql で使用できます。

構文 CREATE PROCEDURE name[(param datatype [, param datatype …])] [RETURNS param datatype [, param datatype …])]AS procedure_body ;

procedure_body =[variable_declaration_list] block

variable_declaration_list = DECLARE VARIABLE var datatype; [DECLARE VARIABLE var datatype; …]

block = BEGIN

compound_statement [compound_statement …]

END

compound_statement = block | statement;

datatype = {SMALLINT| INTEGER| FLOAT| DOUBLE PRECISION}| {DECIMAL | NUMERIC} [(precision [, scale])]| {DATE | TIME | TIMESTAMP)| {CHAR | CHARACTER | CHARACTER VARYING | VARCHAR}

[(int)] [CHARACTER SET charname] | {NCHAR | NATIONAL CHARACTER | NATIONAL CHAR} [VARYING] [(int)]| BOOLEAN

2-48 言語リファレンス

Page 59: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

説明 CREATE PROCEDURE は、データベースに対して、新しいストアドプロシージャを設定

します。 ストアドプロシージャとは、InterBase のプロシージャ / トリガー言語で記述され、

データベースのメタデータの一部として格納される独立プログラムです。 ストアドプロ

シージャは、アプリケーションから入力パラメータを受け取り、アプリケーションに値を

返すことができます。

InterBase のプロシージャ / トリガー言語には、IF ... THEN ... ELSE、WHILE ... DO、FOR SELECT ... DO などの SQL データ操作文と、例外やエラー処理を含む SQL 仕様の拡張が完備されています。

プロシージャには次の 2 種類があります。

• 選択プロシージャ:SELECT 文で、テーブルやビューのかわりに使用できるプロシージャ

です。 SELECT プロシージャは、 低 1 つの値を返すように定義します。定義しない場合

は、エラーが発生します。

• 実行可能プロシージャ:EXECUTE PROCEDURE 文により、アプリケーションから直接

呼び出せるプロシージャです。 実行可能プロシージャは、呼び出しプログラムに対して値

を返す必要はありません。

ストアドプロシージャは、ヘッダーと本文で構成されます。

プロシージャのヘッダーには、次の項目が含まれます。

• ストアドプロシージャの名前。データベース内にあるプロシージャ名、テーブル名の中で

一意でなければなりません。

引数 説明

name プロシージャ名。 データベース内にあるプロシージャ、テーブル、ビューの中で一意なものにします。

param datatype 呼び出しプログラムが、プロシージャに値を渡すために使用する入力パラメータ。

param:入力パラメータ名。プロシージャ内の変数中で一意なものにする

datatype: InterBase のデータ型

RETURNS param datatype プロシージャが値を呼び出しプログラムに返すために使用する出力パラメータ。

param:出力パラメータ名。プロシージャ内の変数中で一意なものにする

datatype: InterBase のデータ型

プロシージャ本文に SUSPEND 文があると、その時点で出力パラメータの値を返す

AS プロシージャのヘッダーと本文を区切るキーワード

DECLARE VARIABLE var datatype

プロシージャ内だけで使用するローカル変数を宣言します。宣言文は、DECLARE VARIABLE で始まり、セミコロン(;)で終わります。

var は、ローカル変数名で、プロシージャ内の変数の中で一意なものにします。

statement InterBase のプロシージャ/トリガー言語で記述された文。BEGIN と END を除き、どの文もセミコロン(;)で終わります。

第 2 章 S Q L 文と関数のリファレンス 2-49

Page 60: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

• プロシージャが呼び出しプログラムから受け取る入力パラメータとそのデータ型のリスト

(任意)

• 呼び出しプログラムに値を返す場合に指定する RETURNS と、それに続く出力パラメー

タおよびそのデータ型のリスト

プロシージャ本文の内容は次のとおりです。

• ローカル変数とそのデータ型のリスト(任意)

• InterBase のプロシージャとトリガー言語で書かれ、BEGIN と END で囲まれた文 ブロッ

ク。 文 ブロックそのものに他のブロックを入れることができるので、さまざまなレベルの

ネストを行うことができます。

InterBase では、既存のストアドプロシージャの動作に影響を与えるような、DROP TABLE や DROP EXCEPTION などのデータベースの変更を行うことはできません。 現在のデータベースに設定された全プロシージャを表示するには、isql の内部コマンド SHOW PROCEDURES プロシージャを使用し、特定のプロシージャのテキストとパラメータを参照するには、SHOW PROCEDURE プロシージャを使用します。

InterBase のプロシージャ / トリガー言語は、ストアドプロシージャとトリガーのための完全なプログラミング言語です。 次の要素が含まれます。

• SQL データ操作文: INSERT、UPDATE、DELETE、および単一行 SELECT。

• データベースにリンクしたジェネレータおよび UDF を含む、SQL 演算子と式

• SQL 仕様の拡張:代入文、フロー制御文、トリガー用のコンテキスト変数、イベント通知

文、例外、エラー処理文が含まれる

次の表は、ストアドプロシージャの拡張をまとめたものです。 各文の詳細は、第 3 章「プロシージャとトリガー」を参照してください。

表 2.7 プロシージャ / トリガー言語の拡張

文 説明

BEGIN … END 一括して実行する文のブロックを定義します。

• BEGIN はブロックの始まり、END は終わりを表します。

• BEGIN と END の後にセミコロンは付きません。

variable = expression 代入文:expression で指定した式の値を、variable で指定した変数、ローカル変数、入力パラメータ、出力パラメータのいずれかに代入します。

/* comment_text */ プログラマのコメントを入力します。comment_text の行数に制限はありません。

EXCEPTION exception_name 指定した例外を発行します。例外とは、ユーザーが定義したエラーのことです。WHEN 文で処理されない限り、呼び出しアプリケーションにエラーメッセージを返します。

EXECUTE PROCEDURE proc_name [var [, var …]][RETURNING_VALUESvar [, var …]]

proc_name で指定したストアドプロシージャを実行します。指定した入力引数を使用し、RETURNING_VALUES の後に指定した出力引数に値を返します。入出力引数はローカル変数です。

EXIT 後の END 文にジャンプする。

2-50 言語リファレンス

Page 61: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

ストアドプロシージャおよびトリガー言語には、DSQL や gpre で使用できる文の多くの種類が含まれていません。 ストアドプロシージャ / トリガー言語でサポートされないステートメントの種類は以下のとおりです。

FOR select_statementDO compound_statement

select_statement で抽出した有効行ごとに、DO の後に続く文またはステートメント ブロックを繰り返し実行する。

select_statement は通常の SELECT 文と同じです。

compound_statement プロシージャ/トリガー言語で記述した 1 つの文、または BEGIN とEND で囲んだ文のブロック

IF (condition) THEN compound_statement [ELSE compound_statement]

condition で指定した条件をチェックし、TRUE(真)の場合は、THEN以下の文または文のブロックを実行する。TRUE でない場合は、ELSE 以下の文または文のブロックを実行する。ELSE 以下の文は任意

condition:TRUE(真)、FALSE(偽)、UNKNOWN(不定)のいずれかを値とする論理式。一般には、比較演算子のオペランドとしての 2つの式を使用する

NEW.column INSERT 文または UPDATE 文で、挿入後や更新後の列値を示すコンテキスト変数

OLD.column UPDATE 文または DELETE 文で、更新前や削除前の列値を示すコンテキスト変数

POST_EVENT event_name | col event_name イベント、または col の値を名前とするイベントを通知します。

SUSPEND SELECT プロシージャ内で次の動作を行う。

• 呼び出しアプリケーションから次の FETCH が出されるまでプロシージャの実行を中断する

• 戻り値がある場合は、呼び出しアプリケーションに戻り値を返します。

• 実行可能プロシージャには使用しないことをお勧めします。

WHILE (condition) DO compound_statement

condition の条件が TRUE(真)である限り、compound_statement の文を繰り返し実行します。

• condition で指定した条件をチェックし、TRUE(真)の場合は、compound_statement を実行します。

• condition> が TRUE でなくなるまで、シーケンスが繰り返されます。

WHEN {error [, error …] | ANY}DO compound_statement

エラー処理文: 指定したエラーのいずれかが発生すると、compound_statement の文が実行されます。

• WHEN 文を指定する場合は、ステートメント ブロックの 後、END の直前に入力しなければなりません。

• error:次のいずれかです。EXCEPTION exception_name SQLCODE errcode GDSCODE errcode

• ANY: すべてのエラーを処理する

表 2.7 プロシージャ / トリガー言語の拡張 ( 続き )

文 説明

第 2 章 S Q L 文と関数のリファレンス 2-51

Page 62: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

• データ定義言語文: CREATE、ALTER、DROP、DECLARE EXTERNAL FUNCTION、DECLARE FILTER

• トランザクション制御文: SET TRANSACTION、COMMIT、ROLLBACK

• 動的 SQL 文: PREPARE、DESCRIBE、EXECUTE

• CONNECT/DISCONNECT、および別のデータベースへの SQL 文の送信

• GRANT/REVOKE

• SET GENERATOR

• EVENT INIT/WAIT

• BEGIN/END DECLARE SECTION

• BASED ON

• WHENEVER

• DECLARE CURSOR

• OPEN

• FETCH

例 次の SUB_TOT_BUDGET プロシージャは、部署番号を入力パラメータとし、

HEAD_DEPT で指定した各部署の予算の合計値、平均値、 小値、 大値を返します。

CREATE PROCEDURE SUB_TOT_BUDGET (HEAD_DEPT CHAR(3))RETURNS (tot_bw1udget DECIMAL(12, 2), avg_budget DECIMAL(12, 2),

min_budget DECIMAL(12, 2), max_budget DECIMAL(12, 2))ASBEGIN

SELECT SUM(BUDGET), AVG(BUDGET), MIN(BUDGET), MAX(BUDGET)FROM DEPARTMENTWHERE HEAD_DEPT = :head_deptINTO :tot_budget, :avg_budget, :min_budget, :max_budget;

EXIT;END ;

次の ORG_CHART SELECT プロシージャは組織図を表示します。部署の部署名、統括部署、部課長名、部課長の正式な肩書、従業員数が表示されます。

CREATE PROCEDURE ORG_CHARTRETURNS (HEAD_DEPT CHAR(25), DEPARTMENT CHAR(25),

MNGR_NAME CHAR(20), TITLE CHAR(5), EMP_CNT INTEGER)AS

DECLARE VARIABLE mngr_no INTEGER;DECLARE VARIABLE dno CHAR(3);

BEGINFOR SELECT H.DEPARTMENT, D.DEPARTMENT, D.MNGR_NO, D.DEPT_NO

FROM DEPARTMENT DLEFT OUTER JOIN DEPARTMENT H ON D.HEAD_DEPT = H.DEPT_NOORDER BY D.DEPT_NOINTO :head_dept, :department, :mngr_no, :dno

DOBEGIN

2-52 言語リファレンス

Page 63: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

IF (:mngr_no IS NULL) THENBEGIN

MNGR_NAME = '--TBH--';TITLE = '';

ENDELSE

SELECT FULL_NAME, JOB_CODEFROM EMPLOYEEWHERE EMP_NO = :mngr_noINTO :mngr_name, :title;

SELECT COUNT(EMP_NO)FROM EMPLOYEEWHERE DEPT_NO = :dnoINTO :emp_cnt;

SUSPEND;END

END ;

この ORG_CHART プロシージャを次の isql 文で起動すると、

SELECT * FROM ORG_CHART

次のように、各統括部署名、部署名、部課長名と正式な肩書、従業員数が表示されます。

ORG_CHART で組織図を表示するには選択プロシージャとして実行しなければなりません。 EXECUTE PROCEDURE で呼び出すと、SUSPEND 文に達した時点で中断し、本社に関する情報しか返されません。

参照 ALTER EXCEPTION, ALTER PROCEDURE, CREATE EXCEPTION, DROP EXCEPTION, DROP PROCEDURE, EXECUTE PROCEDURE, SELECT

プロシージャの作成と使い方については、『データ定義ガイド』を参照してください。

プロシージャ / トリガー言語の各文については、第 3 章の「プロシージャとトリガー」を参照してください。

CREATE ROLE

ロールを作成します。

HEAD_DEPT DEPARTMENT MGR_NAME TITLE EMP_CNT

===================== =================== ================ ==== =======

Corporate Headquarters Bender, Oliver H. CEO 2

Corporate Headquarters Sales and Marketing MacDonald, Mary S. VP 2

Sales and Marketing Pacific Rim Headquarters Baldwin, Janet ? Sales 2

Pacific Rim Headquarters Field Office: Japan Yamamoto, Takashi SRep 2

Pacific Rim Headquarters Field Office: Singapore —TBH— 0

第 2 章 S Q L 文と関数のリファレンス 2-53

Page 64: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

構文 CREATE ROLE rolename;

重要 DSQL に渡す SQL 文で使用する場合は、ターミネータのセミコロンを省略してください。

C か C++ で記述した埋め込みアプリケーションと isql では、セミコロンがターミネータに

なるので省略できません。

説明 CEATE ROLE で作成されたロールには、ユーザーに与えるのと同じように特権を許可す

ることができます。 ロールをユーザーに許可することができ、ロールを与えられたユーザー

は、ロールに許可された特権のリストを受け継ぎます。 ユーザーは接続時にこのロールを指

定する必要があります。 GRANT 文を使用して、ロールに特権(ALL、SELECT、INSERT、UPDATE、DELETE、EXECUTE、REFERENCES)を割り当て、またロールをユーザー

に付与します。 ロールに与えた特権を取り消すには REVOKE を使用します。

例 次の文は、administrator というロールを作成しています。

CREATE ROLE administrator;

参照 GRANT, REVOKE, DROP ROLE

CREATE SHADOW

データベースと同一のコピーを作成します。 gpre、DSQL、isql で使用できます。

構文 CREATE SHADOW set_num [AUTO | MANUAL] [CONDITIONAL]'filespec' [LENGTH [=] int [PAGE[S]]] [secondary_file];

secondary_file = FILE 'filespec' [fileinfo] [secondary_file]

fileinfo = LENGTH [=] int [PAGE[S]] | STARTING [AT [PAGE]] int[fileinfo]

重要 DSQL に渡す SQL 文で使用する場合は、ターミネータのセミコロンを省略してください。

C か C++ で記述した埋め込みアプリケーションと isql では、セミコロンがターミネータに

なるので省略できません。

引数 説明

rolename ロールに関連付ける名前。データベース内のロール名間で一意でなければなりません。

2-54 言語リファレンス

Page 65: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

説明 CREATE SHADOW は、二次記憶装置にデータベースをコピーし、データベースがアクセ

ス不能になる事態を防ぎます。 データベースのコピーは、シャドウセットと呼ばれる 1 つ以上のシャドウファイルで構成されます。 シャドウセットは、一意な正の整数によって指定

します。

ディスクのシャドウ機能には、次の 3 つの要素があります。

• シャドウの対象となるデータベース

• シャドウファイルとデータベース情報を収める、RDB$FILES システムテーブル

• 1 つ以上のシャドウファイルからなるシャドウセット

CREATE SHADOW を実行すると、アプリケーションが接続した 新のデータベースについて、シャドウが作成されます。 シャドウセットのファイルは、1 つでも複数でもかまいません。 ディスク障害が発生した場合、データベース管理者(DBA)は、ディスクのシャドウを起動し、データベースのかわりに使用できるようにします。 CONDITIONAL を指定すると、データベースに代わるディスクシャドウを起動すると同時に、新しいシャドウが作成されます。

データベースが大きすぎて、シャドウが 1 つのディスクに収まらない場合は、secondary_file オプションを使用し、複数のシャドウファイルを設定してください。 複数のディスクに分散させることができます。

引数 説明

set_num 文中に指定したすべてのファイルが所属するシャドウセットを示す正の整数

AUTO シャドウを使用できない場合に、データベースに対するデフォルトのアクセス動作を指定します。

• 接続とアクセスは、すべて正常に行われます。

• シャドウの参照が削除され、シャドウファイルの接続が解除されます。

MANUAL シャドウが使用可能になるか、シャドウの参照がすべて削除されるまで、データベースの接続とアクセスができないことを指定します。

CONDITIONAL 一次シャドウが使用不能になった場合や、ディスク障害が発生したためにデータベースをシャドウに置き換える場合、シャドウ機能を続行したまま新しいシャドウを作成します。

'filespec' シャドウファイルの明示的なパス名とファイル名。これはローカルファイルシステムでなければならず、ノード名や、ネットワーク上にあるファイルシステムは含められません。

LENGTH [=] int [PAGE[S]] 追加するシャドウファイルのデータベースページ長。ページサイズは、データベース本体のページサイズによって決まります。

secondary_file 一次シャドウファイルまたは二次シャドウファイルの長さ。1 つの文で両方のファイルを設定する場合は、一次ファイルだけに使用します。

STARTING [AT [PAGE]] int 二次シャドウファイルの開始ページ番号

第 2 章 S Q L 文と関数のリファレンス 2-55

Page 66: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

ヒント 既存のディスクシャドウに二次ファイルを追加する場合は、DROP SHADOW で一度ファ

イルを削除してから、CREATE SHADOW で目的の数のファイルを再作成してください。

例 次の isql 文は、employee.ib データベースのシャドウファイル 1 つを自動的に作成します。

CREATE SHADOW 1 AUTO 'employee.shd';

次の isql 文は、employee.ib データベースの条件付きシャドウファイル 1 つを自動的に作成します。

CREATE SHADOW 2 CONDITIONAL 'employee.shd' LENGTH 1000;

次の isql 文は、 employee.ib データベースの複数ファイルシャドウセットを作成します。 初の文は、シャドウファイルの開始ページを指定します。2 番めの文は、シャドウファ

イルのページ数を指定します。

CREATE SHADOW 3 AUTO 'employee.sh1'

FILE 'employee.sh2'STARTING AT PAGE 1000

FILE 'employee.sh3' STARTING AT PAGE 2000;

CREATE SHADOW 4 MANUAL 'employee.sdw' LENGTH 1000FILE 'employee.sh1'

LENGTH 1000 FILE 'employee.sh2';

参照 DROP SHADOW

シャドウの詳しい使い方については、『操作ガイド』または『データ定義ガイド』を参照してください。

CREATE TABLE

既存のデータベースに新しいテーブルを作成します。 gpre、DSQL、isql で使用できます。

重要 SQL グローバル一時テーブルの作成については、『データ定義ガイド』の第 6 章の「SQLグローバル一時テーブルの作成」節を参照してください。

構文 CREATE TABLE table [EXTERNAL [FILE] 'filespec'](col_def [, col_def | tconstraint …]);

col_def = col {datatype | COMPUTED [BY] (expr) | domain}[DEFAULT {literal | NULL | USER}][NOT NULL] [col_constraint][COLLATE collation]

datatype = {SMALLINT | INTEGER | FLOAT | DOUBLE PRECISION}[array_dim]| (DATE | TIME | TIMESTAMP}[array_dim] | {DECIMAL | NUMERIC} [(precision [, scale])] [array_dim] | {CHAR | CHARACTER | CHARACTER VARYING | VARCHAR} [(int)]

[array_dim] [CHARACTER SET charname]

2-56 言語リファレンス

Page 67: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

| {NCHAR | NATIONAL CHARACTER | NATIONAL CHAR} [VARYING] [(int)] [array_dim]

| BLOB [SUB_TYPE {int | subtype_name}] [SEGMENT SIZE int][CHARACTER SET charname]

| BLOB [(seglen [, subtype])]| BOOLEAN

array_dim = [[x:]y [, [x:]y …]] expr = A valid SQL expression that results in a single value.

col_constraint = [CONSTRAINT constraint] { UNIQUE | PRIMARY KEY | REFERENCES other_table [(other_col [, other_col …])]

[ON DELETE {RESTRICT|NO ACTION|CASCADE|SET DEFAULT|SET NULL}][ON UPDATE {RESTRICT|NO ACTION|CASCADE|SET DEFAULT|SET NULL}]

| CHECK (search_condition)}

tconstraint = [CONSTRAINT constraint] {{PRIMARY KEY | UNIQUE} (col [, col …]) | FOREIGN KEY (col [, col …])

REFERENCES other_table [(other_col [, other_col …])][ON DELETE {RESTRICT|NO ACTION|CASCADE|SET DEFAULT|SET NULL}][ON UPDATE {RESTRICT|NO ACTION|CASCADE|SET DEFAULT|SET NULL}]

| CHECK (search_condition)}

search_condition = val operator {val | (select_one)} | val [NOT] BETWEEN val AND val

| val [NOT] LIKE val [ESCAPE val] | val [NOT] IN (val [, val …] | select_list) | val IS [NOT] NULL | val {>= | <=} | val [NOT] {= | < | >} | {ALL | SOME | ANY} (select_list) | EXISTS (select_expr) | SINGULAR (select_expr) | val [NOT] CONTAINING val | val [NOT] STARTING [WITH] val | (search_condition) | NOT search_condition | search_condition OR search_condition | search_condition AND search_condition

val = { col [array_dim] | :variable| constant | expr | function| udf ([val [, val …]])| NULL | USER | RDB$DB_KEY | ? }[COLLATE collation]

constant = num | 'string' | charsetname 'string'

function = COUNT (* | [ALL] val | DISTINCT val)| SUM ([ALL] val | DISTINCT val)

第 2 章 S Q L 文と関数のリファレンス 2-57

Page 68: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

| AVG ([ALL] val | DISTINCT val)| MAX ([ALL] val | DISTINCT val)| MIN ([ALL] val | DISTINCT val)| CAST (val AS datatype)| UPPER (val)| GEN_ID (generator, val)

operator = {= | < | > | <= | >= | !< | !> | <> | !=}

select_one = SELECT on a single column; returns exactly one value.

select_list = SELECT on a single column; returns zero or more values.

select_expr = SELECT on a list of values; returns zero or more values.

重要 DSQL に渡す SQL 文で使用する場合は、ターミネータのセミコロンを省略してください。

C か C++ で記述した埋め込みアプリケーションと isql では、セミコロンがターミネータに

なるので省略できません。

CREATE TABLE の構文についての注意

• 配列を宣言する場合は、太字で示されている も外側のかっこを入力しなければなりませ

ん。 たとえば、次の文は、各要素が VARCHAR(6) の 5 × 5 の 2 次元配列を作成します。

my_array VARCHAR(6)[5,5]

• 添字が 1 以外から始まる配列を指定するにはコロン(:)を使用します。次の文で作成さ

れる整数配列は、添字が 20 から始まり、30 で終わります。

my_array INTEGER[10:20]

• SQL と isql では、val にパラメータのプレースホルダ(?)を使用できません。

• DSQL と isql では、val に変数を使用することはできません。

• BLOB 値では、COLLATE 句を使用できません。

• expr には、複合 SQL 文か、1 つの値を返す式を指定します。

引数 説明

table テーブル名。データベース内にあるテーブルやプロシージャ中で一意なものにします。

EXTERNAL [FILE] ‘filespec’ 作成するテーブルのデータが、データベースの外部にあるテーブルやファイルに常駐することを宣言します。filespec には、外部ファイルや外部テーブルの正式なファイル名を指定します。

col テーブルの列名。テーブル内にある列の中で一意なものにします。テーブルの作成時に、列の暗号化または暗号化解除を行うこともできます。列またはデータベースを暗号化および暗号化解除する方法については、『データ定義ガイド』の第 13 章「データの暗号化」を参照してください。

datatype 列の SQL データ型。2-6 ページの「データ型」を参照してください。

2-58 言語リファレンス

Page 69: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

COMPUTED [BY] (expr) 実行時に <expr> から算出される列を指定します。このため、データベースの格納領域には割り当てられません。

• expr は、式のデータ型に適合する有効な算術式です。

• expr の中で他の列を参照する場合は、既存の列でないと使用できません。

• expr は、BLOB 列は、参照できません。

• expr は、1 つの値を返す式とし、配列を返すことはできません。

domain 既存のドメイン名

DEFAULT 列の値が入力されなかった場合に使用する、列のデフォルト値を指定します。指定できる値は次のとおりです。

• リテラル:指定した文字列、数値、日付のいずれかを挿入します。

• NULL: NULL 値を入力します。

• USER: 現在のユーザー名を入力します。 対象となる列は、デフォルトを使用できるテキスト型でなければなりません。

列レベルで設定したデフォルトは、ドメインレベルで設定したデフォルトより優先します。

CONSTRAINT constraint 列制約またはテーブル制約の名前。制約名は、テーブル内で一意でなければなりません。

constraint_def 列制約の種類を指定します。有効なオプションは、UNIQUE、PRIMARYKEY、CHECK、および REFERENCES です。

REFERENCES 列の値が別のテーブルの列を参照することを指定します。参照先の列名を指定しない場合は、InterBase が、参照元の列と同じ名前の列を参照先のテーブルで探します。

ON DELETE | ON UPDATE REFERENCES とともに使用します。 参照される主キーが変更されたときに、外部キーをどのように扱うかを指定します。有効なオプションは次のとおりです。

• NO ACTION(デフォルト):外部キーを変更しません。参照整合性チェックによって、主キーの更新が失敗する場合があります。

• CASCADE:ON DELETE では、対応する外部キーを削除します。ON UPDATE では、対応する外部キーに、主キーの新しい値を入れて更新します。

• SET NULL: 対応する外部キーのすべての列を NULL に設定します。

• SET DEFAULT: 参照整合性制約が定義されている場合は、対応する外部キーの各列に有効なデフォルト値を設定します。 参照整合性が定義された後で、外部列のデフォルトが変更された場合、その変更は参照整合性制約で使用されているデフォルト値には反映されません。

CHECK search_condition 列に入力しようとした値が search_condition を満たさない場合、値を入力できません。

COLLATE collation 列のデフォルトのソート動作を指定します。詳細は、第 7 章「キャラクタセットと照合順序」を参照してください。

引数 説明

第 2 章 S Q L 文と関数のリファレンス 2-59

Page 70: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

説明 CREATE TABLE は、新しいテーブル、列、整合性制約を、既存のデータベース内に作成

します。 テーブルを作成するユーザーは、テーブルのオーナーになり、他のユーザー、トリ

ガー、ストアドプロシージャに対する GRANT 特権を含む全特権が与えられます。

• CREATE TABLE には、次の列定義オプションを使用できます。

• ローカル列が、列に入力するデータ名とデータ型を指定します。

• 式の値を入力する、計算列を指定することができます。 列の値は、テーブルをアク

セスするたびに計算されます。 データ型の指定がなければ、その列に該当する式が

計算されます。 式の中で参照する列は、計算列を作成する前に存在していなければ

なりません。

• ドメインベースの列は、ドメインの特性をすべて継承しますが、ドメインのデフォ

ルト、NOT NULL 属性、照合順序の設定を変更したり、CHECK 制約を追加する

ことができます。 列だけの制約を追加することもできます。

• CHAR、VARCHAR、BLOB のテキスト列については、データ型の指定中に CHARACTER SET 句を使用し、列のキャラクタセットを指定することができま

す。 指定がなければ、デフォルトのデータベースキャラクタセットが使用されます。 データベースのキャラクタセットを変更すると、その後に設定したすべての列に使

用されます。既存の列には、影響ありません。InterBase が認識できるキャラクタ

セットについては、第 7 章「キャラクタセットと照合順序」を参照してください。

• デフォルトのキャラクタセットを指定しなかった場合、キャラクタセットはデフォ

ルトの NONE に設定されます。 デフォルトが NONE であるということは、列で使

用されるキャラクタセットが存在しないことを意味します。したがって、データは、

入力の時点で使用しているキャラクタセットを使って列に格納され、また取り出さ

れることになります。 NONE が設定されている列には、後で任意のキャラクタセッ

トをロードすることができますが、異なるキャラクタセットが設定されている列に

そのデータをロードすることはできません。 この場合には、移動元のキャラクタ

セットと移動先のキャラクタセットとの間でコード変換は行われず、このため、移

動中にエラーが発生することがあります。

• CHAR、VARCHAR、BLOB テキストデータ型については、COLLATE 句を使っ

て特定の照合順序を指定することができます。 照合順序の選択は、列のキャラクタ

セットに使用できるものに限られています。つまり、データベース全体に使用する

デフォルトのキャラクタセットか、データ型の指定中に CHARACTER SET 句を

使って設定したキャラクタセットです。 InterBase が認識できるキャラクタセットに

ついては、第 7 章「キャラクタセットと照合順序」を参照してください。

• NOT NULL は、列のエントリとして NULL 値または未定値を許可しないための属性で

す。 NOT NULL は、列に対するすべての INSERT 操作と UPDATE 操作に影響します。

重要 1 つの SQL 埋め込みアプリケーションでテーブルの作成とデータの挿入の両方を行う場

合は、CREATE TABLE の前に DECLARE TABLE を記述しなければなりません。

• EXTERNAL FILE オプションを指定すると、データが InterBase データベースではなく外

部ファイルに格納されるテーブルが作成されます。 このオプションを使って次のことを行

うことができます。

• 他のオペレーティングシステムや非データベースアプリケーションで管理される

ファイル内のデータなど、外部ソースのデータからなる InterBase テーブルを定義

できます。

2-60 言語リファレンス

Page 71: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

• 外部ファイルから、既存の InterBase テーブルにデータを転送できます。

外部ファイルは <InterBase_home>/ext に保存するか、

EXTERNAL_FILE_DIRECTORY エントリを使用して、ibconfig 設定ファイルに保存

場所を指定する必要があります。

参照整合性制約

• 整合性制約は、テーブルの作成時に設定することができます。 整合性制約とは、列対テー

ブル、テーブル対テーブルの関係を強制的に確立して入力データを検査し、データベース

とデータベースの内容を制御する規則です。 データベースにアクセスするすべてのトラン

ザクションを対象とし、システムが自動的に管理します。 CREATE TABLE では、次の整

合性制約を設定することができます。

• PRIMARY KEY 制約:1 つ以上の列を合わせた内容が一意となることが保証されます。

PRIMARY KEY 列には、NOT NULL 属性も定義しなければなりません。 1 つのテーブル

に設定できる主キーは 1 つだけです。

• UNIQUE キー:指定した列または順序が定められた列に、同じ値を持つ行が複数存在しな

いようにします。 UNIQUE 列には、NOT NULL 属性も定義しなければなりません。 1 つのテーブルに 2 つ以上の UNIQUE キーを設定できます。 UNIQUE キーは、他のテーブル

にある FOREIGN KEY から参照できます。

• 参照制約(REFERENCES):指定した列(外部キー)の値が、別のテーブルにある参照先

の UNIQUE 列または PRIMARY KEY 列の値と同一になるようにします。 参照先のテー

ブルの UNIQUE 列または PRIMARY KEY 列が先に定義されていないと、

REFERENCES 制約をもう一方のテーブルに追加することはできません。 REFERENCES制約で ON DELETE または ON UPDATE オプションを指定すると、参照先の主キーが削

除または更新されたときに、外部キーにどのような処理を行うかを定義できます。 ONUPDATE と ON DELETE に指定できる値は次のとおりです。

• 他のユーザーが所有するテーブルに対する FOREIGN KEY の参照を作成できるのは、そ

の所有者がテーブルへの REFERENCES 特権を明示的に許可している場合だけです。 参照先の主キーテーブルに対する REFERENCES または SELECT 特権を持っていないと、

外部キーテーブルを更新することはできません。

指定のアクション 外部キーへの効果

NO ACTION (デフォルト)外部キーは変更されません。 これを指定すると、参照整合性制約のために、主キーの更新または削除は失敗します。

CASCADE 対応する外部キーは、主キーの新しい値に合わせて適切に更新または削除される

SET DEFAULT 対応する外部キーのすべての列がデフォルト値に設定されます。 外部キーのデフォルト値が主キーにない場合、主キーの更新または削除は失敗します。

デフォルト値は、参照整合性制約が定義されていないと有効になりません。参照整合性制約の設定後に外部キー列のデフォルト値を変更した場合、参照整合性制約で使用されているデフォルト値は変更されません。

SET NULL 対応する外部キーのすべての列を NULL に設定します。

第 2 章 S Q L 文と関数のリファレンス 2-61

Page 72: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

• CHECK 制約が設定されているテーブルは、search_condition が真(TRUE)にならないと

挿入または更新を行うことはできません。search_condition では、適切な値の組み合わせ

や、一定の範囲の値の入力を求めたり、他の列に入力された値と比較することなどができ

ます。

メモ search_condition の値として USER を指定すると、参照先のテーブルへの書き込みを行お

うとしているユーザーのログインが参照されます。

• PRIMARY KEY 制約および FOREIGN KEY 制約を設定するには、データベースに排他

アクセスを行う必要があります。

• 制約名の指定がなければ、RDB$RELATION_CONSTRAINTS システムテーブルに格納

されている一意な制約名が割り当てられます。

メモ 式は、制約の対象になりません。

例 次の isql 文は、PRIMARY KEY を設定した単純なテーブルを作成します。

CREATE TABLE COUNTRY (COUNTRY COUNTRYNAME NOT NULL PRIMARY KEY, CURRENCY VARCHAR(10) NOT NULL);

次の isql 文は、列レベルとテーブルレベルの UNIQUE 制約を設定します。

CREATE TABLE STOCK (MODEL SMALLINT NOT NULL UNIQUE,MODELNAME CHAR(10) NOT NULL, ITEMID INTEGER NOT NULL, CONSTRAINT MOD_UNIQUE UNIQUE (MODELNAME, ITEMID));

次の isql 文は、テーブルレベルの PRIMARY KEY 制約、FOREIGN KEY 制約、CHECK 制約を示します。 PRIMARY KEY 制約は、3 つの列を対象としています。 また、VARCHAR 配列の作成も示します。

CREATE TABLE JOB (JOB_CODE JOBCODE NOT NULL,JOB_GRADE JOBGRADE NOT NULL,JOB_COUNTRY COUNTRYNAME NOT NULL,JOB_TITLE VARCHAR(25) NOT NULL,MIN_SALARY SALARY NOT NULL,MAX_SALARY SALARY NOT NULL,JOB_REQUIREMENT BLOB(400,1),LANGUAGE_REQ VARCHAR(15) [5],PRIMARY KEY (JOB_CODE, JOB_GRADE, JOB_COUNTRY),FOREIGN KEY (JOB_COUNTRY) REFERENCES COUNTRY (COUNTRY),CHECK (MIN_SALARY < MAX_SALARY));

次の例では、T2 テーブルの F2 列は、T1 テーブルの主キー P1 を使って T1 を参照する外部キーです。 T1 の行が変更されると、T2 テーブルで影響を受けるすべての行に変更が反映されます。 T1 の行が削除されると、T2 で影響を受ける行の F2 列はすべて NULL に設定されます。

CREATE TABLE T1 (P1 INTEGER NOT NULL PRIMARY KEY);

CREATE TABLE T2 (F2 INTEGER FOREIGN KEY (F2) REFERENCES T1 (P1)ON UPDATE CASCADEON DELETE SET NULL);

次の isql 文は、式の値を入力する計算列を使ったテーブルを作成します。

2-62 言語リファレンス

Page 73: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

CREATE TABLE SALARY_HISTORY (EMP_NO EMPNO NOT NULL,CHANGE_DATE DATE DEFAULT 'NOW' NOT NULL,UPDATER_ID VARCHAR(20) NOT NULL,OLD_SALARY SALARY NOT NULL,PERCENT_CHANGE DOUBLE PRECISION

DEFAULT 0NOT NULLCHECK (PERCENT_CHANGE BETWEEN -50 AND 50),

NEW_SALARY COMPUTED BY(OLD_SALARY + OLD_SALARY * PERCENT_CHANGE / 100),

PRIMARY KEY (EMP_NO, CHANGE_DATE, UPDATER_ID),FOREIGN KEY (EMP_NO) REFERENCES EMPLOYEE (EMP_NO));

次の isql 文のうち、 初の列は、データベースのデフォルトキャラクタセットに対応する、デフォルトの照合順序を使用します。 2 番めの列は、デフォルト以外の照合順序を使用します。3 番めの列には、キャラクタセットと照合順序が指定されています。

CREATE TABLE BOOKADVANCE (BOOKNO CHAR(6), TITLE CHAR(50) COLLATE ISO8859_1, EUROPUB CHAR(50) CHARACTER SET ISO8859_1 COLLATE FR_FR);

参照 CREATE DOMAIN, DECLARE TABLE, GRANT, REVOKE

メタデータの作成、整合性制約、外部テーブル、データ型、照合順序、キャラクタセットの使い方については、『データ定義ガイド』を参照してください。

暗号化と暗号化解除の詳細は、『データ定義ガイド』の第 13 章の「データの暗号化」と「データの暗号化解除」を参照してください。

CREATE TRIGGER

トリガーの起動時期と実行動作を指定し、トリガーを作成します。DSQL、isql で使用できます。

構文 CREATE TRIGGER name FOR table[ACTIVE | INACTIVE]{BEFORE | AFTER}{DELETE | INSERT | UPDATE}[POSITION number]AS trigger_body ;

trigger_body = [variable_declaration_list] block

variable_declaration_list = DECLARE VARIABLE variable datatype;[DECLARE VARIABLE variable datatype; …]

block =BEGIN

compound_statement[compound_statement …]

END

第 2 章 S Q L 文と関数のリファレンス 2-63

Page 74: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

datatype = SMALLINT| INTEGER| FLOAT| DOUBLE PRECISION| {DECIMAL | NUMERIC} [(precision [, scale])]| {DATE | TIME | TIMESTAMP)| {CHAR | CHARACTER | CHARACTER VARYING | VARCHAR}

[(int)] [CHARACTER SET charname] | {NCHAR | NATIONAL CHARACTER | NATIONAL CHAR} [VARYING] [(int)]| BOOLEAN

compound_statement = block | statement;

説明 CREATE TRIGGER は、新しいトリガーを作成します。 トリガーとは、テーブルまたは

ビューの行を挿入、更新、削除すると特定の動作を自動的に実行する、テーブルまたは

ビューと連動した独立プログラムです。

引数 説明

name トリガー名。データベース内で一意なものにします。

table トリガーを起動させる動作の対象となるテーブルまたはビューの名前

ACTIVE|INACTIVE オプション。トランザクションの終了時にトリガーが起動するかどうかを指定する。

• ACTIVE:(デフォルト)トリガーが起動することを指定します。

• INACTIVE:トリガーは実行されない

BEFORE|AFTER 必須項目。トリガーの起動時期を指定する

• BEFORE: 関連する操作の前

• AFTER: 関連する操作の後

連動した動作とは、DELETE、INSERT、UPDATE のいずれかです。

DELETE|INSERT |UPDATE

トリガーを起動させるテーブル操作を指定する

POSITION number 同一動作の前後に発生させるトリガーの順序を指定します。number は、0~ 32767 の整数でなければなりません。

• 数字が小さいトリガーから順に起動します。

• デフォルト:0( 初に起動するトリガー)

• テーブルに対するトリガーは、連続していなくてもかまいません。同一の動作を対象とした、ポジション番号が同じトリガーの起動順序は不規則になります。

DECLAREVARIABLE var datatype

トリガー内だけで使用されるローカル変数を宣言する。 各宣言の前にDECLARE VARIABLE 文を付け、その後にセミコロン(;)を続けなければならない

• var:ローカル変数名。トリガーで一意でなければならない

• datatype:ローカル変数のデータ型

statement InterBase プロシージャ/トリガー言語で記述された文。BEGIN と END を除き、どの文もセミコロン(;)で終わります。

2-64 言語リファレンス

Page 75: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

トリガーは直接呼び出すことはできません。 アプリケーションやユーザーが、テーブルの行に対して INSERT、UPDATE、DELITE を行うと、そのテーブルや動作に連動したトリガーが自動的に実行、つまり起動します。 更新不可能なビューの UPDATE に連動したトリガーを設定すると、更新が行われなくても起動します。

トリガーは、ヘッダーと本文で構成します。

トリガーのヘッダーは、次の項目で構成します。

• トリガー名:トリガーを識別する、データベース内で一意な名前

• テーブル名:トリガーに連動したテーブル名

• 文:トリガーの起動時期を示す文

トリガー本文の内容は次のとおりです。

• ローカル変数とそのデータ型のリスト(任意)

• InterBase のプロシージャとトリガー言語で書かれ、BEGIN と END で囲まれた文のブロック。 これらの文はトリガーが起動したときに実行されます。 ブロック本文に他のブ

ロックを入れることができるので、さまざまなレベルのネストを行うことができます。

トリガーは、テーブルと連動しています。 テーブルのオーナーと、テーブルに対する特権を授与されたユーザーには、連動したトリガーを実行する権利が自動的に与えられます。

ユーザーやプロシージャに特権を与えられるように、トリガーにも、テーブルに対する特権を与えることができます。 特権を与えるには、GRANT 文を使用します。トリガーに特権を与える場合は、TO username のかわりに TO TRIGGER trigger_name を使用します。トリガーの特権を取り消すには、REVOKE を使用します。

トリガーを起動する動作をユーザーが実行した場合、次のいずれかの条件が満たされていれば、トリガー自身がトリガー動作を行うことができます。

• トリガーがその動作に対する特権を持っている場合

• ユーザーがその動作に対する特権を持っている場合

InterBase のプロシージャ / トリガー言語は、ストアドプロシージャとトリガーのための完全なプログラミング言語です。 次の要素が含まれます。

• SQL データ操作文: INSERT、UPDATE、DELETE、および単一行 SELECT。

• 呼び出しアプリケーションにリンクしたジェネレータおよび UDF を含む、SQL 演算子と

• SQL 仕様の拡張:代入文、フロー制御文、トリガーを対象としたコンテキスト変数、イベ

ント通知文、例外、エラー処理文が含まれる

次の表は、トリガーの拡張をまとめたものです。 各文の詳細は、第 3 章「プロシージャとトリガー」を参照してください。

第 2 章 S Q L 文と関数のリファレンス 2-65

Page 76: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

表 2.8 プロシージャ / トリガー言語の拡張

文 説明

BEGIN … END 一括して実行する文のブロックを定義します。

• BEGIN はブロックの始まり、END は終わりを表します。

• BEGIN と END にはセミコロンを付けません。

variable = expression expression の値を variable、入力 / 出力パラメータに割り当てる代入文。

/* comment_text */ プログラマのコメントを入力します。comment_text の行数に制限はありません。

EXCEPTION exception_name 指定された例外を発行します。例外とは、ユーザー定義のエラーで、WHEN で処理できます。

EXECUTE PROCEDURE proc_name [var [, var …]]

[RETURNING_VALUES var [, var …]

指定された入力引数を使用して、ストアドプロシージャproc_name を実行します。

• RETURNING_VALUES の後の出力引数に値を返します。

• 入出力パラメータはローカル変数でなければなりません。

EXIT プロシージャの 後の END 文にジャンプします。

FOR select_statementDO compound_statement

select_statement で抽出した有効行ごとに、DO の後に続く文またはステートメント ブロックを繰り返し実行する。

select_statement 通常の SELECT 文と同じです。

compound_statement プロシージャ / トリガー言語で記述された 1 つの文、またはBEGIN と END で囲まれた文のブロック。

IF (condition) THEN compound_statement [ELSE compound_statement]

condition で指定した条件をチェックし、TRUE(真)の場合は、THEN 以下の文または文のブロックを実行します。TRUEでない場合は、ELSE 以下の文または文のブロックを実行します。ELSE 以下の文は任意です。

condition TRUE(真)、FALSE(偽)、UNKNOWN(不定)のいずれかを値とする論理式。一般には、比較演算子のオペランドとしての 2 つの式を使用します。

NEW.column INSERT 文または UPDATE 文で、挿入後や更新後の列値を示すコンテキスト変数。

OLD.column UPDATE 文または DELETE 文で、更新前や削除前の列値を示すコンテキスト変数。

POST_EVENT event_name | col event_name イベント、または col の値を名前とするイベントを通知します。

2-66 言語リファレンス

Page 77: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

ストアドプロシージャおよびトリガー言語には、DSQL や gpre で使用できる文の多くの種類が含まれていません。 ストアドプロシージャ / トリガー言語でサポートされないステートメントの種類は以下のとおりです。

• データ定義言語文: CREATE、ALTER、DROP、DECLARE EXTERNAL FUNCTION、DECLARE FILTER

• トランザクション制御文: SET TRANSACTION、COMMIT、ROLLBACK

• 動的 SQL 文: PREPARE、DESCRIBE、EXECUTE

• CONNECT/ DISCONNECT、および別のデータベースへの SQL 文の送信

• GRANT/REVOKE• SET GENERATOR• EVENT INIT/WAIT• BEGIN/END DECLARE SECTION• BASED ON• WHENEVER• DECLARE CURSOR• OPEN

• FETCH

例 次の SAVE_SALARY_CHANGE トリガーは、EMPLOYEE テーブルに入力した従業員の

給料を変更すると、SALARY_HISTORY テーブルを更新してデータを一貫させます。

CREATE TRIGGER SAVE_SALARY_CHANGE FOR EMPLOYEEAFTER UPDATE ASBEGIN

IF (OLD.SALARY <> NEW.SALARY) THENINSERT INTO SALARY_HISTORY(EMP_NO, CHANGE_DATE, UPDATER_ID, OLD_SALARY, PERCENT_CHANGE)

WHILE (condition) DO compound_statement

condition の条件が TRUE(真)である限り、compound_statement の文を繰り返し実行します。

• condition で指定した条件をチェックし、TRUE(真)の場合は、compound_statement を実行します。

• condition> が TRUE でなくなるまで、シーケンスが繰り返されます。

WHEN {error [, error …] | ANY}DO compound_statement

エラー処理文。 指定されたエラーのいずれかが発生すると、compound_statement の文が実行される。WHEN 文を指定する場合、文のブロックの 後の END の直前に入力しなければならない。

• ANY: すべてのエラーを処理する

エラー 次のいずれかです。EXCEPTION exception_name SQLCODE errcode GDSCODE errcode

表 2.8 プロシージャ / トリガー言語の拡張 ( 続き )

文 説明

第 2 章 S Q L 文と関数のリファレンス 2-67

Page 78: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

VALUES (OLD.EMP_NO, 'now', USER, OLD.SALARY,(NEW.SALARY - OLD.SALARY) * 100 / OLD.SALARY);

END ;

次の SET_CUST_NO トリガーは、CUSTOMER テーブルに新規顧客のレコードを挿入すると、一意な顧客番号をジェネレータから作成します。

CREATE TRIGGER SET_CUST_NO FOR CUSTOMERBEFORE INSERT ASBEGIN

NEW.CUST_NO = GEN_ID(CUST_NO_GEN, 1);END ;

次の POST_NEW_ORDER トリガーは、SALES テーブルに新しいレコードが挿入されると、“new_order” というイベントを通知します。

CREATE TRIGGER POST_NEW_ORDER FOR SALESAFTER INSERT ASBEGIN

POST_EVENT 'new_order';END ;

次に示す 4 つのトリガーヘッダー(部分)は、POSITION オプションの設定内容によるトリガーの起動順序を示したものです。

CREATE TRIGGER A FOR accounts BEFORE UPDATE POSITION 5 … /*トリガーの本文が続きます */

CREATE TRIGGER B FOR accounts BEFORE UPDATE POSITION 0 … /*トリガーの本文が続きます */

CREATE TRIGGER C FOR accounts AFTER UPDATE POSITION 5 … /*トリガーの本文が続きます */

CREATE TRIGGER D FOR accounts AFTER UPDATE POSITION 3 … /*トリガーの本文が続きます */

次の更新動作が行われると

UPDATE accounts SET account_status = 'on_hold' WHERE account_balance <0;

トリガーは次の順で起動します。

1 トリガー B

2 トリガー A

3 更新動作

4 トリガー D

5 トリガー C

参照 ALTER EXCEPTION, ALTER TRIGGER, CREATE EXCEPTION, CREATE PROCEDURE, DROP EXCEPTION, DROP TRIGGER, EXECUTE PROCEDURE

トリガーの作成と使用の詳細は、『データ定義ガイド』を参照してください。

2-68 言語リファレンス

Page 79: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

プロシージャ / トリガー言語における文の詳細は、第 3 章「プロシージャとトリガー」を参照してください。

CREATE USER

新しいユーザーを作成します。 DSQL、isql で使用できます。

構文 CREATE USER name SET [PASSWORD password][[NO] DEFAULT ROLE name][[NO] SYSTEM USER NAME name][[NO] GROUP NAME name][[NO] UID number][[NO] GID number][[NO] DESCRIPTION string][[NO] FIRST NAME string][[NO] MIDDLE NAME string][[NO] LAST NAME string][ACTIVE][INACTIVE];

説明 CREATE USER は新しいユーザーを作成します。 埋め込みユーザー認証を使用するデータ

ベースでのみ使用されます。

引数 説明

PASSWORD ユーザーのパスワード

[NO] DEFAULT ROLE デフォルトのロール

[NO] SYSTEM USERNAME

ターゲットユーザーのシステムユーザー名

[NO] GROUP NAME ターゲットユーザーのグループ名

[NO] UID ターゲットユーザーの ID

[NO] GID ターゲットユーザーのグループ ID

[NO] DESCRIPTION 説明

[NO] FIRST NAME ターゲットユーザーの名

[NO] MIDDLE NAME ターゲットユーザーのミドルネーム

[NO] LAST NAME ターゲットユーザーの姓

ACTIVE デフォルト。 一度非アクティブにしたユーザーを選択してアクティブに戻します。

INACTIVE ユーザーがデータベースにログインできないようにします。

第 2 章 S Q L 文と関数のリファレンス 2-69

Page 80: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

メモ NO を指定するオプションには、引数を指定してはなりません。 NO は、そのオプションを

NULL 状態に設定します。

例 次の文は、JDOE というユーザーを作成し、jdoe というパスワードを設定します。

CREATE USER JDOE SET PASSWORD ‘jdoe’;

次の文は、JDOE というユーザーを作成し、パスワード、名、姓を設定します。

CREATE USER JDOE SET PASSWORD ‘jdoe’, FIRST NAME ‘Jane’, LAST NAME ‘Doe’;

参照 ALTER USER、DROP USER

埋め込みユーザー認証の詳細は、『操作ガイド』を参照してください。

CREATE VIEW

1 つ以上のテーブルのデータから新しいビューを作成します。 gpre、DSQL、isql で使用できます。

構文 CREATE VIEW name [(view_col [, view_col …])] AS select [WITH CHECK OPTION];

重要 DSQL に渡す SQL 文で使用する場合は、ターミネータのセミコロンを省略してください。

C か C++ で記述した埋め込みアプリケーションと isql では、セミコロンがターミネータに

なるので省略できません。

説明 CREATE VIEW は、データベース内のテーブルを基本として、ビューデータを作成しま

す。 抽出元のテーブルの列を選択する SELECT 文により、返される行が決まります。 デー

タベースには、ビューの定義だけが格納され、ビューデータ本体は物理的に格納されませ

ん。 ビューに対しては、テーブルと同じように SELECT、PROJECT、JOIN、UNION の各動作を実行することができます。

ビューを作成するユーザーは、ビューのオーナーになり、他のユーザー、ロール、トリガー、ビュー、ストアドプロシージャに特権を与える付与権限を含む、すべての特権が与えられます。 ユーザーは、ベーステーブルに対するアクセス権を持たない場合でも、ビューに対する特権を持つことができます。 ビューの作成には、次の条件があります。

引数 説明

name ビュー名。データベース内にあるビュー、テーブル、プロシージャの中で一意なものにします。

view_col ビューに対応する列名。

• 列名はビュー内にある列の中で一意なものにします。

• 式の値を使用する計算列が含まれているビューの場合は必須入力です。そうでなければ任意入力です。

• デフォルト:基本となるベーステーブルの列名です。

select ビューの対象となる列の選択基準を指定します。

WITH CHECK OPTION ビューの SELECT 句(select)の WHERE 句で指定した検索条件に INSERT または UPDATE 動作が違反した場合、更新可能なビューに対する INSERT または UPDATE を禁止します。

2-70 言語リファレンス

Page 81: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

• 読み取り専用のビューには、ベーステーブルに対する SELECT 特権が必要です。

• 更新可能なビューには、ベーステーブルに対する ALL 特権が必要です。

view_col オプションは、常に同じ列がビューの対象となり、ビューで定義される一定の列名を付けます。

ビューの列名の順序と数は、SELECT 句(select)で指定した列に一致します。すべてのビュー列名を指定するか、何も指定しないかのいずれかにしてください。

view_col には、2 つの列の値を組み合わせた式を基本とする列を指定することができます。 式は、1 つの値を返すものとし、配列や配列の要素を返す式は使用できません。 式を含むビューを定義する場合は、view-column オプションが必須入力になります。

メモ 式の中で使用する列は、式を定義する前に存在していなければなりません。

SELECT 文には、ORDER BY 句を使用することはできません。

列を指定せずに SELECT * を使用した場合、列の表示順は、ベーステーブルに格納されている列の順序になります。

WITH CHECK OPTION 句を使用すると、ビューの行を追加または更新する前に、追加行や更新行をビューで確認することができます。 WITH CHECK OPTION 句は、読み取り専用ビューには使用できません。

メモ ストアドプロシージャの結果セットに基づくビューは作成できません。

メモ 更新可能なビューは、UNION 句を使用することができません。UNION 句のビューを作成

する場合は、埋め込み SQL を使用してください。

ビューが更新できるのは次の場合です。

• 1 つのテーブルの一部か、更新可能な他のビューの一部である場合

• ビュー定義から除外されたテーブルの列すべてに、NULL 値を入れることができる場合

• ビューの SELECT 句に、サブクエリー、DISTINCT 述語、HAVING 句、集計関数、JOINで結合されたテーブル、ユーザー定義関数、ストアドプロシージャが含まれていない場合

上の条件に適合しないビュー定義は、読み取り専用と見なされます。

メモ 読み取り専用のビューは、ユーザー定義の参照制約、トリガー、一意なインデックスを組

み合わせて更新することができます。

例 次の isql 文は、更新可能なビューを作成します。

CREATE VIEW SNOW_LINE (CITY, STATE, SNOW_ALTITUDE) ASSELECT CITY, STATE, ALTITUDE

FROM CITIESWHERE ALTITUDE > 5000;

次の isql 文は、ネストしたクエリーを使ってビューを作成します。

CREATE VIEW RECENT_CITIES AS SELECT STATE, CITY, POPULATION

FROM CITIES WHERE STATE IN(SELECT STATE FROM STATES WHERE STATEHOOD > '1-JAN-1850');

更新可能なビューに WITH CHECK OPTION 句を使用すると、CREATE VIEW SELECT 文の WHERE 句で指定した条件に適合しない挿入や更新は禁止されます。

CREATE VIEW HALF_MILE_CITIES AS

第 2 章 S Q L 文と関数のリファレンス 2-71

Page 82: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

SELECT CITY, STATE, ALTITUDE FROM CITIESWHERE ALTITUDE > 2500WITH CHECK OPTION;

WITH CHECK OPTION 句を指定したビューには、次のような挿入はできません。

INSERT INTO HALF_MILE_CITIES (CITY, STATE, ALTITUDE)VALUES ('Chicago', 'Illinois', 250);

一方、次の UPDATE は許容されます。

INSERT INTO HALF_MILE_CITIES (CITY, STATE, ALTITUDE)VALUES ('Truckee', 'California', 2736);

ビューを更新したために行の値が変わり、抽出できなくなるような場合は、WITH CHECK OPTION 句を指定すると、更新が禁止されます。 たとえば、HALF_MILE_ CITIES というビューに WITH CHECK OPTION を指定すると、次の更新は禁止されます。

UPDATE HALF_MILE_CITIESSET ALTITUDE = 2000WHERE STATE = 'NY';

次の isql 文は、2 つのテーブルを結合する読み取り専用のビューを作成します。

CREATE VIEW PHONE_LIST AS SELECT EMP_NO, FIRST_NAME, LAST_NAME, PHONE_EXT, LOCATION, PHONE_NO

FROM EMPLOYEE, DEPARTMENTWHERE EMPLOYEE.DEPT_NO = DEPARTMENT.DEPT_NO;

参照 CREATE TABLE, DROP VIEW, GRANT, INSERT, REVOKE, SELECT, UPDATE

ビューの詳細は、『データ定義ガイド』を参照してください。

DECLARE CURSOR

SELECT 文で指定した行セットとカーソル名を関連付け、テーブルのカーソルを定義します。 gpre、DSQL で使用できます。

構文 SQL の場合:

DECLARE cursor CURSOR FOR select [FOR UPDATE OF col [, col…]];

DSQL の場合:

DECLARE cursor CURSOR FOR statement_id

BLOB の場合: DECLARE CURSOR (BLOB) を参照

引数 説明

cursor カーソル名

2-72 言語リファレンス

Page 83: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

説明 DECLARE CURSOR は、指定したカーソルで抽出できる行セットを定義します。 連続し

たテーブルカーソル文の先頭に記述します。

select には、抽出する行を指定する SELECT 文を入力します。 SELECT 文には、INTO 句または ORDER BY 句を使用することはできません。

WHERE CURRENT OF 句を使った UPDATE 文か DELETE 文で、更新や削除を行う場合は、FOR UPDATE OF 句が必要です。

カーソルは、DECLARE CURSOR 文の SELECT 式で抽出された一定順序の行セットを指示する一方向ポインタです。 カーソルは、抽出した行を順次アクセスして更新するために使用します。関連するカーソル文は次の 4 つです。

例 次の埋め込み SQL 文は、検索条件の付いたカーソルを宣言します。

EXEC SQLDECLARE C CURSOR FORSELECT CUST_NO, ORDER_STATUS

FROM SALESWHERE ORDER_STATUS IN ('open', 'shipping');

次の DSQL 文は、QUERY1 という作成済み文のカーソルを宣言します。

DECLARE Q CURSOR FOR QUERY1

参照 CLOSE, DECLARE CURSOR (BLOB), FETCH, OPEN, PREPARE, SELECT

DECLARE CURSOR (BLOB)

読み取りや挿入に使用する BLOB カーソルを宣言します。 gpre で使用できます。

select 抽出する行を指定します。SQL のみ

FOR UPDATE OF col[, col …]

抽出した行に対応する、列の UPDATE や DELETE を許可します。

statement_id 作成した文(この場合は SELECT)の SQL 文名を指定します。DSQL のみ

引数 説明

段階 文 用途

1 DECLARECURSOR

カーソルを宣言します。カーソルの対象となる抽出行は、SELECT 文によって決まります。

2 OPEN DECLARE CURSOR で指定された行を抽出します。抽出された行は、カーソルの有効セットと呼ばれます。

3 FETCH 有効セットの 1 行めから順に、現在の行を抽出します。FETCH 文を実行するたびに、カーソルが 1 行ずつ前進します。

4 CLOSE カーソルを閉じ、システムリソースを解放します。

第 2 章 S Q L 文と関数のリファレンス 2-73

Page 84: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

構文 DECLARE cursor CURSOR FOR {READ BLOB column FROM table | INSERT BLOB column INTO table}[FILTER [FROM subtype] TO subtype][MAXIMUM_SEGMENT length];

説明 BLOB データの読み込みや挿入に使用する、BLOB カーソルを宣言します。 BLOB カーソ

ルは、1 つの BLOB 列にしか使用できません。

MAXIMUM SEGMENT 句は、部分的に読み込む BLOB セグメントよりホスト言語変数の方が短い場合に使用します。 length で指定した長さが BLOB セグメントより短い場合は、length で指定したバイト数だけが返されます。 length が BLOB セグメントと同じか、それより長い場合は、セグメント全体が返されます(デフォルト)。

例 次の埋め込み SQL 文は、MAXIMUM_SEGMENT オプションを使用し、READ BLOBカーソルを宣言します。

EXEC SQL DECLARE BC CURSOR FOR READ BLOB JOB_REQUIREMENT FROM JOB MAXIMUM_SEGMENT 40;

次の埋め込み SQL 文は、INSERT BLOB カーソルを宣言します。

EXEC SQL DECLARE BC CURSOR FORINSERT BLOB JOB_REQUIREMENt INTO JOB;

参照 CLOSE (BLOB), FETCH (BLOB), INSERT CURSOR (BLOB), OPEN (BLOB)

引数 説明

cursor BLOB カーソル名

column BLOB 列の名前

table テーブルの名前

READ BLOB BLOB に対する読み込み動作を宣言します。

INSERT BLOB BLOB に対する書き込み動作を宣言します。

[FILTER [FROM subtype] TO subtype]

オプション。ユーザーが指定した形式の BLOB を、別の形式に変換するときに使用する BLOB フィルタを指定します。使用するフィルタの種類を subtype で指定します。

MAXIMUM_SEGMENT length FETCH 動作の後に BLOB データを受信するローカル変数の長さを指定します。

2-74 言語リファレンス

Page 85: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

DECLARE EXTERNAL FUNCTION

既存のユーザー定義関数(UDF)を、データベースに対して宣言します。 gpre、DSQL、isql で使用できます。

構文 DECLARE EXTERNAL FUNCTION name [datatype | CSTRING (int) [, datatype | CSTRING (int) …]]

RETURNS {datatype [BY VALUE] | CSTRING (int) | PARAMETER n} [FREE_IT]ENTRY_POINT 'entryname' MODULE_NAME 'modulename';

重要 DSQL に渡す SQL 文で使用する場合は、ターミネータのセミコロンを省略してください。

C か C++ で記述した埋め込みアプリケーションと isql では、セミコロンがターミネータに

なるので省略できません。

メモ UDF が、動的に割り当てたメモリへの参照で値を返す場合は、割り当てたメモリを解放す

るために FREE_IT キーワードを使って UDF を宣言しなければなりません。

引数 説明

name SQL 文で使用する UDF の名前。ENTRY_POINT キーワードの後に指定する関数の名前と異なっていてもよい。

datatype 入力パラメータまたは戻りパラメータのデータ型。

• 入力パラメータはすべて UDF に参照で渡される。

• 戻りパラメータは値で渡すことができる。

• 配列要素は使用できない。

CSTRING (int) int バイト長の NULL 終端文字列を返す UDF を指定する。

RETURNS 関数の戻り値を指定する。

BY VALUE 戻り値が、参照ではなく値で渡されることを指定する。

PARAMETER n • n 番めの入力パラメータが返されることを指定する。

• 戻り値のデータ型が BLOB の場合に使用される。

FREE_IT UDF の実行終了後に戻り値のメモリを解放する。

• メモリが UDF 内で動的に割り当てられる場合にのみ使用する。

• 言語リファレンスの第 5 章も参照してください。

'entryname' UDF ライブラリに格納されたときの UDF 名を指定する、引用符で囲んだ文字列

'modulename' UDF が格納されているライブラリを示す引用符で囲んだ指定。

• ライブラリが InterBase サーバーと同じコンピュータに常駐する。

• どのプラットフォームでも、モジュールが <InterBase_home>/UDF または <InterBase_home>/intl にある場合は、パス名なしで参照できる。

• ライブラリが <InterBase_home>/UDF または <InterBase_home>/intl 以外のディレクトリにある場合は、EXTERNAL_FUNCTION_DIRECTORY パラメータを使用して、InterBase の環境設定ファイル(ibconfig)でライブラリの場所を指定する必要がある。

• モジュール名に拡張子を指定する必要はない(プラットフォームによっては指定する必要がある)

第 2 章 S Q L 文と関数のリファレンス 2-75

Page 86: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

説明 DECLARE EXTERNAL FUNCTION は、UDF に関する情報として、 UDF の格納場所、

名前、必須入力パラメータ、戻り値をデータベースに提供します。 ライブラリ中の各 UDFは、UDF が使用されるデータベースごとに一度だけ宣言します。 エントリポイントとモ

ジュール名が変更されない限り、関数自体が変更されていても UDF を宣言し直す必要はあ

りません。

entryname は、UDF ライブラリに格納された実際の関数名を指定します。 データベースに格納されている UDF 名とは一致しなくてもかまいません。

重要 モジュール名にパスを含める必要はありません。 ただし、そのモジュールが

<InterBase_home>/UDF に配置されているか、EXTERNAL_FUNCTION_DIRECTORYパラメータを使用して、InterBase の環境設定ファイルで指定されていなければなりませ

ん。

InterBase 環境設定ファイルで UDF ライブラリの場所を指定するには、Windows プラットフォームでは次の形式の行を追加します。

EXTERNAL_FUNCTION_DIRECTORY D:¥Mylibraries¥InterBase

UNIX の場合は、ドライブ文字は必要ありません。

EXTERNAL_FUNCTION_DIRECTORY ¥Mylibraries¥InterBase

InterBase の環境設定ファイルは、すべてのプラットフォームで ibconfig という名前です。

例 次の isql 文は、TOPS() UDF をデータベースに対して宣言します。

DECLARE EXTERNAL FUNCTION TOPS CHAR(256), INTEGER, BLOBRETURNS INTEGER BY VALUEENTRY_POINT 'te1' MODULE_NAME 'tm1';

この例では、メモリの割り当てを必要とするのは cstring、CHAR、および VARCHAR 戻り型だけのため、FREE_IT キーワードは必要ありません。

次の例では LOWERS() UDF を宣言し、戻り値に割り当てられたメモリを解放しています。

DECLARE EXTERNAL FUNCTION LOWERS VARCHAR(256)RETURNS CSTRING(256) FREE_IT ENTRY POINT 'fn_lower' MODULE_NAME 'udflib';

参照 DROP EXTERNAL FUNCTION

UDF の記述方法と、InterBase に用意されている UDF の一覧については、『開発者ガイド』の「UDF と BLOB フィルタの操作」を参照してください。

DECLARE FILTER

既存の BLOB フィルタを、データベースに対して宣言します。 gpre、DSQL、isql で使用できます。

構文 DECLARE FILTER filter INPUT_TYPE subtype OUTPUT_TYPE subtypeENTRY_POINT 'entryname' MODULE_NAME 'modulename';

2-76 言語リファレンス

Page 87: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

重要 DSQL に渡す SQL 文で使用する場合は、ターミネータのセミコロンを省略してください。

C か C++ で記述した埋め込みアプリケーションと isql では、セミコロンがターミネータに

なるので省略できません。

説明 DECLARE FILTER は、 フィルタの格納場所、名前、対象となる BLOB のサブタイプな

ど、フィルタに関する情報をデータベースに提供します。 BLOB フィルタとは、BLOB 列に格納されたデータのサブタイプを別のサブタイプに変換する、ユーザーが記述したプロ

グラムのことです。

BLOB フィルタの動作内容は、INPUT_TYPE と OUTPUT_TYPE の組み合わせによって決まります。 データベースに対して宣言するフィルタは、INPUT_TYPE と OUTPUT_TYPE の整数の組み合わせが一意でなければなりません。 テキストの処理時は、組み込みのタイプ 1 が自動的に割り当てられます。 ユーザーが定義する型は、負数で指定しなければなりません。

entryname は、ライブラリに格納された実際の BLOB フィルタ名を指定します。 アプリケーションが BLOB を使用するときは、指定した名前でフィルタ機能が呼び出されます。

例 次の isql 文は、BLOB フィルタを宣言します。

DECLARE FILTER DESC_FILTER INPUT_TYPE 1 OUTPUT_TYPE -4 ENTRY_POINT 'desc_filter' MODULE_NAME 'FILTERLIB';

参照 DROP FILTER

BLOB フィルタの記述方法については、『埋め込み SQL ガイド』を参照してください。

BLOB サブタイプの詳細は、『データ定義ガイド』を参照してください。

DECLARE STATEMENT

埋め込みプログラムで作成して実行する動的 SQL 文を宣言します。 gpre で使用できます。

構文 DECLARE statement STATEMENT;

引数 説明

filter フィルタ名。データベース内にあるフィルタ名の中で、一意なものにします。

INPUT_TYPE subtype 変換元データの BLOB サブタイプ

OUTPUT_TYPE subtype 変換先データの BLOB サブタイプ

‘entryname’ リンク先ライブラリに格納されたときの BLOB フィルタ名を指定する引用符で囲んだ文字列

‘modulename’ フィルタの格納先となるオブジェクトモジュールを識別する、引用符で囲んだファイル名

第 2 章 S Q L 文と関数のリファレンス 2-77

Page 88: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

説明 DECLARE STATEMENT は、作成、実行する、ユーザー定義 SQL 文の SQL 変数名を設

定します。 DECLARE STATEMENT 自体は実行されないため、実行時エラーは出力され

ません。 宣言した文は、内部文書になります。

例 次の埋め込み SQL 文は、作成して実行する文の名前が Q1 であることを宣言します。

EXEC SQL DECLARE Q1 STATEMENT;

参照 EXECUTE, EXECUTE IMMEDIATE, PREPARE

DECLARE TABLE

CREATE TABLE で作成するテーブルの構造を、gpre プリプロセッサに対して宣言します。 gpre で使用できます。

構文 DECLARE table TABLE (table_def);

説明 DECLARE TABLE は、gpre にテーブルの記述内容を格納させます。 1 つのプログラム内

でテーブルを作成してデータを割り当てる場合は、この方法を使用する必要があります。 宣言したテーブルがデータベースに存在する場合や、宣言に構文エラーがある場合は、gpreでエラーが返されます。

実行時にテーブルを参照すると、列の記述とデータ型が、データベースに格納された記述と照合されます。 テーブルの記述がデータベースに存在せず、テーブルが宣言されていない場合や、列の記述とデータ型が一致しない場合は、エラーが返されます。

DECLARE TABLE では、列定義に既存のドメインを含めることができますが、そのドメインがコンパイル時に定義されていない場合は、完全な列記述を与えなければなりません。

DECLARE TABLE では、整合性制約や列の属性を指定することはできません。その後の CREATE TABLE 文で指定することは可能です。

重要 DECLARE TABLE は、マルチデータベースをアクセスするプログラムには使用できませ

ん。

例 次の埋め込み SQL 文は、テーブルを宣言して作成します。

EXEC SQLDECLARE STOCK TABLE(MODEL SMALLINT,

引数 説明

statement 作成して実行するユーザー定義 SQL 文の SQL 変数名

引数 説明

table 作成するテーブル名。データベース内で一意なものにします。

table_def テーブルの定義。テーブルの定義と構文については CREATE TABLE を参照してください。

2-78 言語リファレンス

Page 89: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

MODELNAME CHAR(10), ITEMID INTEGER);

EXEC SQLCREATE TABLE STOCK (MODEL SMALLINT NOT NULL UNIQUE,MODELNAME CHAR(10) NOT NULL, ITEMID INTEGER NOT NULL,

CONSTRAINT MOD_UNIQUE UNIQUE (MODELNAME, ITEMID));

参照 CREATE DOMAIN, CREATE TABLE

DELETE

テーブルまたはカーソルの有効セットから行を削除します。 gpre、DSQL、isql で使用できます。

構文 SQL と DSQL の場合:

重要 DSQL の場合は、ターミネータのセミコロンを省略してください。

DELETE [TRANSACTION transaction] FROM table{[WHERE search_condition] | WHERE CURRENT OF cursor}[ORDER BY order_list][ROWS value [TO upper_value] [BY step_value][PERCENT][WITH TIES]];

search_condition = Search condition as specified in SELECT.

isql の場合:

DELETE FROM TABLE [WHERE search_condition];

引数 説明

TRANSACTION transaction 文の実行を制御するトランザクション名(SQL のみ)

table 行を削除するテーブル名

WHERE search_condition 削除する行を指定する検索条件。指定がなければ、テーブルまたはビューにあるすべての行が DELETE の対象となります。

WHERE CURRENT OF cursor cursor の有効セットの現在の行を削除することを指定します。

ORDER BY order_list 抽出行を返す順序を指定します。列名または列の順序値、および指定のソート順(ASC または DESC)のいずれかで順序を指定できます。

ROWS value [TO upper_value] [BY step_value][PERCENT][WITH TIES]

• value は、単独で使用される場合は、返される行の総数。

• value は、TO とともに使用される場合は、返される 初の行の番号。

• value は、PERCENT とともに使用される場合は、パーセント。

• upper_value は、返される 後の行または 高のパーセンテージ値。

• step_value = n の場合は、n 行ごとの行、またはパーセンテージが n である行をすべて返す。

• PERCENT を指定すると、前に ROWS で指定した行の値がすべてパーセンテージに変換される。

• WITH TIES は、並べ替えられたシーケンス内の 後の値が結果セットの後続の行内の値と同じ場合に、余分な重複行を返す。ORDER BY と組み合わせて使用する必要がある。

第 2 章 S Q L 文と関数のリファレンス 2-79

Page 90: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

DELETE は、テーブルまたは更新可能なビューから指定した行を削除します。 DELETE は、GRANT 文または REVOKE 文によって制御されるデータベース特権の 1 つです。

TRANSACTION 句は、複数トランザクション SQL アプリケーションの場合に、DELETE 動作を制御するトランザクションを指定します。 DSQL と isql では使用できません。

検索した行を削除する場合は、WHERE 句によって削除の対象を限定することができます。

重要 WHERE 句を使用しない場合は、すべての行がテーブルから削除されます。カーソルで位

置を指定して削除する場合は、WHERE CURRENT OF 句を指定し、有効セットから 1 行ずつ削除します。

カーソルを使って位置指定付きの DELETE を実行する場合、WHERE CURRENT OF 句では有効セットから削除する 1 行を指定しなければなりません。

例 次の isql 文は、すべての行をテーブルから削除します。

DELETE FROM EMPLOYEE_PROJECT;

次の埋め込み SQL 文は、埋め込みアプリケーションで検索行を削除します。 ホスト言語変数が列の値と一致する場合は、すべての行が削除されます。

EXEC SQL DELETE FROM SALARY_HISTORYWHERE EMP_NO = :emp_num;

次の埋め込み SQL 文は、カーソルと WHERE CURRENT OF オプションを使用します。CITIES というテーブルから、ホスト変数 min_pop で指定した値より人口が少ない都市の行を削除します。 該当する都市を検索するカーソルを宣言する文、カーソルを開く文、削除する行をカーソルで取り出す文、カーソルが指示する現在の行を削除する文で構成します。

EXEC SQL DECLARE SMALL_CITIES CURSOR FORSELECT CITY, STATEFROM CITIESWHERE POPULATION < :min_pop;

EXEC SQL OPEN SMALL_CITIES;

EXEC SQL FETCH SMALL_CITIES INTO :cityname, :statecode;WHILE (!SQLCODE)

{EXEC SQL DELETE FROM CITIES WHERE CURRENT OF SMALL_CITIES;

EXEC SQL FETCH SMALL_CITIES INTO :cityname, :statecode;}

EXEC SQL CLOSE SMALL_CITIES;

参照 DECLARE CURSOR, FETCH, GRANT, OPEN, REVOKE, SELECT

カーソルの使い方の詳細は、『埋め込み SQL ガイド』を参照してください。

2-80 言語リファレンス

Page 91: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

DESCRIBE

動的 SQL(DSQL)で抽出する列の情報や、文が受け渡す動的パラメータの情報を記述します。 gpre で使用できます。

構文 DESCRIBE [OUTPUT | INPUT] statement {INTO | USING} SQL DESCRIPTOR xsqlda;

説明 DESCRIBE には、次の 2 とおりの使い方があります。

• DESCRIBE OUTPUT 文として、作成した文に指定した列の記述が、XSQLDA に格納さ

れます。 PREPARE 文に INTO 句が含まれている場合は、OUTPUT 句は不要です。

• DESCRIBE INPUT 文として、作成した文の動的パラメータの記述が、XSQLDA に格納

されます。

DESCRIBE は、DSQL 文を処理する文の 1 つです。

入出力を行うには、別の DESCRIBE 文を指定する必要があります。 動的パラメータの情報を格納する場合は、INPUT キーワードを使用します。

重要 DESCRIBE を出力文として使用し、XSQLDA の sqld フィールドに返される値が sqlnフィールドよりも長い場合は、次の措置を取る必要があります。

• XSQLVAR 構造体の格納領域を追加する。

• DESCRIBE 文を再実行する。

メモ 入力と出力の両方に、同一の XSQLDA 構造体を使用することもできます。

例 次の埋め込み SQL 文は、SELECT 文の出力に関する情報を抽出します。

EXEC SQL

引数 説明

OUTPUT 列の情報を XSQLDA に返すことを指定します(デフォルト)。

INPUT 動的パラメータの情報を XSQLDA に格納することを指定します。

statement • 記述する文の定義済みエイリアス。

• エイリアスは、PREPARE で定義します。

{INTO | USING} SQL DESCRIPTOR xsqlda DESCRIBE 文に使用する XSQLDA を指定します。

文 用途

PREPARE 実行する DSQL 文を作成します。

DESCRIBE 文に関する情報を XSQLDA に記述します。

EXECUTE 作成した文を実行します。

EXECUTE IMMEDIATE DSQL 文を作成し、一度だけ実行してから破棄します。

第 2 章 S Q L 文と関数のリファレンス 2-81

Page 92: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

DESCRIBE Q INTO xsqlda

次の埋め込み SQL 文は、実行する文とともに受け渡される動的パラメータの情報を格納します。

EXEC SQLDESCRIBE INPUT Q2 USING SQL DESCRIPTOR xsqlda;

参照 EXECUTE, EXECUTE IMMEDIATE, PREPARE

DSQL プログラミングと XSQLDA の詳細は、『埋め込み SQL ガイド』を参照してください。

DISCONNECT

データベースとアプリケーションの接続を解除します。 gpre で使用できます。

構文 DISCONNECT {{ALL | DEFAULT} | dbhandle [, dbhandle] …]};

説明 DISCONNECT は、データベースハンドル名で指定したデータベースまたはすべてのデー

タベースを終了してから、データベースが使用したリソースを解放し、データベースハン

ドル名を 0 にします。gpre で -manual スイッチが使用されない場合は、デフォルトトラ

ンザクションをコミットします。デフォルト以外の未コミットトランザクションがある場

合は、エラーを返します。

DISCONNECT を使用する前に、接続を解除するデータベースに影響を与えるトランザクションをコミットまたはロールバックしてください。

DISCONNECT で閉じたデータベースを再度接続するには、CONNECT 文でもう一度開きます。

例 次の埋め込み SQL 文は、すべてのデータベースを終了します。

EXEC SQL DISCONNECT DEFAULT;

EXEC SQLDISCONNECT ALL;

次の埋め込み SQL 文は、ハンドル名で指定したデータベースを終了します。

EXEC SQL DISCONNECT DB1;

EXEC SQL DISCONNECT DB1, DB2;

参照 COMMIT, CONNECT, ROLLBACK, SET DATABASE

引数 説明

ALL|DEFAULT どのキーワードも、すべての開かれているデータベースの接続を解除します。

dbhandle 接続を解除するデータベースを指定する、宣言済みのデータベースハンドル名

2-82 言語リファレンス

Page 93: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

DROP DATABASE

現在接続されているデータベースを削除します。 isql で使用できます。

構文 DROP DATABASE;

説明 DROP DATABASE は、二次ファイル、シャドウファイル、ログファイルを含め、現在接

続されているデータベースを削除します。 データベースを削除すると、格納されていたデー

タも削除されます。

データベースを削除できるのは、データベースの作成者、SYSDBA ユーザー、オペレーティングシステムのルート特権を持っているユーザーです。

例 次の isql 文は、現在のデータベースを削除します。

DROP DATABASE;

参照 ALTER DATABASE, CREATE DATABASE

DROP DOMAIN

ドメインをデータベースから削除します。 gpre、DSQL、isql で使用できます。

構文 DROP DOMAIN name;

重要 DSQL に渡す SQL 文で使用する場合は、ターミネータのセミコロンを省略してください。

C か C++ で記述した埋め込みアプリケーションと isql では、セミコロンがターミネータに

なるので省略できません。

説明 DROP DOMAIN は、既存のドメイン定義をデータベースから削除します。

列の定義に使用されているドメインを削除すると、失敗に終わります。 エラーを防ぐには、ALTER TABLE により、ドメインを基本とする列を削除してから実行してください。

ドメインを削除できるのは、ドメインの作成者、SYSDBA ユーザー、オペレーティングシステムのルート特権を持っているユーザーです。

例 次の isql 文は、ドメインを削除します。

DROP DOMAIN COUNTRYNAME;

参照 ALTER DOMAIN, ALTER TABLE, CREATE DOMAIN

DROP ENCRYPTION

データベースから暗号化キーを削除するために使用します。

構文 DROP ENCRYPTION key-name

引数 説明

name 既存のドメイン名

第 2 章 S Q L 文と関数のリファレンス 2-83

Page 94: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

説明 暗号化キーをデータベースから削除できます。 SYSDSO のみがこのコマンドを実行できま

す。 "restrict" (デフォルトの削除操作)が指定されているとき、またはデータベースや任

意のテーブルの列を暗号化するためにまだ暗号化キーが使用されている場合は、このコマ

ンドは失敗します。 "cascade" が指定されている場合は、暗号化キーを使っているすべての

列は暗号が解除され、暗号が破棄されます。 "Restrict" と "Cascade" だけがこのコマンドで

利用できます。

例 次の例では、cascade オプションで revenue_key を使用して暗号化したすべての列を暗

号解除し、この鍵を削除します。

drop encryption revenue_key cascade

参照 CREATE ENCRYPTION、GRANT、REVOKE、ALTER DATABASE、ALTER TABLE

暗号化キーの作成と削除、暗号化の詳細については、『データ定義ガイド』を参照してください。

DROP EXCEPTION

例外をデータベースから削除します。DSQL、isql で使用できます。

構文 DROP EXCEPTION name

説明 DROP EXCEPTION は、例外をデータベースから削除します。

既存のプロシージャやトリガーで使用されている例外は削除できません。

ヒント isql で SHOW EXCEPTION を使用すると、例外の従属関係、つまり例外を使用するプロ

シージャとトリガーを参照することができます。

例外を削除できるのは、例外の作成者、SYSDBA ユーザー、オペレーティングシステムのルート特権を持っているユーザーです。

例 次の isql 文は、例外を削除します。

DROP EXCEPTION UNKNOWN_EMP_ID;

参照 ALTER EXCEPTION, ALTER PROCEDURE, ALTER TRIGGER, CREATE EXCEPTION, CREATE PROCEDURE, CREATE TRIGGER

DROP EXTERNAL FUNCTION

ユーザー定義関数(UDF)の宣言をデータベースから削除します。 gpre、DSQL、isql で使用できます。

引数 説明

key-name データベースから削除する暗号化キーの名前を指定します。

引数 説明

name 既存の例外メッセージ名

2-84 言語リファレンス

Page 95: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

構文 DROP EXTERNAL FUNCTION name;

重要 DSQL に渡す SQL 文で使用する場合は、ターミネータのセミコロンを省略してください。

C か C++ で記述した埋め込みアプリケーションと isql では、セミコロンがターミネータに

なるので省略できません。

説明 DROP EXTERNAL FUNCTION は、データベースから UDF の宣言を削除します。 UDFライブラリから実際に削除されるわけではなく、UDF がデータベースからアクセスできな

くなるだけです。 UDF の定義を削除すると、その UDF を使用しているアプリケーション

で実行時エラーが発生します。

UDF を削除できるのは、UDF の作成者、SYSDBA ユーザー、オペレーティングシステムのルート特権を持っているユーザーです。

例 次の isql 文は、UDF を削除します。

DROP EXTERNAL FUNCTION TOPS;

参照 DECLARE EXTERNAL FUNCTION

DROP FILTER

BLOB フィルタの宣言をデータベースから削除します。 gpre、DSQL、isql で使用できます。

構文 DROP FILTER name;

重要 DSQL に渡す SQL 文で使用する場合は、ターミネータのセミコロンを省略してください。

C か C++ で記述した埋め込みアプリケーションと isql では、セミコロンがターミネータに

なるので省略できません。

説明 DROP FILTER は、データベースから BLOB フィルタの宣言を削除します。 BLOB フィル

タライブラリから実際に削除されるわけではなく、フィルタがデータベースからアクセス

できなくなるだけです。 フィルタの定義を削除すると、フィルタを使用しているアプリケー

ションで実行時エラーが発生します。

フィルタを使用しているプロセスがある場合は、DROP FILTER が失敗に終わります。

フィルタを削除できるのは、フィルタの作成者、SYSDBA ユーザー、オペレーティングシステムのルート特権を持っているユーザーです。

例 次の isql 文は、BLOB フィルタを削除します。

DROP FILTER DESC_FILTER;

参照 DECLARE FILTER

引数 説明

name 既存の UDF 名

引数 説明

name 既存の BLOB フィルタ名

第 2 章 S Q L 文と関数のリファレンス 2-85

Page 96: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

DROP GENERATOR

データベースからジェネレータを削除します。 DSQL と isql で利用できます。

構文 DROP GENERATOR generator_name

説明 このコマンドは、ジェネレータに関する依存関係(トリガーや UDF など)が存在するかど

うかをチェックします。そして、依存関係が存在すると、このコマンドは失敗します。

generator_name が、データベースで定義されているジェネレータの名前ではない場合、

このステートメントは失敗します。 削除済みのジェネレータを呼び出そうとするアプリ

ケーションは、実行時エラーを返します。

メモ DROP GENERATOR コマンドのない以前のバージョンの InterBase では、適切なシステム

テーブルからジェネレータを削除するために、ユーザーは SQL 文を実行する必要がありま

した。 DROP GENERATOR コマンドが利用できるようになったので、この方法は使用しない

でください。システム テーブルを変更すると、単純なエラーや計算間違いでも、データベー

ス全体が使用できなくなる可能性があるからです。

参照 GEN_ID( )、CREATE GENERATOR、 SET GENERATOR

DROP INDEX

指定したインデックスをデータベースから削除します。 gpre、DSQL、isql で使用できます。

構文 DROP INDEX name;

重要 DSQL に渡す SQL 文で使用する場合は、ターミネータのセミコロンを省略してください。 Cか C++ で記述した埋め込みアプリケーションと isql では、セミコロンがターミネータにな

るので省略できません。

説明 DROP INDEX は、ユーザー定義のインデックスをデータベースから削除します。

インデックスを削除できるのは、インデックスの作成者、SYSDBA ユーザー、オペレーティングシステムのルート特権を持っているユーザーです。

重要 UNIQUE 制約、PRIMARY KEY 制約、FOREIGN KEY 制約が設定されている、システ

ム定義のインデックスは削除できません。

使用中のインデックスは、使用が終了するまで削除されません。

例 次の isql 文は、インデックスを削除します。

DROP INDEX MINSALX;

引数 説明

generator_name ジェネレータの名前です。

引数 説明

name 既存のインデックス名

2-86 言語リファレンス

Page 97: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

参照 ALTER INDEX, CREATE INDEX

整合性制約とシステム定義のインデックスについては、『データ定義ガイド』を参照してください。

DROP JOURNAL

ジャーナル機能の使用を中断し、データベースにある既存のジャーナル ファイルを削除します。

構文 DROP JOURNAL

説明 DROP JOURNAL 文を実行すると、ログの先行書き込みは中断され、すべてのジャーナル ファ

イルが削除されます。 この操作によって、ジャーナル アーカイブ内のジャーナル ファイル

が削除されないが、ジャーナル アーカイブの保守は継続されません。 ジャーナルの無効化

には、データベースへの排他的アクセス権が必要です。

参照 CREATE JOURNAL、CREATE JOURNAL ARCHIVE、DROP JOURNAL ARCHIVE

ジャーナル機能、ジャーナル ファイル、およびジャーナル アーカイブ機能の詳細については、『操作ガイド』を参照してください。

DROP JOURNAL ARCHIVE

データベースでジャーナル アーカイブ機能を中断します。

構文 DROP JOURNAL ARCHIVE

説明 DROP JOURNAL ARCHIVE は、データベースに対するジャーナル アーカイブ機能を無効に

します。 これによって、すべてのジャーナル ファイルとデータベース ファイル ダンプが、

すべてのジャーナル アーカイブ ディレクトリから削除されます。 ファイル システムの

ディレクトリ自体は削除されません。

重要 このコマンドではジャーナル機能は中断されず、ジャーナル ファイルの作成も停止されま

せん。

参照 CREATE JOURNAL ARCHIVE、DROP JOURNAL ARCHIVE、CREATE JOURNAL、DROP JOURNAL

ジャーナル機能、ジャーナル ファイル、およびジャーナル アーカイブ機能の詳細については、『操作ガイド』を参照してください。

DROP PROCEDURE

既存のストアドプロシージャをデータベースから削除します。DSQL および isql で使用できます。

構文 DROP PROCEDURE name

引数 説明

name 既存のプロシージャ名

第 2 章 S Q L 文と関数のリファレンス 2-87

Page 98: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

説明 DROP PROCEDURE は、既存のストアドプロシージャの定義をデータベースから削除し

ます。

他のプロシージャ、トリガー、ビューで使用されているプロシージャは削除できません。 現在使用中のプロシージャは削除できません。

ヒント isql で SHOW PROCEDURE を使用すると、プロシージャの従属関係、つまり該当プロ

シージャに関連するプロシージャ、トリガー、例外、テーブルを参照することができます。

プロシージャを削除できるのは、プロシージャの作成者、SYSDBA ユーザー、オペレーティングシステムのルート特権を持っているユーザーです。

例 次の isql 文は、プロシージャを削除します。

DROP PROCEDURE GET_EMP_PROJ;

参照 ALTER PROCEDURE, CREATE PROCEDURE, EXECUTE PROCEDURE

DROP ROLE

ロールをデータベースから削除します。 gpre、DSQL、isql で使用できます。

構文 DROP ROLE rolename;

重要 DSQL に渡す SQL 文で使用する場合は、ターミネータのセミコロンを省略してください。

C か C++ で記述した埋め込みアプリケーションと isql では、セミコロンがターミネータに

なるので省略できません。

説明 DROP ROLE は、CREATE ROLE で作成されたロールを削除します。 そのロールのメン

バーとしてユーザーに与えられていた特権は、すべて取り消されます。

シャドウを削除できるのは、ロールの作成者、SYSDBA ユーザー、スーパーバイザー特権を持っているユーザーです。

例 次の isql 文は、データベースからロールを削除します。

DROP ROLE administrator;

参照 CREATE ROLE, GRANT, REVOKE

DROP SHADOW

シャドウをデータベースから削除します。 gpre、DSQL、isql で使用できます。

構文 DROP SHADOW set_num;

重要 DSQL に渡す SQL 文で使用する場合は、ターミネータのセミコロンを省略してください。

C か C++ で記述した埋め込みアプリケーションと isql では、セミコロンがターミネータに

なるので省略できません。

引数 説明

rolename 既存のロール名

2-88 言語リファレンス

Page 99: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

説明 DROP SHADOW は、シャドウセットを削除し、シャドウプロセスの接続を解除します。

isql で SHOW DATABASE コマンドを使用すると、シャドウセット番号を参照できます。

シャドウは作成者、SYSDBA ユーザーまたは、オペレーティングシステムのルート特権を持っているユーザーが変更できます。

例 次の isql 文は、シャドウセットをデータベースから削除します。

DROP SHADOW 1;

参照 CREATE SHADOW

DROP TABLE

テーブルをデータベースから削除します。 gpre、DSQL、isql で使用できます。

構文 DROP TABLE name;

重要 DSQL に渡す SQL 文で使用する場合は、ターミネータのセミコロンを省略してください。

C か C++ で記述した埋め込みアプリケーションと isql では、セミコロンがターミネータに

なるので省略できません。

説明 DROP TABLE は、データベースからテーブルのデータ、メタデータ、インデックスを削

除します。 テーブルを参照するトリガーも削除されます。

SQL 式で参照するテーブル、ビュー、整合性制約、ストアドプロシージャは、削除できません。 動作中のトランザクションで使用中のテーブルは、使用後に削除されます。

メモ 外部テーブルを削除する場合は、テーブルの定義だけがデータベースから削除され、 外部

ファイルは削除されません。

テーブルを削除できるのは、テーブルの作成者、SYSDBA ユーザー、オペレーティングシステムのルート特権を持っているユーザーです。

例 次の埋め込み SQL 文は、テーブルを削除します。

EXEC SQLDROP TABLE COUNTRY;

参照 ALTER TABLE, CREATE TABLE

DROP TRIGGER

既存のストアドプロシージャをデータベースから削除します。DSQL および isql で使用できます。

引数 説明

set_num 既存のシャドウセットを識別する正の整数

引数 説明

name 既存のテーブル名

第 2 章 S Q L 文と関数のリファレンス 2-89

Page 100: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

構文 DROP TRIGGER name

説明 DROP TRIGGER は、データベースからユーザーが定義したトリガーを削除します。

CHECK 制約が設定され、システムが定義したトリガーは削除できません。 ALTERTABLE を使用して、トリガーを定義している CHECK 句を削除してください。

動作中のトランザクションで使用中のトリガーは、トランザクションが終了してから削除されます。

トリガーを削除できるのは、トリガーの作成者、SYSDBA ユーザー、オペレーティングシステムのルート特権を持っているユーザーです。

ヒント トリガーを一時的に無効にするには、INACTIVE をヘッダーに指定した ALTER TRIGGER を使用します。

例 次の isql 文は、トリガーを削除します。

DROP TRIGGER POST_NEW_ORDER;

参照 ALTER TRIGGER, CREATE TRIGGER

DROP USER

埋め込みユーザー認証データベースから既存のユーザーを削除します。DSQL、isql で使用できます。

構文 DROP USER name

DROP VIEW

ビューの定義をデータベースから削除します。 gpre、DSQL、isql で使用できます。

構文 DROP VIEW name;

重要 DSQL に渡す SQL 文で使用する場合は、ターミネータのセミコロンを省略してください。

C か C++ で記述した埋め込みアプリケーションと isql では、セミコロンがターミネータに

なるので省略できません。

説明 DROP VIEW は、他のビュー、ストアドプロシージャ、CHECK 制約のいずれにも使用さ

れていないビューの定義を削除できます。

ビューを削除できるのは、ビューの作成者、SYSDBA ユーザー、オペレーティングシステムのルート特権を持っているユーザーです。

引数 説明

name 既存のトリガー名

引数 説明

name 削除する既存のビュー定義名

2-90 言語リファレンス

Page 101: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

例 次の isql 文は、ビュー定義を削除します。

DROP VIEW PHONE_LIST;

参照 CREATE VIEW

END DECLARE SECTION

ホスト言語変数の宣言部の終了位置を判定します。 gpre で使用できます。

構文 END DECLARE SECTION;

説明 END DECLARE SECTION は、埋め込み SQL アプリケーションで使用し、その後の SQL文で使用する変数について、ホスト言語変数の宣言部の終わりを指定します。

例 次の埋め込み SQL 文は、1 つのホスト言語変数の宣言部を指定します。

EXEC SQLBEGIN DECLARE SECTION;

BASED_ON EMPLOYEE.SALARY salary;EXEC SQL

END DECLARE SECTION;

参照 BASED ON, BEGIN DECLARE SECTION

EVENT INIT

1 つ以上のイベントとの関連性を InterBase イベントマネージャに登録します。 gpre で使用できます。

構文 EVENT INIT request_name [dbhandle] [('string' | :variable [, 'string' | :variable …]);

説明 EVENT INIT は、InterBase の 2 段階の同期イベントメカニズムの第 1 段階です。

1 EVENT INIT:アプリケーションとイベントとの関連性を登録します。

2 EVENT WAIT: イベントの発生が通知されるまでアプリケーションを待機させます。

引数 説明

request_name アプリケーションのイベントハンドル

dbhandle イベント発生の有無をチェックするデータベースを指定します。指定がなければ、 新の SET DATABASE 文で指定した dbhandle がデフォルトとして使用されます。

‘string’ request_name との関連性を持つ、イベントを識別する一意な名前

:variable 関連先イベント名を指定するホスト言語の文字配列

第 2 章 S Q L 文と関数のリファレンス 2-91

Page 102: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

EVENT INIT は、かっこで囲んだイベントとアプリケーションとの関連性を登録します。 このイベントは、データベースのストアドプロシージャやトリガーによって通知されたイベントと一致しなければなりません。 1 つの EVENT INIT 文によって複数のイベントとの関連性を登録した場合は、いずれかのイベントが発生すると、どのイベントが発生したかをアプリケーションが判定します。

イベントは、ストアドプロシージャやトリガーの POST_EVENT 呼び出しによって通知されます。

イベントマネージャは、関連性のあるイベントを追跡します。 コミット時にイベントが発生すると、関連先アプリケーションに通知します。

例 次の埋め込み SQL 文は、イベントとの関連性を登録します。

EXEC SQLEVENT INIT ORDER_WAIT EMPDB ('new_order');

参照 CREATE PROCEDURE, CREATE TRIGGER, EVENT WAIT, SET DATABASE

イベントの詳細は、『埋め込み SQL ガイド』を参照してください。

EVENT WAIT

イベント発生が通知されるまでアプリケーションを待機させます。 gpre で使用できます。

構文 EVENT WAIT request_name;

説明 EVENT WAIT は、InterBase イベント同期メカニズムの第 2 段階です。 イベントとの関連

性を登録すると、そのイベントが発生するまで、アプリケーションを実行しているプロセ

スをスリープ状態にします。

例 次の埋め込み SQL 文は、アプリケーションのイベント名を登録し、イベントの発生通知を

受信する準備ができたことを示します。

EXEC SQLEVENT INIT ORDER_WAIT EMPDB ('new_order');

EXEC SQLEVENT WAIT ORDER_WAIT;

参照 EVENT INIT

イベントの詳細は、『埋め込み SQL ガイド』を参照してください。

EXECUTE

事前に作成されている動的 SQL(DSQL)文を実行します。 gpre で使用できます。

構文 EXECUTE [TRANSACTION transaction] statement [USING SQL DESCRIPTOR xsqlda] [INTO SQL DESCRIPTOR xsqlda];

引数 説明

request_name EVENT INIT 文で宣言済みの、アプリケーションのイベントハンドル名

2-92 言語リファレンス

Page 103: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

説明 EXECUTE は、すでに作成した DSQL 文を実行します。EXECUTE は、DSQL 文を処理

する文の 1 つです。

statement で指定する実行文は PREPARE 文で作成しておきます。 実行できる文は、SQL のデータ定義文、データ操作文、トランザクション管理文です。 作成したステートメントは、何度でも実行することができます。

TRANSACTION 句は、複数の並列トランザクションを実行する SQL アプリケーションで、EXECUTE 動作を制御するトランザクションを指定するために使用します。

USING DESCRIPTOR は、数値とともにアプリケーションがロードした文のパラメータを、XSQLDA 構造体から抽出するために使用します。 動的パラメータを使用する文では必須項目です。

INTO DESCRIPTOR は、実行した文が返す値を、指定した XSQLDA 構造体に格納するために使用します。 これは、値を返す DSQL 文では必須項目です。

メモ USING DESCRIPTOR と INTO DESCRIPTOR の両方を指定した場合は、2 つの

XSQLDA 構造体を指定しなければなりません。

例 次の埋め込み SQL 文は、作成済みの DSQL 文を実行します。

EXEC SQL EXECUTE DOUBLE_SMALL_BUDGET;

次の埋め込み SQL 文は、XSQLDA に格納されているパラメータを使用して、作成した文を実行します。

EXEC SQLEXECUTE Q USING DESCRIPTOR xsqlda;

次の埋め込み SQL 文は、 初の XSQLDA に格納されているパラメータを使用して、作成した文を実行した後、2 番めの XSQLDA に結果を格納します。

引数 説明

TRANSACTION transaction 実行の対象となるトランザクションを指定します。

statement これから実行する作成済みの文のエイリアス

USING SQL DESCRIPTOR 作成した文のパラメータに対応する値を、指定した XSQLDA から抽出することを指定します。

INTO SQL DESCRIPTOR 実行した文の戻り値を、指定した XSQLDA に格納することを指定します。

xsqlda XSQLDA のホスト言語変数

文 用途

PREPARE 実行する DSQL 文を作成します。

DESCRIBE 文に関する情報を XSQLDA に記述します。

EXECUTE 作成した文を実行します。

EXECUTE IMMEDIATE DSQL 文を作成し、一度だけ実行してから破棄します。

第 2 章 S Q L 文と関数のリファレンス 2-93

Page 104: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

EXEC SQLEXECUTE Q USING DESCRIPTOR xsqlda_1 INTO DESCRIPTOR xsqlda_2;

参照 DESCRIBE, EXECUTE IMMEDIATE, PREPARE

DSQL プログラミングと XSQLDA の詳細は、『埋め込み SQL ガイド』を参照してください。

EXECUTE IMMEDIATE

動的 SQL(DSQL)文を作成し、一度だけ実行してから破棄します。 gpre で使用できます。

構文 EXECUTE IMMEDIATE [TRANSACTION transaction] {:variable | 'string'} [USING SQL DESCRIPTOR xsqlda];

説明 EXECUTE IMMEDIATE は、ホスト言語変数または文字列定数に格納された DSQL 文を

作成し、一度だけ実行してから破棄します。 繰り返し使用する DSQL 文の作成と実行を行

うには、EXECUTE IMMEDIATE ではなく、PREPARE と EXECUTE を使用します。

TRANSACTION 句は、複数の並列トランザクションを実行する SQL アプリケーションで、EXECUTE IMMEDIATE 動作を制御するトランザクションを指定するために使用します。

実行する SQL 文は、ホスト変数か文字列定数に格納されていなければなりません。 SQL 文の中には、SQL データの定義文か、値を返さない操作文を使用することができます。

USING DESCRIPTOR は、数値とともにロードされた文のパラメータを、XSQLDA 構造体から抽出するために使用します。

例 次の埋め込み SQL 文は、ホスト変数に収められている文を作成、実行します。

EXEC SQL EXECUTE IMMEDIATE :insert_date;

参照 DESCRIBE, EXECUTE IMMEDIATE, PREPARE

DSQL プログラミングと XSQLDA の詳細は、『埋め込み SQL ガイド』を参照してください。

EXECUTE PROCEDURE

ストアドプロシージャを呼び出します。 gpre、DSQL、isql で使用できます。

引数 説明

TRANSACTION transaction 実行の対象となるトランザクションを指定します。

:variable 実行する SQL 文が収められているホスト変数

‘string’ 実行する SQL 文が収められている文字列リテラル

USING SQL DESCRIPTOR 文のパラメータに対応する値を、指定した XSQLDA から抽出することを指定します。

xsqlda XSQLDA のホスト言語変数

2-94 言語リファレンス

Page 105: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

構文 SQL の場合:

EXECUTE PROCEDURE [TRANSACTION transaction]name [:param [[INDICATOR]:indicator]]

[, :param [[INDICATOR]:indicator] …][RETURNING_VALUES :param [[INDICATOR]:indicator]

[, :param [[INDICATOR]:indicator] …]];

DSQL の場合:EXECUTE PROCEDURE name [param [, param …]]

[RETURNING_VALUES param [, param …]]

isql の場合:

EXECUTE PROCEDURE name [param [, param …]]

説明 EXECUTE PROCEDURE は、指定したストアドプロシージャを呼び出します。 必須入力

パラメータは、ホスト言語変数または定数として渡されます。 SQL プログラムに出力パラ

メータが返される場合は、戻り値を収めるホスト変数を RETURNING VALUES 句に指定

します。

isql では、RETURN 句および出力パラメータは指定できません。戻り値は自動的に表示されます。

メモ DSQL の場合、入力パラメータを使用するには INPUT DESCRIPTOR を指定し、出力パ

ラメータを使用するには OUTPUT DESCRIPTOR を指定します。

埋め込み SQL では、入力パラメータと戻り値にインジケータ変数を割り当て、NULL 値を追跡することができます。 インジケータ変数は、不定または NULL の戻り値を指示する整数です。

インジケータ変数が 0 未満の場合、パラメータが不定または NULL であることを示します。 0 以上の場合は、パラメータの値が既知か NULL 以外であることを示します。

例 次の埋め込み SQL 文は、DEPT_BUDGET という実行可能プロシージャを、定数パラメー

タとともに埋め込み SQL から呼び出す方法を示したものです。

EXEC SQLEXECUTE PROCEDURE DEPT_BUDGET 100 RETURNING_VALUES :sumb;

次の埋め込み SQL 文は、定数のかわりにホスト変数を入力パラメータとして使用し、上と同じプロシージャを呼び出します。

EXEC SQLEXECUTE PROCEDURE DEPT_BUDGET :rdno RETURNING_VALUES :sumb;

参照 ALTER PROCEDURE, CREATE PROCEDURE, DROP PROCEDURE

引数 説明

TRANSACTION transaction 実行の対象となるトランザクションを指定します。

name データベースに収められているストアドプロシージャ名

param 入力パラメータまたは出力パラメータ。ホスト変数または定数のどちらでもかまいません。

RETURNING_VALUES:param 出力パラメータの値を受け取るホスト変数

[INDICATOR] :indicator NULL または不定の値を示すホスト変数

第 2 章 S Q L 文と関数のリファレンス 2-95

Page 106: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

インジケータ変数の詳細は、『埋め込み SQL ガイド』を参照してください。

EXTRACT( )

DATE、TIME、TIMESTAMP 値から日付と時刻の情報を取り出します。 gpre、DSQL、isql で使用できます。

構文 EXTRACT (part FROM value)

説明 EXTRACT() 式に渡される値は、DATE、TIME、TIMESTAMP のいずれかでなければな

りません。 データ型の中に存在しない部分を取り出そうとすると、エラーになります。 たと

えば、EXTRACT (YEAR from aTime) のような文は失敗します。

メモ EXTRACT() で取り出される日付と時刻の部分

例 EXTRACT(HOUR FROM StartTime);

FETCH

開いているカーソルの有効セットから、使用可能な次の行を抽出します。 gpre、DSQL で使用できます。

引数 説明

part YEAR、MONTH、DAY、HOUR、MINUTE、SECOND、WEEKDAY、YEARDAY のいずれか。各データ型と値の範囲については、下の表を参照してください。

value DATE、TIME、TIMESTAMP のいずれかの値

表 2.9 取り出される部分

取り出される部分 データ型 範囲

YEAR SMALLINT 0–5400

MONTH SMALLINT 1–12

DAY SMALLINT 1–31

HOUR SMALLINT 0–23

MINUTE SMALLINT 0–59

SECOND DECIMAL(6,4) 0–59.9999

WEEKDAY SMALLINT 0–6

(0 = 日曜、1 = 月曜、など)

YEARDAY SMALLINT 0–365

2-96 言語リファレンス

Page 107: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

構文 SQL の場合:

FETCH cursor[INTO :hostvar [[INDICATOR] :indvar][, :hostvar [[INDICATOR] :indvar] …]];

DSQL の場合:FETCH cursor {INTO | USING} SQL DESCRIPTOR xsqlda

BLOB の場合: FETCH (BLOB) を参照してください。

説明 FETCH は、カーソルの有効セットから、1 行ずつ抽出します。 初の FETCH は、有効

セットの先頭行に対して動作します。 次の FETCH は次の行に対して動作し、FETCH を実

行するたびにカーソルが 1 行ずつ前進します。使用可能な行がなくなり、SQLCODE が100 に設定されるまで繰り返し実行されます。

カーソルは、DECLARE CURSOR 文の SELECT 式で抽出された一定順序の行セットを指示する一方向ポインタです。 カーソルは、抽出した行を順次アクセスして更新するために使用します。関連するカーソル文は次の 4 つです。

FETCH で取り出す列の数、サイズ、データ型、順序は、対応する DECLARE CURSOR 文のクエリー式に指定したものと一致しなければなりません。 一致しなければ、間違った値が割り当てられます。

例 次の埋め込み SQL 文は、カーソルの有効セットから列を取り出します。

EXEC SQL

引数 説明

cursor 行を取り出す開いているカーソル名

:hostvar FETCH で抽出された値を収めるホスト言語変数

• DELETE または UPDATE を実行する行を取り出す場合は任意指定

• DELETE または UPDATE を実行する前に行を表示する場合は必須

:indvar 不定値または NULL 値が列に収められていることを報告するインジケータ変数

[INTO|USING] SQL DESCRIPTOR 指定した XSQLDA に値を返すことを指定します。

xsqlda XSQLDA のホスト言語変数

段階 文 用途

1 DECLARE CURSOR カーソルを宣言します。カーソルの対象となる抽出行は、SELECT文によって決まります。

2 OPEN DECLARE CURSOR によって抽出する行を指定します。 抽出された行は、カーソルの有効セットと呼ばれます。

3 FETCH 有効セットの先頭行から順に、現在の行を抽出します。FETCH 文を実行するたびに、カーソルが 1 行ずつ前進します。

4 CLOSE カーソルを閉じてシステムリソースを解放します。

第 2 章 S Q L 文と関数のリファレンス 2-97

Page 108: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

FETCH PROJ_CNT INTO :department, :hcnt;

参照 CLOSE, DECLARE CURSOR, DELETE, FETCH (BLOB), OPEN

カーソルと XSQLDA の詳細は、『埋め込み SQL ガイド』を参照してください。

FETCH (BLOB)

BLOB 列から使用可能な次のセグメントを抽出し、指定したローカルバッファに格納します。 gpre で使用できます。

構文 FETCH cursor INTO [:buffer [[INDICATOR] :segment_length];

説明 FETCH は、BLOB から次のセグメントを抽出して、指定したバッファに収めます。

ホスト変数の segment_length は、取り出すバイト数を示します。 これは、取り出すバイト数がホスト変数より小さい場合に使用します。たとえば、BLOB の 後の部分を取り出す場合などに使用します。

FETCH が返す SQLCODE の値は次の 2 とおりです。

• SQLCODE = 100:抽出する BLOB セグメントが、それ以上ないことを示します。

• SQLCODE = 101:セグメントの一部が抽出され、ローカルバッファ変数に収められたこ

とを示します。

メモ FETCH 動作中に BLOB セグメントを収める、十分なサイズのホスト変数バッファを確保

するには、BASED ON 文の SEGMENT オプションを使用してください。

FETCH 動作中に BLOB セグメントを収める、十分なサイズのホスト変数バッファを確保するには、BASED ON 文の SEGMENT オプションを使用してください。

例 次の埋め込み SQL アプリケーションコードは、BLOB の FETCH を実行します。

while (SQLCODE != 100){

EXEC SQL OPEN BLOB_CUR USING :blob_id;

EXEC SQL FETCH BLOB_CUR INTO :blob_segment :blob_seg_len;

while (SQLCODE !=100 || SQLCODE == 101){

blob_segment{blob_seg_len + 1] = '¥0';

引数 説明

cursor セグメントを取り出す、開いている BLOB カーソル名

:buffer BLOB 列から取り出した値を収めるホスト言語変数。バッファは、セグメントを取り出す前に宣言しておきます。

INDICATOR FETCH で取り出すバイト数を指示するホスト言語変数が後に続くことを示す任意指定のキーワード

:segment_length FETCH から返されるバイト数を示すホスト言語変数

2-98 言語リファレンス

Page 109: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

printf("%*.*s",blob_seg_len,blob_seg_len,blob_segment);blob_segment{blob_seg_len + 1] = ‘ ’;

EXEC SQL FETCH BLOB_CUR INTO :blob_segment :blob_seg_len;

}. . .

}

参照 BASED ON, CLOSE (BLOB), DECLARE CURSOR (BLOB), INSERT CURSOR (BLOB), OPEN (BLOB)

GEN_ID( )

システム生成の整数値を作成します。 gpre、DSQL、isql で使用できます。

構文 gen_id (generator, step)

説明 GEN_ID() 関数は、次の処理を行います。

1 指定したジェネレータの値を 1 単位(step)だけ大きくします。

2 指定したジェネレータの新しい値を返します。

GEN_ID() は、UNIQUE 列または PRIMARY KEY 列に挿入する一意な値を、自動的に出力します。 戻り値を列に挿入するには、GEN_ID() を呼び出すトリガー、プロシージャ、SQL 文を使用します。

メモ ジェネレータは、CREATE GENERATOR で作成します。 ジェネレータの初期デフォルト

値は 0 です。 初期値を変更するには SET GENERATOR を使用します。

例 次の isql のトリガー定義文は、GEN_ID() を呼び出します。

CREATE TRIGGER CREATE_EMPNO FOR EMPLOYEESBEFORE INSERTPOSITION 0AS BEGIN

NEW.EMPNO = GEN_ID (EMPNO_GEN, 1); END

トリガーが 初に起動したときは、NEW.EMPNO が 1 に設定されます。以降、起動するたびに NEW.EMPNO は 1 ずつインクリメントされます。

参照 CREATE GENERATOR, SET GENERATOR

引数 説明

generator 既存のジェネレータ名

step 既存のジェネレータ値の増減単位を指定する整数または式。 有効範囲は –(263) ~ 263 – 1 です。

第 2 章 S Q L 文と関数のリファレンス 2-99

Page 110: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

GRANT

指定したデータベースオブジェクトに対する特権をユーザーに割り当てます。 gpre、DSQL、isql で使用できます。

構文 GRANT privileges ON [TABLE] {tablename | viewname}

TO {object|userlist [WITH GRANT OPTION]|GROUP UNIX_group}| EXECUTE ON PROCEDURE procname TO {object | userlist}| role_granted TO {PUBLIC | role_grantee_list}[WITH ADMIN OPTION];

privileges = ALL [PRIVILEGES] | privilege_list

privilege_list = {SELECT

| DELETE | INSERT| ENCRYPT ON ENCRYPTION| DECRYPT| UPDATE [(col [, col …])]| REFERENCES [(col [, col …])]

}[, privilege_list …]

object = {PROCEDURE procname

| TRIGGER trigname | VIEW viewname| PUBLIC

}[, object …]

userlist = {[USER] username

| rolename | UNIX_user

}[,userlist …]

role_granted = rolename [, rolename …]

role_grantee_list = [USER] username [, [USER] username …]

重要 DSQL に渡す SQL 文で使用する場合は、ターミネータのセミコロンを省略してください。

C か C++ で記述した埋め込みアプリケーションと isql では、セミコロンがターミネータに

なるので省略できません。

引数 説明

privilege_list 許可する特権の名前のリスト。指定できる値は、SELECT、DELETE、INSERT、UPDATE、ENCRYPT ON ENCRYPTION、DECRYPT、および REFERENCES

col 許可される特権が適用される列

tablename 許可される特権が適用される既存のテーブル名

viewname 許可される特権が適用される既存のビュー名

GROUP unix_group (UNIX システムのみ)/etc/group に定義されているグループ名

2-100 言語リファレンス

Page 111: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

説明 GRANT は、データベースオブジェクトに対する特権を、ユーザー、ロール、または他の

データベースオブジェクトに与えます。 オブジェクトを初めて作成した時点では、作成者だ

けがオブジェクトに対する特権を所有しており、作成者だけが、他のユーザーまたはオブ

ジェクトに特権を付与することができます。

次の表に、使用できる特権の要約を示します。

メモ InterBase 4.0 以前のコードでは、ALL に REFERENCES は含まれていません。

object 既存のプロシージャ、トリガー、またはビューの名前。PUBLIC も指定できます

userlist InterBase のセキュリティデータベース(デフォルトでは admin.ib)に登録されているユーザー、または CREATE ROLE を使って作成されたロール名

WITH GRANT OPTION GRANT 文で指定された特権の GRANT 特権を userlist に与えることを指定します

rolename CREATE ROLE 文で作成された既存のロール名

role_grantee_list ロール(rolename)が与えられるユーザーのリスト。ユーザーは InterBaseのセキュリティデータベースに登録されていなければなりません

WITH ADMIN OPTION role_grantee_list に指定されているロールに GRANT 特権を与えることを指定します

引数 説明

特権 実行できる動作

ALL SELECT、DELETE、INSERT、UPDATE、EXECUTE、REFERENCES

SELECT テーブルまたはビューから行を抽出する。

DELETE テーブルまたはビューから行を削除する。

DECRYPT 列を暗号化した後、データベース所有者、または個別のテーブルの所有者は、暗号化列の値にアクセスする必要があるユーザーに暗号解除アクセス権を許可できます。

ENCRYPT ON ENCRYPTION

データベース所有者、または個別のテーブルの所有者が特定の暗号化キーを使用して、データベースや列を暗号化できるようにします。SYSDSO(Data SecurityOwner)のみが暗号化アクセス権を許可できます。

INSERT テーブルまたはビューに行を挿入する。

UPDATE テーブルまたはビューの列の現在値を変更する。指定した一部の列に限定することができます。

EXECUTE ストアドプロシージャを実行する。

REFERENCES 外部キーで指定される列を参照できる。少なくとも主キーに含まれるすべての列に REFERENCES 特権を設定しなければなりません。

第 2 章 S Q L 文と関数のリファレンス 2-101

Page 112: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

• テーブルまたはビューにアクセスするには、そのテーブルまたはビューに対する

SELECT、INSERT、UPDATE、DELETE、REFERENCES のいずれかの特権を、ユー

ザーまたはオブジェクトが持っていなければなりません。 ALL を使用すると、SELECT、INSERT、UPDATE、DELETE、REFERENCES 特権を一括して与えることができます。

• アプリケーションでストアドプロシージャを呼び出すには、ストアドプロシージャに対す

る EXECUTE 特権をユーザーまたはオブジェクトが持っていなければなりません。

• GRANT ENCRYPT ON ENCRYPTION および GRANT DECRYPT の許可についての詳細は、

『データ定義ガイド』の第 13 章「データの暗号化」を参照してください。

• ユーザーのグループに特権を許可するには、まず CREATE ROLE を使ってロールを作成

し、 次に GRANT privilege TO rolename を使って必要な特権をロールに割り当て、 後に

GRANT rolename TO user を使ってユーザーにロールを割り当てます。 必要であれば、

GRANT または REVOKE を使用して、ロールにユーザーを追加したり、ロールからユー

ザーを削除することができます。 これらの特権を実際に得るには、ユーザーは接続時に

ロールを指定する必要があります。 データベース接続時のロール指定については、『操作ガ

イド』の「ANSI SQL3 のロール」を参照してください。

• UNIX システムでは、個々のユーザーおよびロールに与える場合と同様に、クライアント

とサーバーどちらにおいても、/etc/groups に定義されているグループ、および /etc/passwdに登録されているユーザーに特権を許可することができます。

• 他のユーザーが外部キーから列を参照できるようにするには、主キーテーブルまたはテー

ブルの主キー列に対する REFERENCES 特権を、外部キーテーブルの所有者に与えます。

また、外部キーテーブルに書き込みを行う必要があるユーザーには、主キーテーブルに対

する REFERENCES または SELECT 特権を与えなければなりません。

ヒント セキュリティ上、データの読み取りを制限する必要がない場合は、主キーテーブルの

REFERENCES 特権を PUBLIC に与えるのが簡単です。

• REFERENCES 特権を与えるときは、少なくとも主キーのすべての列に対して許可しなけ

ればなりません。 テーブル全体に対する REFERENCES 特権を与えても、主キーに含まれ

ない列には特権上の違いはありません。

• ユーザーが別のユーザー所有のテーブルに外部キー制約を定義するときに、参照される

テーブルに対してユーザーが適切な REFERENCES 特権を持っているかどうかがチェッ

クされます。この特権は、外部キーに入力された値が主キーテーブルに格納されているこ

とを検証するために使用されます。

• この特権は、外部キーに入力された値が主キーテーブルに格納されていることを検証する

ために使用されます。

• ロールに REFERENCES 特権を与えることができます。

• 他のユーザーに特権を付与する権利をユーザーに与えるには、WITH GRANT OPTIONを含む userlist を指定します。 他のユーザーに付与できる特権は、自分が持っている特権だ

けです。

• すべてのユーザーに特権を与えるには、ユーザー名のリストのかわりに PUBLIC を指定し

ます。PUBLIC で特権が与えられるのはユーザーだけで、データベースオブジェクトには

与えられません。

2-102 言語リファレンス

Page 113: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

特権を取り消すには、その特権を与えたユーザーが REVOKE を使用しなければなりません。 ALL で全特権を一括して与えた場合は、REVOKE ALL で取り消さなければなりません。 PUBLIC で全ユーザーに与えた特権は、REVOKE PUBLIC でなければ取り消せません。

例 次の isql 文は、SELECT 特権と DELETE 特権をユーザーに与えます。 WITH GRANTOPTION によって、特権の付与権限がユーザーに与えられます。

GRANT SELECT, DELETE ON COUNTRY TO CHLOE WITH GRANT OPTION;

次の埋め込み SQL 文は、テーブルに対する SELECT 特権と UPDATE 特権をプロシージャに与えます。

EXEC SQLGRANT SELECT, UPDATE ON JOB TO PROCEDURE GET_EMP_PROJ;

次の埋め込み SQL 文は、プロシージャに対する EXECUTE 特権を他のプロシージャとユーザーに与えます。

EXEC SQLGRANT EXECUTE ON PROCEDURE GET_EMP_PROJ TO PROCEDURE ADD_EMP_PROJ, LUIS;

次の例では、「administrator」というロールを作成し、table1 に対する UPDATE 特権をそのロールに与え、そのロールを user1、user2、および user3 に許可しています。 これによって 3 人のユーザーは、table1 の UPDATE と REFERENCES 特権を持つことになります。

CREATE ROLE administrator;GRANT UPDATE ON table1 TO administrator;GRANT administrator TO user1, user2, user3;

参照 REVOKE

特権の詳細は、『データ定義ガイド』を参照してください。

INSERT

指定したテーブルに新しい行を追加します。 gpre、DSQL、isql で使用できます。

構文 INSERT [TRANSACTION transaction] INTO object [(col [, col …])]{VALUES (val [, val …]) | select_expr};

object = tablename | viewname

val = {:variable | constant | expr| function | udf ([val [, val …]])| NULL | USER | RDB$DB_KEY | ? } [COLLATE collation]

constant = num | 'string' | charsetname 'string'

function = CAST (val AS datatype)| UPPER (val)| GEN_ID (generator, val)

第 2 章 S Q L 文と関数のリファレンス 2-103

Page 114: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

INSERT 文についての注意

• SQL と isql では、val にパラメータのプレースホルダ(?)を使用できません。

• DSQL と isql では、val に変数を使用することはできません。

• BLOB 値では、COLLATE 句を使用できません。

重要 DSQL に渡す SQL 文で使用する場合は、ターミネータのセミコロンを省略してください。

C か C++ で記述した埋め込みアプリケーションと isql では、セミコロンがターミネータに

なるので省略できません。

説明 INSERT は、既存のテーブルまたはビューに、データ行を挿入します。 INSERT は、GRANT文と REVOKE 文によって制御されるデータベース特権の 1 つです。

挿入先の列リスト(任意指定)を指定しない限り、テーブルの列の順序にしたがって挿入されます。 一部の列だけを指定した場合は、指定外の列にデフォルト値か NULL 値が挿入されます。

任意指定の挿入先列リストを省略した場合は、すべての列に挿入する値を VALUES 句に指定します。

1 行だけを挿入する場合は、挿入する値を VALUES 句に指定します。

複数行を挿入する場合は、他のテーブルから既存のデータを抽出する式を select_expr に指定します。 式で選択する列の数は、挿入先の列と一致しなければなりません。

重要 同一のテーブルを抽出元と挿入先に指定することは可能ですが、行の挿入が無限に繰り返

される恐れがあるので勧められません。

TRANSACTION 句は、複数トランザクション SQL アプリケーションの場合に、INSERT 動作を制御するトランザクションを指定します。 DSQL と isql では使用できません。

例 次の埋め込み SQL 文は、テーブルに 1 行を挿入し、ホスト言語変数の値を 2 つの列に割

り当てます。

EXEC SQL

引数 説明

expr 単一の値になる有効な SQL 式

select_expr 0 以上の行を返す SELECT 文。各行に収められる列の数と、挿入できる項目の数は同じです。

引数 説明

TRANSACTION transaction INSERT 文の実行を制御するトランザクション名

INTO object データの挿入先となるテーブルまたはビューの名前

col データの挿入先となるテーブルまたはビューの列名

VALUES (val [, val …]) テーブルまたはビューに挿入する値のリスト。挿入先の列と同じ順序で指定します。

select_expr 列に挿入される行値を返すクエリー

2-104 言語リファレンス

Page 115: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

INSERT INTO EMPLOYEE_PROJECT (EMP_NO, PROJ_ID) VALUES (:emp_no, :proj_id);

次の isql 文は、テーブルに挿入する値を SELECT 文で指定します。

INSERT INTO PROJECTSSELECT * FROM NEW_PROJECTSWHERE NEW_PROJECTS.START_DATE > '6-JUN-1994';

参照 GRANT, REVOKE, SET TRANSACTION, UPDATE

INSERT CURSOR (BLOB)

BLOB セグメント長以下の単位で、BLOB カーソルにデータを挿入します。 gpre で使用できます。

構文 INSERT CURSOR cursorVALUES (:buffer [INDICATOR] :bufferlen);

説明 INSERT CURSOR は、BLOB データを列に書き込みます。 データは、BLOB セグメント

サイズ以下の単位で書き込まれます。 BLOB カーソルにデータを挿入する前に、次のこと

を実行しておきます。

• 挿入するデータを収めるローカル変数 buffer を宣言します。

• 変数の長さを示す bufferlen を宣言します。

• INSERT の対象となる BLOB カーソルを宣言して開きます。

INSERT を実行するたびに、buffer の現在の内容が BLOB 列に挿入されます。 INSERT 文と INSERT 文の間に buffer に新しいデータを挿入します。 バッファの内容がすべて BLOB に挿入されるまで、INSERT を繰り返してください。

INSERT CURSOR を使用するには INSERT 特権が必要です。これは、GRANT 文と REVOKE文で制御されるテーブルに対する特権です。

例 次の埋め込み SQL 文は、BLOB カーソルに挿入するデータを指定します。

EXEC SQLINSERT CURSOR BC VALUES (:line INDICATOR :len);

参照 CLOSE (BLOB), DECLARE CURSOR (BLOB), FETCH (BLOB), OPEN (BLOB)

引数 説明

cursor BLOB カーソル名

VALUES 挿入するバッファ変数の名前と長さを指定する句

:buffer 挿入する情報が収められているホスト変数バッファ名

INDICATOR バッファ内のデータ長が後に続くことを示します。

:bufferlen 挿入するバッファの長さ(バイト数)

第 2 章 S Q L 文と関数のリファレンス 2-105

Page 116: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

MAX( )

列の 大値を抽出します。 gpre、DSQL、isql で使用できます。

構文 MAX ([ALL] val | DISTINCT val)

説明 MAX() は、NULL 値を除く、指定した列の 大値を返す集計関数です。 有効な行の数が 0の場合、MAX() は NULL 値を返します。

CHAR、VARCHAR、BLOB のテキスト列に対して MAX() を実行した場合は、その列に使用するキャラクタセットと照合順序に応じた 大値が返されます。 データベース全体のデフォルトキャラクタセットを設定するには、CREATE DATABASE の DEFAULT CHARACTER SET 句を使用します。列レベルの照合順序を設定するには、CREATE TABLE の COLLATE 句を使用します。

例 次の埋め込み SQL 文は、SUM()、AVG()、MIN()、MAX() の使い方を示したものです。

EXEC SQLSELECT SUM (BUDGET), AVG (BUDGET), MIN (BUDGET), MAX (BUDGET)FROM DEPARTMENTWHERE HEAD_DEPT = :head_deptINTO :tot_budget, :avg_budget, :min_budget, :max_budget;

参照 AVG( ), COUNT( ), CREATE DATABASE, CREATE TABLE, MIN( ), SUM( )

MIN( )

列の 小値を抽出します。 gpre、DSQL、isql で使用できます。

構文 MIN ([ALL] val | DISTINCT val)

説明 MIN() は、NULL 値を除く、指定した列の 小値を返す集計関数です。 有効な行の数が 0の場合、MIN() は NULL 値を返します。

引数 説明

ALL 列に収められているすべての値を探します。

DISTINCT 重複値を除外してから 大値を探します。

val 列、定数、ホスト言語変数、式、非集計関数、UDF のいずれか。

引数 説明

ALL 列に収められているすべての値を探します。

DISTINCT 重複値を除外してから 小値を探します。

val 列、定数、ホスト言語変数、式、非集計関数、UDF のいずれか。

2-106 言語リファレンス

Page 117: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

CHAR、VARCHAR、BLOB のテキスト列に対して MIN() を実行した場合は、その列に使用するキャラクタセットと照合順序に応じた 小値が返されます。 データベース全体のデフォルトキャラクタセットを設定するには、CREATE DATABASE の DEFAULT CHARACTER SET 句を使用します。列レベルの照合順序を設定するには、CREATE TABLE の COLLATE 句を使用します。

例 次の埋め込み SQL 文は、SUM()、AVG()、MIN()、MAX() の使い方を示したものです。

EXEC SQLSELECT SUM (BUDGET), AVG (BUDGET), MIN (BUDGET), MAX (BUDGET)FROM DEPARTMENTWHERE HEAD_DEPT = :head_deptINTO :tot_budget, :avg_budget, :min_budget, :max_budget;

参照 AVG( ), COUNT( ), CREATE DATABASE, CREATE TABLE, MAX( ), SUM( )

NULLIF( )

NULLIF 関数は、引数が等しい場合は NULL 値を返し、そうでない場合は 初の引数の値を返します。

構文 NULLIF (<expression1>, <expression2>)

説明 COALESCE 式と NULLIF 式は、NULL 状態を含む CASE 式でよく使用される省略形式です。COALESCE 式は、いくつかの値式で構成されます。 その結果は、非 NULL になる 初の値式になります。 非 NULL になる値式がない場合、COALESCE 式の結果は NULL になります。

NULLIF 式は、2 つの値式で構成されます。 2 つの式が等しくない場合、NULLIF 式の結果は初の値式になります。 そうでない場合は、NULL になります。

例 次の例は、employee.ib サンプルデータベースを使用して、CASE の使い方を示します。

select NULLIF(department, head_dept) from department

OPEN

カーソルの宣言に基づいて指定した行を抽出します。 gpre、DSQL で使用できます。

構文 SQL の場合:

OPEN [TRANSACTION transaction] cursor;

DSQL の場合:

OPEN [TRANSACTION transaction] cursor [USING SQL DESCRIPTOR xsqlda]

BLOB の場合: OPEN (BLOB) を参照してください。

引数 説明

TRANSACTION transaction OPEN の実行を制御するトランザクション名

cursor 開く宣言済みカーソル名

USING DESCRIPTOR xsqlda 拡張デスクリプタエリア(XSQLDA)を使用して、作成した文のパラメータに対応する値を渡します。

第 2 章 S Q L 文と関数のリファレンス 2-107

Page 118: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

説明 OPEN は、DECLARE CURSOR 文で指定した検索条件を評価します。 その結果選択され

た行は、カーソルの有効セットになります。

カーソルは、DECLARE CURSOR 文の SELECT 式で抽出された一定順序の行セットを指示する一方向ポインタです。 カーソルは、抽出した行を順次アクセスして更新するために使用します。CURSOR 文には、次の 4 種類があります。

例 次の埋め込み SQL 文は、カーソルを開きます。

EXEC SQL OPEN C;

参照 CLOSE, DECLARE CURSOR, FETCH

OPEN (BLOB)

宣言済みの BLOB カーソルを開き、読み込みまたは挿入ができるように準備します。 gpre で使用できます。

構文 OPEN [TRANSACTION name] cursor {INTO | USING} :blob_id;

説明 OPEN は、BLOB データの読み込みまたは挿入に使用する宣言済みカーソルを作成しま

す。 BLOB ID の値は、DECLARE CURSOR 文で宣言したカーソルが INSERT BLOB 型か READ BLOB 型かによって決まります。

• READ BLOB カーソルの場合は、外部の TABLE カーソルから blob_id を抽出します。

段階 文 用途

1 DECLARECURSOR

カーソルを宣言します。カーソルの対象となる抽出行は、SELECT 文によって決まります。

2 OPEN DECLARE CURSOR によって抽出する行を指定します。 抽出された行は、カーソルの有効セットと呼ばれます。

3 FETCH 有効セットの先頭行から順に、現在の行を抽出します。

• FETCH 文を実行するたびに、カーソルが 1 行ずつ前進します。

4 CLOSE カーソルを閉じてシステムリソースを解放します。

引数 説明

TRANSACTION name 開いているカーソルの対象となるトランザクションを指定します。デフォルト: デフォルトのトランザクション

cursor BLOB カーソル名

INTO | USING BLOB カーソルの型に応じて、次のいずれかを指定します。

INTO: INSERT BLOB カーソルに使用します。

USING: READ BLOB カーソルに使用します。

blob_id BLOB 列の識別子

2-108 言語リファレンス

Page 119: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

• INSERT BLOB カーソルの場合は、システムが返す blob_id を使用します。

例 次の埋め込み SQL 文は、BLOB カーソルを宣言して開きます。

EXEC SQLDECLARE BC CURSOR FOR INSERT BLOB PROJ_DESC INTO PRJOECT;

EXEC SQL OPEN BC INTO :blob_id;

参照 CLOSE (BLOB), DECLARE CURSOR (BLOB), FETCH (BLOB),INSERT CURSOR (BLOB)

PREPARE

実行する動的 SQL(DSQL)文を作成します。 gpre で使用できます。

構文 PREPARE [TRANSACTION transaction] statement[INTO SQL DESCRIPTOR xsqlda] FROM {:variable | 'string'};

説明 PREPARE は、次の動作を行って、繰り返し実行できる DSQL 文を作成します。

• 文をチェックし、構文エラーがないことを確認します。

• 任意指定入力の動的パラメータのデータ型を判定します。

• 文の実行を 適化します。

• EXECUTE で実行できるように、文をコンパイルします。

PREPARE は、実行可能な状態に DSQL 文を準備する文の 1 つです。

引数 説明

TRANSACTION transaction 文の実行を制御するトランザクション名

statement その後の DESCRIBE および EXECUTE 文で使用できるように作成した文のエイリアスを指定します。

INTO xsqlda 作成した文の選択リスト列の記述内容を収める XSQLDA を指定します。

:variable | `string’ 作成する DSQL 文。ホスト言語変数または文字列定数を指定できます。

文 用途

PREPARE 実行する DSQL 文を作成します。

DESCRIBE 文に関する情報を XSQLDA に記述します。

EXECUTE 作成した文を実行します。

EXECUTE IMMEDIATE DSQL 文を作成し、一度だけ実行してから破棄します。

第 2 章 S Q L 文と関数のリファレンス 2-109

Page 120: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

作成した文は、現在のセッション中に何度でも実行することができます。 一度だけ作成して実行する場合は、EXECUTE IMMEDIATE を使用します。

statement には、作成する DSQL 文のシンボル名を設定します。 これは、ホスト言語変数として宣言される名前ではありません。 gpre では、C プログラムを除き、statement に指定した名前の大文字と小文字が区別されません。たとえば、"B" と "b" は同じ文字と見なされます。 C プログラムの場合は、gpre -either_case スイッチを使用すると、前処理での大文字と小文字の区別が有効になります。

任意指定の INTO 句を使用すると、作成した文の選択リスト内の列のデータ型、長さ、名前などの情報が、拡張デスクリプタエリア(XSQLDA)に収められます。 INTO 句は、SELECT 文を作成する場合にのみ使用します。

メモ INTO 句のかわりに DESCRIBE 文を使用して、選択リストを XSQLDA に記述できます。

FROM 句は、PREPARE で作成する DSQL 文を指定します。 ホスト言語変数または引用符で囲んだ文字列定数を指定します。 作成できる DSQL 文は、SQL データ定義文、データ操作文、トランザクション制御文です。

例 次の埋め込み SQL 文は、ホスト変数の文から DSQL 文を作成します。 任意指定の INTO句を使用しているため、ホスト変数の DSQL 文が SELECT であることがわかります。

EXEC SQLPREPARE Q INTO xsqlda FROM :buf;

メモ 上の文は、次の方法で作成することもできます。

EXEC SQL PREPARE Q FROM :buf;

EXEC SQL DESCRIBE Q INTO SQL DESCRIPTOR xsqlda;

参照 DESCRIBE, EXECUTE, EXECUTE IMMEDIATE

RELEASE SAVEPOINT

構文 RELEASE SAVEPOINT savepoint_name

説明 セーブポイントを解放すると、識別子で指定したセーブポイントが破棄されますが、その

セーブポイントの作成以後に実行した作業には影響しません。

参照 SAVEPOINT, ROLLBACK

REVOKE

指定したデータベースオブジェクトに対するユーザーの特権を取り消します。 gpre、DSQL、isql で使用できます。

REVOKE [GRANT OPTION FOR] privilege ON [TABLE] {tablename | viewname}FROM {object | userlist | rolelist | GROUP UNIX_group}

| EXECUTE ON PROCEDURE procname FROM {object | userlist}| role_granted FROM {PUBLIC | role_grantee_list}};

privileges = ALL [PRIVILEGES] | privilege_list

privilege_list = {

2-110 言語リファレンス

Page 121: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

SELECT | DELETE | INSERT| ENCRYPT ON ENCRYPTION| DECRYPT| UPDATE [(col [, col …])]| REFERENCES [(col [, col …])]

}[, privilege_list …]

object = {PROCEDURE procname

| TRIGGER trigname | VIEW viewname| PUBLIC

}[, object …]

userlist = [USER] username [, [USER] username …]

rolelist = rolename [, rolename …]

role_granted = rolename [, rolename …]

role_grantee_list = [USER] username [, [USER] username …]

重要 DSQL に渡す SQL 文で使用する場合は、ターミネータのセミコロンを省略してください。

C か C++ で記述した埋め込みアプリケーションと isql では、セミコロンがターミネータに

なるので省略できません。

説明 REVOKE は、ユーザーまたは他のデータベースオブジェクトから特権を取り消します。 特権とは、特定の操作を実行できるユーザーの権限のことです。 次の表は、使用可能な特権を

まとめたものです。

引数 説明

privilege_list 許可する特権の名前のリスト。指定できる値は、SELECT、DELETE、INSERT、ENCRYPT ON ENCRYPTION、DECRYPT、UPDATE、および REFERENCES

GRANT OPTION FOR REVOKE 文で指定した特権の付与権限を userlist から取り消します。object と同時には使用できません

col 特権を取り消す対象となる列

tablename 特権を取り消す対象となる既存のテーブル名

viewname 特権を取り消す対象となる既存のビュー名

GROUP unix_group (UNIX システムのみ)/etc/group に定義されているグループ名

object 特権を取り消されるユーザーか既存のデータベースオブジェクト名

userlist 特権を取り消されるユーザーのリスト

rolename CREATE ROLE 文で作成された既存のロール名

role_grantee_list ロール(rolename)が与えられているユーザーのリスト。ユーザーは、InterBase のセキュリティデータベース(デフォルトでは admin.ib)に登録されていなければなりません

第 2 章 S Q L 文と関数のリファレンス 2-111

Page 122: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

GRANT OPTION FOR は、ユーザーが他のユーザーに特権を与える権限を取り消します。

REVOKE には、次の制約があります。

• 特権を取り消せるのは、その特権を与えたユーザーだけです。

• データベースオブジェクトに対する同一の特権が、1 人のユーザーに複数のユーザーから

与えられる場合もあります。 いずれかのユーザーが REVOKE を実行すると、そのユーザー

が与えた特権だけが取り消されます。

• PUBLIC によってすべてのユーザーに与えた特権は、全ユーザーを対象とした REVOKEPUBLIC で取り消します。

• ユーザーからロールが取り消される場合、ロールのメンバーとして与えられていた付与権

限を使ってそのユーザーが他のユーザーに許可していた特権も取り消されます。

• REVOKE ENCRYPT ON ENCRYPTION および REVOKE DECRYPT の許可についての詳細は、

『データ定義ガイド』の第 13 章「データの暗号化」を参照してください。

例 次の isql 文は、テーブルに対する SELECT 特権をユーザーから取り消します。

REVOKE SELECT ON COUNTRY FROM MIREILLE;

次の isql 文は、プロシージャに対する EXECUTE 特権を他のプロシージャとユーザーから取り消します。

REVOKE EXECUTE ON PROCEDURE GET_EMP_PROJ FROM PROCEDURE ADD_EMP_PROJ, LUIS;

参照 GRANT

表 2.10 SQL 特権

特権 ユーザー特権の削除

ALL SELECT、DELETE、INSERT、UPDATE、EXECUTE、REFERENCES

SELECT テーブルまたはビューから行を抽出する。

DELETE テーブルまたはビューから行を削除する。

DECRYPT 列を暗号化した後は、データベース所有者や個別のテーブルの所有者は、暗号化列の値にアクセスする必要があるユーザーに暗号解除アクセス権を許可できます。

ENCRYPT ON ENCRYPTION

データベース所有者や個別のテーブルの所有者が特定の暗号化キーを使用して、データベースや列を暗号化できるようにします。SYSDSO(Data SecurityOwner)のみが暗号化アクセス権を許可できます。

INSERT テーブルまたはビューに行を挿入する。

UPDATE テーブルまたはビューの列の現在値を変更する。指定した一部の列に限定することができます。

REFERENCES 外部キーで指定される列を参照できる。少なくとも主キーに含まれるすべての列に REFERENCES 特権を設定しなければなりません。

EXECUTE ストアドプロシージャを実行する。

2-112 言語リファレンス

Page 123: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

ROLLBACK

現在のトランザクションまたはセーブポイントを開始する前の状態にデータベースを復元します。 gpre、DSQL、isql で使用できます。

構文 ROLLBACK [TRANSACTION name] [TO SAVEPOINT name][WORK][RELEASE];

重要 DSQL に渡す SQL 文で使用する場合は、ターミネータのセミコロンを省略してください。

C か C++ で記述した埋め込みアプリケーションと isql では、セミコロンがターミネータに

なるので省略できません。

説明 ROLLBACK は、現在のトランザクションが行った変更を取り消し、トランザクションを

終了します。 プログラムとデータベースとの接続を解除し、システムリソースを解放しま

す。 すべての開かれているデータベースを終了するには、 後の ROLLBACK 文に

RELEASE を指定します。 データベースを必要とするプログラムがなくなると、システム

リソースが解放されます。

TRANSACTION 句は、複数トランザクションの SQL アプリケーションの場合に、ロールバックするトランザクションを指定するために使用します。 省略すると、デフォルトのトランザクションがロールバックされます。 DSQL では使用できません。

メモ RELEASE は SQL でのみ使用可能です。現在のトランザクションの終了後、すべてのデー

タベースとの接続を解除します。 結果的に、データベースの処理が終了することになりま

す。 RELEASE は、旧バージョンの InterBase と互換性がある場合に使用してください。 接続を解除するには、DISCONNECT を使用した方がよいでしょう。

例 次の isql 文は、デフォルトトランザクションをロールバックします。

ROLLBACK;

次の埋め込み SQL 文は、指定したトランザクションをロールバックします。

EXEC SQLROLLBACK TRANSACTION MYTRANS;

参照 COMMIT, DISCONNECT

トランザクションの詳しい制御方法については、『埋め込み SQL ガイド』を参照してください。

引数 説明

TRANSACTION name 複数トランザクションアプリケーションの場合に、ロールバックするトランザクションを指定します。 指定がなければ、デフォルトトランザクションがロールバックされます。

TO SAVEPOINT name ロールバック先のセーブポイントを指定します。

WORK 互換性のための任意指定のキーワードです。

RELEASE 現在のトランザクションを終了し、すべてのデータベースとの接続を解除します(SQL のみ)。

第 2 章 S Q L 文と関数のリファレンス 2-113

Page 124: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

SAVEPOINT

構文 SAVEPOINT savepoint_name

説明 セーブポイントを使用すると、トランザクションを部分的にロールバックできます。 次の形

式の ROLLBACK コマンドを発行することで、指定したセーブポイントを作成した後で行

われた更新をロールバックできます。

ROLLBACK [TRANSACTION transaction_name] TO SAVEPOINT savepoint_name;

トランザクション名が指定されなかった場合は、デフォルトのトランザクションが使用されます。

セーブポイント名には、任意の有効な SQL 識別子を付けることができます。 セーブポイント名は、実行コンテキスト内で一意でなければなりません。 すでに使用されている名前を割り当てると、既存のセーブポイントが解放され、その名前が現在のセーブポイントに適用されます。 たとえば、アプリケーションは実行コンテキストです。同様にトリガーやストアドプロシージャも実行コンテキストです。 したがって、複数のトリガーを含むアプリケーションがある場合、アプリケーション内で SV1 という名前のセーブポイントを作成できます。また、トリガーやストアドプロシージャ内でも同名のセーブポイントを作成できます。

参照 RELEASE SAVEPOINT, ROLLBACK

SELECT

テーブルからデータを抽出します。 gpre、DSQL、isql で使用できます。

構文 SELECT [TRANSACTION transaction][DISTINCT | ALL] {* | val [, val …]}[INTO :var [, :var …]]FROM tableref [, tableref …][WHERE search_condition][GROUP BY col [COLLATE collation] [, col [COLLATE collation] …] [HAVING search_condition] [UNION [ALL] select_expr][PLAN plan_expr][ORDER BY order_list][ROWS value [TO upper_value] [BY step_value][PERCENT][WITH TIES]][FOR UPDATE [OF col [, col …]]];

val = {col [array_dim] | :variable| constant | expr | function| udf ([val [, val …]])| NULL | USER | RDB$DB_KEY | ? } [COLLATE collation] [AS alias]

array_dim = [[x:]y [, [x:]y …]]constant = num | 'string' | charsetname 'string'

function = COUNT (* | [ALL] val | DISTINCT val)| SUM ([ALL] val | DISTINCT val)| AVG ([ALL] val | DISTINCT val)

2-114 言語リファレンス

Page 125: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

| MAX ([ALL] val | DISTINCT val)| MIN ([ALL] val | DISTINCT val)| CAST (val AS datatype)| UPPER (val)| GEN_ID (generator, val)

tableref = joined_table | table | view | procedure[(val [, val …])] [alias]

joined_table = tableref join_type JOIN tablerefON search_condition | (joined_table)

join_type = [INNER] JOIN| {LEFT | RIGHT | FULL } [OUTER]}

search_condition = val operator {val | (select_one)} | val [NOT] BETWEEN val AND val | val [NOT] LIKE val [ESCAPE val] | val [NOT] IN (val [, val …] | select_list) | val IS [NOT] NULL | val {>= | <=} val| val [NOT] {= | < | >} val| {ALL | SOME | ANY} (select_list) | EXISTS (select_expr) | SINGULAR (select_expr) | val [NOT] CONTAINING val | val [NOT] STARTING [WITH] val | (search_condition)

| NOT search_condition | search_condition OR search_condition | search_condition AND search_condition

operator = {= | < | > | <= | >= | !< | !> | <> | !=}

plan_expr = [JOIN | [SORT] [MERGE]] ({plan_item | plan_expr}[, {plan_item | plan_expr} …])

plan_item = {table | alias} {NATURAL | INDEX (index [, index …])| ORDER index}

order_list = {col | int} [COLLATE collation]

[ASC[ENDING] | DESC[ENDING]][, order_list …]

引数 説明

expr 単一の値になる有効な SQL 式

select_one 必ず 1 行だけを返す、1 列に対する SELECT

select_list 0 行以上の行を返す、1 列に対する SELECT

select_expr 0 行以上の行を返す、値のリストに対する SELECT

第 2 章 S Q L 文と関数のリファレンス 2-115

Page 126: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

引数 説明

TRANSACTION transaction 文の実行を制御するトランザクション名(SQL のみ)

SELECT [DISTINCT | ALL] 抽出するデータを指定します。

• DISTINCT は、重複値を返すことを禁止します。

• ALL(デフォルト)は、すべての値を抽出します。

{*|val [, val …]} アスタリスク(*)は、指定したテーブルからすべての列を抽出します。

<val> [, <val> …] は、指定した列、値、式を抽出します。

INTO :var [, var …] 埋め込み SQL の単一行 SELECT 文でのみ使用します。抽出した値の収容先となるホスト言語変数を指定します。

FROM tableref [, tableref …] データの抽出元となるテーブル、ビュー、ストアドプロシージャのリスト。リストには、JOIN による抽出元の結合や、ネストした結合を指定することができます。

table データベースの既存のテーブル名

view データベースの既存のビュー名

procedure SELECT 文と同様の機能を持つ既存のストアドプロシージャ名

alias テーブル、ビュー、または列のエイリアス。<tableref> で宣言したエイリアスは、テーブルやビューの参照に使用することができます。

joined_table JOIN で結合するテーブルを指定します。

join_type 実行する結合のタイプ。 デフォルト: INNER

WHERE search_condition • 一部の行だけを抽出する場合に、行を限定する条件を指定します。

• WHERE 句内に、SELECT 文を入力することもできます。これをサブクエリーと呼びます。

GROUP BY col [, col …] 共通の列値に基づき、関連行のグループに分類します。HAVING と併用します。

COLLATE collation クエリーによって抽出されるデータの照合順序を指定します。

HAVING search_condition GROUP BY と併用し、返される行グループを限定する条件を指定します。

UNION [ALL] • 複数の SELECT 文により生成された結果を、行の重複なしに 1 つの動的なテーブルにまとめることができます。

• ALL オプションを指定すると、同一行がまとめられずに個別に抽出されます。

PLAN plan_expr クエリーの方法を指定することができます。通常、クエリーの方法はクエリー 適化機能により自動的に決められますが、この PLAN を使って指定することもできます。

plan_item アクセスプランに使用するテーブルとインデックスの処理方法を指定します。

2-116 言語リファレンス

Page 127: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

説明 SELECT は、テーブル、ビュー、ストアドプロシージャからデータを抽出します。 SELECT文のさまざまな構文を使用して、次の動作を行うことができます。

• 1 つのテーブルの 1 行、または 1 行の中の任意のデータを取り出します。 この取り出しを単一行 SELECT と呼びます。

埋め込みアプリケーションでは、カーソルコンテキストの外部で実行する SELECT 文は、すべて単一行 SELECT でなければなりません。

• 複数行またはその一部をテーブルから抽出します。

埋め込みアプリケーションで複数行の抽出を行うには、DECLARE CURSOR 文に SELECT を埋め込みます。

isql では、SELECT を使って複数行を直接抽出することができます。

• JOIN によって結合したテーブルから、関連した行またはその一部を抽出します。

• UNION によって合併したテーブルから、すべての行またはその一部を抽出します。

• 大きな結果セットの一部またはその連続した部分を返します。特に、Web 開発者に便利で

す。

SELECT 文は、SELECT 句と FROM 句の 2 つの必須項目と、他の任意項目で構成されます。任意項目には、INTO、WHERE、GROUP BY、HAVING、UNION、PLAN、ORDER BY、ROWS があります。

SELECT 文は、使用頻度が高い複雑な文なので、このマニュアルでは上の説明にとどめます。 isql での使い方については『操作ガイド』を、 SELECT 文と各句の詳細は、『埋め込み SQL ガイド』を参照してください。

SELECT の構文についての注意

• 配列を宣言する場合は、太字で示されている も外側のかっこを入力しなければなりませ

ん。 たとえば、次の文は、各要素が VARCHAR(6) の 5 × 5 の 2 次元配列を作成します。

my_array = varchar(6)[5,5]

ORDER BY order_list 抽出行を返す順序を指定します。列名または列の順序値、および指定のソート順(ASC または DESC)のいずれかで順序を指定できます。

ROWS value [TO upper_value] [BY step_value][PERCENT][WITH TIES]

• value は、単独で使用される場合は、返される行の総数。

• value は、TO とともに使用される場合は、返される 初の行の番号。

• value は、PERCENT とともに使用される場合は、パーセント。

• upper_value は、返される 後の行または 高のパーセンテージ値。

• step_value = n の場合は、n 行ごとの行、またはパーセンテージが n である行をすべて返す。

• PERCENT を指定すると、前に ROWS で指定した行の値がすべてパーセンテージに変換される。

• WITH TIES は、並べ替えられたシーケンス内の最後の値が結果セットの後続の行内の値と同じ場合に、余分な重複行を返す。ORDER BY と組み合わせて使用する必要がある。

FOR UPDATE DECLARE CURSOR 文の SELECT 句の後に指定され、WHERE CURRENT OF 句で更新できる列を指定します。

引数 説明

第 2 章 S Q L 文と関数のリファレンス 2-117

Page 128: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

添字が 1 以外から始まる配列を指定するにはコロン(:)を使用します。次の文で作成

される整数配列は、添字が 10 から始まり、20 で終わります。

my_array = integer[20:30]

• SQL と isql では、val にパラメータのプレースホルダ(?)を使用できません。

• DSQL と isql では、val に変数を使用することはできません。

• BLOB 値では、COLLATE 句を使用できません。

重要 DSQL に渡す SQL 文で使用する場合は、ターミネータのセミコロンを省略してください。

C か C++ で記述した埋め込みアプリケーションと isql では、セミコロンがターミネータに

なるので省略できません。

例 次の isql 文は、テーブルから列を選択します。

SELECT JOB_GRADE, JOB_CODE, JOB_COUNTRY, MAX_SALARY FROM PROJECT;

次の isql 文は、すべての列と行をテーブルから選択するワイルドカード(*)を使用しています。

SELECT * FROM COUNTRIES;

次の埋め込み SQL 文は、WHERE 句に指定した検索条件に適合するすべての列をカウントする集計関数を使用しています。

EXEC SQLSELECT COUNT (*) INTO :cnt FROM COUNTRYWHERE POPULATION > 5000000;

次の isql 文は、SELECT 句でテーブルエイリアスを指定し、WHERE 句に指定した検索条件に適合する列の判定に応用しています。

SELECT C.CITY FROM CITIES CWHERE C.POPULATION < 1000000;

次の isql 文は、2 つの列を選択し、2 番めの列に基づいて抽出行の順序を入れ換えます。

SELECT CITY, STATE FROM CITIESORDER BY STATE;

次の isql 文は、左外部結合を行う LEFT JOIN を実行します。

SELECT CITY, STATE_NAME FROM CITIES C

LEFT JOIN STATES S ON S.STATE = C.STATEWHERE C.CITY STARTING WITH 'San';

次の isql 文は、インデックスに基づく順序で値を抽出する 適化したクエリープランを指定します。

SELECT * FROM CITIESPLAN (CITIES ORDER CITIES_1);ORDER BY CITY

次の isql 文は、2 つのインデックス列で 3 つのテーブルの結合を行う 適化したクエリープランを指定します。

SELECT * FROM CITIES C, STATES S, MAYORS M WHERE C.CITY = M.CITY AND C.STATE = M.STATEPLAN JOIN (STATE NATURAL, CITIES INDEX DUPE_CITY, MAYORS INDEX MAYORS_1);

2-118 言語リファレンス

Page 129: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

次の例は、2 つのシステムテーブル RDB$CHARACTER_SETS と RDB$COLLATIONS にクエリーを行って、使用可能なキャラクタセットとその ID 番号、1 文字のバイト数、および照合順序を表示します。 ORDER BY 句で列の順序値を使用しています。

SELECT RDB$CHARACTER_SET_NAME, RDB$CHARACTER_SET_ID,RDB$BYTES_PER_CHARACTER, RDB$COLLATION_NAME

FROM RDB$CHARACTER_SETS JOIN RDB$COLLATIONSON RDB$CHARACTER_SETS.RDB$CHARACTER_SET_ID =

RDB$COLLATIONS.RDB$CHARACTER_SET_IefDORDER BY 1, 4;

次の例では、 高の成果をあげた販売チームのメンバーに報酬を与え、 低の成果に終わったメンバーを解雇します。この例では、Web 開発者向けに、結果セットを半分に分割して表示する方法を示しています。

SELECT SALESMAN, SALES_DOLLARS, SALES_REGION FROM SALESPEOPLE ORDER BY SALES_DOLLARS DESC ROWS 1 TO 50;

SELECT SALESMAN, SALES_DOLLARS, SALES_REGION FROM SALESPEOPLE ORDER BY SALES_DOLLARS DESC ROWS 50 TO 100 WITH TIES;

売上上位の販売員 100 人に 15 % のボーナスを支給します。

UPDATE SALESPEOPLE SET SALES_BONUS = 0.15 * SALES_DOLLARS ORDER BY SALES_DOLLARS DESC ROWS 100 WITH TIES;

売上が も低い販売員の 5 % を削除します。

DELETE FROM SALESPEOPLE ORDER BY SALES_DOLLARS ROWS 5 PERCENT WITH TIES;

参照 DECLARE CURSOR, DELETE, INSERT, UPDATE

DECLARE CURSOR と SELECT を使った埋め込みプログラミングによるデータ抽出については、『埋め込み SQL ガイド』を参照してください。

SET DATABASE

データベースアクセスに使用するデータベースハンドルを宣言します。 gpre で使用できます。

構文 SET {DATABASE | SCHEMA} dbhandle = [GLOBAL | STATIC | EXTERN][COMPILETIME][FILENAME] 'dbname'

[USER 'name' PASSWORD 'string'][RUNTIME [FILENAME] {'dbname' | :var}[USER {'name' | :var} PASSWORD {'string' |:var}]];

第 2 章 S Q L 文と関数のリファレンス 2-119

Page 130: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

説明 SET DATABASE は、指定したデータベースのデータベースハンドルを宣言し、データベー

スとハンドルを対応させます。 コンパイル時と実行時に使用するデータベースとして、それ

ぞれ違うものを指定することもできます。 複数のデータベースを同時にアクセスするアプ

リケーションの場合は、データベースごとに SET DATABASE 文を使用し、各データベー

スのハンドルを設定します。

dbhandle は、アプリケーションが定義したデータベースハンドル名です。 ハンドル名は、データベース名を略記したものを使用するのが一般的です。 宣言したデータベースハンドルは、CONNECT 文、COMMIT 文、ROLLBACK 文で使用できるようになります。 同名のテーブルを持つ複数のデータベースを接続した場合も、ハンドル名でテーブルを識別することができます。

dbname は、dbhandle に対応するデータベースを指定する、プラットフォーム別のファイル指定です。 データベースが置かれているサーバーのファイル表記規則にしたがいます。

引数 説明

dbhandle 指定したデータベースのエイリアス。

• プログラム内で一意でなければなりません。

• データベースハンドルをサポートする SQL 文で使用します。

GLOBAL (デフォルト)データベース宣言は、すべてのモジュールで使用することができます。

STATIC データベース宣言のスコープが現在のモジュールに限定されます。

EXTERN ハンドル名を宣言しているモジュールでなく、他のモジュールのデータベース宣言を参照します。

COMPILETIME 前処理時に列参照に使用するデータベースを指定します。

• SET DATABASE で指定したデータベースが 1 つだけの場合は、実行時とコンパイル時の両方で使用されます。

'dbname' dbhandle に対応するデータベースの格納場所とパス名(指定方法はプラットフォームごとに異なる)。

RUNTIME 実行時に使用するデータベースを指定します。前処理時とは異なるデータベースを指定できます。

:var データベースの指定内容、ユーザー名、パスワードを収めているホスト言語変数。

USER 'name' データベースがあるサーバーにおける有効なユーザー名を指定します。

• PASSWORD と併用して、サーバー上のデータベースへのアクセスを取得します。

• PC クライアント接続では必須、それ以外の場合は任意指定です。

PASSWORD 'string' データベースがあるサーバーにおける有効なパスワードを指定します。

• USER と併用して、サーバー上のデータベースへのアクセスを取得します。

• PC クライアント接続では必須、それ以外の場合は任意指定です。

2-120 言語リファレンス

Page 131: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

GLOBAL、STATIC、EXTERN は、データベース宣言のスコープを指定する任意入力のパラメータです。 デフォルトの GLOBAL は、アプリケーション内のすべてのコードモジュールで使用できることを示します。 STATIC は、ハンドルを宣言するコードモジュールだけで使用できることを示します。 EXTERN は、他のモジュールで参照することを指定します。

COMPILETIME と RUNTIME は、2 つのデータベースに同一のデータベースハンドルを割り当てる、任意入力のパラメータです。アプリケーションの前処理時に使用するデータベースと、ユーザーがアプリケーション実行時に使用するデータベースを、1 つのハンドルで参照できます。 データベースの指定を省略したり、コンパイル時のデータベースしか指定しなかった場合は、前処理と実行の両方に同一のデータベースが使用されます。

USER と PASSWORD は、すべての PC クライアントアプリケーションに必須のパラメータです。それ以外のリモート接続については任意指定です。 ユーザー名とパスワードは、セキュリティデータベースと照合され、一致する場合はリモート接続が成功します。

例 次の埋め込み SQL 文は、データベースのハンドルを宣言します。

EXEC SQLSET DATABASE DB1 = 'employee.ib';

次の埋め込み SQL 文は、コンパイル時と実行時のデータベースを宣言し、 実行時のデータベースをホスト言語変数で指定します。

EXEC SQL SET DATABASE EMDBP = 'employee.ib' RUNTIME :db_name;

参照 COMMIT, CONNECT, ROLLBACK, SELECT

セキュリティデータベースの詳細は、『操作ガイド』を参照してください。

SET GENERATOR

既存のジェネレータに新しい値を設定します。 gpre、DSQL、isql で使用できます。

構文 SET GENERATOR name TO int;

重要 DSQL に渡す SQL 文で使用する場合は、ターミネータのセミコロンを省略してください。

C か C++ で記述した埋め込みアプリケーションと isql では、セミコロンがターミネータに

なるので省略できません。

説明 SET GENERATOR は、新規ジェネレータの開始値を初期化または既存のジェネレータの

値を再設定します。 ジェネレータとは、GEN_ID() 関数によって出力される、連続した一意

な値のことです。 新規ジェネレータを初期化しなかった場合は、デフォルトの 0 が開始値

になります。

int には、ジェネレータに設定する値を指定します。 GEN_ID() 関数によって列の値を挿入または更新すると、GEN_ID() の step パラメータで指定した増減単位を int の値に加えた値が、挿入後や更新後の値になります。 DECIMAL(18,0) で格納できる値であれば、SET GENERATOR 文の値として指定できます。

引数 説明

name 既存のジェネレータ名

int ジェネレータに設定する値を –263 ~ 263 – 1 の範囲内で指定します。

第 2 章 S Q L 文と関数のリファレンス 2-121

Page 132: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

ジェネレータは 64 ビット値を返し、(増減単位を 1 とした場合)264 回の呼び出しで一巡します。 ジェネレータが返す値を保持する変数には、ISC-INT64 型を使用してください。

ヒント ジェネレータが 初に出力する値を 1 に設定するには、SET GENERATOR の開始値を 0に設定し、GEN_ID() の増減単位を 1 に設定します。

重要 PRIMARY KEY か UNIQUE の整合性制約が設定されている列の値を出力するジェネ

レータを再設定する場合は、既存の列値と重複しないように注意する必要があります。重

複すると、その後の挿入または更新ができなくなります。

例 次の isql 文は、ジェネレータの値を 1000 に設定します。

SET GENERATOR CUST_NO_GEN TO 1000;

ジェネレータの増減単位が 1 に設定されている場合、GEN_ID() で初めてジェネレータを呼び出したときの戻り値は 1001 になります。

参照 CREATE GENERATOR, CREATE PROCEDURE, CREATE TRIGGER, GEN_ID( )

SET NAMES

データベースとの接続に使用する有効なキャラクタセットを指定します。 gpre、isql で使用できます。

構文 SET NAMES [charset | :var];

重要 DSQL に渡す SQL 文で使用する場合は、ターミネータのセミコロンを省略してください。

C か C++ で記述した埋め込みアプリケーションと isql では、セミコロンがターミネータに

なるので省略できません。

説明 SET NAMES は、データベースと接続するのに使用する、有効なキャラクタセットを指定

します。 サーバー上のデータベースに対応するデフォルトのキャラクタセットと、クライア

ント上のアプリケーションが使用するキャラクタセットとを変換するために使用します。

SET NAMES は、その影響を受ける SET DATABASE 文や CONNECT 文より前に実行しなければなりません。

ヒント キャラクタセットを対話型で設定するには、ホスト言語変数を指定した SET NAMES を埋

め込みアプリケーションで実行します。

InterBase が認識できるキャラクタセットについては、第 7 章「キャラクタセットと照合順序」を参照してください。キャラクタセットによっては、使用できる照合順序の種類が制限されます。 照合順序は、列データを選択、挿入、更新するときに指定できます。

引数 説明

charset プロセスに使用する有効なキャラクタセットを識別する名前です。デフォルト:NONE

:var 既知のキャラクタセット名を識別する文字列を含むホスト変数(SQL のみ)

• キャラクタセット名として宣言しなければなりません。

• SQL のみ

2-122 言語リファレンス

Page 133: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

重要 デフォルトのキャラクタセットを指定しない場合は、NONE に設定されます。 NONE のキャラクタセットを使用すると、列のキャラクタセットに条件がなくなり、データは入力

したとおりに格納、抽出されます。 NONE を設定した列には、どのキャラクタセットもロー

ドできますが、他のキャラクタセットを設定した列にはロードできないことがあります。 この場合は、設定元と設定先の間でキャラクタセットの変換は行われず、データの処理中に

エラーが発生します。

例 次の文は、埋め込み SQL アプリケーションで SET NAMES を使用する方法を示したもの

です。

EXEC SQL SET NAMES ISO8859_1;

EXEC SQL SET DATABASE DB1 = 'employee.ib';

EXEC SQL CONNECT;

次の文は、isql で SET NAMES を使用する方法を示したものです。

SET NAMES LATIN1;CONNECT 'employee.ib';

参照 CONNECT, SET DATABASE

キャラクタセットと照合順序の詳細は、『データ定義ガイド』を参照してください。

SET SQL DIALECT

データベースアクセスの SQL ダイアレクトを宣言します。 grpe、isql で使用できます。

構文 SET SQL DIALECT n;

説明 SET SQL DIALECT は、データベースアクセスの SQL ダイアレクトを宣言します。

n は SQL ダイアレクトのタイプで、1、2、または 3 を指定します。ダイアレクトが指定されない場合、デフォルトのダイアレクトは、指定されたコンパイル時データベースのダイアレクトに設定されます。 デフォルトのダイアレクトが、ユーザーによって指定されたダイアレクトと異なる場合は、警告が生成され、デフォルトのダイアレクトはユーザー指定値に設定されます。

引数 説明

n SQL ダイアレクトのタイプ:1、2、3 のいずれか

第 2 章 S Q L 文と関数のリファレンス 2-123

Page 134: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

例 次の埋め込み SQL 文は、SQL ダイアレクト 3 を設定します。

EXEC SQLSET SQL DIALECT 3;

参照 SHOW SQL DIALECT

SET STATISTICS

指定したインデックスの選択性を再計算します。 gpre、DSQL、isql で使用できます。

構文 SET STATISTICS INDEX name;

重要 DSQL に渡す SQL 文で使用する場合は、ターミネータのセミコロンを省略してください。

C か C++ で記述した埋め込みアプリケーションと isql では、セミコロンがターミネータに

なるので省略できません。

説明 SET STATISTICS は、インデックスの選択性を再計算します。 インデックスの選択性とは、

テーブルのアクセス時に InterBase の 適化が判定する一意な値の行数を示す状態です。

この値はメモリに格納され、 適化でアクセスすることができます。クエリーに対する

適な抽出プランを再計算するために使用されます。 インデックスが指示する列値の重複回

数が大きく変化する場合は、インデックスの選択性を定期的に再計算すると、パフォーマ

ンスが向上します。

SET STATISTICS を使用できるのは、インデックスの作成者だけです。

メモ SET STATISTICS 文はインデックスを再作成しません。 インデックスを作り直すには

ALTER INDEX 文を使用します。

例 次の埋め込み SQL 文は、インデックスの選択性を再計算します。

EXEC SQLSET STATISTICS INDEX MINSALX;

参照 ALTER INDEX, CREATE INDEX, DROP INDEX

表 2.11 SQL ダイアレクト

SQL ダイアレクト 用途

1 InterBase 5.5 以前のバージョンとの互換性のため

2 ダイアレクト 1 からダイアレクト 3 に移行するときの変更を示すために使用される暫定的ダイアレクト

3 現在の InterBase。区切り付き識別子、正確な数値、および DATE、TIME、TIMESTAMP データ型を使用できる

引数 説明

name 選択性を再計算する既存のインデックス名

2-124 言語リファレンス

Page 135: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

SET TRANSACTION

トランザクションを起動し、必要であればトランザクション動作を指定できます。 gpre、DSQL、isql で使用できます。

構文 SET TRANSACTION [NAME transaction][READ WRITE | READ ONLY][WAIT | NO WAIT][[ISOLATION LEVEL] {SNAPSHOT [TABLE STABILITY]

| READ COMMITTED [[NO] RECORD_VERSION]}][RESERVING reserving_clause

| USING dbhandle [, dbhandle …]];

reserving_clause = table [, table …][FOR [SHARED | PROTECTED] {READ | WRITE}] [, reserving_clause]

重要 DSQL に渡す SQL 文で使用する場合は、ターミネータのセミコロンを省略してください。

C か C++ で記述した埋め込みアプリケーションと isql では、セミコロンがターミネータに

なるので省略できません。

説明 SET TRANSACTION は、トランザクションを起動します。任意の引数を指定すると、ア

クセス可能なデータベースの範囲、ロック競合時の動作、同一データをアクセスする並列

トランザクションに対する動作レベルなどを指定することができます。 テーブルのロック

を予約することもできます。 マルチデータベースの SQL アプリケーションでは、トランザ

クションのアクセス範囲を一部の接続データベースに限定できます。

重要 gpre -manual スイッチで前処理するアプリケーションの場合は、SET TRANSACTION文により、各トランザクションを明示的に起動しなければなりません。

引数 説明

NAME transaction トランザクション名を指定します(SQL のみ)。

• transaction は、初期化された宣言済みホスト言語変数です。

• SQL のみ

READ WRITE (デフォルト)テーブルの読み取りと書き込みができるトランザクションであることを指定します。

READ ONLY テーブルの読み取りだけが可能なトランザクションであることを指定します。

WAIT (デフォルト)他のトランザクションとロックが競合した場合、アクセスできるまで待機することを指定します。

NO WAIT ロックが競合した場合、即座にエラーを返すことを指定します。

ISOLATION LEVEL 同一のテーブルを、他の並列トランザクションと同時にアクセスしたときの排他レベルを指定します。デフォルト:SNAPSHOT

RESERVINGreserving_clause

トランザクション起動時に、テーブルに対するロックを予約します。

USING dbhandle[, dbhandle …]

アクセス範囲を一部のデータベースに限定します(SQL のみ)。

第 2 章 S Q L 文と関数のリファレンス 2-125

Page 136: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

SET TRANSACTION では、任意入力の NAME 句を指定しない限り、デフォルトトランザクションが動作の対象となります。 複数のトランザクションを指定し、1 つのアプリケーションで同時に使用することができます。 トランザクション名は、コンパイル時にホスト言語変数として宣言しておかなければなりません。 このため、DSQL では動的変数としてトランザクション名を指定することはできません。

READ WRITE の指定がなければ、読み取りと書き込みの両方が可能なトランザクションとして設定されます。 読み取り専用のトランザクションを設定するには、READ ONLY パラメータを指定します。

並列トランザクションが同一のテーブルデータを更新する場合は、 初の更新だけが実行されます。 他の更新や削除を行うトランザクションは、制御権を持っているトランザクションがロールバックまたはコミットされるまで待機しなければなりません。 デフォルトの WAIT を使用したトランザクションは、制御権を持っているトランザクションが終了するまで待機します。 待機せずに即時に実行し、ロックの競合エラーを報告するトランザクションを設定するには、NO WAIT パラメータを指定します。

ISOLATION LEVEL は、同一のテーブルをアクセスする並列トランザクションに対する動作を指定します。 指定がなければ、繰り返し読み込むことができるデータベースビューを起動と同時に出力する、 SNAPSHOT トランザクションとして設定されます。 他の並列トランザクションが行った変更は、参照できません。

SNAPSHOT TABLE STABILITY は、トランザクションでのテーブルへの書き込みを禁止し、データベースを繰り返して読み取れる読み取り専用トランザクションを指定します。

READ COMMITTED は、他の並列トランザクションが行った 新の変更を参照できるトランザクションを指定します。 他のトランザクションと競合しなければ、行の更新を行うこともできます。 他のトランザクションが行った変更は、コミットされるまでは参照できません。 READ COMMITTED には、次の任意入力パラメータがあります。

• NO RECORD_VERSION :(デフォルト)行の 新バージョンだけを読み込みます。 WAIT ロックオプションを指定した場合、 新バージョンがコミットまたはロールバッ

クされるまで待機し、その後で読み込みを行います。

• RECORD_VERSION: 新の未コミットバージョンがディスクに格納されていても、コ

ミット済みの 新バージョンだけを読み込みます。

RESERVING 句は、テーブルを予約するために使用します。実際の動作時でなく、トランザクション起動時のアクセスレベルを指定することができます。 トランザクションの起動時にテーブルを予約しておくと、デッドロックが発生する恐れが少なくなります。

USING 句は、SQL だけに使用できます。トランザクションがアクセスできるデータベースの数を限定し、システムリソースを保持することができます。

例 次の埋め込み SQL 文は、READ COMMITTED の排他レベルを持つデフォルトトランザ

クションを設定します。 他のトランザクションと更新動作が競合した場合は、 初にロック

をかけたトランザクションがコミットまたはロールバックされるまで待機します。

EXEC SQL SET TRANSACTION WAIT ISOLATION LEVEL READ COMMITTED;

次の埋め込み SQL 文は、指定したトランザクションを起動します。

EXEC SQLSET TRANSACTION NAME T1 READ COMMITTED;

次の埋め込み SQL 文は、3 つのテーブルを予約します。

EXEC SQL

2-126 言語リファレンス

Page 137: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

SET TRANSACTION NAME TR1ISOLATION LEVEL READ COMMITTED NO RECORD_VERSION WAITRESERVING TABLE1, TABLE2 FOR SHARED WRITE,

TABLE3 FOR PROTECTED WRITE;

参照 COMMIT, ROLLBACK, SET NAMES

トランザクションの詳細は、『埋め込み SQL ガイド』を参照してください。

SHOW SQL DIALECT

クライアントの現在の SQL ダイアレクト設定と、データベースの SQL ダイアレクト値を返します。 grpe、isql で使用できます。

構文 SHOW SQL DIALECT;

説明 SHOW SQL DIALECT は、クライアントの現在の SQL ダイアレクト設定と、データベー

スの SQL ダイアレクト値を示す 1、2、または 3 を返します。

例 次の埋め込み SQL 文は、SQL ダイアレクトを返します。

EXEC SQLSHOW SQL DIALECT;

参照 SET SQL DIALECT

SUM( )

指定した列の数値を合計します。 gpre、DSQL、isql で使用できます。

構文 SUM ([ALL] val | DISTINCT val)

表 2.12 SQL ダイアレクト

SQL ダイアレクト 用途

1 InterBase 5.5 以前のバージョンとの互換性のため

2 ダイアレクト 1 からダイアレクト 3 に移行するときの変更を示すために使用される暫定的ダイアレクト

3 現在の InterBase。区切り付き識別子、正確な数値、および DATE、TIME、TIMESTAMP データ型を使用できる

引数 説明

ALL 列に収められているすべての値を合計します。

DISTINCT 重複値を除外してから合計値を算出します。

val 列、定数、ホスト言語変数、式、非集計関数、数値データ型を返す UDF のいずれか

第 2 章 S Q L 文と関数のリファレンス 2-127

Page 138: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

説明 SUM() は、列の数値を合計する集計関数です。 有効な行がない場合は、NULL 値を返しま

す。

例 次の埋め込み SQL 文は、SUM()、AVG()、MIN()、MAX() の使い方を示したものです。

EXEC SQLSELECT SUM (BUDGET), AVG (BUDGET), MIN (BUDGET), MAX (BUDGET)FROM DEPARTMENTWHERE HEAD_DEPT = :head_deptINTO :tot_budget, :avg_budget, :min_budget, :max_budget;

参照 AVG( ), COUNT( ), MAX( ), MIN( )

UPDATE

テーブル、ビュー、カーソルの有効セットにある行の全体または一部のデータを更新します。 gpre、DSQL、isql で使用できます。

構文 SQL の場合:

UPDATE [TRANSACTION transaction] {table | view}SET col = val [, col = val …][WHERE search_condition | WHERE CURRENT OF cursor][ORDER BY order_list][ROWS value [TO upper_value] [BY step_value][PERCENT][WITH TIES]];

DSQL、isql の場合:

UPDATE {table | view}SET col = val [, col = val …][WHERE search_condition[ORDER BY order_list][ROWS value [TO upper_value] [BY step_value][PERCENT][WITH TIES]]

val = {col [array_dim] | :variable| constant | expr | function| udf ([val [, val …]])| NULL | USER | ?} [COLLATE collation]

array_dim = [[x:]y [, [x:]y …]]constant = num | 'string' | charsetname 'string'

function = CAST (val AS datatype)| UPPER (val)| GEN_ID (generator, val)

expr = 単一の値になる有効な SQL 式

2-128 言語リファレンス

Page 139: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

search_condition = 詳細は CREATE TABLE を参照

UPDATE 文の構文についての注意

• SQL と isql では、val にパラメータのプレースホルダ(?)を使用できません。

• DSQL と isql では、val に変数を使用することはできません。

• BLOB 値では、COLLATE 句を使用できません。

説明 UPDATE は、テーブルやビューの既存行を更新します。 UPDATE は、GRANT および

REVOKE 文で制御するデータベース特権の 1 つです。

検索による更新の場合は、対象となる行を限定する任意入力の WHERE 句を使用することができます。 検索による更新では、配列スライスを更新することはできません。

重要 WHERE 句を指定しない検索更新では、テーブルにあるすべての行が更新されます。

カーソルで位置を指定する更新では、WHERE CURRENT OF 句を使用します。有効セットの現在の行が、1 行ずつ更新されます。

メモ BLOB 列を更新すると、BLOB 全体が新しい値に置き換えられます。

例 次の isql 文は、すべての行に対応する列を更新します。

UPDATE CITIESSET POPULATION = POPULATION * 1.03;

引数 説明

TRANSACTION transaction 文の実行を制御するトランザクション名

table | view 更新する既存のテーブルまたはビューの名前

SET col = val 変更する列、および列に割り当てる値を指定します。

WHERE search_condition 検索を使った更新にのみ使用し、行の検索条件を変更することを指定します。

WHERE CURRENT OF cursor 位置を指定した更新にのみ使用し、カーソルの有効セット内にある現在の行を変更することを指定します。

• DSQL と isql では使用できません。

ORDER BY order_list 抽出行を返す順序を指定します。列名または列の順序値、および指定のソート順(ASC または DESC)のいずれかで順序を指定できます。

ROWS value [TO upper_value] [BY step_value][PERCENT][WITH TIES]

• value は、単独で使用される場合は、返される行の総数。

• value は、TO とともに使用される場合は、返される 初の行の番号。

• value は、PERCENT とともに使用される場合は、パーセント。

• upper_value は、返される 後の行または 高のパーセンテージ値。

• step_value = n の場合は、n 行ごとの行、またはパーセンテージが n である行をすべて返す。

• PERCENT を指定すると、前に ROWS で指定した行の値がすべてパーセンテージに変換される。

• WITH TIES は、並べ替えられたシーケンス内の最後の値が結果セットの後続の行内の値と同じ場合に、余分な重複行を返す。ORDER BY と組み合わせて使用する必要がある。

第 2 章 S Q L 文と関数のリファレンス 2-129

Page 140: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

次の埋め込み SQL 文は WHERE 句を使用し、更新する行の列を限定します。

EXEC SQLUPDATE PROJECTSET PROJ_DESC = :blob_idWHERE PROJ_ID = :proj_id;

参照 DELETE, GRANT, INSERT, REVOKE, SELECT

UPPER( )

文字列中の文字をすべて大文字に変換します。 gpre、DSQL、isql で使用できます。

構文 UPPER (val)

説明 UPPER() は、指定した文字列中の文字をすべて大文字に変換します。 大文字と小文字の区

別がないキャラクタセットに適用した場合は、変化はありません。

例 次の isql 文は、BMatthews というユーザー名を BMATTHEWS に変換します。

UPDATE EMPLOYEESET EMP_NAME = UPPER (BMatthews)WHERE EMP_NAME = 'BMatthews';

次の isql 文は、PROJNO というドメインを作成し、大文字での入力を要求する CHECK 制約を設定します。

CREATE DOMAIN PROJNOAS CHAR(5)CHECK (VALUE = UPPER (VALUE));

参照 CAST( )

WHENEVER

SQLCODE エラーと警告メッセージをトラップします。 gpre で使用できます。

構文 WHENEVER {NOT FOUND | SQLERROR | SQLWARNING}{GOTO label | CONTINUE};

引数 説明

val 列、定数、ホスト言語変数、式、関数、数値データ型を返す UDF のいずれか

引数 説明

NOT FOUND 実行した文の対象となる有効行が 1 行もないことを示す SQLCODE =100 をトラップします。

SQLERROR 文の実行が失敗したことを示す SQLCODE < 0 をトラップします。

2-130 言語リファレンス

Page 141: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

説明 WHENEVER は、SQLCODE エラーと警告メッセージをトラップします。 SQL 文からは、

成功か失敗かを示す SQLCODE が必ず返されます。 SQLCODE = 0 の場合は、正常に実行

されたことを示します。 0 以外の値は、エラーや警告が発生したか、有効データが見つから

なかったことを示します。

WHENEVER には、トラップ後の動作を指定する次のオプションを指定できます。

• GOTO label:アプリケーションのエラー処理ルーチンにジャンプします。

• CONTINUE:トラップした内容を無視します。

WHENEVER を使用すると、エラーや警告の処理が 1 つのルーチンに限定されるので、アプリケーションのサイズを制限することができます。

WHENEVER 文は、エラーが発生する恐れのある SQL 文の前に使用する必要があります。 トラップするための条件ごとに個別の WHENEVER 文が必要です。 WHENEVER の指定がなければ、エラーなどの状態はトラップされません。

ヒント エラー処理ルーチンが無限に繰り返されるのを防ぐには、エラー処理ルーチンの前に

WHENEVER ... CONTINUE 文を使用します。

例 次の埋め込み SQL アプリケーションのコードは、3 つの WHENEVER 文を使用して、エ

ラーと警告の処理ルーチンに分岐するラベルを指定します。

EXEC SQL

WHENEVER SQLERROR GO TO Error; /* すべてのエラーをトラップします */EXEC SQL

WHENEVER NOT FOUND GO TO AllDone; /* SQLCODE = 100 をトラップします */

EXEC SQL

WHENEVER SQLWARNING CONTINUE; /* すべての警告を無視します */

エラー処理とプログラミングの詳細は、『埋め込み SQL ガイド』を参照してください。

SQLWARNING システムの警告メッセージまたは情報メッセージを示す SQLCODE > 0と SQLCODE < 100 をトラップします。

GOTO label 警告やエラーが発生したときに、label で指定したプログラム位置にジャンプします。

CONTINUE 警告やエラーを無視し、処理を続行します。

引数 説明

第 2 章 S Q L 文と関数のリファレンス 2-131

Page 142: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ステートメントと関数のリファレンス

2-132 言語リファレンス

Page 143: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

第 章

第 3 章プロシージャとトリガー

InterBase のプロシージャとトリガー言語は、isql や DSQL のストアドプロシージャとトリ

ガーを記述する完全なプログラミング言語です。 次の要素が含まれます。

• SQL データ操作文: INSERT、UPDATE、DELETE、および単一行 SELECT。

• SQL 仕様の拡張:代入文、フロー制御、コンテキスト変数、イベント通知文、例外、エラー

処理文など

ストアドプロシージャとトリガーはさまざまな方法で、さまざまな用途に使用されますが、

両方ともプロシージャとトリガー言語で記述します。 トリガーとストアドプロシージャは

両方とも、プロシージャ内の、トリガー言語で書かれたどのような文でも利用できます。た

だし、次の例外があります。

• コンテキスト変数 OLD と NEW は、トリガーにしか使用できません。

• 入力パラメータ、出力パラメータ、SUSPEND 文、EXIT 文は、ストアドプロシージャにし

か使用できません。

プロシージャとトリガーの作成と使い方については、『データ定義ガイド』を参照してくだ

さい。 ここでは、プロシージャとトリガー言語に特有な文と、トリガーとプロシージャの特

殊構文について説明します。

トリガーとストアドプロシージャの作成

ストアドプロシージャとトリガーは、それぞれ CREATE PROCEDURE 文と CREATETRIGGER 文で作成します。 どの文も、ヘッダーと本文で構成されます。

ヘッダーの内容は次のとおりです。

• プロシージャまたはトリガーの名前。データベース内で一意なものにします。

• トリガーの場合:

• トリガーを起動させるテーブル名

• トリガーの起動時期を指定する文

第 3 章 プロシージャとトリガー 3-1

Page 144: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

サポートされないステートメントの種類

• ストアドプロシージャの場合:

• 入力パラメータのリストとデータ型(任意項目)

• 呼び出しプログラムに値を返す場合は、出力パラメータのリストおよびデータ型

本文には、次の項目が含まれます。 • ローカル変数とそのデータ型のリスト(任意)

• InterBase のプロシージャとトリガー言語で書かれ、BEGIN と END で囲まれたステートメン

ト ブロック。 ステートメント ブロックそのものに他のブロックを入れることができるの

で、さまざまなレベルのネストを行うことができます。

サポートされないステートメントの種類

ストアドプロシージャおよびトリガー言語には、DSQL や gpre で使用できる文の多くの種

類が含まれていません。 ストアドプロシージャ/ トリガー言語でサポートされないステート

メントの種類は以下のとおりです。

• データ定義言語文: CREATE、ALTER、DROP、DECLARE EXTERNAL FUNCTION、DECLAREFILTER

• トランザクション制御文: SET TRANSACTION、COMMIT、ROLLBACK

• 動的 SQL 文: PREPARE、DESCRIBE、EXECUTE

• CONNECT/DISCONNECT、および別のデータベースへの SQL 文の送信

• GRANT/REVOKE

• SET GENERATOR

• EVENT INIT/WAIT

• BEGIN/END DECLARE SECTION

• BASED ON

• WHENEVER

• DECLARE CURSOR

• OPEN

• FETCH

用語

この章では、次の用語を使用しています。

• ブロック(block):BEGIN と END で囲まれた 1 つ以上の複合文

• 複合文(compound_statement):ブロック、または 1 つのステートメント

• ステートメント(statement):プロシージャ/トリガー言語で記述された 1 つのステートメント

構文は、次の形式で示します。

<block> =BEGIN

<compound_statement>

3-2 言語リファレンス

Page 145: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

代入文

[<compound_statement> …]END

<compound_statement> = <block> | statement;

代入文

入力パラメータ、出力パラメータ、ローカル変数のいずれかに値を代入します。 トリガーと

ストアドプロシージャの両方に使用できます。

構文 variable = <expression>;

説明 代入文は、ローカル変数、入力パラメータ、出力パラメータのいずれかに値を割り当てま

す。 代入する値は、代入文を使用する前に宣言しておかなければなりません。

例 初の文は、x に 9 を代入します。2 番めの文は、x に 2 を掛けた値を y に代入します。 3 番めの文は、算術式の結果(3)を z に代入します。

DECLARE VARIABLE x INTEGER;DECLARE VARIABLE y INTEGER;DECLARE VARIABLE z INTEGER;x = 9;y = 2 * x;z = 4 * x / (y - 6);

参照 DECLARE VARIABLE, 入力パラメータ , 出力パラメータ

BEGIN … END一括して実行する文のブロックを指定します。 トリガーとストアドプロシージャの両方に

使用できます。

構文 <block> =BEGIN

<compound_statement> [<compound_statement> …]

END

<compound_statement> = {<block> | statement;}

説明 プロシージャの本文を構成する文は、BEGING と END で囲まれます。 上の構文に示すよ

うに、ステートメント ブロック自体に他のブロックを入れることができるので、さまざま

なレベルのネストが可能です。

引数 説明

variable ローカル変数、入力パラメータ、または出力パラメータ

expression ユーザー定義関数(UDF)やジェネレータを含む、変数、SQL 動作、式の有効な組み合わせ

第 3 章 プロシージャとトリガー 3-3

Page 146: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

コメント

BEGIN と END の後には、セミコロンを入力しません。 isql の場合、プロシージャ本文の

後に記述する END の後には、セミコロンを使用します。

トリガーの 後に記述する END 文は、トリガーを終了します。 ストアドプロシージャの

後に記述する END 文の動作は、プロシージャのタイプに応じて次のようになります。

• 選択プロシージャでは、 後の END 文は制御をアプリケーションに返し、SQLCODE を100 に設定し、それ以上抽出する行がないことを示します。

• 実行可能プロシージャの場合は、呼び出しアプリケーションに制御を戻し、出力パラメー

タの現在値を返します。

例 次の isql 文は、2 つの BEGIN...END ブロック例を示す DELETE EMPLOYEE プロシー

ジャです。

CREATE PROCEDURE DELETE_EMPLOYEE (EMP_NUM INTEGER) AS

DECLARE VARIABLE ANY_SALES INTEGER;BEGIN

ANY_SALES = 0;. . .IF (ANY_SALES > 0) THENBEGIN

EXCEPTION REASSIGN_SALES;EXIT;END

. . .END

;

参照 データ行が返されないもの , SUSPEND

コメント

プロシージャおよびトリガーのコードに、プログラマのコメントを入力します。 トリガーと

ストアドプロシージャの両方に使用できます。

構文 /* comment_text */

説明 コメントは、コードと同じ行に入力しても、違う行に入力してもかまいません。

入力パラメータや出力パラメータに関するコメントをプロシージャの前に挿入しておく

と、内容がわかりやすくなります。 ローカル変数の宣言文にも、変数の用途を示すコメント

を入力しておくと便利です。

例 次の isql プロシージャ(部分)は、コメントの使い方をいくつか示しています。

/*

引数 説明

comment_text 任意数のコメントテキスト行

3-4 言語リファレンス

Page 147: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

D E C L A R E V A R I A B L E

* Procedure DELETE_EMPLOYEE : Delete an employee. * * Parameters: * employee number * Returns: * -- */CREATE PROCEDURE DELETE_EMPLOYEE (EMP_NUM INTEGER)AS

DECLARE VARIABLE ANY_SALES INTEGER; /* 従業員ごとの販売数 */BEGIN

. . .

DECLARE VARIABLEローカル変数を宣言します。 トリガーとストアドプロシージャの両方に使用できます。

構文 DECLARE VARIABLE var datatype;

説明 ローカル変数は、ストアドプロシージャ内で宣言し、使用します。 プロシージャの外では無

効です。

ローカル変数は、プロシージャの本文が始まる直前に宣言しなければなりません。 ローカル

変数ごとに、DECLARE VARIABLE で始まりセミコロン(;)で終わる文を使用します。

例 次のヘッダーでは、ANY_SALES というローカル変数が宣言されています。

CREATE PROCEDURE DELETE_EMPLOYEE (EMP_NUM INTEGER)AS

DECLARE VARIABLE ANY_SALES INTEGER;BEGIN. . .

参照 入力パラメータ , 出力パラメータ

EXCEPTION指定された例外を発行します。 トリガーとストアドプロシージャの両方に使用できます。

構文 EXCEPTION name;

引数 説明

var ローカル変数名。トリガーやプロシージャ内で一意なものにします。

datatype ローカル変数のデータ型。配列を除き、どの InterBase データ型でもかまいません。

第 3 章 プロシージャとトリガー 3-5

Page 148: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

E X E C U T E P R O C E D U R E

説明 例外とは、ユーザーが定義し、名前とテキストメッセージを割り当てたエラーのことです。

例外を発行すると、次の動作が行われます。

• 例外を発行したプロシージャやトリガーを終了し、プロシージャやトリガーの動作を直接

または間接に取り消します。

• 呼び出しアプリケーションにエラーメッセージを返します。 isql では、エラーメッセージが

画面に表示されます。

例外は、WHEN 文で実行することができます。 WHEN 文で実行した例外は、上の動作内容

とは異なります。

例 次の isql 文は、REASSIGN_SALES という例外を定義します。

CREATE EXCEPTION REASSIGN_SALES'Reassign the sales records before deleting this employee.' ;

次のプロシージャ本文は、上の例外を発行します。

IF (ANY_SALES > 0) THENEXCEPTION REASSIGN_SALES;

参照 WHEN … DO例外の詳しい作成方法については、2-40 ページの「CREATE EXCEPTION」を参照して

ください。

EXECUTE PROCEDUREストアドプロシージャを実行します。 トリガーとストアドプロシージャの両方に使用でき

ます。

構文 EXECUTE PROCEDURE name [:param [, :param …]][RETURNING_VALUES :param [, :param …]];

引数 説明

name 発行する例外名

引数 説明

name 実行するプロシージャ名。 CREATE PROCEDURE により、事前に宣言されていなければなりません。

[param [, param …]] 必須入力パラメータのリスト。

• 定数と変数のどちらでもかまいません。

• NEW と OLD のコンテキスト変数を除き、変数の前にはコロン(:)を入力します。

[RETURNING_VALUESparam [, param …]]

プロシージャが値を返す場合の出力パラメータのリスト。NEW と OLDのコンテキスト変数を除き、変数の前にはコロンを入力します。

3-6 言語リファレンス

Page 149: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

E X E C U T E S T A T E M E N T

説明 ストアドプロシージャ自体が、ストアドプロシージャを実行できます。 ストアドプロシー

ジャが別のプロシージャを呼び出すたびに、その呼び出しは「ネストされた」と呼ばれま

す。これは、 初のプロシージャに対してまだ有効な前回の呼び出しのコンテキストの中

で呼び出しが起こるためです。 別のストアドプロシージャにより呼び出されたストアドプ

ロシージャは、ネストプロシージャと呼ばれます。

プロシージャが、そのプロシージャ自体を呼び出す場合は、プロシージャは再帰的と呼ば

れます。 再帰的プロシージャは、ステップを繰り返し行うタスクの場合に便利です。 プロ

シージャの各呼び出しは、タスクを実行するためにアプリケーション、予約メモリおよび

スタックスペースから、必要に応じて呼び出されたかのように実行する個別のエンティ

ティなので、インスタンスと呼ばれます。

メモ ストアドプロシージャは、1000 レベルまでのネストを行うことができます。 この制限によっ

て、再帰的プロシージャで絶対的な終了条件を指定しない場合に起こる無限のループを防

止できます。 ネストされたプロシージャの呼び出しは、サーバーのメモリとスタック制限に

より 1000 未満のレベルに制限できます。

例 次の例は、再帰的な FACTORIAL プロシージャの例です。このプロシージャは階乗を計算

します。 このプロシージャは自分自身を再帰的に呼び出して、 NUM 入力パラメータの階乗を計算します。

CREATE PROCEDURE FACTORIAL (NUM INT) RETURNS (N_FACTORIAL DOUBLE PRECISION)ASDECLARE VARIABLE NUM_LESS_ONE INT;BEGIN

IF (NUM = 1) THEN

BEGIN /**** 基本ケース: 1 の階乗は 1 ****/N_FACTORIAL = 1;EXIT;

ENDELSEBEGIN /**** 再帰処理:num の階乗 = num * {(num-1) の階乗 } ****/

NUM_LESS_ONE = NUM - 1;EXECUTE PROCEDURE FACTORIAL NUM_LESS_ONE

RETURNING_VALUES N_FACTORIAL;N_FACTORIAL = N_FACTORIAL * NUM;

EXIT;END

END;

参照 CREATE PROCEDURE, 入力パラメータ , 出力パラメータ

プロシージャの実行方法については、2-94 ページの「EXECUTE PROCEDURE」を参照

してください。

EXECUTE STATEMENTいずれかの種類の EXECUTE STATEMENT をストアド プロシージャ内に埋め込みます。

第 3 章 プロシージャとトリガー 3-7

Page 150: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

E X E C U T E S T A T E M E N T

説明 ストアド プロシージャの開発時に、3 種類の EXECUTE STATEMENT をストアド プロシージャ内に埋め込むことができるようになりました。この種類は、EXECUTE STATEMENT コマンドから返される行の数によって分かれています。データ行が返されないもの、データが 1 行だけ返されるもの、複数のデータ行が返されるものの 3 種類です。

参照 要件と制約の詳細は、「要件と制約」を参照してください。

参照 関数に追加されたエラー メッセージの詳細は、第 5 章「エラーコードとメッセージ」を参照してください。

データ行が返されないもの

構文 EXECUTE STATEMENT <ステートメント >

<ステートメント > ::= データ行を返さない SQL 文

例 CREATE PROCEDURE EXEC_STMT_NO_RET (proc_name varchar(20))ASDECLARE VARIABLE EMPNO INT;DECLARE VARIABLE EXECSTMT;BEGIN SELECT MAX(EMP_NO) from EMPLOYEE into EMPNO;

EXECSTMT = 'EXECUTE PROCEDURE' || proc_name || '( ' || cast (EMPNO as varchar(10)) || ')';

EXECUTE STATEMENT EXECSTMT;

END

データが 1 行だけ返されるもの

構文 EXECUTE STATEMENT <select 文 > INTO :<変数 > [, :<変数 > ..]

<select 文 > ::= データが 1 行だけ返されるかまったく返されない SQL 文

<変数 > ::= 有効なプロシージャ変数。":" は省略可能

例 CREATE PROCEDURE EXEC_STMT_SINGLETON (TABLE_NAME VARCHAR(50))ASDECLARE VARIABLE MAXEMPNOBEGINEXECUTE STATEMENT 'SELECT MAX(EMP_NO) FROM ' || TABLE_NAME INTO :MAXEMPNO;END

複数のデータ行が返されるもの

構文 FOR EXECUTE STATEMENT <select 文 > INTO :<変数 > [, :<変数 > ..]

DO <複合文 >

<select 文 > ::= 複数のデータ行が返される SQL 文

<変数 > ::= 有効なプロシージャ変数。":" は省略可能

3-8 言語リファレンス

Page 151: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

F O R S E L E C T … D O

例 CREATE PROCEDURE EXEC_STMT_ANY (TABLE_NAME VARCHAR(50), INT_FIELD INTEGER)RETURNS(INT_RETVAR INTEGER)ASDECLARE VARIABLE IFIELD INTEGERBEGINFOR EXECUTE STATEMENT'SELECT ' || INT_FIELD || ' FROM ' || TABLE_NAME INTO :IFIELD

DO IF (IFIELD = 0) THEN

INT_RETVAR = 0; ELSE

INT_RETVAR = INT_RETVAR + IFIELD; SUSPEND;

END

要件と制約

EXECUTE STATEMENT には制約や独特の特性があります。

• このステートメントは実行のたびに " 準備 " されるため、ストアド プロシージャのパフォーマンスに影響します。

• プロシージャを作成する時にはステートメントのチェックが行われません。プロシージャ作成時には依存性のチェックも行われませんし、EXECUTE STATEMENT の中で参照されているテーブルや列名の存在チェックも行われません。このようなチェックは実行時に行われ、エラー状況が生じるとエラーが発生します。

• この機能を使用して DDL 操作を行うことができます。

• すべてのステートメントは、ストアド プロシージャを実行しているユーザーの権限で実行されます。

• "COMMIT"、"COMMIT RETAIN"、"ROLLBACK"、"ROLLBACK RETAIN"、"CREATE DATABASE" の SQL 文は、EXECUTE STATEMENT ではサポートされていません。これらのステートメントを使用すると、エラー コード isc_exec_stmt_disallow が返されます。

FOR SELECT…DOSELECT 文によって抽出された行ごとに、ブロックまたは文を繰り返し実行します。 トリ

ガーとストアドプロシージャの両方に使用できます。

構文 FOR <select_expr>DO <compound_statement>

引数 説明

select_expr データベースから行を抽出する SELECT 文。INTO 句は、 後に記述する必須項目です。

compound_statement SELECT 文によって抽出された行ごとに、一度ずつ実行するブロックまたは文

第 3 章 プロシージャとトリガー 3-9

Page 152: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

I F … T H E N … E L S E

説明 FOR SELECT は、select_expr で指定した行を抽出し、DO の後に続く文またはブロック

を、抽出行ごとに実行します。

select_expr は通常の SELECT と同じですが、必須入力の INTO 句を 後に記述しなけれ

ばなりません。

例 次の isql 文は、RDNO というローカル変数に部門番号を抽出し、DEPT_BUDGET プロ

シージャの入力パラメータとして使用します。

FOR SELECT DEPT_NOFROM DEPARTMENTWHERE HEAD_DEPT = :DNOINTO :RDNO

DOBEGIN

EXECUTE PROCEDURE DEPT_BUDGET :RDNO RETURNING_VALUES :SUMB;TOT = TOT + SUMB;

END

参照 SELECT

IF…THEN … ELSE指定した条件が TRUE の場合は、IF 句のブロックまたは文を実行します。TRUE でない

場合は、任意入力の ELSE 句に記述されたブロックまたは文を実行します。 トリガーとス

トアドプロシージャの両方に使用できます。

構文 IF (<condition>) THEN <compound_statement>[ELSE <compound_statement>]

説明 IF … THEN … ELSE 文は、指定した条件を判定し、判定結果に応じて動作を選択します。

condition に指定した条件式が TRUE(真)の場合は、THEN の後に続く文またはブロッ

クを実行します。 condition が TRUE でない場合は、ELSE 句の後に続く任意入力の文また

はブロックを実行します。

例 次の構文では、LINE2、FIRST、LAST の各変数がすでに宣言されている場合の IF… THEN の使い方を示しています。

. . .IF (FIRST IS NOT NULL) THEN

LINE2 = FIRST || ' ' || LAST;

引数 説明

condition TRUE(真)、FALSE(偽)、UNKNOWN(不定)のいずれかを判定する条件となる論理式。かっこで囲みます。

THEN compound_statement condition が TRUE の場合に実行する文またはブロック

ELSE compound_statement condition が TRUE でない場合に実行する任意入力の文またはブロック

3-10 言語リファレンス

Page 153: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

入力パラメータ

ELSELINE2 = LAST;

. . .

参照 WHILE … DO

入力パラメータ

アプリケーションから、ストアドプロシージャに値を受け渡すために使用します。 ストアド

プロシージャだけに使用できます。

構文 CREATE PROCEDURE name[(param datatype [, param datatype …])]

説明 入力パラメータは、アプリケーションから、ストアドプロシージャに値を受け渡すために

使用します。 入力パラメータは、CREATE PROCEDURE 文のヘッダー内で宣言します。

各パラメータをカンマで区切り、パラメータ全体をかっこで囲んでプロシージャ名の後に

指定します。 宣言した入力パラメータは、変数を使用できるプロシージャ本文のどこにでも

使用することができます。

入力パラメータは、呼び出しプログラムからストアドプロシージャに値で渡されます。 入力

変数の値が変更された場合、変更が有効なのは現在のプロシージャの中だけです。 呼び出し

プログラムに制御権が戻ると、入力変数は元の値に戻ります。

入力パラメータには、任意の InterBase データ型を使用できます。ただし、配列のデータ型

はサポートされていません。

例 次の isql プロシージャヘッダーは、EMP_NO と PROJ_ID という 2 つの入力パラメータ

を宣言します。

CREATE PROCEDURE ADD_EMP_PROJ (EMP_NO SMALLINT, PROJ_ID CHAR(5)) AS. . .

参照 DECLARE VARIABLE

プロシージャヘッダーで入力パラメータを宣言する方法については、2-48 ページの

「CREATE PROCEDURE」を参照してください。

NEW コンテキスト変数

INSERT または UPDATE における、挿入後や更新後の列値を指示します。 トリガーだけに

使用できます。

構文 NEW.column

引数 説明

column 対象となる行の列名

第 3 章 プロシージャとトリガー 3-11

Page 154: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

O L D コンテキスト変数

説明 トリガーには、 OLD と NEW という 2 つのコンテキスト変数を使用することができます。

NEW コンテキスト変数は、INSERT や UPDATE における挿入後や更新後の列の値を参照

します。

コンテキスト変数は、変更前後の列値を比較するために使用します。 通常の変数を使用でき

る場所であれば、どこにでも使用できます。

行の新しい値は、動作の前でなければ変更できません。 INSERT の後で起動し、NEW.columnに値を割り当てようとするトリガーは無効になります。 しかし、実際の列の値は動作が終わ

るまで変更されないので、テーブルから値を参照するトリガーは、UPDATE または INSERTの後で起動しない限り、新しく挿入または更新された値を表示しません。

例 次のスクリプトは、EMPLOYEE テーブルが更新された後起動し、更新前後の従業員の給

料を比較します。 給料に変化があった場合は、SALARY_HISTORY テーブルに新しい値

を挿入します。

CREATE TRIGGER SAVE_SALARY_CHANGE FOR EMPLOYEEAFTER UPDATE ASBEGIN

IF (OLD.SALARY <> NEW.SALARY) THEN INSERT INTO SALARY_HISTORY (EMP_NO, CHANGE_DATE, UPDATER_ID, OLD_SALARY,

PERCENT_CHANGE)VALUES (OLD.EMP_NO, 'NOW', USER, OLD.SALARY,

(NEW.SALARY - OLD.SALARY) * 100 / OLD.SALARY);END ;

参照 OLD コンテキスト変数

トリガーの作成方法については、2-63 ページの「CREATE TRIGGER」を参照してくだ

さい。

OLD コンテキスト変数

DELETE または UPDATE における、挿入前や更新前の列の値を指示します。 トリガーだ

けに使用できます。

構文 OLD.column

説明 トリガーには、 OLD と NEW という 2 つのコンテキスト変数を使用することができます。

OLD コンテキスト変数は、INSERT または UPDATE における削除前や更新前の列値を参

照します。

コンテキスト変数は、変更前後の列値を比較するために使用します。 通常の変数を使用でき

る場所であれば、どこにでも使用できます。

引数 説明

column 対象となる行の列名

3-12 言語リファレンス

Page 155: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

出力パラメータ

例 次のスクリプトは、EMPLOYEE テーブルが更新された後起動し、更新前後の従業員の給

料を比較します。 給料に変化があった場合は、SALARY_HISTORY テーブルに新しい値

を挿入します。

CREATE TRIGGER SAVE_SALARY_CHANGE FOR EMPLOYEEAFTER UPDATE ASBEGIN

IF (OLD.SALARY <> NEW.SALARY) THEN INSERT INTO SALARY_HISTORY (EMP_NO, CHANGE_DATE, UPDATER_ID, OLD_SALARY, PERCENT_CHANGE)

VALUES (OLD.EMP_NO, ‘NOW’, USER, OLD.SALARY,(NEW.SALARY - OLD.SALARY) * 100 / OLD.SALARY);

END ;

参照 NEW コンテキスト変数

トリガーの作成方法については、2-63ページの「CREATE TRIGGER」を参照してください。

出力パラメータ

ストアドプロシージャから、呼び出しアプリケーションに値を返すために使用します。 スト

アドプロシージャだけに使用できます。

構文 CREATE PROCEDURE name

[(param datatype [, param datatype …])] [RETURNS (param datatype [, param datatype …])]

説明 出力パラメータは、プロシージャから、呼び出しアプリケーションに値を返すために使用

します。 出力パラメータは、CREATE PROCEDURE 文のヘッダー内で宣言します。 各パ

ラメータをカンマで区切り、パラメータ全体をかっこで囲んで RETURNS キーワードの後

に指定します。 宣言した出力パラメータは、変数を使用できるプロシージャ本文のどこにで

も使用することができます。 出力パラメータには、任意の InterBase データ型を使用できま

す。ただし、配列のデータ型はサポートされていません。

プロシージャヘッダーで宣言した出力パラメータには、呼び出しアプリケーションに返す

値を代入しなければなりません。 プロシージャ内の有効な式から導き出される値でもかま

いません。

SUSPEND 文を使用した場合も、呼び出しアプリケーションに戻り値が返されます。 選択

プロシージャの場合は、SELECT 文の INTO 句で指定した収容先に戻り値が返されます。

実行可能プロシージャの場合は、RETURNING_VALUES の後に指定した出力引数に値を

返します。

プロシージャから値を抽出する SELECT 文の場合は、抽出元の列名とデータ型が、プロ

シージャの出力パラメータ名とデータ型に一致しなければなりません。 EXECUTEPROCEDURE 文では、列名と出力パラメータ名は一致しなくてもかまいませんが、デー

タ型は一致しなければなりません。

例 次の isql プロシージャヘッダーは、HEAD_DEPT、DEPARTMENT、MNGR_NAME、TITLE、EMP_CNT という 5 つの出力パラメータを宣言しています。

CREATE PROCEDURE ORG_CHART RETURNS (HEAD_DEPT CHAR(25), DEPARTMENT

第 3 章 プロシージャとトリガー 3-13

Page 156: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

P O S T _ E V E N T

CHAR(25), MNGR_NAME CHAR(20), TITLE CHAR(5), EMP_CNT INTEGER)

参照 プロシージャヘッダーで入力パラメータを宣言する方法については、2-48 ページの

「CREATE PROCEDURE」を参照してください。

POST_EVENTイベントをポストします。 トリガーとストアドプロシージャの両方に使用できます。

構文 POST_EVENT 'event_name' | col | variable;

説明 POST_EVENT は、イベントの発生をイベントマネージャに通知します。 通知を受けたイ

ベントマネージャは、指定したイベントを待機しているアプリケーションに報告します。

例 次の文は、'new_order' という名前のイベントを通知します。

POST_EVENT 'new_order';

次の文は、列の現在値に基づいてイベントを通知します。

POST_EVENT NEW.COMPANY;

次の文は、宣言済みの文字列変数に基づいてイベントを通知します。

myval = ‘new_order:’ || NEW.COMPANY;POST_EVENT myval;

参照 EVENT INIT, EVENT WAITイベントの詳細は、『埋め込み SQL ガイド』を参照してください。

SELECT検索条件を満たす 1 行を抽出します。 標準的な単一 SELECT 文と同じですが、構文が少し

異なります。 トリガーおよびストアドプロシージャで使用できます。

<select_expr> = <select_clause> <from_clause> [<where_clause>] [<group_by_clause>] [<having_clause>] [<union_expression>] [<plan_clause>][<ordering_clause>]<into_clause>;

説明 ストアドプロシージャでは、SELECT 文と INTO 句を使用して、データベースから 1 行の

値を抽出し、それをホスト変数に代入します。 SELECT 文は、標準的な単一 SELECT 文の

ように、データベースから 1 行だけを返す SELECT 文でなければなりません。 INTO 句は

必要で、文の 後の句にならなければなりません。

引数 説明

‘event_name’ 通知するイベント名。引用符で囲みます。

col 列名。この列の値に基づいてイベントを通知します。

variable ストアドプロシージャまたはトリガー内の文字列変数の名前

3-14 言語リファレンス

Page 157: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

S U S P E N D

INTO 句を 後に指定した SELECT 文には、UNION 演算子を使用することができます。

UNION は、埋込み SQL の単一行 SELECT 文には使用できません。

例 次の文は、埋め込みアプリケーションで使用する標準の単一行 SELECT 文です。

EXEC SQLSELECT SUM(BUDGET), AVG(BUDGET)INTO :TOT_BUDGET, :AVG_BUDGETFROM DEPARTMENTWHERE HEAD_DEPT = :HEAD_DEPT

上の SELECT 文をプロシージャ内で使用するには、INTO 句を 後に移動します。

SELECT SUM(BUDGET), AVG(BUDGET)FROM DEPARTMENTWHERE HEAD_DEPT = :HEAD_DEPTINTO :TOT_BUDGET, :AVG_BUDGET;

参照 FOR SELECT…DOSELECT の標準構文の詳細は、2-114 ページの「SELECT」を参照してください。

SUSPEND次の FETCH 文が出されるまで 選択プロシージャ(Select procedure)の実行を中断し、呼

び出しアプリケーションに戻り値を返します。 ストアドプロシージャだけに使用できます。

構文 SUSPEND;

説明 SUSPEND 文は、次の動作を行います。

• 次の FETCH 文が出されるまでストアドプロシージャの実行を中断します。

• 出力パラメータがある場合は、戻り値を返します。

SUSPEND を使用するには、すべての出力パラメータに値を割り当てておきます。

実行可能プロシージャ(Executable procedure)では、SUSPEND ではなく EXIT を使用

してください。 EXIT は、プロシージャの終わりを明示的に示す文です。

次の表は、SUSPEND、EXIT、END の動作をまとめたものです。

表 3.1 SUSPEND、EXIT、END

プロシージャのタイプ SUSPEND EXIT END

Select procedure • 次の FETCH が行われるまでプロシージャの実行を停止する

• 出力値を返す

後の END にジャンプする

• アプリケーションに制御を返す

• SQLCODE を 100(レコードストリームの終わり)に設定する

Executable procedure • 後の END にジャンプする

• 推奨できません。

後の END にジャンプする

• 値を返す

• アプリケーションに制御を返す

第 3 章 プロシージャとトリガー 3-15

Page 158: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

W H E N … D O

メモ 選択プロシージャで、プロシージャの 後の SUSPEND 文の後に実行文がある場合、それ以上の行は呼び出しプログラムに返されませ

んが、それらの文はすべて実行されます。 プロシージャは 後の END 文で終了し、

SQLCODE が 100 に設定されます。

SUSPEND 文は、選択プロシージャのステートメント ブロックを区切るという役割も持っ

ています。 SQLCODE エラー、GDSCODE エラー、例外などのエラーが選択プロシージャ

内で発生すると、 後の SUSPEND 以降の文は取り消されます。 それ以前の文は、プロシー

ジャを構成するトランザクションがロールバックされない限り取り消されません。

例 次のプロシージャは、SUSPEND および EXIT の使用例を示しています。

CREATE PROCEDURE P RETURNS (R INTEGER)ASBEGIN

R = 0;WHILE (R < 5) DOBEGIN

R = R + 1;SUSPEND;IF (R = 3) THEN

EXIT;END

END;

このプロシージャを isql の選択プロシージャとして使用すると、次のようになります。

SELECT * FROM P;

この SUSPEND 文は、R = 3 になるまで R の現在値を呼び出しアプリケーションに返すた

め、上のプロシージャは 1、2、3 という値を返します。R = 3 になると EXIT が実行され、

プロシージャは終了します。

このプロシージャを isql の実行可能プロシージャとして使用すると、次のようになります。

EXECUTE PROCEDURE P;

この SUSPEND 文は、プロシージャを終了し、R の現在値を呼び出しアプリケーションに

返すため、上のプロシージャは 1 という値を返します。 実行可能プロシージャでは、

SUSPEND ではなく EXIT を使用してください。EXIT は、プロシージャの終わりを明示

的に示す文です。

参照 データ行が返されないもの , BEGIN … END

WHEN … DO指定したエラーが発生した場合に、DO の後に続く文を実行するエラー処理文です。 トリ

ガーとストアドプロシージャの両方に使用できます。

構文 WHEN {<error> [, <error> …] | ANY}DO <compound_statement>

3-16 言語リファレンス

Page 159: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

W H E N … D O

<error>= {EXCEPTION exception_name | SQLCODE number | GDSCODE errcode}

重要 WHEN 文を使用する場合、WHEN は必ず BEGIN … END ブロックの 後の文でなければ

なりません。 SUSPEND がある場合は、その後に記述しなければなりません。

説明 WHEN 文は、次の 3 種類のエラーを処理することができます。

• 現在のプロシージャ、ネストされたプロシージャまたは現在のプロシージャを実行した結

果起動したトリガーのいずれかに記述された EXCEPTION 文が発行した例外

• SQLCODE によって報告された SQL エラー

• InterBase エラーコード

WHEN ANY 文は、上のエラーをすべて処理します。

例外の処理

例外が発生したときにプロシージャを終了せずに、 次のように例外に応答して例外を処理

することで(可能であれば)エラー条件を修正することができます。

• 例外が発生した BEGIN...END ブロックの実行を終了し、そのブロックが実行した動作を

取り消します。

• 1 レベル前の BEGIN...END ブロックに戻り、例外(WHEN)文を検索します。 WHEN 文が見つかるまで 1 レベルずつ検索します。WHEN 文が見つからない場合は、プロシージャ

が終了し、すべての動作が取り消されます。

• WHEN 文が見つかった場合は、その後に続く文またはブロックを実行します。

• WHEN 文の後に続く文またはブロックに、プログラムの制御を戻します。

メモ WHEN 文による例外からエラーメッセージが返されることはありません。

SQL エラーの処理

プロシージャは、SQLCODE で返されるエラー番号も処理できます。 各 SQL 文の実行後、

SQLCODE には、文の成功または失敗を示すステータスコードが格納されます。 SQLCODE には、FOR SELECT ループで、もう抽出する行がない場合などの警告状態も

格納できます。

引数 説明

EXCEPTION exception_name すでにデータベースに設定されている例外名

SQLCODE number SQLCODE エラーコード番号

GDSCODE errcode InterBase エラー コード。表 5.5 を参照して、そのエラー コードから "isc_" を取り除いたものを GDSCODE に指定してください。たとえば、GDSCODE lock_conflict のようにします。

ANY すべてのエラーを処理することを指定するキーワード

compound_statement 指定したエラーのいずれかが発生すると実行される文またはブロック

第 3 章 プロシージャとトリガー 3-17

Page 160: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

W H I L E … D O

InterBase エラーコードの処理

プロシージャでは、InterBase エラーコードも処理できます。 たとえば、他のトランザクショ

ンが更新し、まだコミットしていない行があるとします。 この行をプロシージャ内の文で更

新しようとすると、ロックの競合を示す isc_lock_conflict という InterBase エラーコード

が出力されます。 プロシージャが再び更新すると、トランザクションによる変更内容がロー

ルバックされ、ロックが解放されます。 WHEN GDSCODE 文を使用すると、ロック競合

エラーを処理し、動作をやり直すことができます。

例 PRIMARY KEY が設定されている列にプロシージャが重複値を挿入すると、SQLCODE -803 が出力されます。このエラーは、次の文で処理することができます。

WHEN SQLCODE -803DO

BEGIN. . .

次の isql スクリプトのプロシージャには、実行中に発生する恐れのあるエラーを処理する

WHEN 文が含まれています。 指定した SQLCODE のエラーが発生した場合は、B の値を

1 に変更してプロシージャを続行します。指定外のエラーが発生した場合は、エラーは処理

されません。プロシージャの動作をすべてロールバックし、該当する SQLCODE を返しま

す。

CREATE PROCEDURE NUMBERPROC (A INTEGER) RETURNS (B INTEGER) ASBEGIN

B = 0;BEGIN

UPDATE R SET F1 = F1 + :A;UPDATE R SET F2 = F2 * F2;UPDATE R SET F1 = F1 + :A;WHEN SQLCODE -803 DO

B = 1;ENDEXIT;

END;

参照 EXCEPTION

InterBase エラーコードと SQLCODE については、第 5 章「エラーコードとメッセージ」

を参照してください。

WHILE … DO指定した条件が TRUE(真)である限り、DO の後に続く文またはブロックを実行します。

トリガーとストアドプロシージャの両方に使用できます。

構文 WHILE (<condition>) DO

<compound_statement>

3-18 言語リファレンス

Page 161: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

W H I L E … D O

説明 WHILE ... DO は、指定した条件が TRUE(真)である限り、文またはブロックを実行す

るループ文です。 ループごとに条件がチェックされ、実行するかどうかが判定されます。

例 次の isql スクリプトのプロシージャは、WHILE ... DO ループを使用しています。1 から

入力パラメータの値の範囲にある、すべての整数を合計する文を繰り返します。

CREATE PROCEDURE SUM_INT (I INTEGER) RETURNS (S INTEGER) ASBEGIN

S = 0;WHILE (I > 0) DOBEGIN

S = S + I;I = I - 1;

ENDEND;

上のプロシージャを、isql から次のコマンドで呼び出すと、

EXECUTE PROCEDURE SUM_INT 4;

実行結果は次のようになります。

S========== 10

参照 IF…THEN … ELSE, FOR SELECT…DO

引数 説明

condition DO の後に続く文またはブロックの実行の条件となる論理式

compound_statement condition が TRUE(真)の場合に実行する文またはブロック

第 3 章 プロシージャとトリガー 3-19

Page 162: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

3-20 言語リファレンス

Page 163: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

第 章

第 4 章キーワード

この章の表は、SQL プログラムおよび isql(対話型 SQL)で使用されるキーワード(予約

語)の一覧です。 一覧には、DSQL、isql、および gpre のキーワードが記載されています。

キーワードは特殊な目的のために定義されたもので、予約語と呼ばれることもあります。

キーワードは、二重引用符で囲んだ場合以外は、ユーザーが宣言する識別子には使用でき

ず、テーブル名、列名、インデックス名、トリガー名、定数名としても使用できません。

キーワードは、次のように使用されます。

• 文の一部

• 文自体として

• 標準のデータ構造体またはデータ型

InterBase のキーワード

ACTION ACTIVE ADD ADMIN

AFTER ALL ALTER AND

ANY AS ASC ASCENDING

AT AUTO AUTODDL AVG

BASED BASENAME BASE_NAME BEFORE

BEGIN BETWEEN BLOB BLOBEDIT

BOOLEAN BUFFER BY CACHE

CASCADE CASE CAST CHAR

第 4 章 キーワード 4-1

Page 164: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

I n t e r B a s e のキーワード

CHARACTER CHARACTER_LENGTH CHAR_LENGTH CHECK

CHECK_POINT_LEN CHECK_POINT_LENGTH COALESCE COLLATE

COLLATION COLUMN COMMIT COMMITTED

COMPILETIME COMPUTED CLOSE CONDITIONAL

CONNECT CONSTRAINT CONTAINING CONTINUE

COUNT CREATE CSTRING CURRENT

CURRENT_DATE CURRENT_TIME CURRENT_TIMESTAMP CURSOR

DATABASE DATE DAY DB_KEY

DEBUG DEC DECIMAL DECLARE

DECRYPT DEFAULT DELETE DESC

DESCENDING DESCRIBE DESCRIPTOR DISCONNECT

DISPLAY DISTINCT DO DOMAIN

DOUBLE DROP ECHO EDIT

ELSE ENCRYPT ENCRYPTION END

ENTRY_POINT ESCAPE EVENT EXCEPTION

EXECUTE EXISTS EXIT EXTERN

EXTERNAL EXTRACT FALSE FETCH

FILE FILTER FLOAT FOR

FOREIGN FOUND FREE_IT FROM

FULL FUNCTION GDSCODE GENERATOR

GEN_ID GLOBAL GOTO GRANT

GROUP GROUP_COMMIT_WAIT GROUP_COMMIT_WAIT_TIME

HAVING

HELP HOUR IF IMMEDIATE

IN INACTIVE INDEX INDICATOR

INIT INNER INPUT INPUT_TYPE

INSERT INT INTEGER INTO

IS ISOLATION ISQL JOIN

4-2 言語リファレンス

Page 165: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

I n t e r B a s e のキーワード

KEY LC_MESSAGES LC_TYPE LEFT

LENGTH LEV LEVEL LIKE

LOGFILE LOG_BUFFER_SIZE LOG_BUF_SIZE LONG

MANUAL MAX MAXIMUM MAXIMUM_SEGMENT

MAX_SEGMENT MERGE MESSAGE MIN

MINIMUM MINUTE MODULE_NAME MONTH

NAMES NATIONAL NATURAL NCHAR

NO NOAUTO NOT NULL

NULLIF NUMERIC NUM_LOG_BUFS NUM_LOG_BUFFERS

OCTET_LENGTH OF ON ONLY

OPEN OPTION OR ORDER

OUTER OUTPUT OUTPUT_TYPE OVERFLOW

PAGE PAGELENGTH PAGES PAGE_SIZE

PARAMETERS PASSWORD PERCENT PLAN

POSITION POST_EVENT PRECISION PREPARE

PRESERVE PROCEDURE PROTECTED PRIMARY

PRIVILEGES PUBLIC QUIT

RAW_PARTITIONS RDB$DB_KEY READ REAL

RECORD_VERSION REFERENCES RELEASE RESERV

RESERVING RESTRICT RETAIN RETURN

RETURNING_VALUES RETURNS REVOKE RIGHT

ROLE ROLLBACK ROWS RUNTIME

SCHEMA SECOND SEGMENT SELECT

SET SHADOW SHARED SHELL

SHOW SINGULAR SIZE SMALLINT

SNAPSHOT SOME SORT SQLCODE

SQLERROR SQLWARNING STABILITY STARTING

STARTS STATEMENT STATIC SUSPEND

第 4 章 キーワード 4-3

Page 166: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

I n t e r B a s e のキーワード

メモ 以下のキーワードは InterBase に固有で、SQL 規格には含まれません。

TABLE TEMPORARY TERMINATOR THEN

TIES TIME TIMESTAMP TO

TRANSACTION TRANSLATE TRANSLATION TRIGGER

TRIM TRUE TYPE UNCOMMITTED

UNION UNIQUE UNKNOWN UPDATE

UPPER USER USING VALUE

VALUES VARCHAR VARIABLE VARYING

VERSION VIEW WAIT WEEKDAY

WHEN WHENEVER WHERE WHILE

WITH WORK WRITE YEAR

YEARDAY

WEEKDAY YEARDAY

4-4 言語リファレンス

Page 167: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

第 章

第 5 章エラーコードとメッセージ

この章では、InterBase のエラー処理オプションとエラーコードについて説明します。 埋め込

み SQL、動的 SQL(DSQL)、および対話型 SQL(isql)の SQLCODE、InterBase エラー

コード、エラーメッセージが表にリストアップされています。 エラー処理の詳細は、『埋め

込み SQL ガイド』を参照してください。

エラーの発生源

実行時エラーは、ユーザーがデータを入力した時点か、プログラムからデータが出力され

た時点で発生します。 プログラムや isql の実行時には、次のエラーが発生する恐れがありま

す。

エラーの種類 説明 動作

データベースエラー

変換エラー、算術式の例外、検査エラーなど、さまざまな原因により発生します。

このようなエラーが起きた場合は:

• メッセージをチェックします。

• ファイル名とパス名をチェックして、もう一度実行します。

バグチェックエラーまたは内部エラー

開発元に報告する必要があるソフトウェア障害に関連したエラーです。

このようなエラーが起きた場合は、トレースバックを実行して出力を保存し、弊社テクニカルサポートまでご連絡ください。

第 5 章 エラーコードとメッセージ 5-1

Page 168: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

エラーの報告と処理

エラーの報告と処理

エラーの報告と処理には、ステータス配列に出力される InterBase コードと SQLCODE 変数を使用します。

実行可能 SQL 文を実行すると、状態を示す SQLCODE 変数が必ず設定されます。 前処理

中は、gpre が SQLCODE 変数を自動的に宣言します。 アプリケーションでは、次の 3 とおりの方法で SQLCODE 変数をチェックし、使用することができます。

• WHENEVER 文により、SQLCODE 変数の値をチェックしてから、アプリケーションの

コードで表したエラー処理ルーチンに分岐することをプログラムに指示する。

• SQLCODE を直接チェックする。

• WHENEVER 文と SQLCODE の直接チェックを組み合わせる。

InterBase と他のデータベース管理システムの両方に使用する SQL プログラムの場合は、

いずれか 1 つの方法だけを使用してください。

InterBase のステータス配列には、SQLCODE メッセージを補うエラー情報が表示されま

す。

InterBase アプリケーションで、ステータス配列に返される InterBase コードと SQLCODE変数の両方をチェックすることができます。

WHENEVER によるエラーのトラップ

WHENEVER 文は、SQL のエラーメッセージと警告メッセージをトラップします。

SQLCODE の戻り値をチェックし、アプリケーションの処理ルーチンに分岐します。 次の

エラールーチンがあります。

• エラーの発生とトランザクションのロールバックを簡潔に報告したり、クエリーやデータ

の再入力を要求するプロンプトなどのルーチン

• 予測可能な各種のエラー状況に対応する、高度なルーチン

WHENEVER 文は、エラーや警告を処理するルーチンを 1 つ呼び出すため、アプリケー

ションのサイズを限定することができます。

SQLCODE 値の直接チェック

SQL 文の実行後に、特定の SQLCODE を直接チェックすることもできます。 指定した

SQLCODE が発生した場合は、そのコードに対応するルーチンに分岐することができま

す。

特定のエラーを処理するには、SQLCODE のチェックと WHENEVER 文を組み合わせま

す。 次に、処理手順を簡単に説明します。詳細は、『埋め込み SQL ガイド』を参照してく

ださい。

1 WHENEVER SQLERROR CONTINUE 文を挿入し、WHENEVER による分岐を変更

します。 これにより、SQLCODE は無視されます。

5-2 言語リファレンス

Page 169: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

エラーの報告と処理

2 SQLCODE をチェックする文を使って特定の SQLCODE を確認し、そのコードに対応

する別の処理手順を指示します。

3 WHENEVER の分岐に戻るには、WHENEVER 文を新たに挿入します。

他のデータベース管理システムと併用しないプログラムの場合は、InterBase ステータス配

列で追加情報を使用することができます。

InterBase ステータス配列

SQLCODE の値が示すエラーは、1 種類だけとは限りません。InterBase のステータス配列

(isc_status)には、SQLCODE エラーの詳細をチェックできる追加情報が表示されます。

gpre は前処理中に、すべての InterBase アプリケーションを対象とした、20 個の 32 ビット整

数で構成される isc_status 配列を自動的に宣言します。 エラーが発生すると、InterBase エラーコード、メッセージ文字列のアドレス、数値によるプラットフォーム別エラーデータ

がステータス配列にロードされます。

5-5 ページの「SQLCODE エラーコードとエラーメッセージ」には、ステータス配列の

コードがすべてリストアップされています。 オンラインモードでコードを参照するには、

ibase.h ファイルを表示してください。 ファイルの格納場所は、システムによって異なりま

す。

ステータス配列メッセージへのアクセスステータス配列のコードやメッセージを抽出および出力するには、次のライブラリ関数を

使用します。

isc_print_sqlerror( )SQLCODE < 0 の場合は、SQLCODE の戻り値、対応する SQL エラーメッセージ、ステータ

ス配列の InterBase エラーメッセージが画面に出力されます。 この関数は、エラー処理ルー

チンの中で使用してください。

構文 isc_print_sqlerror (short SQLCODE, ISC_STATUS *status_vector);

isc_sql_interprete( )この関数は、SQL エラーメッセージを抽出し、ユーザーが指定したバッファに格納します。

格納したメッセージは、出力、処理、表示することができます。 メッセージが収められるよ

うに、256 バイトのバッファ長を確保しておいてください。 この関数は、エラー表示ルーチ

ンを作成する場合、または画面への直接書き込みができないウィンドウシステムを使用し

ている場合に使用します。 SQLCODE > 0 の場合は使用できません。

構文 isc_sql_interprete(short SQLCODE, char *buffer, short length);

エラーコードへの対応 エラーが発生した場合は、 エラーを無視するか、エラーをログに記録して処理を続行する

か、トランザクションをロールバックして再試行するか、またはトランザクションをロー

ルバックしてアプリケーションを終了します。

第 5 章 エラーコードとメッセージ 5-3

Page 170: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

エラーの報告と処理

次のエラーが発生した場合は、現在のトランザクションをロールバックし、もう一度操作

してください。

その他の情報

次の表は、エラー処理ルーチンの計画とプログラミングの詳細が記載された箇所をまとめ

たものです。

表 5.1 ロールバックと再実行が必要なステータス配列コード

ステータス配列コード 対策

isc_convert_error 変換エラー:データ型の変換が失敗しました。入力データを修正し、もう一度操作してください。

isc_deadlock Deadlock(デッドロック): 他のトランザクションとロックが競合しました。待機した後、再実行してください。

isc_integ_fail 整合性チェックエラー:トリガーにより、操作が失敗しました。異常終了コードをチェックし、エラーを修正してから再実行してください。

isc_lock_conflict ロックの競合:必要なロックが得られませんでした。待機した後、再実行してください。

isc_no_dup 重複インデックスの入力:重複した項目を追加しようとしました。重複した項目を修正し、再実行してください。

isc_not_valid 検査エラー:検査にパスしませんでした。無効な行を修正し、再実行してください。

表 5.2 エラー処理に関する参照箇所

項目 内容 参照箇所

SQLCODE とエラー処理

詳しい説明とプログラミング手順 『埋め込み SQL ガイド』

SQLCODE の一覧 埋め込み SQL、DSQL、isql の SQLCODE とメッセージ

5-5ページの「SQLCODE のコードとメッセージ」

WHENEVER の構文 使い方と構文 第 2 章「SQL 文と関数のリファレンス」

WHENEVER のプログラミング

エラー処理ルーチンの使い方とプログラミング 『埋め込み SQL ガイド』

InterBase ステータス配列と関数

詳しいプログラミング手順 『埋め込み SQL ガイド』

ステータス配列コードの一覧

• 埋め込み SQL、DSQL、isql のステータス配

列エラーコードとメッセージ5-3ページの「InterBase ステータス配列」

5-4 言語リファレンス

Page 171: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

S Q L C O D E エラーコードとエラーメッセージ

SQLCODE エラーコードとエラーメッセージ

この節では、SQLCODE エラーコードと、対応するメッセージをリストアップした次の表を

記載します。

• SQLCODE エラーメッセージの概要

• SQLCODE コードとメッセージ

SQLCODE エラーメッセージの概要

次の表は、SQLCODE からプログラムに渡されるメッセージの種類のまとめです。

SQLCODE のコードとメッセージ

次の表は、SQL と DSQL の SQLCODE と、対応するメッセージをまとめたものです。 複数の

テキストメッセージがある SQLCODE もあります。 この場合は、発生したエラーに も近い

内容のメッセージ文字列が返されます。

データベースオブジェクトの名前や型がメッセージに含まれている場合は、次の表の

「SQLCODE テキスト」欄のコードで表します。

• <string>:データベースオブジェクトの名前や型を示す文字列

• <long>:データベースオブジェクトやオブジェクト型の識別番号やコードを表す long(32ビット)整数値

• <digit>:データベースオブジェクトやオブジェクト型の識別番号やコードを表す整数値

• 右端の InterBase 番号は、エラーステータスベクターに返される実際のエラー番号です。 SQLコードのかわりにこの番号を使用しても、InterBase エラー処理関数は実行できます。ただ

し、他のデータベースと互換性のない SQL プログラムになります。

表 5.3 SQLCODE とエラーメッセージの概要

SQLCODE メッセージ 意味

<0 SQLERROR エラー。文が完了しませんでした。SQLCODE エラー番号とメッセージについては、表 5.4 を参照してください。

0 SUCCESS 正常終了

+1–99 SQLWARNING システムの警告メッセージまたは情報メッセージ

+100 NOT FOUND 該当するレコードが見つかりません。ファイルの終わりに達しました。

第 5 章 エラーコードとメッセージ 5-5

Page 172: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

S Q L C O D E エラーコードとエラーメッセージ

表 5.4 SQLCODE のコードとメッセージ

SQLCODE SQLCODE テキスト

InterBase数値

101 segment buffer length shorter than expected(セグメントバッファ長が不足しています)

335544366L

100 no match for first value expression(先頭の数値式と一致しません) 335544338L

100 Invalid database key(データベースキーが無効です) 335544354L

100 attempted retrieval of more segments than exist(存在するセグメント数を超えるセグメントを抽出しようとしました)

335544367L

100 attempt to fetch past the last record in a record stream(レコードストリームの 終レコードを過ぎてデータを取り出そうとしました)

335544374L

-84 table/procedure has non-SQL security class defined(テーブル / プロシージャに、SQL 以外のセキュリティクラスが設定されています)

335544554L

-84 column has non-SQL security class defined(列に、SQL 以外のセキュリティクラスが設定されています)

335544555L

-84 procedure <string> does not return any values(プロシージャ <string> が値を返しません)

335544668L

-103 Datatype for constant unknown(未知の定数データ型です) 335544571L

-104 invalid request BLR at offset <long>(オフセット <long> に無効な要求 BLR があります)

335544343L

-104 BLR 構文エラー: expected <string> at offset <long>, encountered <long>

(オフセット <long> にあるべき <string> が <long> にあります)

335544390L

-104 context already in use (BLR error)(すでに使用されているコンテキストです(BLR エラー))

335544425L

-104 context not defined (BLR error)(コンテキストが設定されていません(BLR エラー))

335544426L

-104 bad parameter number(パラメータ番号が無効です) 335544429L

-104 335544440L

-104 invalid slice description language at offset <long>(オフセット <long> のスライス記述言語が無効です)

335544456L

-104 Invalid command(コマンドが無効です) 335544570L

-104 Internal error(内部エラー) 335544579L

-104 Option specified more than once(同じオプションを複数回指定しました)

335544590L

-104 Unknown transaction option(未知のトランザクションオプションを指定しました)

335544591L

-104 Invalid array reference(配列の参照が無効です) 335544592L

5-6 言語リファレンス

Page 173: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

S Q L C O D E エラーコードとエラーメッセージ

-104 Token unknown—line <long>, char <long>(未知のトークンを指定しました:<long> 行目、<long> 文字目)

335544634L

-104 Unexpected end of command(コマンドが完了せずに終了しました)

335544608L

-104 Token unknown(未知のトークンを指定しました) 335544612L

-150 attempted update of read-only table(読み取り専用のテーブルを更新しようとしました)

335544360L

-150 cannot update read-only view <string>(読み取り専用のビュー <string> は更新できません)

335544362L

-150 not updatable(更新できません) 335544446L

-150 Cannot define constraints on views(ビューに対する制約を定義できません)

335544546L

-151 attempted update of read-only column(読み取り専用の列を更新しようとしました)

335544359L

-155 <string> is not a valid base table of the specified view(<string> は、指定したビューの有効なベーステーブルではありません)

335544658L

-157 must specify column name for view select expression(ビュー選択式には列名を指定しなければなりません)

335544598L

-158 number of columns does not match select list(列数が選択リストと一致しません)

335544599L

-162 dbkey not available for multi-table views(マルチテーブルビューには dbkey を使用できません)

335544685L

-170 parameter mismatch for procedure <string>(プロシージャ <string> のパラメータが一致しいていません)

335544512L

-170 External functions cannot have more than10 parameters(外部関数に使用できるパラメータ数は 大で 10 個です)

335544619L

-171 function <string> could not be matched(関数 <string> が一致しませんでした)

335544439L

-171 column not array or invalid dimensions (expected <long>, encountered <long>)

(列の配列またはサイズが無効です。<long> が必要ですが、<long> が指定されました)

335544458L

-171 Return mode by value not allowed for this datatype(このデータ型では、値で返すモードを使用できません)

335544618L

-172 function <string> is not defined(関数 <string> が定義されていません)

335544438L

-204 generator <string> is not defined(ジェネレータ <string> が定義されていません)

335544463L

表 5.4 SQLCODE のコードとメッセージ ( 続き )

SQLCODE SQLCODE テキスト

InterBase数値

第 5 章 エラーコードとメッセージ 5-7

Page 174: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

S Q L C O D E エラーコードとエラーメッセージ

-204 reference to invalid stream number(無効なストリーム番号を参照しました)

335544502L

-204 CHARACTER SET <string> is not defined(CHARACTER SET <string> が定義されていません)

335544509L

-204 procedure <string> is not defined(プロシージャ <string> が定義されていません)

335544511L

-204 status code <string> unknown(ステータスコード <string> は不定です)

335544515L

-204 exception <string> not defined(例外 <string> が定義されていません)

335544516L

-204 Name of Referential Constraint not defined in constraints table.(制約テーブルに参照制約の名前が定義されていません)

335544532L

-204 could not find table/procedure for GRANT(GRANT でテーブル / プロシージャが見つかりませんでした)

335544551L

-204 Implementation of text subtype <digit> not located.(テキストサブタイプ <digit> の実装が見つかりませんでした)

335544568L

-204 Datatype unknown(未知のデータ型を指定しました) 335544573L

-204 Table unknown(未知のテーブルを指定しました) 335544580L

-204 Procedure unknown(未知のプロシージャを指定しました) 335544581L

-204 COLLATION <string> is not defined(COLLATION <string> が定義されていません)

335544588L

-204 COLLATION <string> is not valid for specified CHARACTER SET(COLLATION <string> が、指定したキャラクタセットでは無効です)

335544589L

-204 Trigger unknown(未知のトリガーを指定しました) 335544595L

-204 alias <string> conflicts with an alias in the same statement(エイリアス <string> が、同じ文に指定したエイリアスと重複しています)

335544620L

-204 alias <string> conflicts with a procedure in the same statement(エイリアス <string> が、同じ文に指定したプロシージャと競合しています)

335544621L

-204 alias <string> conflicts with a table in the same statement(エイリアス <string> が、同じ文に指定したテーブルと競合しています)

335544622L

-204 there is no alias or table named <string> at this scope level(指定した範囲のレベルには、<string> というエイリアスまたはテーブルがありません)

335544635L

-204 there is no index <string> for table <string>(テーブル <string> にはインデックス <string> はありません)

335544636L

表 5.4 SQLCODE のコードとメッセージ ( 続き )

SQLCODE SQLCODE テキスト

InterBase数値

5-8 言語リファレンス

Page 175: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

S Q L C O D E エラーコードとエラーメッセージ

-204 Invalid use of CHARACTER SET または COLLATE(CHARACTER SET または COLLATE の使用が無効です)

335544640L

-204 BLOB SUB_TYPE <string> is not defined(BLOB SUB_TYPE <string> が定義されていません)

335544662L

-204 EXECUTE STATEMENT could not prepare statement : <string>(EXECUTE STATEMENT でステートメント <string> を準備できませんでした)

335544850

-204 SQL statement invalid as it returns no records. SQL : <string>(SQL 文 <string> はレコードを返さないため無効です)

335544851

-204 Parameter mis-match for the statement : <string>(ステートメント <string> のパラメータが一致しません)

335544852

-204 Could not execute statement : <string> (ステートメント <string> を実行できませんでした)

335544853

-204 EXECUTE STATEMENT fetch error (EXECUTE STATEMENT の取り出しエラー)

335544854

-204 EXECUTE STATEMENT in this form must return single row, not multiple rows.

(この形式の EXECUTE STATEMENT では、複数行ではなく 1 行だけを返さなければなりません)

335544855

-204 Sql statement not allowed in EXECUTE STATEMENT : <string> (EXECUTE STATEMENT では SQL 文 <string> を実行できません)

335544857

-204 Statement evaluated to a NULL statement. EXECUTE STATEMENT cannot execute a NULL statement.

(ステートメントの評価結果が NULL 文になりました。EXECUTE STATEMENT では NULL 文を実行できません)

335544858

-205 column <string> is not defined in table <string>(テーブル <string> に、列 <string> が定義されていません)

335544396L

-205 could not find column for GRANT(GRANT に指定した列が見つかりませんでした)

335544552L

-206 Column unknown(未知の列を指定しました) 335544578L

-206 Column is not a BLOB(列が BLOB ではありません) 335544587L

-206 Subselect illegal in this context(このコンテキストでは副選択文が無効です)

335544596L

-208 invalid ORDER BY clause(ORDER BY 句が無効です) 335544617L

-219 Table <string> is not defined(テーブル <string> が定義されていません)

335544395L

-239 Cache length too small(キャッシュの長さが不足しています) 335544691L

-260 Cache redefined(キャッシュの設定が変更されています) 335544690L

表 5.4 SQLCODE のコードとメッセージ ( 続き )

SQLCODE SQLCODE テキスト

InterBase数値

第 5 章 エラーコードとメッセージ 5-9

Page 176: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

S Q L C O D E エラーコードとエラーメッセージ

-281 Table <string> is not referenced in plan(プランでテーブル <string> は参照されていません)

335544637L

-282 Table <string> is referenced more than once in plan; use aliases to distinguish

(プランでテーブル <string> が複数回参照されています。エイリアスを使って区別してください)

335544638L

-282 The table <string> is referenced twice; use aliases to differentiate(テーブル <string> が 2 回参照されています。エイリアスを使って区別してください)

335544643L

-282 Table <string> is referenced twice in view; use an alias to distinguish(ビューでテーブル <string> が 2 回参照されています。エイリアスを使って区別してください)

335544659L

-282 View <string> has more than one base table; use aliases to distinguish(ビュー <string> に複数のベーステーブルがあります。エイリアスを使って区別してください)

335544660L

-283 Table <string> is referenced in the plan but not the from list(テーブル <string> が参照されていますが、リストに指定されていません)

335544639L

-284 Index <string> cannot be used in the specified plan(インデックス <string> が、指定したプランでは使用できません)

335544642L

-291 Column used in a PRIMARY/UNIQUE constraint must be NOT NULL.

(PRIMARY/UNIQUE 制約に使用する列は NOT NULL でなければなりません)

335544531L

-292 Cannot update constraints (RDB$REF_CONSTRAINTS).(RDB$REF_CONSTRAINTS の制約を更新できません)

335544534L

-293 Cannot update constraints (RDB$CHECK_CONSTRAINTS).(RDB$CHECK_CONSTRAINTS の制約を更新できません)

335544535L

-294 Cannot delete CHECK constraint entry (RDB$CHECK_CONSTRAINTS)

(RDB$CHECK_CONSTRAINTS の CHECK 制約エントリを削除できません)

335544536L

-295 Cannot update constraints (RDB$RELATION_CONSTRAINTS).(RDB$RELATION_CONSTRAINTS の制約を更新できません)

335544545L

-296 Internal isc software consistency check (invalid RDB$CONSTRAINT_TYPE)(RDB$CONSTRAINT_TYPE が無効なため、isc 内部のソフトウェア整合性チェックエラーが発生しました)

335544547L

-297 Operation violates CHECK constraint <string> on view or table(ビューまたはテーブルに対する CHECK 制約 <string> に違反しています)

335544558L

-313 Count of column list and variable list do not match(列リストと変数リストの数が一致していません)

335544669L

表 5.4 SQLCODE のコードとメッセージ ( 続き )

SQLCODE SQLCODE テキスト

InterBase数値

5-10 言語リファレンス

Page 177: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

S Q L C O D E エラーコードとエラーメッセージ

-314 Cannot transliterate character between character sets(キャラクタセット間で変換を行うことができません)

335544565L

-401 Invalid comparison operator for find operation(検索動作に、無効な比較演算子が指定されています)

335544647L

-402 Attempted invalid operation on a BLOB(BLOB に無効な動作を実行しようとしました)

335544368L

-402 BLOB and array datatypes are not supported for <string> operation(<string> 操作は、BLOB と配列のデータ型ではサポートされていません)

335544414L

-402 Data operation not supported(データ操作はサポートされません) 335544427L

-406 Subscript out of bounds(サブスクリプトが有効範囲外です) 335544457L

-407 Null segment of UNIQUE KEY(UNIQUE KEY のセグメントが NULL です)

335544435L

-413 Conversion error from string "<string>"(文字列 "<string>" の変換エラー)

335544334L

-413 Filter not found to convert type <long> to type <long>(型 <long> から型 <long> への変換に使用するフィルタが見つかりません)

335544454L

-501 Invalid request handle(リクエストハンドルが無効です) 335544327L

-501 Attempt to reclose a closed cursor(閉じたカーソルを再び閉じようとしました)

335544577L

-502 Declared cursor already exists(既存のカーソルを宣言しようとしました)

335544574L

-502 Attempt to reopen an open cursor(開いているカーソルを再び開こうとしました)

335544576L

-504 Cursor unknown(未知のカーソルを指定しました) 335544572L

-508 No current record for fetch operation(FETCH 動作に対して現在のレコードがありません)

335544348L

-510 Cursor not updatable(更新不可能なカーソルを指定しました) 335544575L

-518 Request unknown(未知の要求を指定しました) 335544582L

-519 The PREPARE statement identifies a prepare statement with an open cursor

(指定した PREPARE 文が、開いているカーソルの PREPARE 文です)

335544688L

-530 Violation of FOREIGN KEY constraint: "<string>"(FOREIGN KEY 制約 "<string>" に違反しています)

335544466L

-530 Cannot prepare a CREATE DATABASE/SCHEMA statement(CREATE DATABASE/SCHEMA 文を作成できません)

335544597L

表 5.4 SQLCODE のコードとメッセージ ( 続き )

SQLCODE SQLCODE テキスト

InterBase数値

第 5 章 エラーコードとメッセージ 5-11

Page 178: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

S Q L C O D E エラーコードとエラーメッセージ

-532 Transaction marked invalid by I/O error(入出力エラーによって、無効トランザクションのマークが付けられました)

335544469L

-551 No permission for <string> access to <string> <string>(<string> <string> に対する <string> アクセスは許可されていません)

335544352L

-552 Only the owner of a table may reassign ownership(テーブルの所有権を変更できるのはオーナーだけです)

335544550L

-552 User does not have GRANT privileges for operation (ユーザーは、指定された動作の GRANT 特権を持っていません)

335544553L

-553 Cannot modify an existing user privilege(既存のユーザー特権を変更できません)

335544529L

-595 The current position is on a crack(現在の位置のデータが破損しています)

335544645L

-596 Illegal operation when at beginning of stream(ストリームの始まりで無効な動作が行われました)

335544644L

-597 Preceding file did not specify length, so <string> must include starting page number

(直前のファイルに長さの指定がないため、開始ページ番号を <string> に指定しなければなりません)

335544632L

-598 Shadow number must be a positive integer(シャドウ番号は正の整数でなければなりません)

335544633L

-599 Gen.c: node not supported(gen.c:ノードは使用できません) 335544607L

-600 A node name is not permitted in a secondary, shadow, cache or log file name

(二次ファイル名、シャドウ名、キャッシュ名、ログファイル名には、ノード名を指定できません)

335544625L

-600 Sort error: corruption in data structure(ソートエラー:データ構造が破損しています)

335544680L

-601 Database or file exists(既存のデータベースまたはファイルを指定しました)

335544646L

-604 Array declared with too many dimensions(宣言した配列の次元が多すぎます)

335544593L

-604 Illegal array dimension range(配列の次元範囲が無効です) 335544594L

-605 Inappropriate self-reference of column(列の自己参照が不適切です) 335544682L

-607 Unsuccessful metadata update(メタデータの更新が失敗しました) 335544351L

-607 Cannot modify or erase a system trigger(システムトリガーは変更または消去できません)

335544549L

-607 Array/BLOBDATE/TIME/TIMESTAMP datatypes not allowed in arithmetic

(算術式には、配列、BLOB、DATE、TIME、 TIMESTAMP データ型は使用できません)

335544657L

表 5.4 SQLCODE のコードとメッセージ ( 続き )

SQLCODE SQLCODE テキスト

InterBase数値

5-12 言語リファレンス

Page 179: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

S Q L C O D E エラーコードとエラーメッセージ

-615 Lock on table <string> conflicts with existing lock(テーブル <string> のロックが、既存のロックと競合しています)

335544475L

-615 Requested record lock conflicts with existing lock(要求したレコードのロックが既存のロックと競合しています)

335544476L

-615 Refresh range number <long> already in use(REFRESH 範囲番号 <long> はすでに使用されています)

335544507L

-616 Cannot delete PRIMARY KEY being used in FOREIGN KEY definition.

(FOREIGN KEY の定義に使用されている PRIMARY KEY は削除できません)

335544530L

-616 Cannot delete index used by an Integrity Constraint(整合性制約に使用されているインデックスは削除できません)

335544539L

-616 Cannot modify index used by an Integrity Constraint(整合性制約に使用されているインデックスは変更できません)

335544540L

-616 Cannot delete trigger used by a CHECK Constraint(CHECK 制約に使用されているトリガーは削除できません)

335544541L

-616 Cannot delete column being used in an Integrity Constraint.(整合性制約に使用されている列は削除できません)

335544543L

-616 There are <long> dependencies(<long> 個の従属関係があります)

335544630L

-616 Last column in a table cannot be deleted(テーブルの 終列は削除できません)

335544674L

-617 Cannot update trigger used by a CHECK Constraint(CHECK 制約に使用されているトリガーは更新できません)

335544542L

-617 Cannot rename column being used in an Integrity Constraint.(整合性制約に使用されている列は名前を変更できません)

335544544L

-618 Cannot delete index segment used by an Integrity Constraint(整合性制約に使用されているインデックスセグメントは削除できません)

335544537L

-618 Cannot update index segment used by an Integrity Constraint(整合性制約に使用されているインデックスセグメントは更新できません)

335544538L

-625 Validation error for column <string>, value "<string>"(列 <string> の値 "<string>" で検査エラーが発生しました)

335544347L

-637 Duplicate specification of <string> - not supported(<string> の重複指定はサポートされません)

335544664L

-660 Non-existent PRIMARY or UNIQUE KEY specified for FOREIGN KEY

(存在しない PRIMARY KEY または UNIQUE KEY が FOREIGN KEY に指定されました)

335544533L

-660 Cannot create index <string>(インデックス <string> を作成できません)

335544628L

表 5.4 SQLCODE のコードとメッセージ ( 続き )

SQLCODE SQLCODE テキスト

InterBase数値

第 5 章 エラーコードとメッセージ 5-13

Page 180: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

S Q L C O D E エラーコードとエラーメッセージ

-663 Segment count of 0 defined for index <string>(インデックス <string> のセグメントカウントが 0 に設定されています)

335544624L

-663 Too many keys defined for index <string>(インデックス <string> に設定したキーが多すぎます)

335544631L

-663 Too few key columns found for index <string> (incorrect column name?)

(インデックス <string> のキー列が少なすぎます。列名が間違っている可能性があります)

335544672L

-664 Key size exceeds implementation restriction for index "<string>"(インデックス "<string>" のキーサイズが許容範囲を超えています)

335544434L

-677 <string> extension error(<string> の拡張エラー) 335544445L

-685 Invalid BLOB type for operation(この動作では無効な BLOB 型です) 335544465L

-685 Attempt to index BLOB column in index <string>(インデックス <string> で BLOB 列にインデックスを設定しようとしました)

335544670L

-685 Attempt to index array column in index <string>(インデックス <string> で配列型の列にインデックスを設定しようとしました)

335544671L

-689 Page <long> is of wrong type (expected <long>, found <long>)(ページ <long> の型が間違っています。<long> が必要ですが、<long> が指定されました)

335544403L

-689 Wrong page type(ページタイプが間違っています) 335544650L

-690 Segments not allowed in expression index <string>(式インデックス <string> にはセグメントを使用できません)

335544679L

-691 New record size of <long> bytes is too big(変更後のレコードサイズが <long> バイトあり、大きすぎます)

335544681L

-692 Maximum indexes per table (<digit>) exceeded(テーブル当たりの 大インデックス数(<digit>)を超えています)

335544477L

-693 Too many concurrent executions of the same request(同じ要求の並列実行数が多すぎます)

335544663L

-694 Cannot access column <string> in view <string>(ビュー <string> の列 <string> がアクセスできません)

335544684L

-802 Arithmetic exception, numeric overflow, or string truncation(算術式の例外、数値のオーバーフロー、文字列の切り捨てのいずれかが発生しました)

335544321L

-803 Attempt to store duplicate value (visible to active transactions) in unique index "<string>"

(一意なインデックス "<string>" に重複値(動作中のトランザクションからは認識可能)を格納しようとしました)

335544349L

表 5.4 SQLCODE のコードとメッセージ ( 続き )

SQLCODE SQLCODE テキスト

InterBase数値

5-14 言語リファレンス

Page 181: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

S Q L C O D E エラーコードとエラーメッセージ

-803 Violation of PRIMARY or UNIQUE KEY constraint: "<string>"(PRIMARY KEY または UNIQUE KEY 制約 "<string>" に違反しました)

335544665L

-804 wrong number of arguments on call(呼び出し時の引数の数が間違っています)

335544380L

-804 SQLDA missing or incorrect version, or incorrect number/type of variables

(SQLDA が抜けているか、SQLDA のバージョンまたは変数の数 / 型が違います)

335544583L

-804 Count of columns not equal count of values(列の数と値の数が一致しません)

335544584L

-804 Function unknown(未知の関数を指定しました) 335544586L

-806 Only simple column names permitted for VIEW WITH CHECK OPTION

(VIEW WITH CHECK OPTION には単純な列名しか使用できません)

335544600L

-807 No where clause for VIEW WITH CHECK OPTION(VIEW WITH CHECK OPTION に WHERE 句が指定されていません)

335544601L

-808 Only one table allowed for VIEW WITH CHECK OPTION(VIEW WITH CHECK OPTION には 1 つのテーブルしか使用できません)

335544602L

-809 DISTINCT, GROUP or HAVING not permitted for VIEW WITH CHECK OPTION

(VIEW WITH CHECK OPTION には、DISTINCT、GROUP、HAVING は使用できません)

335544603L

-810 No subqueries permitted for VIEW WITH CHECK OPTION(VIEW WITH CHECK OPTION には副クエリーを使用できません)

335544605L

-811 Multiple rows in singleton select(単一行 SELECT に複数行が指定されています)

335544652L

-816 External file could not be opened for output(出力用の外部ファイルを開けませんでした)

335544651L

-817 Attempted update during read-only transaction(読み取り専用のトランザクションで更新を行おうとしました)

335544361L

-817 Attempted write to read-only BLOB(読み取り専用の BLOB に書き込みを行おうとしました)

335544371L

-817 Operation not supported(この操作はサポートされていません) 335544444L

-820 Metadata is obsolete(メタデータは古くなっています) 335544356L

-820 Unsupported on-disk structure for file <string>; found <long>, support <long>

(ファイル <string> のオンディスク構造体はサポートされていません。<long> が使用されていますが、サポートされるのは <long> です)

335544379L

表 5.4 SQLCODE のコードとメッセージ ( 続き )

SQLCODE SQLCODE テキスト

InterBase数値

第 5 章 エラーコードとメッセージ 5-15

Page 182: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

S Q L C O D E エラーコードとエラーメッセージ

-820 Wrong :DYN version(DYN のバージョンが間違っています) 335544437L

-820 Minor version too high found <long> expected <long>(マイナーバージョン番号が大きすぎます。<long> ではなく、<long> になっています)

335544467L

-823 Invalid bookmark handle(ブックマークハンドルが無効です) 335544473L

-824 Invalid lock level <digit>(ロックレベル <digit> は無効です) 335544474L

-825 Invalid lock handle(ロックハンドルが無効です) 335544519L

-826 Invalid statement handle(ステートメントハンドルが無効です) 335544585L

-827 Invalid direction for find operation(検索の方向が無効です) 335544655L

-828 Invalid key position(キーの位置が無効です) 335544678L

-829 Invalid column reference(列の参照が無効です) 335544616L

-830 Column used with aggregate(列に集計関数が使用されています) 335544615L

-831 Attempt to define a second PRIMARY KEY for the same table(同じテーブルに 2 つの PRIMARY KEY を定義しようとしました)

335544548L

-832 FOREIGN KEY column count does not match PRIMARY KEY(FOREIGN KEY の列数が PRIMARY KEY と一致しません)

335544604L

-833 Expression evaluation not supported(式の評価がサポートされていません)

335544606L

-834 Refresh range number <long> not found(REFRESH 範囲番号 <long> が見つかりません)

335544508L

-835 Bad checksum(チェックサムエラー) 335544649L

-836 Exception <digit>(例外 <digit>) 335544517L

-837 Restart shared cache manager(共有キャッシュマネージャを再起動します)

335544518L

-838 Database <string> shutdown in <digit> seconds(データベース <string> を <digit> 秒後にシャットダウンします)

335544560L

-839 journal file wrong format(ジャーナルファイルの形式が間違っています)

335544686L

-840 Intermediate journal file full(中間ジャーナルファイルがいっぱいです)

335544687L

-841 Too many versions(バージョンが多すぎます) 335544677L

-842 Precision should be greater than 0(有効桁数は 0 より大きくなければなりません)

335544697L

-842 Scale cannot be greater than precision(小数点以下の桁数を有効桁数より大きくすることはできません)

335544698L

表 5.4 SQLCODE のコードとメッセージ ( 続き )

SQLCODE SQLCODE テキスト

InterBase数値

5-16 言語リファレンス

Page 183: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

S Q L C O D E エラーコードとエラーメッセージ

-842 Short integer expected(16 ビット整数を入力してください) 335544699L

-842 Long integer expected(32 ビット整数を入力してください) 335544700L

-842 Unsigned short integer expected(符号なし 16 ビット整数を入力してください)

335544701L

-901 Invalid database key(データベースキーが無効です) 335544322L

-901 Unrecognized database parameter block(データベースパラメータブロックを認識できません)

335544326L

-901 Invalid BLOB handle(BLOB ハンドルが無効です) 335544328L

-901 Invalid BLOB ID(BLOB ID が無効です) 335544329L

-901 Invalid parameter in transaction parameter block(トランザクションパラメータブロックのパラメータが無効です)

335544330L

-901 Invalid format for transaction parameter block(トランザクションパラメータブロックの形式が無効です)

335544331L

-901 Invalid transaction handle (expecting explicit transaction start)(トランザクションハンドルが無効です。トランザクションの開始を明示的に指定してください)

335544332L

-901 Attempt to start more than <long> transactions(<long> 個を超える数のトランザクションを起動しようとしました)

335544337L

-901 Information type inappropriate for object specified(指定されたオブジェクトに対するデータ型が不適切です)

335544339L

-901 No information of this type available for object specified(指定されたオブジェクトに対して、このデータ型は使用できません)

335544340L

-901 Unknown information item(未知の情報項目を指定しました) 335544341L

-901 Action cancelled by trigger (<long>) to preserve data integrity(データの整合性を保つため、トリガー(<long>)により動作を取り消しました)

335544342L

-901 Lock conflict on no wait transaction(NO WAIT トランザクションでロックが競合しています)

335544345L

-901 Program attempted to exit without finishing database(データベースを解放せずにプログラムを終了しようとしました)

335544350L

-901 Transaction is not in limbo(トランザクションは limbo 状態ではありません)

335544353L

-901 BLOB was not closed(BLOB が閉じていませんでした) 335544355L

-901 Cannot disconnect database with open transactions (<long> active)(実行中のトランザクション <long> があるため、データベース接続を解除できません)

335544357L

-901 Message length error (encountered <long>, expected <long>)(メッセージ長エラー。<long> ではなく、<long> になっています)

335544358L

表 5.4 SQLCODE のコードとメッセージ ( 続き )

SQLCODE SQLCODE テキスト

InterBase数値

第 5 章 エラーコードとメッセージ 5-17

Page 184: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

S Q L C O D E エラーコードとエラーメッセージ

-901 No transaction for request(要求に対応するトランザクションが存在しません)

335544363L

-901 Request synchronization error(要求の同期エラー) 335544364L

-901 Request referenced an unavailable database(要求が、使用できないデータベースを参照しました)

335544365L

-901 Attempted read of a new, open BLOB(新しく開かれた BLOB を読み込もうとしました)

335544369L

-901 Attempted action on blob outside transaction(トランザクション外の BLOB に対して動作を実行しようとしました)

335544370L

-901 Attempted reference to BLOB in unavailable database(使用できないデータベースにある BLOB を参照しようとしました)

335544372L

-901 Table <string> was omitted from the transaction reserving list(トランザクション予約リストからテーブル <string> が抜けていました)

335544376L

-901 Request includes a DSRI extension not supported in this implementation

(サポートされていない DSRI 拡張が要求に含まれています)

335544377L

-901 Feature is not supported(この機能はサポートされていません)

335544378L

-901 < 文字列 > 335544382L

-901 Unrecoverable conflict with limbo transaction <long>(limbo トランザクション <long> と競合し、復旧できません)

335544383L

-901 Internal error(内部エラー) 335544392L

-901 Database handle not zero(データベースハンドルが 0 ではありません)

335544407L

-901 Transaction handle not zero(トランザクションハンドルが 0 ではありません)

335544408L

-901 Transaction in limbo(トランザクションが limbo 状態です) 335544418L

-901 Transaction not in limbo(トランザクションが limbo 状態ではありません)

335544419L

-901 Transaction outstanding(トランザクションが完了していません) 335544420L

-901 Undefined message number(メッセージ番号が未定義です) 335544428L

-901 Blocking signal has been received(ブロッキング信号を受信しました) 335544431L

-901 Database system cannot read argument <long>(データベースシステムが引数 <long> を読み込めません)

335544442L

-901 Database system cannot write argument <long>(データベースシステムが引数 <long> を書き込めません)

335544443L

表 5.4 SQLCODE のコードとメッセージ ( 続き )

SQLCODE SQLCODE テキスト

InterBase数値

5-18 言語リファレンス

Page 185: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

S Q L C O D E エラーコードとエラーメッセージ

-901 < 文字列 > 335544450L

-901 Transaction <long> is <string>(トランザクション <long> が <string> です)

335544468L

-901 Invalid statement handle(ステートメントハンドルが無効です) 335544485L

-901 Lock time-out on wait transaction(WAIT トランザクションのロックがタイムアウトになりました)

335544510L

-901 Invalid service handle(サービスハンドルが無効です) 335544559L

-901 Wrong version of service parameter block(サービスパラメータブロックのバージョンが間違っています)

335544561L

-901 Unrecognized service parameter block(サービスパラメータブロックを認識できません)

335544562L

-901 Service <string> is not defined(サービス <string> が定義されていません)

335544563L

-901 INDEX <string>(インデックス <string>) 335544609L

-901 EXCEPTION <string>(例外 <string>) 335544610L

-901 Column <string>(列 <string>) 335544611L

-901 Union not supported(UNION はサポートされていません) 335544613L

-901 Unsupported DSQL construct(サポートされていない DSQL を作成しました)

335544614L

-901 Illegal use of keyword VALUE(VALUE キーワードの使用が無効です)

335544623L

-901 TABLE <string>(テーブル <string>) 335544626L

-901 PROCEDURE <string>(プロシージャ <string>) 335544627L

-901 Specified domain or source column does not exist(指定したドメインまたは抽出元の列が存在しません)

335544641L

-901 Variable <string> conflicts with parameter in same procedure(変数 <string> が、同一プロシージャのパラメータと競合しています)

335544656L

-901 Server version too old to support all CREATE DATABASE options(サーバーのバージョンが古いため、CREATE DATABASE のオプションがどれも使用不能です)

335544666L

-901 Cannot delete(削除できません) 335544673L

-901 Sort error(ソートエラー) 335544675L

-902 Internal isc software consistency check (<string>)(isc 内部のソフトウェア一貫性チェック <string>)

335544333L

-902 Database file appears corrupt (<string>)(データベースファイルが破損している可能性があります(<string>))

335544335L

表 5.4 SQLCODE のコードとメッセージ ( 続き )

SQLCODE SQLCODE テキスト

InterBase数値

第 5 章 エラーコードとメッセージ 5-19

Page 186: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

S Q L C O D E エラーコードとエラーメッセージ

-902 I/O error during "<string>" operation for file "<string>"(ファイル "<string>" の "<string>" 操作中に入出力エラーが発生しました)

335544344L

-902 Corrupt system table(システムテーブルが破損しています) 335544346L

-902 Operating system directive <string> failed(オペレーティングシステムの命令 <string> が失敗しました)

335544373L

-902 Internal error(内部エラー) 335544384L

-902 Internal error(内部エラー) 335544385L

-902 Internal error(内部エラー) 335544387L

-902 Block size exceeds implementation restriction(ブロックサイズが許容限度を超えています)

335544388L

-902 Incompatible version of on-disk structure(互換性のないバージョンのオンディスク構造体です)

335544394L

-902 Internal error(内部エラー) 335544397L

-902 Internal error(内部エラー) 335544398L

-902 Internal error(内部エラー) 335544399L

-902 Internal error(内部エラー) 335544400L

-902 Internal error(内部エラー) 335544401L

-902 Internal error(内部エラー) 335544402L

-902 Database corrupted(データベースが破損しています) 335544404L

-902 Checksum error on database page <long>(データベースページ <long> でチェックサムエラーが発生しました)

335544405L

-902 Index is broken(インデックスが破損しています) 335544406L

-902 Transaction--request mismatch (synchronization error)(トランザクションと要求が一致していません(同期エラー))

335544409L

-902 Bad handle count(ハンドルカウントが間違っています) 335544410L

-902 Wrong version of transaction parameter block(トランザクションパラメータブロックのバージョンが間違っています)

335544411L

-902 Unsupported BLR version (expected <long>, encountered <long>)(サポートされない BLR バージョンです。<long> ではなく、<long> が使用されています)

335544412L

-902 Wrong version of database parameter block(データベースパラメータブロックのバージョンが間違っています)

335544413L

-902 Database corrupted(データベースが破損しています) 335544415L

表 5.4 SQLCODE のコードとメッセージ ( 続き )

SQLCODE SQLCODE テキスト

InterBase数値

5-20 言語リファレンス

Page 187: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

S Q L C O D E エラーコードとエラーメッセージ

-902 Internal error(内部エラー) 335544416L

-902 Internal error(内部エラー) 335544417L

-902 Internal error(内部エラー) 335544422L

-902 Internal error(内部エラー) 335544423L

-902 Lock manager error(ロックマネージャのエラー) 335544432L

-902 SQL error code = <long>(SQL エラーコード = <long>) 335544436L

-902 335544448L

-902 335544449L

-902 Cache buffer for page <long> invalid(ページ <long> のキャッシュバッファが無効です)

335544470L

-902 There is no index in table <string> with id <digit>(ID <digit> のテーブル <string> に、インデックスがありません)

335544471L

-902 Your user name and password are not defined. Ask your database administrator to set up an InterBase login.

(ユーザー名とパスワードが定義されていません。データベース管理者に、InterBase のログインを設定してもらってください)

335544472L

-902 Enable journal for database before starting online dump(オンラインダンプを起動する前に、データベースのジャーナル機能をオンにしてください)

335544478L

-902 Online dump failure. Retry dump(オンラインダンプが失敗しました。ダンプをやり直してください)

335544479L

-902 An online dump is already in progress(オンラインダンプはすでに実行中です)

335544480L

-902 No more disk/tape space. Cannot continue online dump(ディスク / テープが容量限界です。オンラインダンプを続行できません)

335544481L

-902 Maximum number of online dump files that can be specified is 16(指定できるオンラインダンプファイルの 大数は 16 です)

335544483L

-902 Database <string> shutdown in progress(データベース <string> をシャットダウン処理中)

335544506L

-902 Long-term journaling already enabled(長期ジャーナル機能はすでに有効になっています)

335544520L

-902 Database <string> shutdown(データベース <string> をシャットダウンします)

335544528L

-902 Database shutdown unsuccessful(データベースのシャットダウンが失敗しました)

335544557L

-902 Cannot attach to password database(パスワードデータベースに接続できません)

335544653L

表 5.4 SQLCODE のコードとメッセージ ( 続き )

SQLCODE SQLCODE テキスト

InterBase数値

第 5 章 エラーコードとメッセージ 5-21

Page 188: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

S Q L C O D E エラーコードとエラーメッセージ

-902 Cannot start transaction for password database(パスワードデータベースに関するトランザクションを起動できません)

335544654L

-902 Long-term journaling not enabled(長期ジャーナル機能が有効になっていません)

335544564L

-902 Dynamic SQL Error(動的 SQL エラー) 335544569L

-904 Invalid database handle (no active connection)(データベースハンドルが無効です。有効な接続がありません)

335544324L

-904 Unavailable database(データベースを使用できない) 335544375L

-904 Implementation limit exceeded(許容限度を超えています) 335544381L

-904 Too many requests(要求が多すぎます) 335544386L

-904 Buffer exhausted(バッファを使い切りました) 335544389L

-904 Buffer in use(バッファは使用中です) 335544391L

-904 Request in use(要求は使用中です) 335544393L

-904 No lock manager available(ロックマネージャを使用できません) 335544424L

-904 Unable to allocate memory from operating system(オペレーティングシステムからメモリが割り当てられません)

335544430L

-904 Update conflicts with concurrent update(更新動作が並列更新と競合しています)

335544451L

-904 Object <string> is in use(オブジェクト <string> は使用中です) 335544453L

-904 Cannot attach active shadow file(アクティブシャドウファイルに接続できません)

335544455L

-904 A file in manual shadow <long> is unavailable(手動シャドウ <long> のファイルが使用不能です)

335544460L

-904 Cannot add index, index root page is full.(インデックスのルートページが容量限界なので、インデックスを追加できません)

335544661L

-904 Sort error: not enough memory(ソートエラー:メモリが不十分) 335544676L

-904 Request depth exceeded. (Recursive definition?)(要求の深さが許容限度を超えています。再帰的定義の可能性があります)

335544683L

-904 Size of optimizer block exceeded ( 適化ブロックのサイズが許容限度を超えています)

335544762L

-906 Product <string> is not licensed(製品 <string> はライセンスされていません)

335544452L

-909 Drop database completed with errors(データベースの削除がエラーに終わりました)

335544667L

表 5.4 SQLCODE のコードとメッセージ ( 続き )

SQLCODE SQLCODE テキスト

InterBase数値

5-22 言語リファレンス

Page 189: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

I n t e r B a s e のステータス配列エラーコード

InterBase のステータス配列エラーコード

ここでは、InterBase エラーコードと、ステータス配列に出力される関連メッセージの表を

記載します。データベースオブジェクトの名前や型がメッセージに含まれている場合は、表

の「メッセージ」欄のコードで表します。

• <string>:データベースオブジェクトの名前や型を示す文字列

• <digit>:データベースオブジェクトやオブジェクト型の識別番号やコードを表す整数値

• <long>:データベースオブジェクトやオブジェクト型の識別番号やコードを表す long(32ビット)整数値

次の表は、埋め込み SQL プログラム、DSQL、isql の SQL ステータス配列コードをまと

めたものです。

-911 Record from transaction <long> is stuck in limbo(トランザクション <long> のレコードが limbo 状態です)

335544459L

-913 Deadlock(デッドロック) 335544336L

-922 File <string> is not a valid database(ファイル <string> は有効なデータベースではありません)

335544323L

-923 Connection rejected by remote interface(リモートインターフェースによって接続が拒否されました)

335544421L

-923 Secondary server attachments cannot validate databases(セカンダリサーバー接続ではデータベースを検査できません)

335544461L

-923 Secondary server attachments cannot start journaling(セカンダリサーバー接続ではジャーナル機能を起動できません)

335544462L

-924 Bad parameters on attach or create database(データベースの接続または作成に関するパラメータが間違っています)

335544325L

-924 Database detach completed with errors(データベースの接続解除がエラーに終わりました)

335544441L

-924 Connection lost to pipe server(パイプサーバーの接続が解除されました)

335544648L

-926 No rollback performed(ロールバックは実行されませんでした) 335544447L

-999 InterBase error(InterBase エラー) 335544689L

表 5.4 SQLCODE のコードとメッセージ ( 続き )

SQLCODE SQLCODE テキスト

InterBase数値

第 5 章 エラーコードとメッセージ 5-23

Page 190: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

I n t e r B a s e のステータス配列エラーコード

表 5.5 InterBase のステータス配列エラーコード

エラーコード 数値 メッセージ

isc_arith_except 335544321L arithmetic exception, numeric overflow, or string truncation(算術式の例外、数値のオーバーフロー、文字列の切り捨てのいずれかが発生しました)

isc_bad_dbkey 335544322L invalid database key(データベースキーが無効です)

isc_bad_db_format 335544323L file <string> is not a valid database(ファイル <string> は有効なデータベースではありません)

isc_bad_db_handle 335544324L invalid database handle (no active connection)(データベースハンドルが無効です。有効な接続がありません)

isc_bad_dpb_content 335544325L bad parameters on attach or create database(データベースの接続または作成に関するパラメータが間違っています)

isc_bad_dpb_form 335544326L unrecognized database parameter block(データベースパラメータブロックを認識できません)

isc_bad_req_handle 335544327L invalid request handle(リクエストハンドルが無効です)

isc_bad_segstr_handle 335544328L invalid BLOB handle(BLOB ハンドルが無効です)

isc_bad_segstr_id 335544329L invalid BLOB ID(BLOB ID が無効です)

isc_bad_tpb_content 335544330L invalid parameter in transaction parameter block(トランザクションパラメータブロックのパラメータが無効です)

isc_bad_tpb_form 335544331L invalid format for transaction parameter block(トランザクションパラメータブロックの形式が無効です)

isc_bad_trans_handle 335544332L invalid transaction handle (expecting explicit transaction start)(トランザクションハンドルが無効です。トランザクションの開始を明示的に指定してください)

isc_bug_check 335544333L internal isc software consistency check (<string>)(isc 内部のソフトウェア整合性チェックエラー(<string>))

isc_convert_error 335544334L conversion error from string "<string>"(文字列 "<string>" の変換エラー)

isc_db_corrupt 335544335L database file appears corrupt (<string>)(データベースファイルが破損している可能性があります(<string>))

5-24 言語リファレンス

Page 191: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

I n t e r B a s e のステータス配列エラーコード

isc_deadlock 335544336L deadlock(デッドロック)

isc_excess_trans 335544337L attempt to start more than <long> transactions(<long> を超える数のトランザクションを起動しようとしました)

isc_from_no_match 335544338L no match for first value expression( 初の数値式が適合しません)

isc_infinap 335544339L information type inappropriate for object specified(指定されたオブジェクトに対するデータ型が不適切です)

isc_infona 335544340L no information of this type available for object specified(指定されたオブジェクトに対して、このデータ型は使用できません)

isc_infunk 335544341L unknown information item(未知のデータ項目を指定しました)

isc_integ_fail 335544342L action cancelled by trigger (<long>) to preserve data integrity(データの整合性を保つため、トリガー(<long>)により動作を取り消しました)

isc_invalid_blr 335544343L invalid request BLR at offset <long>(要求 BLR がオフセット <long> で無効です)

isc_io_error 335544344L I/O error during "<string>" operation for file "<string>"(ファイル "<string>" の "<string>" 操作中に入出力エラーが発生しました)

isc_lock_conflict 335544345L lock conflict on no wait transaction(NO WAIT トランザクションでロックが競合しています)

isc_metadata_corrupt 335544346L corrupt system table(システムテーブルが破損しています)

isc_not_valid 335544347L validation error for column <string>, value "<string>"(列 <string> の値 "<string>" で検査エラーが発生しました)

isc_no_cur_rec 335544348L no current record for fetch operation(FETCH 動作に対して現在のレコードがありません)

isc_no_dup 335544349L attempt to store duplicate value (visible to active transactions) in unique index "<string>"(一意なインデックス "<string>" に重複値(動作中のトランザクションからは認識可能)を格納しようとしました)

表 5.5 InterBase のステータス配列エラーコード ( 続き )

エラーコード 数値 メッセージ

第 5 章 エラーコードとメッセージ 5-25

Page 192: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

I n t e r B a s e のステータス配列エラーコード

isc_no_finish 335544350L program attempted to exit without finishing database(データベースを解放せずにプログラムを終了しようとしました)

isc_no_meta_update 335544351L unsuccessful metadata update(メタデータの更新が失敗しました)

isc_no_priv 335544352L no permission for <string> access to <string> <string>(<string> <string> に対する <string> アクセスは許可されていません)

isc_no_recon 335544353L transaction is not in limbo(トランザクションが limbo 状態ではありません)

isc_no_record 335544354L invalid database key(データベースキーが無効です)

isc_no_segstr_close 335544355L BLOB was not closed(BLOB が閉じていませんでした)

isc_obsolete_metadata 335544356L metadata is obsolete(メタデータが古くなっています)

isc_open_trans 335544357L cannot disconnect database with open transactions (<long> active)(動作中のトランザクション(<long>)があるため、データベース接続を解除できません)

isc_port_len 335544358L message length error (encountered <long>, expected <long>)(メッセージ長エラー。<long> ではなく、<long> になっています)

isc_read_only_field 335544359L attempted update of read-only column(読み取り専用の列を更新しようとしました)

isc_read_only_rel 335544360L attempted update of read-only table(読み取り専用のテーブルを更新しようとしました)

isc_read_only_trans 335544361L attempted update during read-only transaction(読み取り専用トランザクションの動作中に更新を行おうとしました)

isc_read_only_view 335544362L cannot update read-only view <string>(読み取り専用のビュー <string> は更新できません)

isc_req_no_trans 335544363L no transaction for request(要求に対応するトランザクションが存在しません)

isc_req_sync 335544364L request synchronization error(要求の同期エラー)

isc_req_wrong_db 335544365L request referenced an unavailable database(要求が、使用できないデータベースを参照しました)

表 5.5 InterBase のステータス配列エラーコード ( 続き )

エラーコード 数値 メッセージ

5-26 言語リファレンス

Page 193: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

I n t e r B a s e のステータス配列エラーコード

isc_segment 335544366L segment buffer length shorter than expected(セグメントバッファ長が不足しています)

isc_segstr_eof 335544367L attempted retrieval of more segments than exist(存在するセグメント数を超えるセグメントを抽出しようとしました)

isc_segstr_no_op 335544368L attempted invalid operation on a BLOB(BLOB に無効な動作を実行しようとしました)

isc_segstr_no_read 335544369L attempted read of a new, open BLOB(新しく開かれた BLOB を読み込もうとしました)

isc_segstr_no_trans 335544370L attempted action on BLOB outside transaction(トランザクション外の BLOB に動作を実行しようとしました)

isc_segstr_no_write 335544371L attempted write to read-only BLOB(読み取り専用の BLOB に書き込みを行おうとしました)

isc_segstr_wrong_db 335544372L attempted reference to BLOB in unavailable database(使用できないデータベースにある BLOB を参照しようとしました)

isc_sys_request 335544373L operating system directive <string> failed(オペレーティングシステムの命令 <string> が失敗しました)

isc_stream_eof 335544374L attempt to fetch past the last record in a record stream(レコードストリームの 終レコードを過ぎてデータを取り出そうとしました)

isc_unavailable 335544375L unavailable database(データベースが使用不能です)

isc_unres_rel 335544376L Table <string> was omitted from the transaction reserving list(トランザクション予約リストからテーブル <string> が抜けていました)

isc_uns_ext 335544377L request includes a DSRI extension not supported in this implementation(サポートされていない DSRI 拡張が要求に含まれています)

isc_wish_list 335544378L feature is not supported(この機能はサポートされていません)

表 5.5 InterBase のステータス配列エラーコード ( 続き )

エラーコード 数値 メッセージ

第 5 章 エラーコードとメッセージ 5-27

Page 194: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

I n t e r B a s e のステータス配列エラーコード

isc_wrong_ods 335544379L unsupported on-disk structure for file <string>; found <long>, support <long>(ファイル <string> のオンディスク構造体はサポートされていません。<long> ではなく、<long> が見つかりました)

isc_wronumarg 335544380L wrong number of arguments on call(呼び出し時の引数の数が間違っています)

isc_imp_exc 335544381L Implementation limit exceeded(許容限度を超えています)

isc_random 335544382L < 文字列 >

isc_fatal_conflict 335544383L unrecoverable conflict with limbo transaction <long>(limbo トランザクション <long> と競合し、リカバリできません)

isc_badblk 335544384L 内部エラー

isc_invpoolcl 335544385L 内部エラー

isc_nopoolids 335544386L too many requests(要求が多すぎます)

isc_relbadblk 335544387L 内部エラー

isc_blktoobig 335544388L block size exceeds implementation restriction(ブロックサイズが許容限度を超えています)

isc_bufexh 335544389L buffer exhausted(バッファを使い切りました)

isc_syntaxerr 335544390L BLR 構文エラー: expected <string> at offset <long>, encountered <long>(BLR の構文エラー:オフセット <long> にあるべき <string> が、<long> にあります)

isc_bufinuse 335544391L buffer in use(バッファは使用中です)

isc_bdbincon 335544392L 内部エラー

isc_reqinuse 335544393L request in use(要求は使用中です)

isc_badodsver 335544394L incompatible version of on-disk structure(互換性のないバージョンのオンディスク構造体です)

isc_relnotdef 335544395L table <string> is not defined(テーブル <string> が定義されていません)

isc_fldnotdef 335544396L column <string> is not defined in table <string>(テーブル <string> に、列 <string> が定義されていません)

isc_dirtypage 335544397L 内部エラー

表 5.5 InterBase のステータス配列エラーコード ( 続き )

エラーコード 数値 メッセージ

5-28 言語リファレンス

Page 195: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

I n t e r B a s e のステータス配列エラーコード

isc_waifortra 335544398L 内部エラー

isc_doubleloc 335544399L 内部エラー

isc_nodnotfnd 335544400L 内部エラー

isc_dupnodfnd 335544401L 内部エラー

isc_locnotmar 335544402L 内部エラー

isc_badpagtyp 335544403L page <long> is of wrong type (expected <long>, found <long>)(ページ型が間違っています。<long> ではなく、<long> になっています)

isc_corrupt 335544404L database corrupted(データベースが破損しています)

isc_badpage 335544405L checksum error on database page <long>(データベースページ <long> のチェックサムエラー)

isc_badindex 335544406L index is broken(インデックスが破損しています)

isc_dbbnotzer 335544407L database handle not zero(データベースハンドルが 0 でありません)

isc_tranotzer 335544408L transaction handle not zero(トランザクションハンドルが 0 でありません)

isc_trareqmis 335544409L transaction—request mismatch (synchronization error)(トランザクションと要求が一致していません(同期エラー))

isc_badhndcnt 335544410L bad handle count(ハンドルカウントが間違っています)

isc_wrotpbver 335544411L wrong version of transaction parameter block(トランザクションパラメータブロックのバージョンが間違っています)

isc_wroblrver 335544412L unsupported BLR version (expected <long>, encountered <long>)(サポートされない BLR バージョンです。<long> ではなく、<long> が見つかりました)

isc_wrodpbver 335544413L wrong version of database parameter block(データベースパラメータブロックのバージョンが間違っています)

isc_blobnotsup 335544414L BLOB and array datatypes are not supported for <string> operation(<string> 操作は、BLOB と配列のデータ型ではサポートされていません)

表 5.5 InterBase のステータス配列エラーコード ( 続き )

エラーコード 数値 メッセージ

第 5 章 エラーコードとメッセージ 5-29

Page 196: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

I n t e r B a s e のステータス配列エラーコード

isc_badrelation 335544415L database corrupted(データベースが破損しています)

isc_nodetach 335544416L 内部エラー

isc_notremote 335544417L 内部エラー

isc_trainlim 335544418L transaction in limbo(トランザクションが limbo 状態です)

isc_notinlim 335544419L transaction not in limbo(トランザクションが limbo 状態ではありません)

isc_traoutsta 335544420L transaction outstanding(トランザクションが未完了です)

isc_connect_reject 335544421L connection rejected by remote interface(リモートインターフェースによって接続が拒否されました)

isc_dbfile 335544422L 内部エラー

isc_orphan 335544423L 内部エラー

isc_no_lock_mgr 335544424L no lock manager available(ロックマネージャを使用できません)

isc_ctxinuse 335544425L context already in use (BLR error)(すでに使用されているコンテキストです(BLR エラー))

isc_ctxnotdef 335544426L context not defined (BLR error)(コンテキストが設定されていません(BLR エラー))

isc_datnotsup 335544427L data operation not supported(データの操作ができません)

isc_badmsgnum 335544428L undefined message number(メッセージ番号が未定義です)

isc_badparnum 335544429L bad parameter number(パラメータ番号が間違っています)

isc_virmemexh 335544430L unable to allocate memory from operating system(オペレーティングシステムからメモリが割り当てられません)

isc_blocking_signal 335544431L blocking signal has been received(ブロッキング信号を受信しました)

isc_lockmanerr 335544432L lock manager error(ロックマネージャのエラー)

isc_journerr 335544433L communication error with journal "<string>"(ジャーナル "<string>" の通信エラー)

表 5.5 InterBase のステータス配列エラーコード ( 続き )

エラーコード 数値 メッセージ

5-30 言語リファレンス

Page 197: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

I n t e r B a s e のステータス配列エラーコード

isc_keytoobig 335544434L Key size exceeds implementation restriction for index "<string>"(インデックス "<string>" のキーサイズが許容範囲を超えています)

isc_nullsegkey 335544435L null segment of UNIQUE KEY(UNIQUE KEY のセグメントが NULL です)

isc_sqlerr 335544436L SQL error code = <long>(SQL エラーコード = <long>)

isc_wrodynver 335544437L wrong DYN version(DYN のバージョンが間違っています)

isc_funnotdef 335544438L function <string> is not defined(関数 <string> が定義されていません)

isc_funmismat 335544439L function <string> could not be matched(関数 <string> が一致しません)

isc_bad_msg_vec 335544440L

isc_bad_detach 335544441L database detach completed with errors(データベースの接続解除がエラーに終わりました)

isc_noargacc_read 335544442L database system cannot read argument <long>(データベースシステムが引数 <long> を読み込めません)

isc_noargacc_write 335544443L database system cannot write argument <long>(データベースシステムが引数 <long> を書き込めません)

isc_read_only 335544444L operation not supported(この操作はサポートされていません)

isc_ext_err 335544445L <string> extension error(<string> の拡張エラー)

isc_non_updatable 335544446L not updatable(更新できません)

isc_no_rollback 335544447L no rollback performed(ロールバックが実行されませんでした)

isc_bad_sec_info 335544448L

isc_invalid_sec_info 335544449L

isc_misc_interpreted 335544450L < 文字列 >

isc_update_conflict 335544451L update conflicts with concurrent update(更新動作が並列更新と競合しています)

isc_unlicensed 335544452L product <string> is not licensed(製品 <string> はライセンスされていません)

表 5.5 InterBase のステータス配列エラーコード ( 続き )

エラーコード 数値 メッセージ

第 5 章 エラーコードとメッセージ 5-31

Page 198: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

I n t e r B a s e のステータス配列エラーコード

isc_obj_in_use 335544453L object <string> is in use(オブジェクト <string> は使用中です)

isc_nofilter 335544454L filter not found to convert type <long> to type <long>(<long> から <long> への型変換に使用するフィルタが見つかりません)

isc_shadow_accessed 335544455L cannot attach active shadow file(アクティブシャドウファイルに接続できません)

isc_invalid_sdl 335544456L invalid slice description language at offset <long>(スライス記述言語がオフセット < ロング > で無効です)

isc_out_of_bounds 335544457L subscript out of bounds(サブスクリプトが許容範囲外です)

isc_invalid_dimension 335544458L column not array or invalid dimensions (expected <long>, encountered <long>)(列の配列またはサイズが無効です。<long> ではなく、<long> になっています)

isc_rec_in_limbo 335544459L record from transaction <long> is stuck in limbo(トランザクション <long> のレコードが limbo 状態です)

isc_shadow_missing 335544460L a file in manual shadow <long> is unavailable(手動シャドウ <long> のファイルが使用不能です)

isc_cant_validate 335544461L secondary server attachments cannot validate databases(セカンダリサーバー接続によるデータベースは検査できません)

isc_cant_start_journal 335544462L secondary server attachments cannot start journaling(セカンダリサーバー接続によるジャーナル機能の起動ができません)

isc_gennotdef 335544463L generator <string> is not defined(ジェネレータ <string> が定義されていません)

isc_cant_start_logging 335544464L secondary server attachments cannot start logging(セカンダリサーバー接続ではログ機能を起動できません)

isc_bad_segstr_type 335544465L invalid BLOB type for operation(この動作では無効な BLOB 型です)

isc_foreign_key 335544466L violation of FOREIGN KEY constraint: "<string>"(FOREIGN KEY 制約 "<string>" に違反しています)

表 5.5 InterBase のステータス配列エラーコード ( 続き )

エラーコード 数値 メッセージ

5-32 言語リファレンス

Page 199: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

I n t e r B a s e のステータス配列エラーコード

isc_high_minor 335544467L minor version too high found <long> expected <long>(マイナーバージョン番号が大きすぎます。<long> ではなく、<long> になっています)

isc_tra_state 335544468L transaction <long> is <string>(トランザクション <long> が <string> です)

isc_trans_invalid 335544469L transaction marked invalid by I/O error(入出力エラーにより、無効トランザクションのマークが付けられました)

isc_buf_invalid 335544470L cache buffer for page <long> invalid(ページ <long> のキャッシュバッファが無効です)

isc_indexnotdefined 335544471L there is no index in table <string> with id <digit>(ID <digit> のテーブル <string> にインデックスがありません)

isc_login 335544472L Your user name and password are not defined. Ask your database administrator to set up an InterBase login.(ユーザー名とパスワードが定義されていません。データベース管理者に、InterBase のログインを設定してもらってください)

isc_invalid_bookmark 335544473L invalid bookmark handle(ブックマークハンドルが無効です)

isc_bad_lock_level 335544474L invalid lock level <digit>(ロックレベル <digit> が無効です)

isc_relation_lock 335544475L lock on table <string> conflicts with existing lock(テーブル <string> のロックが既存のロックと競合しています)

isc_record_lock 335544476L requested record lock conflicts with existing lock(要求したレコードのロックが既存のロックと競合しています)

isc_max_idx 335544477L maximum indexes per table (<digit>) exceeded(テーブル当たりの 大インデックス数(<digit>)を超えています)

isc_jrn_enable 335544478L enable journal for database before starting online dump(オンラインダンプを起動する前に、データベースのジャーナル機能をオンにしてください)

isc_old_failure 335544479L online dump failure. Retry dump(オンラインダンプが失敗しました。ダンプをやり直してください)

isc_old_in_progress 335544480L an online dump is already in progress(オンラインダンプはすでに実行中です)

表 5.5 InterBase のステータス配列エラーコード ( 続き )

エラーコード 数値 メッセージ

第 5 章 エラーコードとメッセージ 5-33

Page 200: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

I n t e r B a s e のステータス配列エラーコード

isc_old_no_space 335544481L no more disk/tape space. Cannot continue online dump(ディスク / テープが容量限界です。オンラインダンプを続行できません)

isc_num_old_files 335544483L maximum number of online dump files that can be specified is 16(指定できるオンラインダンプファイルの 大数は 16 です)

isc_bad_stmt_handle 335544485L invalid statement handle(ステートメントハンドルが無効です)

isc_stream_not_defined 335544502L reference to invalid stream number(無効なストリーム番号を参照しました)

isc_shutinprog 335544506L database <string> shutdown in progress(データベース <string> をシャットダウン処理中です)

isc_range_in_use 335544507L refresh range number <long> already in use(REFRESH 範囲番号 <long> はすでに使用されています)

isc_range_not_found 335544508L refresh range number <long> not found(REFRESH 範囲番号 <long> が見つかりません)

isc_charset_not_found 335544509L CHARACTER SET <string> is not defined(CHARACTER SET <string> が、定義されていません)

isc_lock_timeout 335544510L lock time-out on wait transaction(WAIT トランザクションのロックがタイムアウトになりました)

isc_prcnotdef 335544511L procedure <string> is not defined(プロシージャ <string> が定義されていません)

isc_prcmismat 335544512L parameter mismatch for procedure <string>(プロシージャ <string> のパラメータが不適切です)

isc_codnotdef 335544515L status code <string> unknown(ステータスコード <string> が未知です)

isc_xcpnotdef 335544516L exception <string> not defined(例外 <string> が定義されていません)

isc_except 335544517L exception <digit>(例外 <digit>)

isc_cache_restart 335544518L restart shared cache manager(共有キャッシュマネージャを再起動します)

isc_bad_lock_handle 335544519L invalid lock handle(ロックハンドルが無効です)

isc_shutdown 335544528L database <string> shutdown(データベース <string> がシャットダウンされます)

表 5.5 InterBase のステータス配列エラーコード ( 続き )

エラーコード 数値 メッセージ

5-34 言語リファレンス

Page 201: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

I n t e r B a s e のステータス配列エラーコード

isc_existing_priv_mod 335544529L cannot modify an existing user privilege (既存のユーザー特権を変更できません)

isc_primary_key_ref 335544530L Cannot delete PRIMARY KEY being used in FOREIGN KEY definition.(FOREIGN KEY の定義に使用されている PRIMARY KEY は削除できません)

isc_primary_key_notnull 335544531L Column used in a PRIMARY/UNIQUE constraint must be NOT NULL.(PRIMARY/UNIQUE 制約に使用する列は NOT NULL でなければなりません)

isc_ref_cnstrnt_notfound 335544532L Name of Referential Constraint not defined in constraints table.(制約テーブルに参照制約の名前が定義されていません)

isc_foreign_key_notfound 335544533L Non-existent PRIMARY or UNIQUE KEY specified for FOREIGN KEY.(存在しない PRIMARY KEY または UNIQUE KEY が FOREIGN KEY に指定されました)

isc_ref_cnstrnt_update 335544534L Cannot update constraints (RDB$REF_CONSTRAINTS).(RDB$REF_CONSTRAINTS の制約を更新できません)

isc_check_cnstrnt_update 335544535L Cannot update constraints (RDB$CHECK_CONSTRAINTS).(RDB$CHECK_CONSTRAINTS の制約を更新できません)

isc_check_cnstrnt_del 335544536L Cannot delete CHECK constraint entry (RDB$CHECK_CONSTRAINTS)(RDB$CHECK_CONSTRAINTS の CHECK 制約エントリを削除できません)

isc_integ_index_seg_del 335544537L Cannot delete index segment used by an Integrity Constraint(整合性制約に使用されているインデックスセグメントは削除できません)

isc_integ_index_seg_mod 335544538L Cannot update index segment used by an Integrity Constraint(整合性制約に使用されているインデックスセグメントは更新できません)

isc_integ_index_del 335544539L Cannot delete index used by an Integrity Constraint(整合性制約で使用されているインデックスを削除できません)

isc_integ_index_mod 335544540L Cannot modify index used by an Integrity Constraint(整合性制約で使用されているインデックスを修正できません)

表 5.5 InterBase のステータス配列エラーコード ( 続き )

エラーコード 数値 メッセージ

第 5 章 エラーコードとメッセージ 5-35

Page 202: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

I n t e r B a s e のステータス配列エラーコード

isc_check_trig_del 335544541L Cannot delete trigger used by a CHECK Constraint(CHECK 制約に使用されているトリガーは削除できません)

isc_check_trig_update 335544542L Cannot update trigger used by a CHECK Constraint(CHECK 制約に使用されているトリガーは更新できません)

isc_cnstrnt_fld_del 335544543L Cannot delete column being used in an Integrity Constraint.(整合性制約に使用されている列は削除できません)

isc_cnstrnt_fld_rename 335544544L Cannot rename column being used in an Integrity Constraint.(整合性制約に使用されている列は名前を変更できません)

isc_rel_cnstrnt_update 335544545L Cannot update constraints (RDB$RELATION_CONSTRAINTS).(RDB$RELATION_CONSTRAINTS の制約を更新できません)

isc_constaint_on_view 335544546L Cannot define constraints on views(ビューに対する制約を定義できません)

isc_invld_cnstrnt_type 335544547L internal isc software consistency check (invalid RDB$CONSTRAINT_TYPE)(isc 内部のソフトウェア一貫性チェックエラー。RDB$CONSTRAINT TYPE が無効です)

isc_primary_key_exists 335544548L Attempt to define a second PRIMARY KEY for the same table(同じテーブルに 2 つの PRIMARY KEY を定義しようとしました)

isc_systrig_update 335544549L cannot modify or erase a system trigger(システムトリガーは変更または消去できません)

isc_not_rel_owner 335544550L only the owner of a table may reassign ownership(テーブルの所有権を変更できるのはオーナーだけです)

isc_grant_obj_notfound 335544551L could not find table/procedure for GRANT(GRANT でテーブル / プロシージャが見つかりませんでした)

isc_grant_fld_notfound 335544552L could not find column for GRANT(GRANT で列が見つかりませんでした)

isc_grant_nopriv 335544553L user does not have GRANT privileges for operation(ユーザーは指定した動作の GRANT 特権を持っていません)

表 5.5 InterBase のステータス配列エラーコード ( 続き )

エラーコード 数値 メッセージ

5-36 言語リファレンス

Page 203: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

I n t e r B a s e のステータス配列エラーコード

isc_nonsql_security_rel 335544554L table/procedure has non-SQL security class defined(テーブル / プロシージャに、SQL 以外のセキュリティクラスが設定されています)

isc_nonsql_security_fld 335544555L column has non-SQL security class defined(列に、SQL 以外のセキュリティクラスが設定されています)

isc_shutfail 335544557L database shutdown unsuccessful(データベースのシャットダウンが失敗しました)

isc_check_constraint 335544558L Operation violates CHECK constraint <string> on view or table(ビューまたはテーブルに対する CHECK 制約 <string> に違反しています)

isc_bad_svc_handle 335544559L invalid service handle(サービスハンドルが無効です)

isc_shutwarn 335544560L database <string> shutdown in <digit> seconds(<digit> 秒後に、データベース <string> をシャットダウンします)

isc_wrospbver 335544561L wrong version of service parameter block(サービスパラメータブロックのバージョンが間違っています)

isc_bad_spb_form 335544562L unrecognized service parameter block(サービスパラメータブロックを認識できません)

isc_svcnotdef 335544563L service <string> is not defined(サービス <string> が定義されていません)

isc_no_jrn 335544564L long-term journaling not enabled(長期ジャーナル機能が有効になっていません)

isc_transliteration_failed 335544565L Cannot transliterate character between character sets(キャラクタセット間で変換を行うことができません)

isc_text_subtype 335544568L Implementation of text subtype <digit> not located.(テキストサブタイプ <digit> の実装が見つかりませんでした)

isc_dsql_error 335544569L Dynamic SQL Error(動的 SQL エラー)

isc_dsql_command_err 335544570L Invalid command(コマンドが無効です)

isc_dsql_constant_err 335544571L Datatype for constant unknown(未知の定数データ型です)

isc_dsql_cursor_err 335544572L Cursor unknown(未知のカーソルを指定しました)

isc_dsql_datatype_err 335544573L Datatype unknown(未知のデータ型を指定しました)

表 5.5 InterBase のステータス配列エラーコード ( 続き )

エラーコード 数値 メッセージ

第 5 章 エラーコードとメッセージ 5-37

Page 204: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

I n t e r B a s e のステータス配列エラーコード

isc_dsql_decl_err 335544574L Declared cursor already exists(既存のカーソルを宣言しようとしました)

isc_dsql_cursor_update_err 335544575L Cursor not updatable(更新不可能なカーソルを指定しました)

isc_dsql_cursor_open_err 335544576L Attempt to reopen an open cursor(開いているカーソルを再び開こうとしました)

isc_dsql_cursor_close_err 335544577L Attempt to reclose a closed cursor(閉じたカーソルを再び閉じようとしました)

isc_dsql_field_err 335544578L Column unknown(未知の列を指定しました)

isc_dsql_internal_err 335544579L Internal error(内部エラー)

isc_dsql_relation_err 335544580L Table unknown(未知のテーブルを指定しました)

isc_dsql_procedure_err 335544581L Procedure unknown(未知のプロシージャを指定しました)

isc_dsql_request_err 335544582L Request unknown(未知の要求を指定しました)

isc_dsql_sqlda_err 335544583L SQLDA missing or incorrect version, or incorrect number/type of variables(SQLDA が抜けているか、SQLDA のバージョンまたは変数の数 / 型が違います)

isc_dsql_var_count_err 335544584L Count of columns not equal count of values(列の数と値の数が一致しません)

isc_dsql_stmt_handle 335544585L Invalid statement handle(ステートメントハンドルが無効です)

isc_dsql_function_err 335544586L Function unknown(未知の関数を指定しました)

isc_dsql_blob_err 335544587L Column is not a BLOB(列が BLOB ではありません)

isc_collation_not_found 335544588L COLLATION <string> is not defined(COLLATION <string> が定義されていません)

isc_collation_not_for_charset 335544589L COLLATION <string> is not valid for specified CHARACTER SET(COLLATION <string> が、指定したキャラクタセットでは無効です)

isc_dsql_dup_option 335544590L Option specified more than once(同じオプションを複数回指定しました)

isc_dsql_tran_err 335544591L Unknown transaction option(未知のトランザクションオプションを指定しました)

isc_dsql_invalid_array 335544592L Invalid array reference(配列の参照が無効です)

表 5.5 InterBase のステータス配列エラーコード ( 続き )

エラーコード 数値 メッセージ

5-38 言語リファレンス

Page 205: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

I n t e r B a s e のステータス配列エラーコード

isc_dsql_max_arr_dim_exceeded 335544593L Array declared with too many dimensions(宣言した配列の次元が多すぎます)

isc_dsql_arr_range_error 335544594L Illegal array dimension range(配列の次元範囲が無効です)

isc_dsql_trigger_err 335544595L Trigger unknown(未知のトリガーを指定しました)

isc_dsql_subselect_err 335544596L Subselect illegal in this context(このコンテキストでは副選択文が無効です)

isc_dsql_crdb_prepare_err 335544597L Cannot prepare a CREATE DATABASE/SCHEMA statement(CREATE DATABASE/SCHEMA 文を作成できません)

isc_specify_field_err 335544598L must specify column name for view select expression(ビュー選択式には列名を指定しなければなりません)

isc_num_field_err 335544599L number of columns does not match select list(列数が選択リストと一致しません)

isc_col_name_err 335544600L Only simple column names permitted for VIEW WITH CHECK OPTION(VIEW WITH CHECK OPTION には単純な列名しか使用できません)

isc_where_err 335544601L No WHERE clause for VIEW WITH CHECK OPTION(VIEW WITH CHECK OPTION に WHERE 句が指定されていません)

isc_table_view_err 335544602L Only one table allowed for VIEW WITH CHECK OPTION(VIEW WITH CHECK OPTION には 1 つのテーブルしか使用できません)

isc_distinct_err 335544603L DISTINCT, GROUP or HAVING not permitted for VIEW WITH CHECK OPTION(VIEW WITH CHECK OPTION には、DISTINCT、GROUP、HAVING は使用できません)

isc_key_field_count_err 335544604L FOREIGN KEY column count does not match PRIMARY KEY(FOREIGN KEY の列数が PRIMARY KEY と一致しません)

isc_subquery_err 335544605L No subqueries permitted for VIEW WITH CHECK OPTION(VIEW WITH CHECK OPTION には副クエリーを使用できません)

表 5.5 InterBase のステータス配列エラーコード ( 続き )

エラーコード 数値 メッセージ

第 5 章 エラーコードとメッセージ 5-39

Page 206: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

I n t e r B a s e のステータス配列エラーコード

isc_expression_eval_err 335544606L expression evaluation not supported(式の評価がサポートされていません)

isc_node_err 335544607L gen.c: node not supported(gen.c:ノードは使用できません)

isc_command_end_err 335544608L Unexpected end of command(コマンドが完了せずに終了しました)

isc_index_name 335544609L INDEX <string>(インデックス <string>)

isc_exception_name 335544610L EXCEPTION <string>(例外 <string>)

isc_field_name 335544611L COLUMN <string>(列 <string>)

isc_token_err 335544612L Token unknown(未知のトークンを指定しました)

isc_union_err 335544613L union not supported(UNION はサポートされていません)

isc_dsql_construct_err 335544614L Unsupported DSQL construct(サポートされていない DSQL 構文です)

isc_field_aggregate_err 335544615L column used with aggregate(列に集計関数が使用されています)

isc_field_ref_err 335544616L invalid column reference(列の参照が無効です)

isc_order_by_err 335544617L invalid ORDER BY clause(ORDER BY 句が無効です)

isc_return_mode_err 335544618L Return mode by value not allowed for this datatype(このデータ型では、値で返すモードを使用できません)

isc_extern_func_err 335544619L External functions cannot have more than 10 parameters(外部関数に使用できるパラメータ数は 10 までです)

isc_alias_conflict_err 335544620L alias <string> conflicts with an alias in the same statement(エイリアス <string> が、同一の文に指定したエイリアスと重複しています)

isc_procedure_conflict_error 335544621L alias <string> conflicts with a procedure in the same statement(エイリアス <string> が、同一の文に指定したプロシージャと重複しています)

isc_relation_conflict_err 335544622L alias <string> conflicts with a table in the same statement(エイリアス <string> が、同一の文に指定したテーブルと重複しています)

表 5.5 InterBase のステータス配列エラーコード ( 続き )

エラーコード 数値 メッセージ

5-40 言語リファレンス

Page 207: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

I n t e r B a s e のステータス配列エラーコード

isc_dsql_domain_err 335544623L Illegal use of keyword VALUE(VALUE キーワードの使用が無効です)

isc_idx_seg_err 335544624L segment count of 0 defined for index <string>(インデックス <string> のセグメントカウントが 0 に設定されています)

isc_node_name_err 335544625L A node name is not permitted in a secondary, shadow, cache or log file name(二次ファイル名、シャドウ名、キャッシュ名、ログファイル名には、ノード名を指定できません)

isc_table_name 335544626L TABLE <string>(テーブル <string>)

isc_proc_name 335544627L PROCEDURE <string>(プロシージャ <string>)

isc_idx_create_err 335544628L cannot create index <string>(インデックス <string> を作成できません)

isc_dependency 335544630L there are <long> dependencies(従属関係の数が <long> になっています)

isc_idx_key_err 335544631L too many keys defined for index <string>(インデックス <string> に設定したキーが多すぎます)

isc_dsql_file_length_err 335544632L Preceding file did not specify length, so <string> must include starting page number(直前のファイルに長さの指定がないため、開始ページ番号を <string> に指定しなければなりません)

isc_dsql_shadow_number_err 335544633L Shadow number must be a positive integer(シャドウ番号は正の整数でなければなりません)

isc_dsql_token_unk_err 335544634L Token unknown - line <long>, char <long>(<long> 行め、<long> 字目に未知のトークンがあります)

isc_dsql_no_relation_alias 335544635L there is no alias or table named <string> at this scope level(指定した範囲のレベルに、<string> というエイリアスまたはテーブルはありません)

isc_indexname 335544636L there is no index <string> for table <string>(テーブル <string> にインデックス <string> はありません)

isc_no_stream_plan 335544637L table <string> is not referenced in plan(テーブル <string> は参照されていません)

isc_stream_twice 335544638L table <string> is referenced more than once in plan; use aliases to distinguish(テーブル <string> が複数回参照されています。エイリアスを使って区別してください)

表 5.5 InterBase のステータス配列エラーコード ( 続き )

エラーコード 数値 メッセージ

第 5 章 エラーコードとメッセージ 5-41

Page 208: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

I n t e r B a s e のステータス配列エラーコード

isc_stream_not_found 335544639L table <string> is referenced in the plan but not the from list(テーブル <string> が参照されていますが、リストに指定されていません)

isc_collation_requires_text 335544640L Invalid use of CHARACTER SET または COLLATE(CHARACTER SET または COLLATE の使用が無効です)

isc_dsql_domain_not_found 335544641L Specified domain or source column does not exist(指定したドメインまたは抽出元の列が存在しません)

isc_index_unused 335544642L index <string> cannot be used in the specified plan(インデックス <string> は指定したプランでは使用できません)

isc_dsql_self_join 335544643L the table <string> is referenced twice; use aliases to differentiate(テーブル <string> が 2 回参照されています。エイリアスを使って区別してください)

isc_stream_bof 335544644L illegal operation when at beginning of stream(ストリームの始まりで無効な動作が行われました)

isc_stream_crack 335544645L the current position is on a crack(現在の位置のデータが破損しています)

isc_db_or_file_exists 335544646L database or file exists(既存のデータベースまたはファイルを指定しました)

isc_invalid_operator 335544647L invalid comparison operator for find operation(検索動作に、無効な比較演算子が指定されています)

isc_conn_lost 335544648L Connection lost to pipe server(パイプサーバーの接続が解除されました)

isc_bad_checksum 335544649L bad checksum(チェックサムエラー)

isc_page_type_err 335544650L wrong page type(ページタイプが間違っています)

isc_ext_readonly_err 335544651L external file could not be opened for output(出力用の外部ファイルを開けませんでした)

isc_sing_select_err 335544652L multiple rows in singleton select(単一行 SELECT に複数行が指定されています)

isc_psw_attach 335544653L cannot attach to password database(パスワードデータベースに接続できません)

表 5.5 InterBase のステータス配列エラーコード ( 続き )

エラーコード 数値 メッセージ

5-42 言語リファレンス

Page 209: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

I n t e r B a s e のステータス配列エラーコード

isc_psw_start_trans 335544654L cannot start transaction for password database(パスワードデータベースにはトランザクションを起動できません)

isc_invalid_direction 335544655L invalid direction for find operation(検索の方向が無効です)

isc_dsql_var_conflict 335544656L variable <string> conflicts with parameter in same procedure(変数 <string> が、同一プロシージャのパラメータと重複しています)

isc_dsql_no_blob_array 335544657L Array/BLOB/DATE/TIME/TIMESTAMP datatypes not allowed in arithmetic(算術式には、配列、BLOB、DATE、TIME、 TIMESTAMP データ型は使用できません)

isc_dsql_base_table 335544658L <string> is not a valid base table of the specified view(<string> は、指定したビューの有効なベーステーブルではありません)

isc_duplicate_base_table 335544659L table <string> is referenced twice in view; use an alias to distinguish(テーブル <string> がビューで 2 回参照されています。エイリアスを使って区別してください)

isc_view_alias 335544660L view <string> has more than one base table; use aliases to distinguish(ビュー <string> には複数のベーステーブルがあります。エイリアスを使って区別してください)

isc_index_root_page_full 335544661L cannot add index, index root page is full.(インデックスのルートページが容量限界なので、インデックスが追加できません)

isc_dsql_blob_type_unknown 335544662L BLOB SUB_TYPE <string> is not defined(BLOB SUB_TYPE <string> が定義されていません)

isc_req_max_clones_exceeded 335544663L Too many concurrent executions of the same request(同じ要求の並列実行数が多すぎます)

isc_dsql_duplicate_spec 335544664L duplicate specification of <string> - not supported(<string> の重複指定はサポートされていません)

isc_unique_key_violation 335544665L violation of PRIMARY or UNIQUE KEY constraint: "<string>"(PRIMARY KEY または UNIQUE KEY 制約 "<string>" に違反しました)

isc_srvr_version_too_old 335544666L server version too old to support all CREATE DATABASE options(サーバーのバージョンが古いため CREATE DATABASE のオプションはサポートされません)

表 5.5 InterBase のステータス配列エラーコード ( 続き )

エラーコード 数値 メッセージ

第 5 章 エラーコードとメッセージ 5-43

Page 210: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

I n t e r B a s e のステータス配列エラーコード

isc_drdb_completed_with_errs 335544667L drop database completed with errors(データベースの削除がエラーに終わりました)

isc_dsql_procedure_use_err 335544668L procedure <string> does not return any values(プロシージャ <string> が値を返していません)

isc_dsql_count_mismatch 335544669L count of column list and variable list do not match(列リストと変数リストの数が一致していません)

isc_blob_idx_err 335544670L attempt to index BLOB column in index <string>(インデックス <string> に、BLOB 列のインデックスを設定しようとしました)

isc_array_idx_err 335544671L attempt to index array column in index <string>(インデックス <string> に、配列型の列のインデックスを設定しようとしました)

isc_key_field_err 335544672L too few key columns found for index <string> (incorrect column name?)(インデックス <string> のキー列が少なすぎます。列名が間違っている恐れがあります)

isc_no_delete 335544673L cannot delete(削除できません)

isc_del_last_field 335544674L last column in a table cannot be deleted(テーブルの 終列は削除できません)

isc_sort_err 335544675L sort error(ソートエラー)

isc_sort_mem_err 335544676L sort error: not enough memory(ソートエラー:メモリが不十分)

isc_version_err 335544677L too many versions(バージョンが多すぎます)

isc_inval_key_posn 335544678L invalid key position(キーの位置が無効です)

isc_no_segments_err 335544679L segments not allowed in expression index <string>(式インデックス <string> にはセグメントを使用できません)

isc_crrp_data_err 335544680L sort error: corruption in data structure(ソートエラー:データ構造が破損しています)

isc_rec_size_err 335544681L new record size of <long> bytes is too big(変更後のレコードサイズ <long> バイトは大きすぎます)

isc_dsql_field_ref 335544682L Inappropriate self-reference of column(列の自己参照が不適切です)

isc_req_depth_exceeded 335544683L request depth exceeded. (Recursive definition?)(要求の深さが許容限度を超えています。再帰的定義の可能性があります)

表 5.5 InterBase のステータス配列エラーコード ( 続き )

エラーコード 数値 メッセージ

5-44 言語リファレンス

Page 211: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

I n t e r B a s e のステータス配列エラーコード

isc_no_field_access 335544684L cannot access column <string> in view <string>(ビュー <string> の列 <string> にアクセスできません)

isc_no_dbkey 335544685L dbkey not available for multi-table views(マルチテーブルビューには dbkey を使用できません)

isc_dsql_open_cursor_request 335544688L The prepare statement identifies a prepare statement with an open cursor(指定した PREPARE 文が、開いているカーソルの PREPARE 文を指定しています)

isc_ib_error 335544689L InterBase error(InterBase エラー)

isc_cache_redef 335544690L Cache redefined(キャッシュの設定が変更されています)

isc_cache_too_small 335544691L Cache length too small(キャッシュの長さが不足しています)

isc_precision_err 335544697L Precision should be greater than 0(有効桁数は 0 より大きくなければなりません)

isc_scale_nogt 335544698L Scale cannot be greater than precision(小数点以下の桁数を有効桁数より大きくすることはできません)

isc_expec_short 335544699L Short integer expected(16 ビット整数を入力してください)

isc_expec_long 335544700L Long integer expected(32 ビット整数を入力してください)

isc_expec_ushort 335544701L Unsigned short integer expected(符号なし 16 ビット整数を入力してください)

isc_like_escape_invalid 335544702L Invalid ESCAPE sequence(無効な ESCAPE シーケンスを指定しました)

isc_svcnoexe 335544703L service <string> does not have an associated executable(サービス <string> に対応する実行可能プロシージャがありません)

isc_net_lookup_err 335544704L Network lookup failure for host "<string>"(ホスト "<string>" のネットワーク検索エラー)

isc_service_unknown 335544705L Undefined service <string>/<string>(サービス <string>/<string> が、定義されていません)

isc_host_unknown 335544706L Host unknown(未知のホストを指定しました)

表 5.5 InterBase のステータス配列エラーコード ( 続き )

エラーコード 数値 メッセージ

第 5 章 エラーコードとメッセージ 5-45

Page 212: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

I n t e r B a s e のステータス配列エラーコード

isc_grant_nopriv_on_base 335544707L user does not have GRANT privileges on base table/view for operation(ユーザーは、動作対象のベーステーブル / ビューの GRANT 特権を持っていません)

isc_dyn_fld_ambiguous 335544708L Ambiguous column reference.(列の参照指定があいまいです)

isc_dsql_agg_ref_err 335544709L Invalid aggregate reference(無効な集計関数を参照しました)

isc_complex_view 335544710L navigational stream <long> references a view with more than one base table.(ナビゲーショナルストリーム <long> が、複数のベーステーブルを持つビューを参照しました)

isc_unprepared_stmt 335544711L attempt to execute an unprepared dynamic SQL statement(未作成の動的 SQL 文を実行しようとしました)

isc_expec_positive 335544712L Positive value expected.(正の数値を入力してください)

isc_dsql_sqlda_value_err 335544713L Incorrect values within SQLDA structure(SQLDA 構造体内の値が間違っています)

isc_invalid_array_id 335544714L invalid BLOB id(BLOB ID が無効です)

isc_ext_file_uns_op 335544715L operation not supported for EXTERNAL FILE table <string>(EXTERNAL FILE テーブル <string> に対する動作がサポートされていません)

isc_svc_in_use 335544716L service is currently busy:(サービスは現在使用中です)< 文字列 >

isc_err_stack_limit 335544717L stack size insufficient to execute current request(現在の要求を実行するためのスタックサイズが不足しています)

isc_invalid_key 335544718L invalid key for find operation(検索操作で無効なキーが指定されました)

isc_net_init_error 335544719L error initializing the network software(ネットワークソフトウェアの初期化エラーです)

isc_loadlib_failure 335544720L unable to load required library <string>(要求されたライブラリ <string> をロードできません)

isc_network_error 335544721L unable to complete network request to host "<string>"(ホスト "<string>" へのネットワークリクエストを完了できません)

表 5.5 InterBase のステータス配列エラーコード ( 続き )

エラーコード 数値 メッセージ

5-46 言語リファレンス

Page 213: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

I n t e r B a s e のステータス配列エラーコード

isc_net_connect_err 335544722L failed to establish a connection(接続の確立に失敗しました)

isc_net_connect_listen_err 335544723L error while listening for an incoming connection(接続待機中にエラーが発生しました)

isc_net_event_connect_err 335544724L failed to establish a secondary connection for event processing(イベント処理で二次接続の確立に失敗しました)

isc_net_event_listen_err 335544725L error while listening for an incoming event connection request(イベント接続要求の待機中にエラーが発生しました)

isc_net_read_err 335544726L error reading data from the connection(接続からのデータの読み取りエラーです)

isc_net_write_err 335544727L error writing data to the connection(接続へのデータの書き込みエラーです)

isc_integ_index_deactivate 335544728L cannot deactivate index used by an Integrity Constraint(整合性制約で使用されているインデックスは使用停止できません)

isc_integ_deactivate_primary 335544729L cannot deactivate primary index(一次インデックスは使用停止できません)

isc_unsupported_network_drive 335544732L access to databases on file servers is not supported(ファイルサーバー上のデータベースへのアクセスはサポートされません)

isc_io_create_err 335544733L error while trying to create file(ファイル作成エラー)

isc_io_open_err 335544734L error while trying to open file(ファイルオープンエラー)

isc_io_close_err 335544735L error while trying to close file(ファイルクローズエラー)

isc_io_read_err 335544736L error while trying to read from file(ファイル読み取りエラー)

isc_io_write_err 335544737L error while trying to write to file(ファイル書き込みエラー)

isc_io_delete_err 335544738L error while trying to delete file(ファイル削除エラー)

isc_io_access_err 335544739L error while trying to access file(ファイルアクセスエラー)

表 5.5 InterBase のステータス配列エラーコード ( 続き )

エラーコード 数値 メッセージ

第 5 章 エラーコードとメッセージ 5-47

Page 214: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

I n t e r B a s e のステータス配列エラーコード

isc_udf_exception 335544740L exception <integer> detected in blob filter or user defined function(BLOB フィルタまたはユーザー定義関数で例外 <integer> が検出されました)

isc_lost_db_connection 335544741L connection lost to database(データベースへの接続が失われました)

isc_no_write_user_priv 335544742L user cannot write to RDB$USER_PRIVILEGES(ユーザーは RDB$USER_PRIVILEGES には書き込めません)

isc_token_too_long 335544743L token size exceeds limit(トークンのサイズが許容限度を超えています)

isc_max_att_exceeded 335544744L maximum user count exceeded; contact your database administrator(ユーザー数が 大値を超えました。データベース管理者に連絡してください)

isc_login_same_as_role_name 335544745L your login <string> is same as one of the SQL role name; ask your database administrator to set up a valid InterBase login(ログイン <string> が SQL ロール名と重複しています。データベース管理者に有効な InterBase ログイン名を作成してもらってください)

isc_reftable_requires_pk 335544746L "REFERENCES table" without "(column)"; requires PRIMARY KEY on referenced table("REFERENCES table" で列が指定されていません。参照先のテーブルに PRIMARY KEY が必要です)

isc_usrname_too_long 335544747L the username entered is too long. Maximum length is 31 bytes.(ユーザー名が長すぎます。 大長は 31 バイトです)

isc_password_too_long 335544748L the password specified is too long. Maximum length is 8 bytes.(パスワードが長すぎます。 大長は 8 バイトです)

isc_usrname_required 335544749L a username is required for this operation.(この操作にはユーザー名が必要です)

isc_password_required 335544750L a password is required for this operation(この操作にはパスワードが必要です)

isc_bad_protocol 335544751L the network protocol specified is invalid(無効なネットワークプロトコルが指定されました)

isc_dup_usrname_found 335544752L a duplicate user name was found in the security database(セキュリティデータベース内でユーザー名が重複しています)

表 5.5 InterBase のステータス配列エラーコード ( 続き )

エラーコード 数値 メッセージ

5-48 言語リファレンス

Page 215: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

I n t e r B a s e のステータス配列エラーコード

isc_usrname_not_found 335544753L the user name specified was not found in the security database(セキュリティデータベース内に、指定されたユーザー名が見つかりませんでした)

isc_error_adding_sec_record 335544754L error while attempting to add the user(ユーザーの追加時にエラーが発生しました)

isc_error_modifying_sec_record 335544755L error while attempting to modify the user record(ユーザーレコードの変更時にエラーが発生しました)

isc_error_deleting_sec_record 335544756L error while attempting to delete the user record(ユーザーレコードの削除時にエラーが発生しました)

eisc_rror_updating_sec_db 335544757L error while updating the security database(セキュリティデータベースの更新時にエラーが発生しました)

isc_sort_rec_size_err 335544758L sort record size is too big(ソートするレコードのサイズが大きすぎます)

isc_bad_default_value 335544759L Cannot assign a NULL default value to a column with a NOT NULL constraint(NOT NULL 制約が設定されている列に、デフォルト値として NULL を割り当てることはできません)

isc_invalid_clause 335544760L the specified user-entered string is not valid(指定されたユーザー入力文字列が無効です)

isc_too_many_handles 335544761L too many open handles to database(データベースに対して開かれているハンドルが多すぎます)

isc_optimizer_blk_exc 335544762L Optimizer implementation limits are exceeded; for example, only 256 conjuncts (ANDs and ORs) are allowed(オプティマイザの実装制限を超えています。たとえば、有効な論理積演算(AND、OR)の数は 256 までです)

表 5.5 InterBase のステータス配列エラーコード ( 続き )

エラーコード 数値 メッセージ

第 5 章 エラーコードとメッセージ 5-49

Page 216: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

I n t e r B a s e のステータス配列エラーコード

5-50 言語リファレンス

Page 217: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

第 章

第 6 章システムテーブル、一時テーブル、ビュー

この章では、InterBase のシステムテーブルと SQL システムビューについて説明します。

重要 InterBase では、"RDB$" または "TMP$" で始まる名前を付けられるのはシステムオブジェク

トに対してだけです。テーブル、ビュー、トリガー、ストアドプロシージャ、インデック

ス、ジェネレータ、ドメイン、およびロールを含めて、他のオブジェクトにはこれらの文

字列で始まる名前は付けられません。

概要

InterBase システムテーブルは、メタデータの格納と管理に使用します。 システムテーブル

は、データベースの作成時に自動的に作成されます。 ユーザーがメタデータの作成や変更を

行うと、SQL データ定義ユーティリティがシステムテーブルを自動的に更新します。

システム一時テーブルを使用すると、データベースやその接続、およびトランザクション

に対する制御のレベルに関する情報にアクセスできます。デフォルトでは、すべてのユー

ザーが永続的システム テーブルに対して SELECT 文を実行できますが、書き込みを行え

るのはデータベース所有者と SYSDBA ユーザーだけです。システム一時テーブルにアク

セスするためには、データベース所有者または SYSDBA から明示的にアクセス権を付与

してもらう必要があります。データベース所有者や SYSDBA は、必要であれば書き込み

アクセス権を他のユーザーに付与することもできます。システム テーブルのセキュリティ

についての詳細は、『操作ガイド』を参照してください。

SQL システムビューは、データベースの既存の整合性制約に関する情報を提供します。 シス

テムビューは、データベース定義の後に isql スクリプトを作成および実行して、自分で作

成する必要があります。 ビューを作成するコードと、その結果得られるテーブル構造体につ

いては 6-48 ページの「システムビュー」を参照してください。

第 6 章 システムテーブル、一時テーブル、ビュー 6-1

Page 218: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

システムテーブル

システムテーブルを参照するには、次の isql コマンドを使用します。

SHOW SYSTEM TABLES;

次の isql コマンドを使用すると、システムビューとデータベースビューが表示されます。

SHOW VIEWS;

システムテーブル

次の表は、InterBase システムテーブルの一覧です。 システムテーブルと列の名前は、RDB$で始まります。

表 6.1 システム テーブル

RDB$CHARACTER_SETS RDB$LOG_FILES

RDB$CHECK_CONSTRAINTS RDB$PAGES

RDB$COLLATIONS RDB$PROCEDURE_PARAMETERS

RDB$DATABASE RDB$PROCEDURES

RDB$DEPENDENCIES RDB$REF_CONSTRAINTS

RDB$EXCEPTIONS RDB$RELATION_CONSTRAINTS

RDB$FIELD_DIMENSIONS RDB$RELATION_FIELDS

RDB$FIELDS RDB$RELATIONS

RDB$FILES RDB$ROLES

RDB$FILTERS RDB$SECURITY_CLASSES

RDB$FORMATS RDB$TRANSACTIONS

RDB$FUNCTION_ARGUMENTS RDB$TRIGGER_MESSAGES

RDB$FUNCTIONS RDB$TRIGGERS

RDB$GENERATORS RDB$TYPES

RDB$INDEX_SEGMENTS RDB$USER_PRIVILEGES

RDB$INDICES RDB$USERS

RDB$JOURNAL_ARCHIVES RDB$VIEW_RELATIONS

6-2 言語リファレンス

Page 219: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

システムテーブル

RDB$CHARACTER_SETS

RDB$CHARACTER_SETS は、InterBase で使用できる有効なキャラクタセットを記述します。

表 6.2 RDB$CHARACTER_SETS

列名 データ型 長さ 説明

RDB$CHARACTER_SET_NAME CHAR 67 InterBase が認識するキャラクタセット名

RDB$FORM_OF_USE CHAR 67 内部の使用に予約されています。 サブタイプ:2

RDB$NUMBER_OF_CHARACTERS INTEGER 日本語など、特定のキャラクタセットを構成する文字数を示します。

RDB$DEFAULT_COLLATE_NAME CHAR 67 サブタイプ:2。 キャラクタセットのデフォルトの照合順序を示します。

RDB$CHARACTER_SET_ID SMALLINT キャラクタセットを識別する一意なID

RDB$SYSTEM_FLAG SMALLINT キャラクタセットが、次のいずれであるかを示します。

• ユーザー定義(値は 0 または NULL)

• システム定義(値は 1)

RDB$DESCRIPTION BLOB サブタイプ:Text。キャラクタセットに関するユーザー指定の記述が格納されます。

RDB$FUNCTION_NAME CHAR 67 内部の使用に予約されています。サブタイプ:2

RDB$BYTES_PER_CHARACTER SMALLINT 文字サイズをバイト単位で示します。

第 6 章 システムテーブル、一時テーブル、ビュー 6-3

Page 220: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

システムテーブル

RDB$CHECK_CONSTRAINTS

RDB$CHECK_CONSTRAINTS は、CHECK 制約のデータベース整合性制約に関する情報を格

納します。 NOT NULL による制約の情報も格納します。

RDB$COLLATIONS

RDB$COLLATIONS は、InterBase で使用できる、有効な照合順序を記録します。

表 6.3 RDB$CHECK_CONSTRAINTS

列名データ型 長さ 説明

RDB$CONSTRAINT_NAME CHAR 67 サブタイプ:2。CHECK または NOT NULL 制約の名前

RDB$TRIGGER_NAME CHAR 67 サブタイプ:2。CHECK 制約を実行するトリガー名。NOT NULL 制約の場合は、RDB$RELATION_FIELDS の抽出元の列名になります。

表 6.4 RDB$COLLATIONS

列名 データ型 長さ 説明

RDB$COLLATION_NAME CHAR 67 InterBase で使用できる有効な照合順序名

RDB$COLLATION_ID SMALLINT 照合順序の一意な識別子

RDB$CHARACTER_SET_ID SMALLINT 照合順序シーケンスの対象となるキャラクタセットの識別子。

• 照合を実行する前に指定する必要があります。

• 使用するキャラクタセットを決定します。RDB$CHARACTER_SETS テーブルの RDB$CHARACTER_SET_ID 列と一致します。

RDB$COLLATION_ATTRIBUTES SMALLINT 内部の使用に予約されています。

RDB$SYSTEM_FLAG SMALLINT ジェネレータが、次のいずれであるかを示します。

• ユーザー定義(値は 0)

• システム定義(値は 0 より大きい)

RDB$DESCRIPTION BLOB サブタイプ:Text。照合順序に関するユーザー指定の記述が格納されます。

RDB$FUNCTION_NAME CHAR 67 内部の使用に予約されています。

6-4 言語リファレンス

Page 221: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

システムテーブル

RDB$DATABASE

RDB$DATABASE は、データベースの内容を定義します。

表 6.5 RDB$DATABASE

列名 データ型 長さ 説明

RDB$DESCRIPTION BLOB サブタイプ:Text。データベースに関するユーザー指定の記述が格納されます。CREATE 文やALTER SCHEMA | DATABASE 文に記述されたコメントは、isql がこの列に書き込みます。

RDB$RELATION_ID SMALLINT InterBase 内部で使用します。

RDB$SECURITY_CLASS CHAR 67 サブタイプ:2。RDB$SECURITY_CLASSES テーブルに設定されているセキュリティクラス。セキュリティクラスに記述されているアクセス制御の制限は、すべてのデータベース操作に適用されます。

RDB$CHARACTER_SET_NAME CHAR 67 サブタイプ:2。キャラクタセット名

RDB$PAGE_CACHE INTEGER データベース ページ バッファ キャッシュの上限を設定します。また、キャッシュをその上限まで拡張しようと試みます。

RDB$PROCEDURE_CACHE INTEGER

RDB$TRIGGER_CACHE INTEGER

RDB$RELATION_CACHE SMALLINT

RDB$FLUSH_INTERVAL INTEGER データベースのフラッシュを有効化します。間隔として指定された数値は、単位が秒であると解釈されます。

RDB$LINGER_INTERVAL INTEGER 後のユーザーが接続を解除した後もメモリ内にデータベースを残します。間隔は秒単位で指定します。

RDB$RECLAIM_INTERVAL INTEGER 実行間隔は秒単位で指定します。ガベージ コレクションのスレッドを実行して、使用されていないプロシージャやトリガや内部システム クエリーからメモリを解放し、InterBase のメモリ ヒープに戻す頻度を設定します。

RDB$SWEEP_INTERVAL INTEGER

RDB$GROUP_COMMIT CHAR 1

RDB$PASSWORD_DIGEST VARCHAR 16

第 6 章 システムテーブル、一時テーブル、ビュー 6-5

Page 222: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

システムテーブル

RDB$DEPENDENCIES

RDB$DEPENDENCIES は、システムオブジェクトの従属先となるテーブルや列を記録しま

す。 テーブルや列に従属するオブジェクトには、ビュー、トリガー、計算列などがありま

す。 RDB$DEPENDENCIES テーブルは、オブジェクトが使用している列やテーブルの削除を

防止するためのものです。

RDB$ENCRYPTIONS

RDB$ENCRYPTIONS は、データベースに格納された暗号化方式の特性について記述します。

表 6.6 RDB$DEPENDENCIES

列名 データ型 長さ 説明

RDB$DEPENDENT_NAME CHAR 67 サブタイプ:2。ビュー、トリガー、計算列など、このテーブルに記録されるオブジェクト名

RDB$DEPENDED_ON_NAME CHAR 67 サブタイプ:2。上のオブジェクトが参照するテーブル名

RDB$FIELD_NAME CHAR 67 サブタイプ:2。上のオブジェクトが参照する列名

RDB$DEPENDENT_TYPE SMALLINT RDB$DEPENDENT_NAME 列で参照されるオブジェクトのタイプを記述します。型コード(RDB$TYPES)を次に示します。

• 0 - テーブル

• 1 - ビュー

• 2 - トリガー

• 3 - 計算フィールド

• 4 - 妥当性検査

• 5 - プロシージャ

• 7 - 例外

• 8 - ユーザー

• 9 - フィールド

• 10 - インデックス

上以外の数値は、将来のために予約されています。

RDB$DEPENDED_ON_TYPE SMALLINT RDB$DEPENDED_ON_NAME 列で参照されるオブジェクトのタイプを記述します。型コード(RDB$TYPES)を次に示します。

• 0 - テーブル

• 1 - ビュー

• 2 - トリガー

• 3 - 計算フィールド

• 4 - 妥当性検査

• 5 - プロシージャ

• 7 - 例外

• 8 - ユーザー

• 9 - フィールド

• 10 - インデックス

• 11 - ジェネレータ• 14 - 外部関数• 15 - 暗号化

上以外の数値は、将来のために予約されています。

6-6 言語リファレンス

Page 223: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

システムテーブル

表 6.7 RDB$ENCRYPTIONS

列名 データ型 長さ 説明

RDB$ENCRYPTION_NAME CHAR 67 暗号化方式の一意の名前。

RDB$ENCRYPTION_TYPE CHAR 16 BASE:独自の暗号化値を持つベースの暗号化方式を定義します。

COPY:BASE 暗号化方式のコピー。同じ暗号化値を共有します。

BACKUP:データベース バックアップ ファイルを暗号化するための暗号化方式を定義します。

RECOVERY:暗号化を保護しているパスワードを失った、または忘れた場合に、復旧に使用できる暗号化方式を定義します。この暗号化方式は、データベースの暗号化を行う目的で使用することはできません。

RDB$ENCRYPTION_CIPHER CHAR 16 暗号化方式の暗号アルゴリズム。これは AES(Advanced Encryption Standard)でなければなりません。

RDB$ENCRYPTION_ LENGTH SMALLINT 暗号化キーの長さ(ビット単位)は、128、192、256 のいずれかの値でなければなりません。デフォルト値は 128 です。

RDB$ENCRYPTION_INIT_ VECTOR

CHAR 6 RANDOM:CBC(Cipher Block Chaining)暗号化モードでランダム バイトを使用しなければならないことを指定します。

<null>:デフォルト値。ECB(Electronic Cookbook)暗号化モードを使用することを指定します。

RDB$ENCRYPTION_PAD CHAR 6 RANDOM:暗号化対象の値をランダム バイトで埋めます。

RDB$ENCRYPTION_VALUE CHAR 68 実際の暗号化キーの値を暗号化した値。

RDB$ENCRYPTION_SALT CHAR 68 実際の暗号化キーの値を暗号化解除した値が正しいことを検証するためのハッシュ。

RDB$ENCRYPTION_ TIMESTAMP

TIMESTAMP 暗号化キーの値が作成または更新されたときのタイムスタンプ。

RDB$SECURITY_CLASS CHAR 67 RDB$SECURITY_CLASSES に格納されているセキュリティ クラスの名前。

RDB$OWNER_NAME CHAR 67 暗号化方式の所有者。

RDB$PASSWORD2 VARCHAR 68 暗号化方式にアクセスできるようにするためのパスワード ハッシュ。

第 6 章 システムテーブル、一時テーブル、ビュー 6-7

Page 224: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

システムテーブル

RDB$EXCEPTIONS

RDB$EXCEPTIONS は、ユーザーが定義した例外を含め、ストアドプロシージャに関連した

エラー条件を記述します。

RDB$FIELD_DIMENSIONS

RDB$FIELD_DIMENSIONS は、配列型の列の次元を記述します。

RDB$SYSTEM_FLAG SMALLINT 0:ユーザー定義、1:システム定義。

RDB$FLAGS SMALLINT 1:CBC(Cipher Block Chaining)暗号化モード用に定義されたランダムの初期化ベクトル。

2:プレインテキストのランダム パディング。

4:暗号化方式に削除対象の印が付いています。

RDB$DESCRIPTION BLOB サブタイプ:Text。ユーザーが記述した暗号化方式の説明。

表 6.8 RDB$EXCEPTIONS

列名 データ型 長さ 説明

RDB$EXCEPTION_NAME CHAR 67 サブタイプ:2。例外名

RDB$EXCEPTION_NUMBER INTEGER 例外番号

RDB$MESSAGE VARCHAR 78 例外メッセージのテキスト

RDB$DESCRIPTION BLOB サブタイプ:Text。 例外を記述するテキスト

RDB$SYSTEM_FLAG SMALLINT ヌルを表示します。

表 6.9 RDB$FIELD_DIMENSIONS

列名 データ型 長さ 説明

RDB$FIELD_NAME CHAR 67 サブタイプ:2。このテーブルが記述する配列型の列名。列名は、RDB$FIELDS テーブルのRDB$FIELD_NAME 列にあるものでなければなりません。

RDB$DIMENSION SMALLINT ARRAY 列の次元を 1 つずつ指定します。 初の次元は整数 0 で示します。

RDB$LOWER_BOUND INTEGER 指定した次元の下限を示します。

RDB$UPPER_BOUND INTEGER 指定した次元の上限を示します。

表 6.7 RDB$ENCRYPTIONS

列名 データ型 長さ 説明

6-8 言語リファレンス

Page 225: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

システムテーブル

RDB$FIELDS

RDB$FIELDS は、列の特性を記述します。 RDB$FIELDS テーブルの各行は、ドメインまたは

列と 1 つずつ対応しています。 テーブルの列の追加は、ローカル特性を記述する

RDB$RELATION_FIELDS テーブルのエントリに基づいています。

ドメインに関しては、ドメイン名、NULL 値の可否、デフォルト値が RDB$FIELDS テーブ

ルに記述されます。 SQL 列については、RDB$RELATION_FIELDS テーブルで設定します。

RDB$RELATION_FIELDS テーブルには、ドメインと単純列の両方に関するデフォルトと

NULL 値の可否情報を記述することもできます。

表 6.10 RDB$FIELDS

列名 データ型 長さ 説明

RDB$FIELD_NAME CHAR 67 ドメインのユニーク名か、システムが割り当てた列名。列名は SQLnnn で始まります。実際 の 列 名 は、RDB$RELATION_FIELDSテーブルの RDB$FIELD_SOURCE 列に格納されます。

RDB$QUERY_NAME CHAR 67 SQL オブジェクトでは使用しません。

RDB$VALIDATION_BLR BLOB SQL オブジェクトでは使用しません。

RDB$VALIDATION_SOURCE BLOB SQL オブジェクトでは使用しません。

RDB$COMPUTED_BLR BLOB サブタイプ:BLR(Binary Language Representation)。計算列については、実行時に評価する式の BLR が収められます。

RDB$COMPUTED_SOURCE BLOB サブタイプ:Text。計算列の場合は、計算に使用するオリジナルの CHAR 表現の式が収められます。

RDB$DEFAULT_VALUE BLOB デフォルトのルールを格納します。サブタイプ:BLR。

RDB$DEFAULT_SOURCE BLOB サブタイプ:Text。デフォルト値の SQL 記述。

第 6 章 システムテーブル、一時テーブル、ビュー 6-9

Page 226: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

システムテーブル

RDB$FIELD_LENGTH SMALLINT 各行に設定した列の長さ(バイト数)を収めます。

CHAR、VARCHAR、NCHAR データ型の場合はフィールドの 大長を示し、InterBaseは列にインデックスを作成するときにこの長さを使用します。 この値が 252 より大きい場合、そのフィールド定義を使用している列にはインデックスを作成できません。

CHAR 型以外の列長は次のとおりです。

• D_FLOAT - 8

• DOUBLE - 8

• DATE - 4

• BLOB - 8

• TIME - 4

• INT64 - 8

• SHORT - 2

• LONG - 4

• QUAD - 8

• FLOAT - 4

• TIMESTAMP - 8

• BOOLEAN - 2

RDB$FIELD_PRECISION SMALLINT 数値型や小数型について、有効桁数を格納します。

RDB$FIELD_SCALE SMALLINT 数値型や小数型について、負の小数点以下の桁数を格納します。

表 6.10 RDB$FIELDS ( 続き )

列名 データ型 長さ 説明

6-10 言語リファレンス

Page 227: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

システムテーブル

RDB$FIELD_TYPE SMALLINT 設定する列のデータ型を指定します。列の数値を変更すると、その列を基本とするすべての列のデータ型が自動的に変更されます。

有効な値は次のとおりです。

• BLOB - 261

• BLOB_ID - 45

• BOOLEAN - 17

• CHAR - 14

• CSTRING - 40

• D_FLOAT - 11

• DOUBLE - 27

• FLOAT - 10

• INT64 - 16

• INTEGER - 8

• QUAD - 9

• SMALLINT - 7

• DATE - 12(ダイアレクト 3 DATE)

• TIME - 13

• TIMESTAMP - 35

• VARCHAR - 37

制限:

• BLOB 型の列を他の型に変更したり、他の型から BLOB 型に変更することはできません。

• CHAR 型から数値型に変更した列に、数値以外のデータを入力すると、変換エラーが発生します。

CHAR 型から数値型に変更した列を CHAR型に戻すと、インデックスのパフォーマンスが低下します。この場合は、インデックスを削除してから再作成してください。

表 6.10 RDB$FIELDS ( 続き )

列名 データ型 長さ 説明

第 6 章 システムテーブル、一時テーブル、ビュー 6-11

Page 228: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

システムテーブル

RDB$FIELD_SUB_TYPE SMALLINT BLOB、CHAR、および数値列の型を識別します。

1) RDB$FIELD_TYPE が 261(BLOB)の場合、定義済みの BLOB 列のサブタイプは次のとおりです。

• 0 - 指定なし

• 1 - テキスト

• 2 - BLR(Binary Language Representation)

• 3 - アクセス制御リスト

• 4 - 将来のために予約

• 5 - テーブルの現在のメタデータの符号化された記述

• 6 - 異常終了したマルチデータベーストランザクションの記述

2) RDB$FIELD_TYPE が 14(CHAR)の場合、列は次のとおりです。

• 0 - 型は指定されていない

• 1 - 固定 BINARY データ

RDB$FIELD_SUB_TYPE 列は、RDB$COLLATIONS テーブルのRDB$FIELD_SUB_TYPE 列に対応します。

3) RDB$FIELD_TYPE が 7(SMALLINT)、8(INTEGER)、または 16(INT64)の場合、元の宣言は次のとおりです。

• 0 または NULL - RDB$FIELD_TYPE• 1 - NUMERIC

• 2 - DECIMAL

RDB$MISSING_VALUE BLOB SQL オブジェクトでは使用しません。

RDB$MISSING_SOURCE BLOB SQL オブジェクトでは使用しません。

RDB$DESCRIPTION BLOB サブタイプ:Text。定義される列に関するユーザー指定の記述が格納されます。

RDB$SYSTEM_FLAG SMALLINT システムテーブルのフラグ。

RDB$QUERY_HEADER BLOB SQL オブジェクトでは使用しません。

RDB$SEGMENT_LENGTH SMALLINT BLOB 列にのみ使用します。BLOB バッファの長さに関する、制約されない推奨値。

RDB$EDIT_STRING VARCHAR 125 SQL オブジェクトでは使用しません。

RDB$EXTERNAL_LENGTH SMALLINT 外部テーブルにおける列の長さ。外部テーブルにない列の場合は 0 になります。

表 6.10 RDB$FIELDS ( 続き )

列名 データ型 長さ 説明

6-12 言語リファレンス

Page 229: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

システムテーブル

RDB$EXTERNAL_SCALE SMALLINT 整数型の外部列に使用する倍率。10 の累乗で表し、この値に整数を掛けます。

RDB$EXTERNAL_TYPE SMALLINT 外部テーブルにおける列のデータ型。有効な値は次のとおりです。

• BLOB - 261

• BLOB_ID - 45

• BOOLEAN - 17

• CHAR - 14

• CSTRING - 40

• D_FLOAT - 11

• DOUBLE - 27

• FLOAT - 10

• INT64 - 16

• INTEGER - 8

• QUAD - 9

• SMALLINT - 7

• DATE - 12(ダイアレクト 3 DATE)

• TIME - 13

• TIMESTAMP - 35

• VARCHAR - 37

RDB$DIMENSIONS SMALLINT ARRAY データ型について、配列の次元数を指定します。配列でない列の場合は 0 になります。

RDB$NULL_FLAG SMALLINT NULL 値を格納できる列かどうかを指定します。

有効な値は次のとおりです。

• 空白: NULL 値を格納できる列

• 1:NULL 値を格納できない列

RDB$CHARACTER_LENGTH SMALLINT 各行に設定した列の長さ(文字数)を収めます。

CHAR、VARCHAR、NCHAR データ型の場合は、RDB$FIELD_LENGTH の値をフィールドのキャラクタセットでの 1 文字のバイト数で割った商になります。他のデータ型の場合、この長さの値は意味を持たないため、NULL になります。

RDB$COLLATION_ID SMALLINT 照合順序の一意な識別子

RDB$CHARACTER_SET_ID SMALLINT CHAR 列や BLOB 列のキャラクタセットを示す ID。RDB$CHARACTER_SETS システムテーブルの CHARACTER_SET_ID 列に結合します。

RDB$ENCRYPTION_ID SMALLINT この列を暗号化するために使用する RDB$ENCRYPTIONS に含まれている暗号化方式の ID です。

RDB$DECRYPT_DEFAULT_ VAULES

BLOB サブタイプ:BLR。暗号化解除のデフォルト句の BLR(Binary Language Representation)。

RDB$DECRYPT_DEFAULT_ SOURCE

BLOB サブタイプ:Text。暗号化解除のデフォルト値を定義する SQL。

表 6.10 RDB$FIELDS ( 続き )

列名 データ型 長さ 説明

第 6 章 システムテーブル、一時テーブル、ビュー 6-13

Page 230: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

システムテーブル

RDB$FILES

RDB$FILES は、データベースの二次ファイルとシャドウファイルをリストアップします。

RDB$FILTERS

RDB$FILTERS は、BLOB フィルタに関する情報を記録します。

表 6.11 RDB$FILES

列名 データ型 長さ 説明

RDB$FILE_NAME VARCHAR 253 二次ファイルかシャドウファイルかを指定します。

RDB$FILE_SEQUENCE SMALLINT データベース内で使用する二次ファイルの順序、またはシャドウセット内で使用するファイルの順序。

RDB$FILE_START INTEGER 二次ファイルまたはシャドウファイルの開始ページ番号。

RDB$FILE_LENGTH INTEGER ブロック単位で表したファイルの長さ。

RDB$FILE_FLAGS SMALLINT システムの使用に予約。

RDB$SHADOW_NUMBER SMALLINT セット番号。シャドウセットファイルの属するシャドウセット番号を示します。0 または空白の場合は、シャドウファイルではなく二次ファイルと見なされます。

表 6.12 RDB$FILTERS

列名 データ型 長さ 説明

RDB$FUNCTION_NAME CHAR 67 各行に設定するフィルタの一意な名前。

RDB$DESCRIPTION BLOB サブタイプ:Text。定義されるフィルタに関するユーザー指定の記述が格納されます。

RDB$MODULE_NAME VARCHAR 253 実行可能なフィルタが格納されているライブラリ名

RDB$ENTRYPOINT CHAR 31 フィルタライブラリにおける、BLOB フィルタのエントリポイント。

RDB$INPUT_SUB_TYPE SMALLINT 入力データの BLOB サブタイプ。

RDB$OUTPUT_SUB_TYPE SMALLINT 出力データの BLOB サブタイプ。

RDB$SYSTEM_FLAG SMALLINT フィルタが、次のいずれであるかを示します。

• ユーザー定義(値は 0)

• システム定義(値は 0 より大きい)

6-14 言語リファレンス

Page 231: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

システムテーブル

RDB$FORMATS

RDB$FORMATS は、テーブルの列の形式を記録します。 列の定義を変更するたびに、新しい

フォーマット番号が割り当てられます。 トリガーを作成、削除、有効化、無効化、また

ALTER TABLE などでメタデータを直接操作すると、フォーマット番号がインクリメントさ

れます。 このテーブルによって、既存のアプリケーションプログラムを再コンパイルせず

に、変更したテーブルにアクセスすることができます。

メモ InterBase では、テーブルのメタデータを変更できる回数は 255 回までです。 この制限を超

えてメタデータを変更するには、データベースをバックアップし、復元する必要がありま

す。 行の構造に影響する変更だけがこの回数に含まれます。たとえば、トリガーを ACTIVEから INACTIVE に変更しても、この回数には含まれません。

RDB$FUNCTION_ARGUMENTS

RDB$FUNCTION_ARGUMENTS は、関数の引数の属性を設定します。

表 6.13 RDB$FORMATS

列名 データ型 長さ 説明

RDB$RELATION_ID SMALLINT RDB$RELATIONS に存在するテーブル名。

RDB$FORMAT SMALLINT テーブルのフォーマット番号を指定します。テーブルの更新回数に応じた数のフォーマットが設定されます。

RDB$DESCRIPTOR BLOB サブタイプ:Format。テーブルの列、データ型、長さ、小数点以下の桁数(必要な場合)を記述します。

表 6.14 RDB$FUNCTION_ARGUMENTS

列名 データ型 長さ 説明

RDB$FUNCTION_NAME CHAR 67 引 数 に 対 応 す る 関 数 の 一 意 な 名 前。RDB$FUNCTIONS の関数名と一致しなければなりません。

RDB$ARGUMENT_POSITION SMALLINT RDB$FUNCTION_NAME 列に記述された引数の、他の引数に対する相対位置。

RDB$MECHANISM SMALLINT 数値として受け渡される引数(0 の場合)か、参照データとして受け渡される引数(1 の場合)かを指定します。

第 6 章 システムテーブル、一時テーブル、ビュー 6-15

Page 232: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

システムテーブル

RDB$FUNCTIONS

RDB$FUNCTIONS は、ユーザー定義関数を定義します。

RDB$FIELD_TYPE SMALLINT 引数のデータ型。

有効な値は次のとおりです。

• BLOB - 261

• BLOB_ID - 45

• BOOLEAN - 17

• CHAR - 14

• CSTRING - 40

• D_FLOAT - 11

• DOUBLE - 27

• FLOAT - 10

• INT64 - 16

• INTEGER - 8

• QUAD - 9

• SMALLINT - 7

• DATE - 12(ダイアレクト 3 DATE)

• TIME - 13

• TIMESTAMP - 35

• VARCHAR - 37

RDB$FIELD_SCALE SMALLINT 整数型の引数に使用する倍率。10 の累乗で表し、この値に整数を掛けます。

RDB$FIELD_LENGTH SMALLINT 各行に設定する引数の長さ。

各列に対応する有効な長さは次のとおりです。

• BLOB - 8

• BOOLEAN - 2

• D_FLOAT - 8

• DATE - 4

• DOUBLE - 8

• FLOAT - 4

• INT64 - 8

• LONG - 4

• QUAD - 8

• SHORT - 2

• TIME - 4

• TIMESTAMP - 8

RDB$FIELD_SUB_TYPE SMALLINT RDB$FIELD_TYPE が 7(SMALLINT)、8(INTEGER)、または 16(INT64)の場合、サブタイプは次のとおりです。

• 0 または NULL - RDB$FIELD_TYPE• 1 - NUMERIC

• 2 - DECIMAL

RDB$CHARACTER_SET_ID SMALLINT キャラクタセットを示す一意な数値識別子。

RDB$FIELD_PRECISION SMALLINT DECIMAL または NUMERIC 型の関数引数に宣言されている有効桁数。

表 6.14 RDB$FUNCTION_ARGUMENTS ( 続き )

列名 データ型 長さ 説明

6-16 言語リファレンス

Page 233: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

システムテーブル

RDB$GENERATORS

RDB$GENERATORS は、テーブル内で一意な識別子を出力するジェネレータの情報を格

納します。

表 6.15 RDB$FUNCTIONS

列名 データ型 長さ 説明

RDB$FUNCTION_NAME CHAR 67 関数の一意な名前。

RDB$FUNCTION_TYPE SMALLINT 将来の使用のために予約

RDB$QUERY_NAME CHAR 67 isql で使用できる関数の代替名。

RDB$DESCRIPTION BLOB サブタイプ:Text。定義される関数に関するユーザー指定の記述が格納されます。

RDB$MODULE_NAME VARCHAR 253 実行可能関数が格納されている関数のライブラリ名。

RDB$ENTRYPOINT CHAR 31 関数ライブラリにおける関数のエントリポイント。

RDB$RETURN_ARGUMENT SMALLINT 呼び出しプログラムに返される引数の位置。他の引数に対する相対位置で表します。

RDB$SYSTEM_FLAG SMALLINT 関数が、次のいずれであるかを示します。

• ユーザー定義(値は 0)

• システム定義(値は 1)

表 6.16 RDB$GENERATORS

列名 データ型 長さ 説明

RDB$GENERATOR_NAME CHAR 67 数値ジェネレータが出力する一意な識別子を収めるテーブル名。

RDB$GENERATOR_ID SMALLINT システムが割り当てる、ジェネレータの一意なID 番号。

RDB$SYSTEM_FLAG SMALLINT ジェネレータが、次のいずれであるかを示します。

• ユーザー定義(値は 0)

• システム定義(値は 0 より大きい)

第 6 章 システムテーブル、一時テーブル、ビュー 6-17

Page 234: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

システムテーブル

RDB$INDEX_SEGMENTS

RDB$INDEX_SEGMENTS は、テーブルのインデックスを構成する列を指定します。

RDB$INDEX_SEGMENTS の行を変更すると、インデックスが破損してしまいます。インデッ

クスを変更するには、同一のトランザクションで RDB$INDICES 行を削除し、再作成しなけ

ればなりません。

RDB$INDICES

RDB$INDICES は、データベース行のアクセス効率を高める、インデックス構造体を定義し

ます。 単純インデックス(単純キー)と、マルチセグメントインデックス(複数キー)があ

るので、このテーブルで設定するインデックスは、RDB$INDEX_SEGMENTS テーブルにも

設定しなければなりません。

表 6.17 RDB$INDEX_SEGMENTS

列名 データ型 長さ 説明

RDB$INDEX_NAME CHAR 67 インデックスセグメントに対応するインデックス。この値を変更する場合は、RDB$INDICES のRDB$INDEX_NAME 列も変更しなければなりません。

RDB$FIELD_NAME CHAR 67 設定するインデックスセグメント。この値は、RDB$RELATION_FIELDS の RDB$FIELD_NAME 列の値と一致しなければなりません。

RDB$FIELD_POSITION SMALLINT 設定するインデックスセグメントの位置。インデックスのソート順序と一致します。

表 6.18 RDB$INDICES

列名 データ型 長さ 説明

RDB$INDEX_NAME CHAR 67 設定するインデックス名。この値を変更する場合は、RDB$INDEX_SEGMENTS テーブルの値も変更しなければなりません。

RDB$RELATION_NAME CHAR 67 インデックスに対応するテーブル名。テーブルは、RDB$RELATIONS テーブルに設定されていなければなりません。

RDB$INDEX_ID SMALLINT インデックスの内部識別子を示します。この列への書き込みはできません。

6-18 言語リファレンス

Page 235: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

システムテーブル

RDB$UNIQUE_FLAG SMALLINT 重複値が入力できるインデックスかどうかを指定します。

有効な値は次のとおりです。

• 0 - 重複値が許されるインデックス

• 1 - 重複値が許されないインデックス

ユニークインデックスを作成する場合は、重複値を削除してください。

RDB$DESCRIPTION BLOB サブタイプ:Text。 インデックスに関するユーザー指定の記述。

RDB$SEGMENT_COUNT SMALLINT インデックスのセグメント数。1 の場合は、単一インデックスを示します。

RDB$INDEX_INACTIVE SMALLINT インデックスが次のどれであるかを示します。

• 有効(0 の場合)

• 無効(1 の場合)

システムテーブルには設定されません。

RDB$INDEX_TYPE SMALLINT ソート順を示す内部識別子を収めます。昇順(ASC)または降順(DESC)のどちらかです。

• ASC(値 0)

• DESC(値 1)

RDB$FOREIGN_KEY CHAR 31 インデックスの対象となる FOREIGNKEY 制約名。

RDB$SYSTEM_FLAG SMALLINT インデックスが次のどれであるかを示します。

• ユーザー定義(値は 0)

• システム定義(値は 0 より大きい)

RDB$EXPRESSION_BLR BLOB サブタイプ:BLR。実行時に評価する式のBLR(Binary Language Representation)が収められます。PC のセマンティクスに使用します。

RDB$EXPRESSION_SOURCE BLOB サブタイプ:Text。列に使用するテキストソースを収めます。PC のセマンティクスに使用します。

RDB$STATISTICS DOUBLEPRECISION

インデックスの選択性係数。インデックス付き列の一意性を計る尺度として、クエリー 適化でアクセス方法の選択に使用します。

表 6.18 RDB$INDICES ( 続き )

列名 データ型 長さ 説明

第 6 章 システムテーブル、一時テーブル、ビュー 6-19

Page 236: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

システムテーブル

RDB$JOURNAL_ARCHIVES RDB$JOURNAL_ARCHIVES には、データベースのリポジトリおよびジャーナル アーカイブ ファイルについての情報が格納されます。

RDB$LOG_FILES

RDB$LOG_FILES は、使用されなくなりました。

RDB$PAGES

RDB$PAGES は、データベースに割り当てられた各ページを記録します。

重要 このテーブルを変更すると、データベースが破損します。

表 6.19 RDB$JOURNAL_ARCHIVES

列名 データ型 長さ 説明

RDB$ARCHIVE_ NAME

VARCHAR 1024 アーカイブ項目の名前。

RDB$ARCHIVE_ TYPE CHAR 1 アーカイブ項目のタイプ。'D' はデータベース ダンプを表します。'S' はデータベース ダンプのセカンダリ データベース ファイルを表します。'J' はジャーナル ファイルを表します。

RDB$ARCHIVE_ LENGTH

INT64 8 アーカイブ項目の長さを表すバイト数。

RDB$ARCHIVE_ SEQUENCE

INTEGER 4 アーカイブ項目のシーケンス番号。

RDB$ARCHIVE_ TIMESTAMP

TIMESTAMP 8 項目がアーカイブに保存されたときのタイムスタンプ。

RDB$DEPENDED_ ON_SEQUENCE

INTEGER 4 この項目が依存するアーカイブ項目のシーケンス番号。アーカイブ タイプが 'S' の場合は、タイプが 'D' のプライマリ データベース ダンプ ファイルのシーケンス番号になります。アーカイブ タイプが 'D' の場合は、アーカイブから復元を行うときの 初のジャーナル ファイルのシーケンス番号になります。

RDB$DEPENDED_ ON_TIMESTAMP

TIMESTAMP 8 上記と同様ですが、依存先アーカイブ項目のアーカイブ タイムスタンプが格納されます。

6-20 言語リファレンス

Page 237: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

システムテーブル

RDB$PROCEDURE_PARAMETERS

RDB$PROCEDURE_PARAMETERS は、データベースのプロシージャに使用する各パラ

メータの情報を格納します。

RDB$PROCEDURES

RDB$PROCEDURES は、データベースのストアドプロシージャに関する情報を格納しま

す。

表 6.20 RDB$PAGES

列名 データ型 長さ 説明

RDB$PAGE_NUMBER INTEGER 物理的に割り当てられたページ番号。

RDB$RELATION_ID SMALLINT ページの割り当て先となるテーブルの識別子番号。

RDB$PAGE_SEQUENCE INTEGER 前のテーブルに割り当てられたページと連続する、各ページのシーケンス番号。

RDB$PAGE_TYPE SMALLINT ページ型を記述します。システムだけが使用する情報です。

表 6.21 RDB$PROCEDURE_PARAMETERS

列名 データ型 長さ 説明

RDB$PARAMETER_NAME CHAR 67 パラメータ名

RDB$PROCEDURE_NAME CHAR 67 パラメータを使用するプロシージャ名

RDB$PARAMETER_NUMBER SMALLINT パラメータのシーケンス番号

RDB$PARAMETER_TYPE SMALLINT パラメータのデータ型。

有効な値は次のとおりです。

• 0 = 入力

• 1 = 出力

RDB$FIELD_SOURCE CHAR 31 グローバルな列名

RDB$DESCRIPTION BLOB サブタイプ:Text。 パラメータに関するユーザー指定の記述。

RDB$SYSTEM_FLAG SMALLINT パラメータが、次のいずれであるかを示します。

• ユーザー定義(値は 0)

• システム定義(値は 0 より大きい)

第 6 章 システムテーブル、一時テーブル、ビュー 6-21

Page 238: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

システムテーブル

表 6.22 RDB$PROCEDURES

列名 データ型 長さ 説明

RDB$PROCEDURE_NAME CHAR 67 プロシージャ名

RDB$PROCEDURE_ID SMALLINT プロシージャ番号

RDB$PROCEDURE_INPUTS SMALLINT 入力パラメータ数

PROCEDURE_OUTPUTS SMALLINT 出力パラメータ数

RDB$DESCRIPTION BLOB サブタイプ:Text。 プロシージャに関するユーザー指定の記述。

RDB$PROCEDURE_SOURCE BLOB サブタイプ:Text。 プロシージャのソースコード

RDB$PROCEDURE_BLR BLOB サブタイプ:BLR。プロシージャソースのBLR(Binary Language Representation)

RDB$SECURITY_CLASS CHAR 67 プロシージャのセキュリティクラス

RDB$OWNER_NAME CHAR 67 プロシージャを作成したユーザー名(SQLのセキュリティを目的とした所有者名)

RDB$RUNTIME BLOB サブタイプ:Summary。 プロシージャのメタデータを記述します。パフォーマンスの向上を目的としています。

RDB$SYSTEM_FLAG SMALLINT プロシージャが、次のいずれであるかを示します。

• ユーザー定義(値は 0)

• システム定義(値は 0 より大きい)

6-22 言語リファレンス

Page 239: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

システムテーブル

RDB$REF_CONSTRAINTS

RDB$REF_CONSTRAINTS は、参照整合性制約に関する情報を格納します。

RDB$RELATION_CONSTRAINTS

RDB$RELATION_CONSTRAINTS は、テーブルの整合性制約に関する情報を格納します。

表 6.23 RDB$REF_CONSTRAINTS

列名データ型 長さ 説明

RDB$3CONSTRAINT_NAME CHAR 67 参照整合性制約名

RDB$CONST_NAME_UQ CHAR 67 参照される PRIMARY KEY または UNIQUE 制約名

RDB$MATCH_OPTION CHAR 7 将来のために予約。現在のデフォルトは FULLです。

RDB$UPDATE_RULE CHAR 11 主キーが更新された場合の外部キーに対する動作の種類を指定します。指定できる値は、RESTRICT、NOACTION、CASCADE、SET NULL、または SET DEFAULT です。

RDB$DELETE_RULE CHAR 11 主キーが削除された場合の外部キーに対する動作の種類を指定します。指定できる値は、RESTRICT、NOACTION、CASCADE、SET NULL、または SET DEFAULT です。

表 6.24 RDB$RELATION_CONSTRAINTS

列名データ型 長さ 説明

RDB$CONSTRAINT_NAME CHAR 67 テーブル制約名

RDB$CONSTRAINT_TYPE CHAR 11 テーブル制約の型。

有効な型は次のとおりです。

• PRIMARY KEY• UNIQUE• FOREIGN KEY

• PCHECK • NOT NULL

RDB$RELATION_NAME CHAR 67 制約の対象となるテーブル名

RDB$DEFERRABLE CHAR 3 将来のために予約。現在のデフォルトは NO です

RDB$INITIALLY_DEFERRED CHAR 3 将来のために予約。現在のデフォルトは NO です

RDB$INDEX_NAME CHAR 67 UNIQUE、PRIMARY KEY、または FOREIGN KEY制約が使用するインデックスの名前

第 6 章 システムテーブル、一時テーブル、ビュー 6-23

Page 240: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

システムテーブル

RDB$RELATION_FIELDS

RDB$RELATION_FIELDS は、データベースの各テーブルについて、ドメインの列と列の特

性を一覧します。

SQL 列は、RDB$RELATION_FIELDS テーブルで定義されます。 RDB$FIELD_SOURCE 列に格

納される列名は、システム名("SQL$<n>")を格納する RDB$FIELDS テーブルのエントリと

対応します。 エントリの内容は、列の型や長さなどです。 ドメインと単純列の両方につい

て、デフォルトと NULL 値の可否情報も記述されています。

表 6.25 RDB$RELATION_FIELDS

列名 データ型 長さ 説明

RDB$QUERY_NAME CHAR 31 isql で使用する代替列名。RDB$FIELDS テーブルの値に代わるものです。

RDB$BASE_FIELD CHAR 31 ビューの場合にのみ使用します。設定するビュー列の基本となる、RDB$FIELDS テーブルまたはビューにおける列名。基本となるベース列は次のように設定されます。

• RDB$BASE_FIELD:列名

• RDB$VIEW_CONTEXT(このテーブル):元のテーブル名

RDB$EDIT_STRING VARCHAR 125 SQL では使用しません。

RDB$FIELD_POSITION SMALLINT 他の列に対する、列の相対位置。

• isql では、列値の表示順序における位置にしたがって列の行を出力します。

• gpre では、SELECT 文および INSERT 文における列の順序を使用します。

値が同じ列が、同一のテーブルに 2 つ以上ある場合、表示順序は不定になります。

RDB$QUERY_HEADER BLOB SQL では使用しません。

RDB$UPDATE_FLAG SMALLINT InterBase では使用しません。DSRI ベースの他のシステムとの互換性のために用意されています。

RDB$FIELD_ID SMALLINT BLR(Binary Language Representation)で列の指定に使用する識別子。

• データベースのバックアップ中や復元中に変化するため、一時的な要求にのみ使用するようにしてください。

• この列の値は、変更してはなりません。

RDB$VIEW_CONTEXT SMALLINT テーブルにおけるベース列の格納場所を指定し、ビュー列を識別するエイリアス。コンテキストストリームのビュー BLR に使用するエイリアスと同じ値でなければなりません。

6-24 言語リファレンス

Page 241: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

システムテーブル

RDB$DESCRIPTION BLOB サブタイプ:Text。定義される列に関するユーザー指定の記述。

RDB$DEFAULT_VALUE BLOB サブタイプ:BLR。デフォルト句の BLR(BinaryLanguage Representation)を指定します。

RDB$SYSTEM_FLAG SMALLINT 列が、次のいずれであるかを示します。

• ユーザー定義(値は 0)

• システム定義(値は 0 より大きい)

RDB$SECURITY_CLASS CHAR 67 RDB$SECURITY_CLASSES テーブルで定義されるセキュリティクラス名。このセキュリティクラスで定義されるアクセス制約は、この列のすべてのユーザーに適用されます。

RDB$COMPLEX_NAME CHAR 67 将来の使用のために予約

RDB$NULL_FLAG SMALLINT NULL 値を入力できる列かどうかを示します。

RDB$DEFAULT_SOURCE BLOB サブタイプ:Text。 デフォルトを定義する SQLソース

RDB$COLLATION_ID SMALLINT 照合順序の一意な識別子

RDB$DECRYPT_DEFAULT_ SOURCE

BLOB サブタイプ:Text。暗号化解除のデフォルト値を定義する SQL。

RDB$DECRYPT_DEFAULT_ VALUE

BLOB サブタイプ:BLR。暗号化解除のデフォルト句の BLR(Binary Language Representation)。

RDB$ENCRYPTION_ID SMALLINT この列を暗号化するために使用する RDB$ENCRYPTIONS に含まれている暗号化方式の ID です。

表 6.25 RDB$RELATION_FIELDS ( 続き )

列名 データ型 長さ 説明

第 6 章 システムテーブル、一時テーブル、ビュー 6-25

Page 242: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

システムテーブル

RDB$RELATIONS

RDB$RELATIONS は、テーブルおよびビューの一部の特性を定義します。 テーブルを構成す

る列、列の記述などの他の特性は、RDB$RELATIONS_FIELDS テーブルに格納されています。

表 6.26 RDB$RELATIONS

列名 データ型 長さ 説明

RDB$VIEW_BLR BLOB サブタイプ:BLR。ビューについて、実行時に評価されるクエリーの BLR(Binary Language Representation)が収められます。

RDB$VIEW_SOURCE BLOB サブタイプ:Text。ビュー定義に使用する元のクエリーを収めます。

RDB$_DESCRIPTION BLOB サブタイプ:Text。定義されるテーブルに関するユーザー指定の記述が格納されます。

RDB$RELATION_ID SMALLINT BLR 要求に使用する内部 ID 番号。この列の値を変更してはなりません。

RDB$SYSTEM_FLAG SMALLINT テーブルの内容が、次のいずれであるかを示します。

• ユーザーデータ(0 の場合)

• システム情報(0 より大きい場合)

テーブルを作成する場合、1 には設定できません。

RDB$DBKEY_LENGTH SMALLINT データベースキーの長さ。

有効な値は次のとおりです。

• テーブルの場合: 8

• ビューの場合:ビュー定義で参照されるテーブル数 × 8

この列の値を変更してはなりません。

RDB$FORMAT SMALLINT InterBase 内でのみ使用します。変更できません。

RDB$FIELD_ID SMALLINT テーブル内の列の数。この値は、InterBase が管理するので変更してはなりません。

RDB$RELATION_NAME CHAR 67 この行で定義されるテーブルの一意な名前。

RDB$SECURITY_CLASS CHAR 67 RDB$SECURITY_CLASSES テーブルで設定したセキュリティクラス名。セキュリティクラスに定義されたアクセス制御は、テーブルの全ユーザーに適用されます。

6-26 言語リファレンス

Page 243: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

システムテーブル

RDB$EXTERNAL_FILE VARCHAR 253 外部テーブルが格納されているファイル。空白の場合、テーブルは外部ファイルと対応していません。

RDB$RUNTIME BLOB サブタイプ:Summary。 テーブルのメタデータを記述します。パフォーマンスの向上を目的としています。

RDB$EXTERNAL_DESCRIPTION BLOB サブタイプ:EXTERNAL_FILE_DESCRIPTION。外部ファイルに関するユーザー指定の記述。

RDB$OWNER_NAME CHAR 67 テーブルやビューを作成したユーザー名。SQL のセキュリティを目的とするGRANT/REVOKE では、作成者は所有者と見なされます。

RDB$DEFAULT_CLASS CHAR 31 新たに追加した列に適用される、SQLセキュリティシステムによるデフォルトのセキュリティクラス。

RDB$FLAGS SMALLINT 1 = SQL 定義のテーブル

2 = グローバル一時テーブル

4 = < 将来の使用のために予約 >

8 = コミット時に一時行を削除

16 = コミット時に一時行を維持。行はデータベースの接続解除時に削除される

RDB$DATA_BLOCKING_FACTOR SMALLINT ODS 15 では、テーブル固有のレコード ブロック化因数を格納する新しい列が作成されます。これは、GBAK による復元時に、復元対象のデータの特性に基づいて設定されます。

テーブルにテーブル固有のデータ ブロック化因数がなければ、このシステム列は NULL になります。

RDB$BLOB_BLOCKING_FACTOR BLOB ODS 15 では、テーブル固有の BLOB ブロック化因数を格納する新しい列が作成されます。これは、GBAK による復元時に、復元対象の BLOB の特性に基づいて設定されます。

テーブルにテーブル固有の BLOB ブロック化因数がなければ、このシステム列は NULL になります。

メモ:テーブルに BLOB の列があり、そこにインデックスが定義されていない場合、そのテーブルではこれまでどおりにデータベース レベルのブロック化因数が使われます。

表 6.26 RDB$RELATIONS ( 続き )

列名 データ型 長さ 説明

第 6 章 システムテーブル、一時テーブル、ビュー 6-27

Page 244: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

システムテーブル

RDB$ROLES

RDB$ROLES は、データベース内で定義されたロールと各ロールの所有者を一覧します。

RDB$SECURITY_CLASSES

RDB$SECURITY_CLASSES は、アクセス制御リストを定義し、データベース、テーブル、

ビュー、およびテーブルとビューの列に割り当てます。 SQL オブジェクトの場合は、

RDB$USER_PRIVILEGES システムテーブルの内容と同じです。

表 6.27 RDB$ROLES

列名データ型 長さ 説明

RDB$ROLE_NAME CHAR 67 定義されるロール名

RDB$OWNER_NAME CHAR 67 ロールを作成した InterBase ユーザー名

表 6.28 RDB$SECURITY_CLASSES

列名データ型 長さ 説明

RDB$SECURITY_CLASS CHAR 67 設定するセキュリティクラス。この列を変更する場合は、RDB$_DATABASE、RDB$RELATIONS、およびRDB$RELATION_FIELDS テーブルのRDB$SECURITY_CLASS 列も変更してください。

RDB$ACL BLOB サブタイプ:ACL。ユーザー、およびユーザーに与えられた特権を指定するアクセス制御リスト。

RDB$DESCRIPTION BLOB サブタイプ:Text。定義されるセキュリティクラスに関するユーザー指定の記述。

6-28 言語リファレンス

Page 245: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

システムテーブル

RDB$TRANSACTIONS

RDB$TRANSACTIONS は、すべてのマルチデータベーストランザクションを記録します。

表 6.29 RDB$TRANSACTIONS

列名 データ型 長さ 説明

RDB$TRANSACTION_ID INTEGER 記述されるマルチデータベーストランザクションの ID 番号。

RDB$TRANSACTION_STATE SMALLINT トランザクションの状態を指示します。

有効な値は次のとおりです。

• 0 - limbo

• 1 - コミット済み

• 2 - ロールバック済み

RDB$TIMESTAMP DATE 将来の使用のために予約

RDB$TRANSACTION_DESCRIPTION BLOB サブタイプ:TRANSACTION_DESCRIPTION。作成済みマルチデータベーストランザクションを記述します。再接続が失敗した場合に使用します。

第 6 章 システムテーブル、一時テーブル、ビュー 6-29

Page 246: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

システムテーブル

RDB$TRIGGER_MESSAGES

RDB$TRIGGER_MESSAGES は、トリガーのメッセージを定義し、各トリガーに割り当てます。

RDB$TRIGGERS

RDB$TRIGGERS は、トリガーを定義します。

表 6.30 RDB$TRIGGER_MESSAGES

列名 データ型 長さ 説明

RDB$TRIGGER_NAME CHAR 67 トリガーメッセージを割り当てるトリガー名。RDB$TRIGGERS テーブルに存在する名前でなければなりません。

RDB$MESSAGE_NUMBER SMALLINT 定義されるトリガーメッセージのメッセージ番号。メッセージ番号の 大値は 32767 です。

RDB$MESSAGE VARCHAR 78 トリガーメッセージのソース。

表 6.31 RDB$TRIGGERS

列名 データ型 長さ 説明

RDB$TRIGGER_NAME CHAR 67 定義されるトリガー名

RDB$RELATION_NAME CHAR 67 定義されるトリガーに対応するテーブル名。RDB$RELATIONS テーブルに存在する名前でなければなりません。

RDB$TRIGGER_SEQUENCE SMALLINT 定義されるトリガーのシーケンス番号。同一のトリガーに対する、相対的な起動時期を決定します。

• シーケンス番号が同じトリガーの起動順序は不定です。

• 番号の指定がなければ、0 が割り当てられます。

RDB$TRIGGER_TYPE SMALLINT 定義されるトリガーの型。

有効な値は次のとおりです。 • 1 - BEFORE INSERT

• 2 - AFTER INSERT

• 3 - BEFORE UPDATE

• 4 - AFTER UPDATE

• 5 - BEFORE DELETE

• 6 - AFTER DELETE

6-30 言語リファレンス

Page 247: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

システムテーブル

RDB$TYPES

RDB$TYPES は、InterBase キャラクタセットと照合順序の、列挙データ型とエイリアスを記

録します。 現在のリリースでは使用できません。

RDB$TRIGGER_SOURCE BLOB サブタイプ:Text。トリガー定義の発生源。isqlの SHOW TRIGGERS 文を使用すると、この列の情報が表示されます。

RDB$TRIGGER_BLR BLOB サブタイプ:BLR。トリガーソースの BLR(Binary Language Representation)

RDB$DESCRIPTION BLOB サブタイプ:Text。トリガーに関するユーザー指定の記述。CREATE TRIGGER 文またはALTER TRIGGER 文に記述されたコメントは、この列に書き込まれます。

RDB$TRIGGER_INACTIVE SMALLINT トリガーが、次のいずれであるかを示します。

• 有効(0 の場合)

• 無効(1 の場合)

RDB$SYSTEM_FLAG SMALLINT トリガーが、次のいずれであるかを示します。

• ユーザー定義(値は 0)

• システム定義(値は 0 より大きい)

RDB$FLAGS SMALLINT 1 = SQL 定義のトリガー

2 = アクセス許可のチェックを無視する

ユーザー定義のトリガーを実行するには、そのトリガーがアクセスするオブジェクトに対するアクセス許可をユーザーが持っている必要があります。 しかし、内部のシステム定義のトリガーは、データベースの整合性を維持するために、場合によってはこのようなアクセス許可のチェックを無視する必要があります。

表 6.32 RDB$TYPES

列名 データ型 長さ 説明

RDB$FIELD_NAME CHAR 67 定義される列挙データ型の対象となる列

RDB$TYPE SMALLINT 上の列を示す内部番号。RDB$DEPENDENT_TYPES 列と同じ型コードを使用します。

• 0 - テーブル

• 1 - ビュー

• 2 - トリガー

• 3 - 計算フィールド

• 4 - 妥当性検査

• 5 - プロシージャ

上以外の数値は、将来のために予約されています。

表 6.31 RDB$TRIGGERS ( 続き )

列名 データ型 長さ 説明

第 6 章 システムテーブル、一時テーブル、ビュー 6-31

Page 248: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

システムテーブル

RDB$USER_PRIVILEGES

RDB$USER_PRIVILEGES は、SQL GRANT 文によってユーザーに割り当てられた特権を記録

します。 このテーブルは、ユーザーと特権の組み合わせごとに 1 つずつ作成されます。

RDB$TYPE_NAME CHAR 67 内部番号に対応するテキスト

RDB$DESCRIPTION BLOB サブタイプ:Text。定義される列挙データ型に関するユーザー指定の記述が格納されます。

RDB$SYSTEM_FLAG SMALLINT データ型が、次のいずれであるかを示します。

• ユーザー定義(値は 0)

• システム定義(値は 0 より大きい)

表 6.33 RDB$USER_PRIVILEGES

列名 データ型 長さ 説明

RDB$USER CHAR 31 RDB$PRIVILEGE 列に列記された特権を与えられたユーザー名

RDB$GRANTOR CHAR 31 特権を与えたユーザー名

RDB$PRIVILEGE CHAR 6 上記の RDB$USER 列のユーザーに与えられた特権。フィールドに格納された文字は、以下に示す有効な値に対応します。

有効な値は次のとおりです。

• ALL(A)

• SELECT(S)• DELETE(D)

• INSERT(I)• UPDATE(U)

• REFERENCE(R)

• MEMBER OF(ロール用)(M)

• DECRYPT(T)• ENCRYPT(E)

RDB$GRANT_OPTION SMALLINT WITH GRANT OPTION を伴う特権(1 の場合)か、そうでない特権(0 の場合)かを示します。

RDB$RELATION_NAME CHAR 67 特権の対象となるテーブルまたはロールを指定します。

RDB$FIELD_NAME CHAR 67 UPDATE 特権について、特権の対象となる列を指定します。

RDB$USER_TYPE SMALLINT

RDB$OBJECT_TYPE SMALLINT

表 6.32 RDB$TYPES ( 続き )

列名 データ型 長さ 説明

6-32 言語リファレンス

Page 249: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

システムテーブル

RDB$USERS システム テーブル RDB$USERS に格納されているユーザーのみが、そのデータベースにアクセスできます。

表 6.34 RDB$USERS

列名 データ型 長さ 説明

RDB$USER_NAME(RDB$USER_NAME)

VARCHAR 128 キャラクタ セット:UNICODE_FSS。NULL 値可。

RDB$SYSTEM_USER_NAME(RDB$USER_NAME)

VARCHAR 128 キャラクタ セット:UNICODE_FSS。NULL 値可。

RDB$GROUP_NAME(RDB$USER_NAME)

VARCHAR 128 キャラクタ セット:UNICODE_FSS。NULL 値可。

RDB$UID(RDB$UID) INTEGER NULL 値可。

RDB$GID(RDB$GID) INTEGER NULL 値可。

RDB$PASSWORD(RDB$PASSWORD)

VARCHAR 32 キャラクタ セット:OCTETS。NULL 値可。

RDB$USER_ACTIVE(RDB$USER_ACTIVE)

CHAR 2 NULL 値可。

RDB$USER_PRIVILEGE(RDB$USER_PRIVILEGE)

INTEGER NULL 値可。

RDB$DESCRIPTION(RDB$DESCRIPTION)

BLOB セグメント:80。サブタイプ:Text。キャラクタ セット:UNICODE_FSS。NULL 値可。

RDB$FIRST_NAME(RDB$NAME_PART)

VARCHAR 32 キャラクタ セット:UNICODE_FSS。NULL 値可。

RDB$MIDDLE_NAME(RDB$NAME_PART)

VARCHAR 32 キャラクタ セット:UNICODE_FSS。NULL 値可。

RDB$LAST_NAME(RDB$NAME_PART)

VARCHAR 32 キャラクタ セット:UNICODE_FSS。NULL 値可。

RDB$DEFAULT_ROLE(RDB$USER)

CHAR 67 キャラクタ セット:UNICODE_FSS。NULL 値可。

RDB$PASSWORD_DIGEST(RDB$PASSWORD_DIGEST)

VARCHAR 16 NULL 値可。

第 6 章 システムテーブル、一時テーブル、ビュー 6-33

Page 250: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

システム一時テーブル

RDB$VIEW_RELATIONS

RDB$VIEW_RELATIONS は、SQL オブジェクトでは使用されません。

システム一時テーブル

InterBase サーバーは、データベース、接続、トランザクション、文に関する大量の情報を

保持しています。 この情報は、次のシステムテーブルを通して使用できます。 これらのテー

ブルの詳細は、InterBase の『操作ガイド』を参照してください。

一時テーブル名は TMP$ で始まります。InterBase には、次のシステム一時テーブルがあ

ります。

表 6.35 RDB$VIEW_RELATIONS

列名 データ型 長さ 説明

RDB$VIEW_NAME CHAR 67 ビュー名。 RDB$VIEW_NAME 列とRDB$VIEW_CONTEXT 列の組み合わせは、一意な値でなければなりません。

RDB$RELATION_NAME CHAR 67 ビュー定義で参照されるテーブル名

RDB$VIEW_CONTEXT SMALLINT ビュー列を識別するエイリアス。クエリーのビュー BLR に使用するエイリアスと同じ値でなければなりません。

RDB$CONTEXT_NAME CHAR 67 RDB$VIEW_CONTEXT 列で設定したエイリアスのテキストバージョン。

この値は、次の条件を満たしていなければなりません。

• RDB$RELATIONS テーブルで設定した、対応するテーブルの RDB$VIEW_SOURCE 列の値と一致すること

• ビュー内で一意であること

TMP$ATTACHMENTS TMP$DATABASE TMP$POOL_BLOCKS

TMP$POOLS TMP$PROCEDURES TMP$RELATIONS

TMP$STATEMENTS TMP$TRANSACTIONS

6-34 言語リファレンス

Page 251: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

システム一時テーブル

TMP$ATTACHMENTS

TMP$ATTACHMENTS テーブルには、データベースへの 1 回の接続につき 1 つの行が格

納されます。

表 6.36 TMP$ATTACHMENTS

列名 データ型 説明

TMP$ATTACHMENT_ID INTEGER 接続の識別子

TMP$DATABASE_ID INTEGER データベースの識別子

TMP$POOL_ID INTEGER 予約

TMP$POOL_MEMORY INTEGER 予約

TMP$STATEMENTS SMALLINT コンパイルされた文の数

TMP$TRANSACTIONS SMALLINT アクティブなトランザクションの数

TMP$TIMESTAMP TIMESTAMP 接続のタイムスタンプ

TMP$QUANTUM INTEGER 実行単位

TMP$USER CHAR[67] ユーザー名

TMP$USER_IP_ADDR CHAR [31] ユーザーの IP アドレス

TMP$USER_HOST CHAR [31] ユーザーのホスト名

TMP$USER_PROCESS CHAR [31] ユーザーのプロセス ID

TMP$STATE CHAR [31] CONNECTED、ACTIVE

TMP$PRIORITY CHAR [31] 予約

TMP$DBKEY_ID INTEGER dbkey のトランザクション ID

TMP$ACTIVE_SORTS SMALLINT アクティブなソートの数

TMP$PAGE_READS INTEGER ページで、すべてのデータベースファイルを読み取る

TMP$PAGE_WRITES INTEGER ページで、すべてのデータベースファイルを書き込む

TMP$PAGE_FETCHES INTEGER ページで、すべてのデータベースファイルを取得する

TMP$PAGE_MARKS INTEGER ページで、すべてのデータベースファイルをマークする

TMP$RECORD_SELECTS INTEGER 接続によって選択されたレコード

TMP$RECORD_INSERTS INTEGER 接続によって挿入されたレコード

TMP$RECORD_UPDATES INTEGER 接続によって更新されたレコード

TMP$RECORD_DELETES INTEGER 接続によって削除されたレコード

第 6 章 システムテーブル、一時テーブル、ビュー 6-35

Page 252: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

システム一時テーブル

TMP$DATABASE

TMP$DATABASE には、接続したデータベースごとに 1 つの行が格納されます。

TMP$RECORD_PURGES INTEGER ガベージコレクションレコードの破棄

TMP$RECORD_EXPUNGES INTEGER ガベージコレクションレコードの削除

TMP$RECORD_BACKOUTS INTEGER ガベージコレクションレコードのバックアウト

表 6.37 TMP$DATABASE

列名 データ型 説明

TMP$DATABASE_ID INTEGER データベースの識別子

TMP$DATABASE_PATH VARCHAR[253] データベースのパス名

TMP$ATTACHMENTS SMALLINT アクティブな接続の数

TMP$STATEMENTS SMALLINT コンパイルされた文の数

TMP$STATE CHAR[31] フラッシュ、スイープ、再要求

TMP$ALLOCATED_PAGES INTEGER すべてのデータベースファイルに割り当てられたページ

TMP$POOLS INTEGER メモリプールの数

TMP$PROCEDURES SMALLINT ロードされたプロシージャの数

TMP$RELATIONS SMALLINT ロードされたリレーションの数

TMP$TRIGGERS SMALLINT ロードされたトリガーの数

TMP$ACTIVE_THREADS SMALLINT データベース内のアクティブなスレッド

TMP$SORT_MEMORY INTEGER ソートバッファによって割り当てられたメモリ

TMP$CURRENT_MEMORY INTEGER データベースに割り当てられた現在のメモリ

TMP$MAXIMUM_MEMORY INTEGER 現在までに割り当てられた 大のメモリ

TMP$PERMANENT_POOL_MEMORY INTEGER 永続プールメモリのサイズ

TMP$CACHE_POOL_MEMORY INTEGER バッファプールメモリのサイズ

表 6.36 TMP$ATTACHMENTS ( 続き )

列名 データ型 説明

6-36 言語リファレンス

Page 253: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

システム一時テーブル

TMP$TRANSACTIONS SMALLINT アクティブなトランザクションの数

TMP$TRANSACTION_COMMITS INTEGER コミットされたトランザクションの数

TMP$TRANSACTION_ROLLBACKS INTEGER ロールバックされたトランザクションの数

TMP$TRANSACTION_PREPARES INTEGER 準備されたトランザクションの数

TMP$TRANSACTION_DEADLOCKS INTEGER デッドロックされたトランザクションの数

TMP$TRANSACTION_CONFLICTS INTEGER トランザクション更新競合の数

TMP$TRANSACTION_WAITS INTEGER 待機しているトランザクションの数

TMP$NEXT_TRANSACTION INTEGER 次のトランザクション番号

TMP$OLDEST_INTERESTING INTEGER Oldest Interesting Transaction( も古い懸案のトランザクション)

TMP$OLDEST_ACTIVE INTEGER も古いアクティブトランザクション

TMP$OLDEST_SNAPSHOT INTEGER も古い SNAPSHOT トランザクション

TMP$CACHE_BUFFERS INTEGER キャッシュバッファの数

TMP$CACHE_PRECEDENCE INTEGER キャッシュ優先順位グラフ内のノード

TMP$CACHE_LATCH_WAITS INTEGER バッファラッチの待機

TMP$CACHE_FREE_WAITS INTEGER 空きバッファを待機する数

TMP$CACHE_FREE_WRITES INTEGER 空きバッファへの書き込み回数

TMP$SWEEP_INTERVAL INTEGER トリガーのスイープ間隔

TMP$SWEEP_ACTIVE CHAR[1] Y(アクティブ)、N(非アクティブ)

TMP$SWEEP_RELATION CHAR[67] 現在スイープされているリレーション

TMP$SWEEP_RECORDS INTEGER 上のリレーションでスイープされたレコード

TMP$PAGE_READS INTEGER ページで、すべてのデータベースファイルを読み取る

TMP$PAGE_WRITES INTEGER ページで、すべてのデータベースファイルを書き込む

表 6.37 TMP$DATABASE ( 続き )

列名 データ型 説明

第 6 章 システムテーブル、一時テーブル、ビュー 6-37

Page 254: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

システム一時テーブル

TMP$HEAPS

TMP$HEAPS には、InterBase の Random および Block ヒープのエントリごとに 1 つの行

が格納されます。

TMP$POOL_BLOCKS

TMP$POOL_BLOCKS テーブルには、各プールのメモリブロックごとに 1 つの行が格納され

ます。

TMP$PAGE_FETCHES INTEGER ページで、すべてのデータベースファイルを取得する

TMP$PAGE_MARKS INTEGER ページで、すべてのデータベースファイルをマークする

TMP$RECORD_SELECTS INTEGER データベースから選択されたレコード

TMP$RECORD_INSERTS INTEGER データベースに挿入されたレコード

TMP$RECORD_UPDATES INTEGER データベースに更新されたレコード

TMP$RECORD_DELETES INTEGER データベースから削除されたレコード

TMP$RECORD_PURGES INTEGER ガベージコレクションレコードの破棄

TMP$RECORD_EXPUNGES INTEGER ガベージコレクションレコードの削除

TMP$RECORD_BACKOUTS INTEGER ガベージコレクションレコードのバックアウト

表 6.38 TMP$HEAPS

列名 データ型 説明

TMP$HEAP_TYPE CHAR[31] RANDOM または BLOCK

TMP$HEX_ADDRESS CHAR[31] 空きブロックのメモリアドレス(16 進数単位)

TMP$ADDRESS NUMERIC(18,0) 空きブロックのメモリアドレス

TMP$FREE_MEMORY INTEGER ブロック内の空きメモリ量

表 6.37 TMP$DATABASE ( 続き )

列名 データ型 説明

6-38 言語リファレンス

Page 255: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

システム一時テーブル

表 6.39 TMP$POOL_BLOCKS

列名 データ型 説明

TMP$POOL_ID INTEGER

TMP$ACC INTEGER

TMP$ARR INTEGER

TMP$ATT INTEGER

TMP$BCB INTEGER バッファ制御ブロック

TMP$BDB INTEGER バッファデスクリプタブロック

TMP$BLB INTEGER BLOB ブロック

TMP$BLF INTEGER

TMP$BMS INTEGER

TMP$BTB INTEGER

TMP$BTC INTEGER

TMP$CHARSET INTEGER

TMP$CSB INTEGER コンパイラスクラッチブロック

TMP$CSCONVERT INTEGER

TMP$DBB INTEGER データベースブロック

TMP$DCC INTEGER データ圧縮制御ブロック

TMP$DFW INTEGER 保留されている作業ブロック

TMP$DLS INTEGER

TMP$EXT INTEGER

TMP$FIL INTEGER ファイルブロック

TMP$FLD INTEGER

TMP$FMT INTEGER フォーマットブロック

TMP$FRB INTEGER 空きブロック

TMP$FUN INTEGER

TMP$HNK INTEGER ハンクブロック

TMP$IDB INTEGER

TMP$IDL INTEGER

TMP$IRB INTEGER

TMP$IRL INTEGER

第 6 章 システムテーブル、一時テーブル、ビュー 6-39

Page 256: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

システム一時テーブル

TMP$LCK INTEGER ロックブロック

TMP$LWT INTEGER

TMP$MAP INTEGER

TMP$MFB INTEGER

TMP$NOD INTEGER ノードブロック

TMP$OPT INTEGER

TMP$PRC INTEGER

TMP$PRE INTEGER 優先順位ブロック

TMP$PRM INTEGER

TMP$REC INTEGER レコードブロック

TMP$REL INTEGER リレーションブロック

TMP$REQ INTEGER 要求ブロック

TMP$RIV INTEGER

TMP$RSB INTEGER レコードソースブロック

TMP$RSC INTEGER

TMP$SAV INTEGER

TMP$SBM INTEGER 疎ビットマップブロック

TMP$SCL INTEGER

TMP$SDW INTEGER

TMP$SMB INTEGER ソートマップブロック

TMP$SRPB INTEGER

TMP$STR INTEGER 文字列ブロック

TMP$SVC INTEGER

TMP$SYM INTEGER

TMP$TEXTTYPE INTEGER

TMP$TFB INTEGER 一時フィールドブロック

TMP$TPC INTEGER

TMP$TRA INTEGER トランザクションブロック

TMP$USR INTEGER

表 6.39 TMP$POOL_BLOCKS ( 続き )

列名 データ型 説明

6-40 言語リファレンス

Page 257: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

システム一時テーブル

TMP$POOLS

TMP$POOLS テーブルには、現在のメモリプールごとに 1 つの行が格納されます。プール

は、必要であれば内部システムオブジェクトに割り当てられるメモリの集まりです。

TMP$PROCEDURES

TMP$PROCEDURES テーブルには、現在の接続が開始されてから実行されたプロシージャ

ごとに 1 つの行が格納されます。

TMP$VCL INTEGER ベクターロングブロック

TMP$VCT INTEGER

TMP$VCX INTEGER

TMP$XCP INTEGER

表 6.40 TMP$POOLS

列名 データ型 説明

TMP$POOL_ID INTEGER プールの識別子

TMP$TYPE CHAR[31] プールのタイプ

TMP$POOL_MEMORY INTEGER プール内の合計メモリ

TMP$FREE_MEMORY INTEGER プール内の空きメモリ

TMP$EXTEND_MEMORY INTEGER プールの拡張単位のメモリ量

TMP$FREE_STACK_NODES SMALLINT 空きリンクリストスタックノード

TMP$FREE_BITMAP_BUCKETS SMALLINT 空きビットマップバケット

TMP$FREE_BITMAP_SEGMENTS INTEGER 空きビットマップセグメント

表 6.41 TMP$PROCEDURES

列名 データ型 説明

TMP$PROCEDURE_ID INTEGER プロシージャの識別子

TMP$DATABASE_ID INTEGER データベースの識別子

TMP$PROCEDURE_NAME CHAR[67] プロシージャ名

TMP$POOL_ID INTEGER プールの識別子

TMP$POOL_MEMORY INTEGER プールメモリサイズ

表 6.39 TMP$POOL_BLOCKS ( 続き )

列名 データ型 説明

第 6 章 システムテーブル、一時テーブル、ビュー 6-41

Page 258: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

システム一時テーブル

TMP$RELATIONS

TMP$RELATIONS テーブルには、現在の接続が開始されてから参照されたリレーションごと

に 1 つの行が格納されます。

TMP$CLONE SMALLINT コピーされたインスタンスの番号

TMP$TIMESTAMP TIMESTAMP プロシージャの開始時間

TMP$USE_COUNT SMALLINT プロシージャでコンパイルされた文

TMP$QUANTUM INTEGER 実行単位

TMP$INVOCATIONS INTEGER プロシージャの呼び出し数

TMP$PAGE_READS INTEGER ページで、すべてのデータベースファイルを読み取る

TMP$PAGE_WRITES INTEGER ページで、すべてのデータベースファイルを書き込む

TMP$PAGE_FETCHES INTEGER ページで、すべてのデータベースファイルを取得する

TMP$PAGE_MARKS INTEGER ページで、すべてのデータベースファイルをマークする

TMP$RECORD_SELECTS INTEGER プロシージャによって選択されたレコード

TMP$RECORD_INSERTS INTEGER プロシージャによって挿入されたレコード

TMP$RECORD_UPDATES INTEGER プロシージャによって更新されたレコード

TMP$RECORD_DELETES INTEGER プロシージャによって削除されたレコード

TMP$RECORD_PURGES INTEGER ガベージコレクションレコードの破棄

TMP$RECORD_EXPUNGES INTEGER ガベージコレクションレコードの削除

TMP$RECORD_BACKOUTS INTEGER ガベージコレクションレコードのバックアウト

表 6.42 TMP$RELATIONS

列名 データ型 説明

TMP$RELATION_ID SMALLINT リレーションの識別子

TMP$DATABASE_ID INTEGER データベースの識別子

TMP$RELATION_NAME CHAR[67] リレーション名

TMP$USE_COUNT SMALLINT リレーションに対してコンパイルされた文

表 6.41 TMP$PROCEDURES ( 続き )

列名 データ型 説明

6-42 言語リファレンス

Page 259: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

システム一時テーブル

TMP$SWEEP_COUNT SMALLINT データベーススイープまたはガベージコレクタ

TMP$SCAN_COUNT INTEGER 連続スキャン

TMP$FORMATS SMALLINT リレーションフォーマットの数

TMP$POINTER_PAGES INTEGER リレーションポインタのページ数

TMP$DATA_PAGES INTEGER リレーションデータのページ数

TMP$GARBAGE_COLLECT_PAGES INTEGER ガベージコレクトするデータページの数

TMP$PAGE_READS INTEGER ページで、すべてのデータベースファイルを読み取る

TMP$PAGE_WRITES INTEGER ページで、すべてのデータベースファイルを書き込む

TMP$PAGE_FETCHES INTEGER ページで、すべてのデータベースファイルを取得する

TMP$PAGE_MARKS INTEGER ページで、すべてのデータベースファイルをマークする

TMP$RECORD_IDX_SELECTS INTEGER インデックス抽出によって選択されたレコード

TMP$RECORD_SEQ_SELECTS INTEGER 連続スキャンによって選択されたレコード

TMP$RECORD_INSERTS INTEGER リレーションに挿入されたレコード

TMP$RECORD_UPDATES INTEGER リレーションで更新されたレコード

TMP$RECORD_DELETES INTEGER リレーションから削除されたレコード

TMP$RECORD_PURGES INTEGER ガベージコレクションレコードの破棄

TMP$RECORD_EXPUNGES INTEGER ガベージコレクションレコードの削除

TMP$RECORD_BACKOUTS INTEGER ガベージコレクションレコードのバックアウト

表 6.42 TMP$RELATIONS ( 続き )

列名 データ型 説明

第 6 章 システムテーブル、一時テーブル、ビュー 6-43

Page 260: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

システム一時テーブル

TMP$STATEMENTS

TMP$STATEMENTS テーブルには、現在の接続で実行される文ごとに 1 つの行が格納されま

す。

表 6.43 TMP$STATEMENTS

列名 データ型 説明

TMP$STATEMENT_ID INTEGER 文の識別子

TMP$ATTACHMENT_ID INTEGER 接続の識別子

TMP$TRANSACTION_ID INTEGER トランザクション番号

TMP$SQL VARCHAR[4094] SQL 文文字列

TMP$POOL_ID INTEGER プールの識別子

TMP$POOL_MEMORY INTEGER プールメモリサイズ

TMP$CLONE SMALLINT コピーされたインスタンスの番号

TMP$TIMESTAMP TIMESTAMP 文の開始時間

TMP$QUANTUM INTEGER 実行単位

TMP$INVOCATIONS INTEGER 文の呼び出し数

TMP$STATE CHAR[31] ACTIVE、INACTIVE、STALLED、CANCELLED

TMP$PRIORITY CHAR[31] 予約

TMP$PAGE_READS INTEGER ページで、すべてのデータベースファイルを読み取る

TMP$PAGE_WRITES INTEGER ページで、すべてのデータベースファイルを書き込む

TMP$PAGE_FETCHES INTEGER ページで、すべてのデータベースファイルを取得する

TMP$PAGE_MARKS INTEGER ページで、すべてのデータベースファイルをマークする

TMP$RECORD_SELECTS INTEGER 文によって選択されたレコード

TMP$RECORD_INSERTS INTEGER 文によって挿入されたレコード

TMP$RECORD_UPDATES INTEGER 文によって更新されたレコード

TMP$RECORD_DELETES INTEGER 文によって削除されたレコード

TMP$RECORD_PURGES INTEGER ガベージコレクションレコードの破棄

TMP$RECORD_EXPUNGES INTEGER ガベージコレクションレコードの削除

TMP$RECORD_BACKOUTS INTEGER ガベージコレクションレコードのバックアウト

6-44 言語リファレンス

Page 261: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

システム一時テーブル

TMP$TRANSACTIONS

TMP$TRANSACTIONS テーブルには、アクティブであるトランザクション、または limbo 状態であるトランザクションごとに 1 つの行が格納されます。

表 6.44 TMP$TRANSACTIONS

列名 データ型 説明

TMP$TRANSACTION_ID INTEGER トランザクション番号

TMP$ATTACHMENT_ID INTEGER 接続の識別子

TMP$POOL_ID INTEGER

TMP$POOL_MEMORY INTEGER

TMP$TIMESTAMP TIMESTAMP 接続の開始時間

TMP$SNAPSHOT INTEGER SNAPSHOT トランザクションの番号

TMP$QUANTUM INTEGER 実行単位

TMP$SAVEPOINTS INTEGER レコードのセーブポイント数

TMP$READONLY CHAR[1] トランザクションが読み取り専用である

TMP$WRITE CHAR[1] トランザクションがデータを書き込んだ

TMP$NOWAIT CHAR[1] トランザクションが NO WAIT

TMP$COMMIT_RETAINING CHAR[1] COMMIT RETAIN の実行

TMP$STATE CHAR[31] ACTIVE、LIMBO、COMMITTING、PRECOMMITTED

TMP$PRIORITY CHAR 予約

TMP$TYPE CHAR[31] SNAPSHOT、READ_COMMITTED

TMP$PAGE_READS INTEGER ページで、すべてのデータベースファイルを読み取る

TMP$PAGE_WRITES INTEGER ページで、すべてのデータベースファイルを書き込む

TMP$PAGE_FETCHES INTEGER ページで、すべてのデータベースファイルを取得する

TMP$PAGE_MARKS INTEGER ページで、すべてのデータベースファイルをマークする

TMP$RECORD_SELECTS INTEGER トランザクションによって選択されたレコード

TMP$RECORD_INSERTS INTEGER トランザクションによって挿入されたレコード

TMP$RECORD_UPDATES INTEGER トランザクションによって更新されたレコード

第 6 章 システムテーブル、一時テーブル、ビュー 6-45

Page 262: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

TMP$TRIGGERS

TMP$TRIGGERS テーブルには、現在の接続が開始されてから実行されたトリガーごとに

1 つの行が格納されます。

TMP$RECORD_DELETES INTEGER トランザクションによって削除されたレコード

TMP$RECORD_PURGES INTEGER ガベージコレクションレコードの破棄

TMP$RECORD_EXPUNGES INTEGER ガベージコレクションレコードの削除

TMP$RECORD_BACKOUTS INTEGER ガベージコレクションレコードのバックアウト

表 6.45 TMP$TRIGGERS

列名 データ型 説明

TMP$TRIGGER_ID INTEGER トリガーの識別子

TMP$DATABASE_ID INTEGER データベースの識別子

TMP$RELATION_NAME CHAR[67] トリガーのリレーション名

TMP$TRIGGER_NAME CHAR[67] トリガー名

TMP$TRIGGER_TYPE SMALLINT 定義されるトリガーの型。有効な値は次のとおりです。

1 - BEFORE INSERT

2 - AFTER INSERT

3 - BEFORE UPDATE

4 - AFTER UPDATE

5 - BEFORE DELETE

6 - AFTER DELETE

TMP$TRIGGER_SEQUENCE SMALLINT 定義されるトリガーのシーケンス番号。同一のトリガーに対する、相対的な起動時期を決定します。

シーケンス番号が同じトリガーの起動順序は不定です。

番号の指定がなければ、0 が割り当てられます。

TMP$TRIGGER_ORDER CHAR[31] トリガーの位置

TMP$TRIGGER_OPERATION CHAR[31] UPDATE、DELETE、INSERT

TMP$POOL_ID INTEGER プールの識別子

TMP$POOL_MEMORY INTEGER プールメモリサイズ

表 6.44 TMP$TRANSACTIONS ( 続き )

列名 データ型 説明

6-46 言語リファレンス

Page 263: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

システム一時テーブル

TMP$CLONE SMALLINT コピーされたインスタンスの番号

TMP$TIMESTAMP TIMESTAMP トリガーの開始時間

TMP$QUANTUM INTEGER 実行単位

TMP$INVOCATIONS INTEGER トリガーの呼び出し数

TMP$PAGE_READS INTEGER ページで、すべてのデータベースファイルを読み取る

TMP$PAGE_WRITES INTEGER ページで、すべてのデータベースファイルを書き込む

TMP$PAGE_FETCHES INTEGER ページで、すべてのデータベースファイルを取得する

TMP$PAGE_MARKS INTEGER ページで、すべてのデータベースファイルをマークする

TMP$RECORD_SELECTS INTEGER トリガーによって選択されたレコード

TMP$RECORD_INSERTS INTEGER トリガーによって挿入されたレコード

TMP$RECORD_UPDATES INTEGER トリガーによって更新されたレコード

TMP$RECORD_DELETES INTEGER プロシージャによって削除されたレコード

TMP$RECORD_PURGES INTEGER ガベージコレクションレコードの破棄

TMP$RECORD_EXPUNGES INTEGER ガベージコレクションレコードの削除

TMP$RECORD_BACKOUTS INTEGER ガベージコレクションレコードのバックアウト

表 6.45 TMP$TRIGGERS ( 続き )

列名 データ型 説明

第 6 章 システムテーブル、一時テーブル、ビュー 6-47

Page 264: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

システムビュー

システムビュー

この節にあるコードを使って SQL スクリプトを作成すれば、データベースに対する既存の

整合性制約の情報を提供する 4 つのビューを作成できます。 これらのビューを作成するに

は、データベースを事前に作成する必要があります。 SQL システムビューは、SQL-92 規格で定義されたシステムビューのサブセットです。 これらは ANSI SQL-92 で定義されて

いるため、システムビューとその列の名前は RDB$ では始まりません。

• CHECK_CONSTRAINTS ビュー

CREATE VIEW CHECK_CONSTRAINTS ( CONSTRAINT_NAME, CHECK_CLAUSE) AS

SELECT RDB$CONSTRAINT_NAME, RDB$TRIGGER_SOURCEFROM RDB$CHECK_CONSTRAINTS RC, RDB$TRIGGERS RT

WHERE RT.RDB$TRIGGER_NAME = RC.RDB$TRIGGER_NAME;

• CONSTRAINTS_COLUMN_USAGE ビュー

CREATE VIEW CONSTRAINTS_COLUMN_USAGE ( TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME) AS SELECT RDB$RELATION_NAME, RDB$FIELD_NAME, RDB$CONSTRAINT_NAME FROM RDB$RELATION_CONSTRAINTS RC, RDB$INDEX_SEGMENTS RI WHERE RI.RDB$INDEX_NAME = RC.RDB$INDEX_NAME;

• REFERENTIAL_CONSTRAINTS ビュー

CREATE VIEW REFERENTIAL_CONSTRAINTS ( CONSTRAINT_NAME, UNIQUE_CONSTRAINT_NAME, MATCH_OPTION, UPDATE_RULE, DELETE_RULE) AS SELECT RDB$CONSTRAINT_NAME, RDB$CONST_NAME_UQ, RDB$MATCH_OPTION,

RDB$UPDATE_RULE, RDB$DELETE_RULE FROM RDB$REF_CONSTRAINTS;

• TABLE_CONSTRAINTS ビュー

CREATE VIEW TABLE_CONSTRAINTS ( CONSTRAINT_NAME, TABLE_NAME, CONSTRAINT_TYPE, IS_DEFERRABLE, INITIALLY_DEFERRED) AS

6-48 言語リファレンス

Page 265: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

システムビュー

SELECT RDB$CONSTRAINT_NAME, RDB$RELATION_NAME,RDB$CONSTRAINT_TYPE, RDB$DEFERRABLE, RDB$INITIALLY_DEFERRED

FROM RDB$RELATION_CONSTRAINTS;

CHECK_CONSTRAINTS

CHECK_CONSTRAINTS は、データベースで定義されているすべての CHECK 制約を識

別します。

CONSTRAINTS_COLUMN_USAGE

CONSTRAINTS_COLUMN_USAGE は、PRIMARY KEY 制約と UNIQUE 制約に使用

する列を識別します。 FOREIGN KEY 制約については、制約を設定する列を識別します。

REFERENTIAL_CONSTRAINTS

REFERENTIAL_CONSTRAINTS は、データベースに定義されているすべての参照制約

を識別します。

表 6.46 CHECK_CONSTRAINTS

列名データ型 長さ 説明

CONSTRAINT_NAME CHAR 67 CHECK 制約の一意な名前。NULL 値可。

CHECK_CLAUSE BLOB サブタイプ:Text。RDB$TRIGGERS テーブルのRDB$TRIGGER_SOURCE 列に格納されているトリガー定義の元のソース。NULL 値可。

表 6.47 CONSTRAINTS_COLUMN_USAGE

列名データ型 長さ 説明

TABLE_NAME CHAR 67 制約の対象となるテーブル。NULL 値可。

COLUMN_NAME CHAR 67 制約の定義に使用する列。NULL 値可。

CONSTRAINT_NAME CHAR 67 制約の一意な名前。NULL 値可。

表 6.48 REFERENTIAL_CONSTRAINTS

列名データ型 長さ 説明

CONSTRAINT_NAME CHAR 67 制約の一意な名前。NULL 値可。

UNIQUE_CONSTRAINT_NAME CHAR 67 指定した参照列リストに対応する、PRIMARY KEY 制約名または UNIQUE 制約名。NULL 値可。

第 6 章 システムテーブル、一時テーブル、ビュー 6-49

Page 266: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

システムビュー

TABLE_CONSTRAINTS

TABLE_CONSTRAINTS は、データベースに定義されているすべての制約を識別します。

MATCH_OPTION CHAR 7 将来のために予約。常に FULL に設定されています。NULL 値可。

UPDATE_RULE CHAR 11 将来のために予約。常に RESTRICT に設定されています。NULL 値可。

DELETE_RULE CHAR 11 将来のために予約。常に RESTRICT に設定されています。NULL 値可。

表 6.49 TABLE_CONSTRAINTS

列名データ型 長さ 説明

CONSTRAINT_NAME CHAR 67 制約の一意な名前。NULL 値可。

TABLE_NAME CHAR 67 制約の対象となるテーブル。NULL 値可。

CONSTRAINT_TYPE CHAR 11 UNIQUE、PRIMARY KEY、FOREIGN KEY、CHECK のいずれかを入力することができます。NULL 値可。

IS_DEFERRABLE CHAR 3 将来のために予約。常時数値が設定されています。NULL 値可。

INITIALLY_DEFERRED CHAR 3 将来のために予約。常時数値が設定されています。NULL 値可。

表 6.48 REFERENTIAL_CONSTRAINTS ( 続き )

列名データ型 長さ 説明

6-50 言語リファレンス

Page 267: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

第 章

第 7 章キャラクタセットと照合順序

InterBase の CHAR 列、VARCHAR 列、テキスト BLOB 列では、さまざまなキャラクタ

セットを使用できます。 キャラクタセットは、列にテキストとして入力できる記号を定義

し、各記号を表示するために必要な登録の 大バイト数を定義します。各記号を表すため

に必要な格納領域の 大バイト数も定義します。 ISO8859_1 のように格納領域に 1 バイト

しか必要ないキャラクタセットもあれば、 UNICODE_FSS のように各記号の登録に 1 バイトから 3 バイト必要なキャラクタセットもあります。

それぞれのキャラクタセットには、記号がどのようにソートされ、順序付けられるかを指

定する暗黙的な照合順序があります。 キャラクタセットの中には、代替の照合順序を持つも

のもあります。 どのキャラクタセットでも、キャラクタセットを選択することで、照合順序

が決まります。

この章では、InterBase で利用できるキャラクタセットと対応する照合順序、およびその指

定方法について説明します。

• データベース全体のデフォルトキャラクタセット

• テーブル内の特定の列での代替キャラクタセットおよび照合順序

• サーバーが、サーバーとクライアントの間でデータを変換するときに使用すべき、クライ

アントアプリケーションのキャラクタセット

• 比較演算における値の照合順序

• ORDER BY 句および GROUP BY 句での照合順序

InterBase のキャラクタセットと照合順序

次の表は、InterBase で使用できるキャラクタセットのリストです。 各キャラクタセットごと

に、記号の登録に使用される 大バイト数と 小バイト数、およびそのキャラクタセット

にサポートされるすべての照合順序をリストアップしています。 キャラクタセットの 初

の照合順序は、そのセットの暗黙的な照合であり、COLLATE 句に別の順序を指定していな

い場合に使用されます。暗黙的な照合順序は、COLLATE 句では指定できません。

第 7 章 キャラクタセットと照合順序 7-1

Page 268: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

I n t e r B a s e のキャラクタセットと照合順序

表 7.1 キャラクタセットと照合順序

キャラクタ セット

キャラクタ セット ID

最大 文字 サイズ

最小 文字 サイズ 照合順序

ASCII 2 1 バイト 1 バイト ASCII

BIG_5 56 2 バイト 1 バイト BIG_5

CYRL 50 1 バイト 1 バイト CYRL

DB_RUS

PDOX_CYRL

DOS437 10 1 バイト 1 バイト DOS437

DB_DEU437

DB_ESP437

DB_FIN437

DB_FRA437

DB_ITA437

DB_NLD437

DB_SVE437

DB_UK437

DB_US437

PDOX_ASCII

PDOX_INTL

PDOX_SWEDFIN

DOS850 11 1 バイト 1 バイト DOS850

DB_DEU850

DB_ESP850

DB_FRA850

DB_FRC850

DB_ITA850

DB_NLD850

DB_PTB850

DB_SVE850

DB_UK850

DB_US850

DOS852 45 1 バイト 1 バイト DOS852

DB_CSY

DB_PLK

DB_SLO

PDOX_CSY

PDOX_HUN

PDOX_PLK

PDOX_SLO

7-2 言語リファレンス

Page 269: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

I n t e r B a s e のキャラクタセットと照合順序

DOS857 46 1 バイト 1 バイト DOS857

DB_TRK

DOS860 13 1 バイト 1 バイト DOS860

DB_PTG860

DOS861 47 1 バイト 1 バイト DOS861

PDOX_ISL

DOS863 14 1 バイト 1 バイト DOS863

DB_FRC863

DOS865 12 1 バイト 1 バイト DOS865

DB_DAN865

DB_NOR865

PDOX_NORDAN4

EUCJ_0208 6 2 バイト 1 バイト EUJC_0208

GB_2312 57 2 バイト 1 バイト GB_2312

ISO8859_1 21 1 バイト 1 バイト ISO8859_1CC_ESPLAT1CC_PTBRLAT1DA_DADE_DEDU_NLEN_UKEN_USES_ESFI_FIFR_CAFR_FRIS_ISIT_ITNO_NOPT_PTSV_SV

ISO8859_2 22 1 バイト 1 バイト ISO8859_2

CS_CZ

PL_PL

表 7.1 キャラクタセットと照合順序 ( 続き )

キャラクタ セット

キャラクタ セット ID

最大 文字 サイズ

最小 文字 サイズ 照合順序

第 7 章 キャラクタセットと照合順序 7-3

Page 270: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

I n t e r B a s e のキャラクタセットと照合順序

ISO8859_15 39 1 バイト 1 バイト ISO8859_15

DA_DA9

DE_DE9

DU_NL9

EN_UK9

EN_US9

ES_ES9

FI_FI9

FR_CA9

FR_FR9

IS_IS9

IT_IT9

NO_NO9

PT_PT9

SV_SV9

KO18-R 58 1 バイト 1 バイト RU-RU

KSC_5601 44 2 バイト 1 バイト KSC_5601

KSC_DICTIONARY

NEXT 19 1 バイト 1 バイト NEXT

NXT_DEU

NXT_FRA

NXT_ITA

NXT_US

NONE 0 1 バイト 1 バイト なし

OCTETS 1 1 バイト 1 バイト OCTETS

SJIS_0208 5 2 バイト 1 バイト SJIS_0208

UNICODE_BEUCS2BE

8 2 バイト 2 バイト 現時点では該当なし

UNICODE_FSS 3 3 バイト 1 バイト UNICODE_FSS

UNICODE_LEUCS2LE

64 2 バイト 2 バイト 該当なし

UTF_8 59 1 バイト 4 バイト 現時点では該当なし

表 7.1 キャラクタセットと照合順序 ( 続き )

キャラクタ セット

キャラクタ セット ID

最大 文字 サイズ

最小 文字 サイズ 照合順序

7-4 言語リファレンス

Page 271: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

I n t e r B a s e のキャラクタセットと照合順序

キャラクタセット登録の必要条件

特定のキャラクタセットを登録する際に必要な条件を知っておくことは重要ですが、

InterBase では、各項目の 大登録量が CHAR 列では 32767 バイト、VARCHAR 列では 32765バイトに制限されています。 シングルバイト文字の列では、1 文字が 1 バイトに格納される

ため、エラーなしでシングルバイトの列 1 つにつき 32767 文字(VARCHAR の場合は 32,765文字)を定義できます。

マルチバイトキャラクタセットの場合、列定義に入れることができる 大文字数を求める

には、データ型の内部バイト格納の限界を各文字のバイト数で割ります。 2 バイトキャラク

タセットの限界は、1 項目当たり 16383 文字、3 バイトキャラクタセットの限界は、1 項目

当たり 10922 文字です。 VARCHAR 列の場合は、それぞれ 16382 文字と 10921 文字です。

次の例では、UNICODE_FSS キャラクタセットを使用する CHAR データ型が指定されていま

す。このキャラクタセットは、単一文字に 高 3 バイトを使用します。

CHAR (10922) CHARACTER SET UNICODE_FSS; /* 成功 */

CHAR (10923) CHARACTER SET UNICODE_FSS; /* 失敗 */

WIN1250 51 1 バイト 1 バイト WIN1250

PXW_CSY

PXW_HUNDC

PXW_PLK

PXW_SLO

WIN1251 52 1 バイト 1 バイト WIN1251

PXW_CYRL

WIN1252 53 1 バイト 1 バイト WIN1252

PXW_INTL

PXW_INTL850

PXW_NORDAN4

PXW_SPAN

PXW_SWEDFIN

WIN1253 54 1 バイト 1 バイト WIN1253

PXW_GREEK

WIN1254 55 1 バイト 1 バイト WIN1254

PXW_TURK

表 7.1 キャラクタセットと照合順序 ( 続き )

キャラクタ セット

キャラクタ セット ID

最大 文字 サイズ

最小 文字 サイズ 照合順序

第 7 章 キャラクタセットと照合順序 7-5

Page 272: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

I n t e r B a s e のキャラクタセットと照合順序

Paradox と dBASE のサポート

Paradox for DOS、Paradox for Windows、dBASE for DOS、dBASE for Windows をサポートするた

めに、多数のキャラクタセットとそれに対応する照合順序が用意されています。

DOS 用キャラクタセット次のキャラクタセットは、DOS コードページに対応しています。これらは Paradox for DOSと dBASE for DOS によりアクセスされる InterBase データベースのキャラクタセットの指定

に使用されます。

Paradox 固有のキャラクタセットの照合順序の名前は、“PDOX” で始まります。たとえば、

DOS コードページ 865 の DOS865 キャラクタセットは、“PDOX_NORDAN4” というノル

ウェーとデンマーク用の Paradox 照合順序をサポートします。

dBASE 固有のキャラクタセットの照合順序の名前は、"DB" で始まります。 たとえば、DOSコードページ 437 の DOS437 キャラクタセットは、"DB_ESP437" と言われるスペイン用の

dBASE 照合順序をサポートします。

DOSE コードページ、Paradox と dBASE 照合順序の詳細は、該当する Paradox または dBASEのマニュアルおよびドライバマニュアルを参照してください。

Microsoft Windows 用キャラクタセットたとえば、Paradox for Windows などの 5 つのキャラクタセットが Windows Client アプリケー

ションをサポートしています。 これらのキャラクタセットには WIN1250、WIN1251、WIN1252、WIN1253、WIN1254 があります。

Paradox for Windows 固有のキャラクタセットの照合順序の名前は、“PXW” で始まります。 たとえば、WIN1252 キャラクタセットは、“PXW_NORDAN4” というノルウェーとデンマーク

用の Paradox for Windows 照合順序をサポートします。

Windows のキャラクタセットと Paradox for Windows の照合順序の詳細は、該当する Paradoxfor Windows と Driver マニュアルを参照してください。

表 7.2 DOS コードページに対応するキャラクタセット

キャラクタセット DOS コードページ

DOS437 437

DOS850 850

DOS852 852

DOS857 857

DOS860 860

DOS861 861

DOS863 863

DOS865 865

7-6 言語リファレンス

Page 273: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

キャラクタセットの指定

追加キャラクタセットと照合順序

InterBase には、キャラクタセットと照合順序が継続的に追加され、サポートされます。 新し

く作成されたデータベースで追加キャラクタセットと照合順序を使用できるかを調べるに

は、isql でデータベースに接続し、次の問い合わせを行い、利用可能なキャラクタセットと

照合順序のリストを作成します。

SELECT RDB$CHARACTER_SET_NAME, RDB$CHARACTER_SET_IDFROM RDB$CHARACTER_SETSORDER BY RDB$CHARACTER_SET_NAME;

SELECT RDB$COLLATION_NAME, RDB$CHARACTER_SET_IDFROM RDB$COLLATIONSORDER BY RDB$COLLATION_NAME;

キャラクタセットの指定

この節では、キャラクタセットを指定する方法の詳細について説明します。 特に次の事項を

指定する方法について述べています。

• データベースのデフォルトのキャラクタセット

• テーブルの列のキャラクタセット

• クライアント接続のキャラクタセット

• 列の照合順序

• 比較演算における照合順序

• ORDER BY 句と GROUP BY 句での照合順序

データベースのデフォルトキャラクタセット

データベースのデフォルトキャラクタセット指定では、他のキャラクタセット情報が指定

されない場合に、サーバーがデータベース内の CHAR 列、VARCHAR 列、テキスト BLOB列にタグを付ける場合に使用するキャラクタセットを指定します。 追加のキャラクタセッ

ト情報なしで、データがそのような列に格納された場合、サーバーはそのタグを利用して、

そのデータをどのように格納し、コード変換するかを決めます。 CREATE DATABASE 文を使ってデータベースを作成した場合、デフォルトキャラクタセットは必ず指定しなけれ

ばなりません。

デフォルトキャラクタセットの指定は、CREATE DATABSE 文の DEFAULTCHARACTER SET 句を使用します。 たとえば、次の文では、ISO8859_1 キャラクタセッ

トを使用するデータベースが作成されます。

CREATE DATABASE 'europe.ib' DEFAULT CHARACTER SET ISO8859_1;

第 7 章 キャラクタセットと照合順序 7-7

Page 274: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

キャラクタセットの指定

重要 キャラクタセットを指定しなかった場合、キャラクタセットはデフォルトの NONE に設定

されます。 デフォルトが NONE であるということは、列で使用されるキャラクタセットが

存在しないことを意味します。したがって、データは、入力の時点で使用しているキャラ

クタセットを使って列に格納され、また取り出されることになります。 NONE が設定され

ている列には、後で任意のキャラクタセットをロードすることができますが、異なるキャ

ラクタセットが設定されている列にそのデータを後で移動することはできません。 この場

合には、移動元のキャラクタセットと移動先のキャラクタセットとの間でコード変換は行

われず、このため、移動中にエラーが発生することがあります。

CREATE DATABASE の構文の詳細は、2-34 ページ の「CREATE DATABASE」を参照

してください。

テーブルの列のキャラクタセット

テーブルの各列のキャラクタセットは、その列の CHAR または VARCHAR データ型定義

の一部として指定できます。 キャラクタセットを列指定で定義した場合、データベースに宣

言されたデフォルトキャラクタセットを無効にします。 たとえば、次の isql 文では、デフォ

ルトキャラクタセット ISO8859_1 を持つデータベースが作成され、その後、2 つの列定義

が異なるキャラクタセットを指定するテーブルが作成されます。

CREATE DATABASE 'europe.ib' DEFAULT CHARACTER SET ISO8859_1;

CREATE TABLE RUS_NAME(LNAME VARCHAR(30) NOT NULL CHARACTER SET CYRL,FNAME VARCHAR(20) NOT NULL CHARACTER SET CYRL,

);

CREATE TABLE の構文の詳細は、2-56 ページ の「CREATE TABLE」を参照してくだ

さい。

クライアント接続のキャラクタセット

isql などのクライアントアプリケーションがデータベースに接続する場合、固有のキャラ

クタセットの要件を持っている場合があります。 クライアントにデータベースアクセスを

提供するサーバーには、クライアントが指定しない限り、これらの要件はわかりません。 クライアントアプリケーションは、データベースに接続する前に SET NAMES 文で、その

キャラクタセットの要件を指定します。

SET NAMES 文では、データをデータベースからクライアントアプリケーションへ変換す

るときにサーバーが使用するキャラクタセットを指定します。 同様に、クライアントがデー

タをデータベースに送るときは、サーバーは、そのデータをクライアントのキャラクタセッ

トからデータベースのデフォルトキャラクタセット(各列に定義したキャラクタセットが

データベースのデフォルトキャラクタセットとは異なる場合には、そのキャラクタセット)

に変換します。

たとえば、次の isql コマンドは、 isql が DOS437 キャラクタセットを使用していることを

指定します。 その次のコマンドは、前の「テーブルの列のキャラクタセットの指定」で作成

した europe データベースに接続します。

SET NAMES DOS437;

7-8 言語リファレンス

Page 275: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

キャラクタセットの指定

CONNECT 'europe.ib' USER 'JAMES' PASSWORD 'U4EEAH';

SET NAMES の構文の詳細は、2-122 ページ の「SET NAMES」を参照してください。

CONNECT の構文の詳細は、2-30 ページ の「CONNECT」を参照してください。

列の照合順序

CREATE TABLE 文または ALTER TABLE 文を使用して、CHAR 列または VARCHAR列をテーブルに作成した場合、COLLATE 句でその列の照合順序を指定できます。

COLLATE 句は、さまざまな照合順序をサポートする ISO8859_1 または DOS437 などの

キャラクタセットを使用する場合に特に便利です。

たとえば、次の isql の ALTER TABLE 文では、新しい列がテーブルに追加され、キャラ

クタセットと照合順序の両方が指定されています。

ALTER TABLE 'FR_CA_EMP'ADD ADDRESS VARCHAR(40) CHARACTER SET ISO8859_1 NOT NULL

COLLATE FR_CA;

ALTER TABLE の構文の詳細は、2-16 ページ の ALTER TABLE を参照してください。

比較演算での照合順序

WHERE 句では、CHAR(n) または VARCHAR(n) の値(文字列)を相互に比較する際、

双方の値の照合順序が異なる場合は、照合順序を指定しなければなりません。

比較時に値に使用する照合順序を指定するには、値の後に COLLATE 句を入れます。 たと

えば、次の埋め込みアプリケーションのコード内の WHERE 句では、比較演算子の左にあ

る値は、特定の照合順序で強制的に比較されます。

WHERE LNAME COLLATE FR_CA = :lname_search;

WHERE 句の構文の詳細は、2-114 ページ の SELECT を参照してください。

ORDER BY 句での照合順序

SELECT 文で CHAR 列または VARCAHR 列を順序付ける場合、特に順序付けに使用さ

れる列が異なる照合順序を使用しているときは、順序付けの照合順序を指定する必要があ

ります。

ORDER BY 句で列を順序付けるために使用する照合順序を指定するには、列名の後に

COLLATE 句を入れます。 たとえば、次の ORDER BY 句では、2 つの列の照合順序が指

定されています。

. . .ORDER BY LNAME COLLATE FR_CA, FNAME COLLATE FR_CA;

ORDER BY 句の構文の詳細は、2-114 ページ の「SELECT」を参照してください。

第 7 章 キャラクタセットと照合順序 7-9

Page 276: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

GROUP BY 句での照合順序

SELECT 文で CHAR 列または VARCAHR 列をグループ分けする場合、特に、グループ

分けに使用される列が異なる照合順序を使用しているならば、グループ分けの照合順序を

指定する必要があります。

GROUP BY 句で列のグループ分けに使用する照合順序を指定するには、列名の後に

COLLATE 句を入れます。 たとえば、次の GROUP BY 句では、2 つの列の照合順序が指

定されています。

. . .GROUP BY LNAME COLLATE FR_CA, FNAME COLLATE FR_CA;

GROUP BY 句の構文の詳細は、2-114 ページ の「SELECT」を参照してください。

7-10 言語リファレンス

Page 277: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

索引

AALTER DATABASE 2-10ALTER DOMAIN 2-12ALTER EXCEPTION 2-13ALTER INDEX 2-14ALTER PROCEDURE 2-15ALTER TABLE 2-16ALTER TRIGGER 2-21AVG() 2-24

BBASED ON 2-25BEGIN . . . END ブロック

定義 3-2, 3-3BEGIN DECLARE SECTION 2-25BLOB カーソル

宣言 2-73データの挿入 2-105閉じる 2-28開く 2-108

BLOB セグメント取得 2-98ホスト言語変数 2-25

BLOB データ更新 2-129サブタイプの変換 2-77選択 2-74挿入 2-74, 2-105

BLOB データ型 7-1BLOB フィルタ

削除 2-85情報の記録 6-14宣言 2-76

CCACHE オプション 2-32CAST() 2-26CHAR VARYING キーワード 2-7CHAR データ型 7-1

説明 2-6CHARACTER SET

指定 2-122テーブル 2-60デフォルト 2-36ドメイン 2-39

CHARACTER VARYING キーワード 2-7CHARACTER キーワード 2-6CHECK 制約 2-62

情報の記録 6-4, 6-49

CHECK_CONSTRAINTSシステムビュー 6-49

CLOSE 2-27CLOSE (BLOB) 2-28COLLATE 句

テーブル 2-60ドメイン 2-39

COMMIT 2-29CONNECT 2-30CONSTRAINTS_COLUMN_USAGE システムビュー 6-49

COUNT() 2-33CREATE DATABASE 2-34CREATE DOMAIN 2-37CREATE EXCEPTION 2-40CREATE GENERATOR 2-41CREATE INDEX 2-42CREATE JOURNAL 2-43CREATE JOURNAL ARCHIVE 2-45CREATE PROCEDURE 2-48, 3-1CREATE ROLE 2-53CREATE SHADOW 2-54CREATE TABLE 2-56CREATE TRIGGER 2-63, 3-1CREATE VIEW 2-70CREATE ENCRYPTION 2-40

Ddatabases

decrypting 2-10encrypting 2-10

DATE データ型 2-96説明 2-6, 2-7

dBASE for DOS 7-6dBASE for Windows 7-6DECIMAL データ型 2-6, 2-7DECLARE CURSOR 2-8, 2-28, 2-72, 2-73DECLARE CURSOR (BLOB) 2-73DECLARE EXTERNAL FUNCTION 2-75DECLARE FILTER 2-76DECLARE STATEMENT 2-8, 2-28, 2-72, 2-73,

2-77DECLARE TABLE 2-8, 2-28, 2-60, 2-72, 2-73, 2-

78DECLARE VARIABLE 3-5decrypting a database 2-10DELETE 2-79, 3-12

WHERE 句 2-80DESCRIBE 2-81DISCONNECT 2-82

索引 I-1

Page 278: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

DOS コードページ 7-6DOUBLE PRECISION データ型 2-6DROP DATABASE 2-83DROP DOMAIN 2-83DROP ENCRYPTION 2-83DROP EXCEPTION 2-84DROP EXTERNAL FUNCTION 2-84DROP FILTER 2-85DROP INDEX 2-86DROP JOURNAL 2-87DROP JOURNAL ARCHIVE 2-87DROP PROCEDURE 2-87DROP ROLE 2-88DROP SHADOW 2-88DROP TABLE 2-89DROP TRIGGER 2-89DROP VIEW 2-90DSQL 文

作成 2-109実行 2-92, 2-93, 2-94テーブル構造の宣言 2-78

E-either_case スイッチ 2-110encrypting a database 2-10END DECLARE SECTION 2-91EVENT INIT 2-91EVENT WAIT 2-92EXCEPTION 3-5EXECUTE 2-92EXECUTE IMMEDIATE 2-94EXECUTE PROCEDURE 2-94, 3-6EXTERNAL FILE オプション 2-60EXTRACT() 2-96

FFETCH 2-96FETCH (BLOB) 2-98FLOAT データ型 2-6FOR SELECT . . . DO 3-9FOREIGN KEY 制約 2-61

情報の記録 6-49FROM 2-117

GGEN_ID() 2-99gpre 2-91

-either_case スイッチ 2-110-manual スイッチ 2-82, 2-125SQLCODE の自動的な宣言 2-25エラーステータス配列の処理 5-3

gpre 指令

BASED ON 2-25BEGIN DECLARE SECTION 2-25DECLARE TABLE 2-78END DECLARE SECTION 2-91

GRANT 2-100GROUP BY 2-117, 7-1, 7-7, 7-10

HHAVING 2-117

II/O →「入力」「出力」IF . . . THEN . . . ELSE 3-10INPUT 文 2-81INSERT 2-103, 3-11INSERT CURSOR (BLOB) 2-105INTEGER データ型 2-6integrity constraints

cascading 2-62INTO 2-117isc_convert_error 5-4isc_deadlock 5-4isc_integ_fail 5-4isc_lock_conflict 5-4isc_no_dup 5-4isc_not_valid 5-4isc_print_sqlerror() 5-3isc_sql_interprete() 5-3isc_status 5-3ISOLATION LEVEL 2-126

M-manual スイッチ 2-82, 2-125MAX() 2-106MIN() 2-106

NNEW コンテキスト変数 3-11 ~ 3-12NO RECORD_VERSION 2-126NO WAIT 2-126NUMERIC データ型 2-6, 2-7

OOLD コンテキスト変数 3-12OPEN 2-107OPEN (BLOB) 2-108ORDER BY 2-43, 2-71, 2-79, 2-117, 2-129, 7-1, 7-

7, 7-9OUTPUT 文 2-81

I-2 言語リファレンス

Page 279: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

PParadox for DOS 7-6Paradox for Windows 7-6PLAN 2-117plan_expr 2-115plan_item 2-115POST_EVENT 3-14PREPARE 2-109PRIMARY KEY 制約 2-42, 2-61

情報の記録 6-49

RRDB$CHARACTER_SETS 6-3RDB$CHECK_CONSTRAINTS 6-4RDB$COLLATIONS 6-4RDB$DATABASE 6-5RDB$DEPENDENCIES 6-6RDB$EXCEPTIONS 6-8RDB$FIELD_DIMENSIONS 6-8RDB$FIELDS 6-9RDB$FILES 6-14RDB$FILTERS 6-14RDB$FORMATS 6-15RDB$FUNCTION_ARGUMENTS 6-15RDB$FUNCTIONS 6-16RDB$GENERATORS 6-17RDB$INDEX_SEGMENTS 6-18RDB$INDICES 6-18RDB$LOG_FILES 6-20RDB$PAGES 6-20RDB$PROCEDURE_PARAMETERS 6-21RDB$PROCEDURES 6-21RDB$REF_CONSTRAINTS 6-23RDB$RELATION_CONSTRAINTS 6-23RDB$RELATION_FIELDS 6-24RDB$RELATIONS 6-26RDB$SECURITY_CLASSES 6-28RDB$TRANSACTIONS 6-29RDB$TRIGGER_MESSAGES 6-30RDB$TRIGGERS 6-30RDB$TYPES 6-31RDB$USER_PRIVILEGES 6-32RDB$USERS 6-33RDB$VIEW_RELATIONS 6-34READ COMMITTED 2-126RECORD_VERSION 2-126REFERENCES 制約 2-61REFERENTIAL_CONSTRAINTS システムビュー 6-49

RELEASE SAVEPOINT 2-110RELEASE 引数 2-30

RESERVING 句 2-126REVOKE 2-110ROLLBACK 2-113ROWS 句 2-114

SSELECT 2-114, 2-117, 3-14

文 2-117SET DATABASE 2-119, 2-123, 2-127SET GENERATOR 2-121SET NAMES 2-122, 7-8SET STATISTICS 2-124SET TRANSACTION 2-125SMALLINT データ型 2-6SNAPSHOT TABLE STABILITY 2-126SQL クライアント

キャラクタセットの指定 7-8SQL ダイアレクト 2-2SQL 文 2-4

実行 2-8宣言 2-77

SQLCODE 変数 2-8, 5-2 ~ 5-3エラーコードとメッセージ 5-6 ~ 5-23自動的な宣言 2-25戻り値 2-8

SUM() 2-127SUSPEND 3-15

TTABLE_CONSTRAINTS システムビュー 6-50TIME データ型 2-96TIMESTAMP データ型 2-96

UUDF 6-16

削除 2-84宣言 2-75

UNION 2-117UNION 演算子 3-15UNIQUE キー 2-61UNIQUE 制約

情報の記録 6-49UPDATE 2-128, 3-11, 3-12UPPER() 2-130USER 名 2-59, 2-62USING 句 2-126

VVARCHAR データ型 2-7, 7-1

索引 I-3

Page 280: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

WWAIT 2-126WHEN 2-41WHEN . . . DO 3-16WHENEVER 2-130, 5-2WHERE 2-117WHERE 句 →「SELECT」WHILE . . . DO 3-18Windows アプリケーション

キャラクタセット 7-6Windows クライアント

キャラクタセットの指定 7-8

あアクセス特権 →「セキュリティ」値

⇒「NULL 値」返す 3-13, 3-15

SQLCODE 変数に返される値 2-8キャッシュ 3-11合計 2-127小 2-106大 2-106

ストアドプロシージャに渡す 3-11平均 2-24変数への代入 3-3

アプリケーション前処理 →「gpre」

暗号化キー削除 2-83作成 2-40について 2-40

い一次ファイル 2-35イベント

⇒「トリガー」関連性の登録 2-91通知 3-14

イベントの通知 3-14インジケータ変数 2-95インデックス

インデックスの特性 6-18構造体の定義 6-18削除 2-86作成 2-42使用停止 / 再開 2-14選択性の再計算 2-124変更 2-14

えエラー

実行時 … 5-1トラップ 2-130, 3-17, 5-2ユーザー定義 →「例外」

エラーコード 5-1 ~ 5-49エラー処理ルーチン 2-8 ~ 2-9, 5-2 ~ 5-4

オプション 5-3ストアドプロシージャ 3-16トリガー 3-16

エラーステータス配列 5-3SQLCODE 変数

エラーコードとメッセージ 5-6 ~ 5-23エラーコード 5-23 ~ 5-46宣言 5-3定義 5-2

お大きな高精度数値 2-7大文字と小文字の変換 2-130大文字への変換 2-130オブジェクトデリミタ 2-2

かカーソル

宣言 2-72データの取得 2-96閉じる 2-27開く 2-107有効セット 2-108

格納 , データ 7-1過渡的機能 2-2関数 2-5

集合 2-5数値 2-5, 2-99引数 6-15変換 2-5, 2-130ユーザー定義 →「UDF」

きキー

定義 2-61キー制約 →「FOREIGN KEY 制約」「PRIMARY

KEY 制約」キーワード 4-1 ~ 4-4記憶装置

二次 2-55キャスト 2-27キャッシュサイズ , 変更 2-32キャラクタセット 7-1 ~ 7-10

指定 7-7 ~ 7-9

I-4 言語リファレンス

Page 281: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

取得 7-7追加 7-7テーブル 7-1デフォルト 7-7

行更新 2-128削除 2-79順次アクセス 2-97選択 2-96

ストアドプロシージャとトリガー 3-14挿入 2-103

くクライアント →「SQL クライアントアプリケーション , Windows クライアントアプリケーション」

繰り返し作業 3-7繰り返し文 3-9, 3-18

け警告

→「エラー」トラップ 2-130, 5-2

計算列 2-60検索条件(クエリー)

比較 , 値 3-14評価 2-108

書式化列 6-15

こコードページ(DOS)7-6合計値 2-127更新

BLOB データ 2-129行 2-128

高精度数値 2-7国際キャラクタセット 7-1 ~ 7-10

指定 7-7, 7-9追加 7-7デフォルト 7-7

コメント , ストアドプロシージャとトリガー 3-4小文字からの変換 2-130コンテキスト変数 3-12 ~ 3-13

さ再帰的プロシージャ 3-7小値 2-106大値 2-106

作業 , 繰り返し 3-7削除

行 2-79整合性制約 2-16列 2-16

削除 →「削除」作成 , マルチファイルデータベース 2-11算術関数 →「集計関数」参照整合性 →「整合性制約」

しジェネレータ

返す 2-99再設定時の注意 2-122作成 2-42情報の記録 6-17初期化 2-121

式ベースの列 →「計算列」システムテーブル 6-1 ~ 6-34システムビュー 6-1, 6-48 ~ 6-49実行時エラー 5-1指定

照合順序 2-60, 7-9ジャーナル アーカイブ機能

有効化 2-45ジャーナル アーカイブ機能、削除 2-87ジャーナル機能

削除 2-87有効化 2-43

ジャーナル ファイル削除 2-87有効化 2-43

シャドウ削除 2-88作成 2-54

シャドウファイル情報の記録 6-14セット 2-55

集計関数 2-5AVG() 2-24COUNT() 2-34MAX() 2-106MIN() 2-106SUM() 2-128

修正 ⇒「変更」「更新」出力

エラーメッセージ 5-3出力パラメータ 2-49

定義 3-13条件 , テスト 3-10, 3-19

⇒「検索条件」条件文 3-10, 3-19照合順序 7-1

指定 2-60, 7-9取得 7-7

索引 I-5

Page 282: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

情報の記録 6-4初期化

ジェネレータ 2-121

す数値

合計の計算 2-127平均 2-24

数値 →「値」数値関数 2-5, 2-99ステータス配列 →「エラーステータス配列」ステートメント 3-2

⇒「DSQL 文」「SQL 文」INPUT/OUTPUT 2-81実行 2-109代入 3-3複合文 3-2

ストアドプロシージャSQL 仕様の拡張 3-1値の代入 3-3値を渡す 3-11イベントの通知 3-14インジケータ変数 2-95エラー処理 3-16コメントの追加 3-4再帰的 3-7削除 2-87作成 2-48, 3-1実行 2-94, 3-6終了 3-17情報の記録 6-8, 6-21ネスト 3-7変更 2-15

ストアドプロシージャとトリガー 3-2

せセーブポイント

解放 2-110作成と使用 2-114ロールバック 2-113

整合性制約→ 各制約名も参照カスケード 2-20, 2-21, 2-59, 2-61削除 2-16種類 2-61情報の記録 6-23, 6-49, 6-50追加 2-16, 2-61

制約⇒「整合性制約」削除 2-16種類 2-61情報の記録 6-23, 6-49, 6-50追加 2-16, 2-61

セキュリティアクセス制御リストの記述 6-28アクセス特権 2-101

取り消し 2-110表示 6-32割り当て 2-100

接続 , データベース 2-30宣言

SQL 文 2-77SQLCODE 変数 2-25エラーステータス配列 5-3データベースのスコープ 2-121データベースハンドル 2-120テーブル 2-78ホスト言語変数 2-25, 2-91ローカル変数 3-5

選択ストアドプロシージャとトリガー 3-14データ 2-114 ~ 2-117

そソート

データ 7-1挿入

→「追加」新しい行 2-103

た代入文 3-3対話型 SQL →「isql」

つ追加

⇒「挿入」整合性制約 2-16二次ファイル 2-10列 2-16

てデータ

格納 7-1更新 2-128取得 2-96選択 2-114, 3-14ソート 7-1挿入 2-103

データ型 2-6テーブル列 2-60ドメインでの指定 2-37変換 2-26

データの取得 2-96

I-6 言語リファレンス

Page 283: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

データの整合性削除 , 制約 2-16追加 , 制約 2-16, 2-61

データベースSQL での … アクセスの設定 2-119, 2-123, 2-

127暗号化 2-10暗号化解除 2-10削除 2-83作成 2-34シャドウイング 2-54, 2-88情報の記録 6-50スコープの宣言 2-121接続 2-30接続解除 2-82変更 2-10マルチファイル 2-11

データベースオブジェクト参照関係の情報 6-6

データベースキャッシュバッファ増減 2-32

データベースの暗号化 2-10データベースの暗号化解除 2-10データベースハンドル

宣言 2-120データベースページ 2-35

情報の記録 6-20テーブル

行の挿入 2-103削除 2-89作成 2-56情報の記録 6-23, 6-26, 6-50宣言 2-78変更 2-16

定義整合性制約 2-61ドメイン 2-38 ~ 2-39列 2-37, 2-60

テキスト 7-1デフォルトキャラクタセット 7-7デフォルトトランザクション 2-126

と特権 →「セキュリティ」ドメイン

継承される属性 2-39削除 2-83作成 2-37定義 2-38 ~ 2-39変更 2-12

ドメインベースの列 2-60トラップ

エラー 2-130, 3-17, 5-2

警告 2-130, 5-2トランザクション

起動 2-125コミット 2-29デフォルト 2-126複数の … の実行 2-93, 2-94, 2-126複数のデータベース 6-29読み取り専用 2-30ロールバック 2-113

トランザクション名 2-125トリガー 3-3

イベントの通知 3-14エラー処理 3-16更新後の値 3-11, 3-12更新前の値 3-12削除 2-89作成 2-63, 3-1情報の記録 6-8, 6-30変更 2-21メッセージ情報 6-30

トリガー言語 3-2

に二次記憶装置 2-55二次ファイル 2-35

情報の記録 6-14追加 2-10

入力パラメータ 2-49定義 3-11

ねネストしたプロシージャ 3-7

は配列

⇒「エラーステータス配列」次元情報の記述 6-8

パラメータDSQL 文 2-81出力 2-49, 3-13ストアドプロシージャ 6-21入力 2-49, 3-11

ひ日付時刻情報 2-96ビュー

更新可能 2-71削除 2-90作成 2-70特性の記述 6-26読み取り専用 2-71

索引 I-7

Page 284: InterBase XE 言語リファレンス ガイドdocs.embarcadero.com/products/interbase/IBXE_JP/IB_XE_LangRef_JP.pdf · 第 1 章 InterBase の使い方:言語リファレンス

ふファイル

シャドウ 6-14二次 2-10, 6-14

複合文 3-2複数のトランザクション

実行 2-126プラン , 指定 2-116, 2-118プリプロセッサ →「gpre」プロシージャ →「ストアドプロシージャ」文

SELECT 2-117SQLCODE と … 2-8繰り返し 3-9, 3-18条件付き 3-10, 3-19

へ平均 2-24変換

大文字と小文字 2-130データ型 2-26

変換関数 2-5UPPER() 2-130

変数context 3-12 ~ 3-13インジケータ 2-95ホスト言語 2-25, 2-91ローカル 3-3, 3-5

変数への値の代入 3-3

ほホスト言語変数

宣言 2-25, 2-91

まマルチファイルデータベース

作成 2-11

め命名規則

キーワードとの関係 4-1メタデータ 6-1メッセージ 5-1 ~ 5-49

も文字列 , 大文字と小文字の変換 2-130

ゆユーザー定義エラー →「例外」

ユーザー定義関数 ⇒「UDF」有効セット(カーソル)2-108

よ用語

ストアドプロシージャとトリガー 3-2読み取り専用トランザクション

コミット 2-30読み取り専用ビュー 2-71予約語 →「キーワード」

るループ →「繰り返し文」

れ例外 2-40

削除 2-84作成 2-41情報の記録 6-8定義 3-6変更 2-14

列暗号化 2-19暗号化解除 2-19キャラクタセットの指定 7-8計算型 2-60継承される属性 2-39書式化 6-15削除 2-16追加 2-16定義 2-37, 2-60特性の記述 6-9, 6-15, 6-24ドメインベース 2-60列の構成 6-18ローカル 2-60

列の暗号化 2-19

列の暗号化解除 2-19列の暗号化解除 2-19

ろローカル変数

値の代入 3-3宣言 3-5

ローカル列 2-60ロール

削除 2-88作成 2-53システムテーブル 6-28取り消し 2-110割り当て 2-100

I-8 言語リファレンス