Comments
Description
Transcript
SQL Engine Reference
Pervasive PSQL v9 SQL Engine Reference Reference for Using SQL with Pervasive PSQL v9 免責事項 Pervasive Software Inc. は、 本 ソ フ ト ウ ェ アお よ び ド キ ュ メ ン ト の使用を、 利用 者 ま たはその会社に対 し て 「現状の ま ま」 で、 かつ同梱の使用許諾契約書に記 載の契約条件に よ っ てのみ許諾す る も のです。 Pervasive Software Inc. は、 いかな る 場合に も 本 ソ フ ト ウ ェ アお よ び本マニ ュ アルに記載 さ れた内容に関す る その 他の一切の保証 を、 明示的に も 黙示的に も 行い ま せん。 Pervasive Software Inc. は、 市場性、 権利、 特定の目的に対す る 適合性、 あ る いは一連の取引業務や職 業的な使用に関す る 問題な ど に対 し 、 一切の保証を行わない こ と を明示す る と と も に、 利用者お よ びその会社が こ れに同意 し た も の と し ます。 商標 Btrieve、 Client/Server in a Box、 Pervasive、 Pervasive Software お よ び Pervasive Software の ロ ゴは、 Pervasive Software Inc. の登録商標です。 Built on Pervasive Software、 DataExchange、 MicroKernel Database Engine、 MicroKernel Database Architecture、 Pervasive.SQL、 Pervasive PSQL、 Solution Network、 Ultralight、 ZDBA は Pervasive Software Inc. の商標です。 Microsoft、 MS-DOS、 Windows、 Windows 95、 Windows 98、 Windows NT、 Windows Me、 Windows 2000、 Windows XP、 Windows Server 2003、 Win32、 Win32s、 および Visual Basic は、 Microsoft Corporation の登録商標です。 NetWare および Novell は Novell, Inc. の登録商標です。 NetWare Loadable Module、NLM、Novell DOS、Transaction Tracking System、TTS は、Novell, Inc. の商標です。 Sun、 Sun Microsystems、 Java、 および Sun、 Solaris、 Java を含むすべての商標やロゴは、 Sun Microsystems の商標または登録商標です。 すべての会社名および製品名は各社の商標または登録商標です。 © Copyright 2005 Pervasive Software Inc. All rights reserved. このマニュアルの全文、 一部に関わりなく複製、 複写、 配布をすることは、 前もって発行者の 書面による同意がない限り禁止します。 本製品には、 Powerdog Industries により開発されたソフトウェアが含まれています。 © Copyright 1994 Powerdog Industries.All rights reserved. 本製品には、 KeyWorks Software により開発されたソフトウェアが含まれています。 © Copyright 2002 KeyWorks Software.All rights reserved. 本製品には、 DUNDAS SOFTWARE により開発されたソフトウェアが含まれています。 © Copyright 1997-2000 DUNDAS SOFTWARE LTD. All rights reserved 本製品には、 Apache Software Foundation Foundation (http://www.apache.org/) により開発され たソフトウェアが含まれています。 本製品ではフリー ソフトウェアの unixODBC Driver Manager を使用しています。 これは Peter Harvey ([email protected]) によって作成され、 Nick Gorham ([email protected]) により変更および拡張されたものに Pervasive Software が一部修正を加えたものです。Pervasive Software は、 unixODBC Driver Manager プロジェクトの LGPL 使用許諾契約書に従って、 この プロジェクトの現在の保守管理者にそのコード変更を提供します。 unixODBC Driver Manager の Web ページは www.unixodbc.org にあります。 このプロジェクトに関する詳細については、 現在 の保守管理者である Nick Gorham ([email protected]) にお問い合せください。 GNU Lesser General Public License (LGPL) は本製品の配布メディアに含まれています。 LGPL は www.fsf.org/licensing/licenses/lgpl.html でも見ることができます。 SQL Engine Reference 2006 年 1 月 100-004294-002 目次 こ のマニ ュ アルについて . . . . . . . . . . . . . . . . . . . . . . . . . . . xv こ のマニ ュ アルの読者 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xvi こ のマニ ュ アルの構成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xvii 表記上の規則. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xviii 詳細 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xix 1 SQL の概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-1 構造化問い合わせ言語 (SQL) の概要 デー タ 定義ス テー ト メ ン ト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-3 テーブルの作成、 変更、 お よ び削除 . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-3 イ ンデ ッ ク ス の作成 と 削除 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-4 ト リ ガの作成 と 削除 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-4 ス ト ア ド プ ロ シージ ャ の作成 と 削除 . . . . . . . . . . . . . . . . . . . . . . . . . . 1-5 ユーザー定義関数 (UDF) の作成 と 削除 . . . . . . . . . . . . . . . . . . . . . . . . 1-5 デー タ 操作ス テー ト メ ン ト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-7 デー タ の取得 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-7 デー タ の変更 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-8 ト ラ ンザ ク シ ョ ンの定義 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-8 ビ ュ ーの作成 と 削除 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-9 ス ト ア ド プ ロ シージ ャ の作成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-9 シ ス テ ム ス ト ア ド プ ロ シージ ャ の実行 . . . . . . . . . . . . . . . . . . . . . . . . . 1-9 ト リ ガの実行 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-9 デー タ 制御ス テー ト メ ン ト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-10 セキ ュ リ テ ィ の有効化 と 無効化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-10 ユーザー と グループの作成 と 削除 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-11 ア ク セ ス権の付与 と 取 り 消 し . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-11 2 ODBC エ ン ジ ン リ フ ァ レ ン ス . . . . . . . . . . . . . . . . . . . . . . 2-1 制限、 接続文字列、 お よ び ODBC 合致 Pervasive ODBC エン ジ ン イ ン タ ーフ ェ イ ス制限 . . . . . . . . . . . . . . . . . . . . . . . 2-2 デー タ ソ ース名接続文字列キーワー ド . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-5 ODBC の合致. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-7 ODBC イ ン タ ーフ ェ イ ス の合致 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-7 ODBC API の合致. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-7 サポー ト さ れない ODBC デー タ 型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-10 ODBC API 合致の例外 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-10 iii 目次 ODBC 属性の合致 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-12 ODBC 記述子フ ィ ール ド の合致 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-13 SQL 文法の合致 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-14 SQL ス テー ト メ ン ト 内のデ リ ミ タ 付 き 識別子 . . . . . . . . . . . . . . . . . . . . . 2-15 3 SQL 構文 リ フ ァ レ ン ス . . . . . . . . . . . . . . . . . . . . . . . . . . 3-1 Pervasive PSQL でサポー ト さ れ る 構文の リ フ ァ レ ン ス ス テー ト メ ン ト の文法 . . ADD. . . . . . . . . . . ALL . . . . . . . . . . . ALTER (名前変更) . . ALTER TABLE . . . . ANY. . . . . . . . . . . AS . . . . . . . . . . . . BEGIN [ATOMIC] . . . CALL . . . . . . . . . . CASCADE . . . . . . . CASE (式) . . . . . . . CASE (文字列) . . . . CLOSE . . . . . . . . . COALESCE . . . . . . COMMIT . . . . . . . . CREATE FUNCTION . CREATE GROUP . . . CREATE INDEX . . . CREATE PROCEDURE CREATE TABLE . . . CREATE TRIGGER . . CREATE VIEW . . . . DECLARE . . . . . . . DECLARE CURSOR . DEFAULT . . . . . . . DELETE (位置付け) . DELETE . . . . . . . . DISTINCT . . . . . . . DROP FUNCTION . . . DROP GROUP . . . . . DROP INDEX . . . . . DROP PROCEDURE . DROP TABLE . . . . . DROP TRIGGER . . . DROP VIEW . . . . . . END . . . . . . . . . . . EXECUTE . . . . . . . iv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-2 3-3 3-4 3-5 3-8 3-22 3-23 3-24 3-25 3-26 3-27 3-32 3-33 3-34 3-37 3-39 3-45 3-46 3-50 3-62 3-74 3-77 3-79 3-80 3-82 3-89 3-90 3-93 3-94 3-95 3-96 3-98 3-99 3-100 3-101 3-102 3-103 目次 EXISTS . . . . . . . . . . . . . . . . . FETCH. . . . . . . . . . . . . . . . . . FOREIGN KEY . . . . . . . . . . . . . GRANT . . . . . . . . . . . . . . . . . GROUP BY . . . . . . . . . . . . . . . HAVING. . . . . . . . . . . . . . . . . IF. . . . . . . . . . . . . . . . . . . . . IN . . . . . . . . . . . . . . . . . . . . INSERT . . . . . . . . . . . . . . . . . JOIN . . . . . . . . . . . . . . . . . . . LEAVE . . . . . . . . . . . . . . . . . LIKE . . . . . . . . . . . . . . . . . . . LOOP . . . . . . . . . . . . . . . . . . NOT . . . . . . . . . . . . . . . . . . . OPEN . . . . . . . . . . . . . . . . . . PRIMARY KEY . . . . . . . . . . . . . PUBLIC . . . . . . . . . . . . . . . . . PRINT . . . . . . . . . . . . . . . . . . RELEASE SAVEPOINT . . . . . . . . RESTRICT. . . . . . . . . . . . . . . . REVOKE . . . . . . . . . . . . . . . . ROLLBACK . . . . . . . . . . . . . . SAVEPOINT . . . . . . . . . . . . . . SELECT (into 付 き ) . . . . . . . . . . SELECT . . . . . . . . . . . . . . . . . SET ANSI_PADDING . . . . . . . . . SET DECIMALSEPARATORCOMMA SET OWNER . . . . . . . . . . . . . . SET PASSWORD . . . . . . . . . . . . SET ROWCOUNT . . . . . . . . . . . SET SECURITY . . . . . . . . . . . . SET TIME ZONE . . . . . . . . . . . . SET TRUENULLCREATE . . . . . . . SET VARIABLE . . . . . . . . . . . . SIGNAL . . . . . . . . . . . . . . . . . SQLSTATE . . . . . . . . . . . . . . . START TRANSACTION . . . . . . . . UNION. . . . . . . . . . . . . . . . . . UNIQUE . . . . . . . . . . . . . . . . . UPDATE . . . . . . . . . . . . . . . . UPDATE (位置付け) . . . . . . . . . USER . . . . . . . . . . . . . . . . . . WHILE. . . . . . . . . . . . . . . . . . 文法要素の定義 . . . . . . . . . . . . グ ロ ーバル変数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-104 . 3-106 . 3-108 . 3-110 . 3-115 . 3-117 . 3-118 . 3-120 . 3-121 . 3-127 . 3-133 . 3-134 . 3-136 . 3-137 . 3-138 . 3-139 . 3-141 . 3-142 . 3-143 . 3-145 . 3-146 . 3-148 . 3-150 . 3-152 . 3-153 . 3-169 . 3-172 . 3-174 . 3-176 . 3-178 . 3-179 . 3-181 . 3-187 . 3-188 . 3-189 . 3-191 . 3-192 . 3-194 . 3-196 . 3-197 . 3-204 . 3-206 . 3-207 . 3-208 . 3-216 v 目次 ほかの特性. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-219 テ ン ポ ラ リ フ ァ イ ル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-219 リ テ ラ ル値を使っ た作業 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-220 NULL 値を使っ た作業 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-222 バ イ ナ リ デー タ を使っ た作業 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-222 イ ンデ ッ ク ス の作成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-223 開いたテーブルを閉 じ る . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-223 並行性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-224 小数点の記号のカ ン マ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-224 OEM か ら ANSI への変換サポー ト . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-227 4 ビ ッ ト 演算子 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-1 Pervasive PSQL ビ ッ ト 演算子の リ フ ァ レ ン ス 概要. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-2 ビ ッ ト 演算 AND (&) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-3 構文 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-3 戻 り 値 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-3 例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-3 ビ ッ ト 演算 NOT (~) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-5 構文 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-5 戻 り 値 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-5 例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-5 ビ ッ ト 演算 OR (|) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-6 構文 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-6 戻 り 値 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-6 例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-6 ビ ッ ト 演算 排他的 OR (^) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-8 構文 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-8 戻 り 値 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-8 例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-8 真理値表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-9 5 ス カ ラ関数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5-1 Pervasive PSQL ス カ ラ 関数の リ フ ァ レ ン ス 文字列関数. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5-2 例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5-4 数値関数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5-6 例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5-8 時刻 と 日付の関数. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5-9 vi 目次 時刻 と 日付関数の値の挿入 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5-9 例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5-12 シ ス テ ム関数. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5-14 例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5-14 論理関数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5-15 例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5-15 変換関数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5-18 例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5-19 6 シ ス テム ス ト ア ド プ ロ シージ ャ . . . . . . . . . . . . . . . . . . . . . 6-1 Pervasive PSQL シ ス テ ム ス ト ア ド プ ロ シージ ャ の リ フ ァ レ ン ス Pervasive PSQL シ ス テ ム ス ト ア ド プ ロ シージ ャ . . . . . . . . . . . . . . . . . . . . . . . 6-2 psp_columns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-3 psp_column_attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-6 psp_column_rights . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-9 psp_fkeys. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-12 psp_groups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-15 psp_help_sp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-16 psp_help_trigger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-18 psp_help_udf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-21 psp_help_view . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-23 psp_indexes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-24 psp_pkeys . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-27 psp_rename. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-29 psp_stored_procedures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-31 psp_tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-34 psp_table_rights . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-37 psp_triggers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-40 psp_udfs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-43 psp_users . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-45 psp_views . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-48 7 パフ ォ ーマ ン ス リ フ ァ レ ン ス . . . . . . . . . . . . . . . . . . . . . . . 7-1 デー タ ベース エ ン ジ ンのパフ ォ ーマ ン ス機能についての検討 制限の分析 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-2 変形 CNF 変換 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-2 変換で き ない制限 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-2 変換が行われない条件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-2 制限の最適化. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-4 vii 目次 単一述部の最適化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-4 閉 じ た範囲の最適化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-4 変形論理和の最適化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-5 論理積の最適化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-5 論理和標準形の最適化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-6 変形論理積標準形の最適化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-6 変形 CNF 最適化で開いた範囲を閉 じ る . . . . . . . . . . . . . . . . . . . . . . . . 7-7 単一結合条件の最適化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-7 結合条件を持つ論理積の最適化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-8 結合条件を持つ変形論理積標準形の最適化 . . . . . . . . . . . . . . . . . . . . . . 7-8 変形 CNF 最適化で結合条件の開いた範囲を閉 じ る . . . . . . . . . . . . . . . . . . 7-9 複数 イ ンデ ッ ク ス の変形論理和の最適化 . . . . . . . . . . . . . . . . . . . . . . . . 7-9 プ ッ シ ュ ダ ウ ン フ ィ ル タ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-10 イ ンデ ッ ク ス の有効な使用法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-11 集計関数の DISTINCT. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-11 選択 リ ス ト に先立つ DISTINCT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-11 イ ンデ ッ ク ス のセグ メ ン ト 順序 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-11 セグ メ ン ト の昇順属性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-12 検索更新の最適化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-13 テ ン ポ ラ リ テーブルのパフ ォーマ ン ス . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-14 行の事前取得 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-15 用語. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-17 A デー タ 型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A-1 Pervasive PSQL がサポー ト す る デー タ 型 Pervasive PSQL がサポー ト す る デー タ 型 . . . . . . . . . . . . . . . . . . . . . . . . . . . A-2 デー タ 型の範囲 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A-4 演算子の優先順位 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A-6 デー タ 型の優先順位 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A-7 Decimal デー タ 型の精度 と 小数点以下桁数 . . . . . . . . . . . . . . . . . . . . . . . A-8 デー タ 型に関す る 注意事項 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A-10 CHAR、 VARCHAR、 お よ び LONGVARCHAR . . . . . . . . . . . . . . . . . . . . A-10 BINARY お よ び LONGVARBINARY . . . . . . . . . . . . . . . . . . . . . . . . . . A-10 LONGVARCHAR と LONGVARBINARY の制約. . . . . . . . . . . . . . . . . . . . A-11 浮動小数の比較 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A-12 無限の表現 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A-13 旧デー タ 型. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A-14 Btrieve キーのデー タ 型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A-15 viii 目次 B SQL の予約語 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B-1 サポー ト さ れてい る Pervasive PSQL の予約語 予約語. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B-2 使用を避け る 語句 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B-7 C シ ス テム テーブル. . . . . . . . . . . . . . . . . . . . . . . . . . . . . C-1 Pervasive PSQL シ ス テ ム テーブル リ フ ァ レ ン ス 概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . C-2 シ ス テ ム テーブルの構造. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . C-4 X$File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . C-4 X$Field . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . C-5 X$Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . C-8 X$Attrib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . C-11 X$View. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . C-12 X$Proc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . C-13 X$User . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . C-14 X$Rights . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . C-16 X$Relate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . C-18 X$Trigger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . C-20 X$Depend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . C-22 D COBOL ア プ リ ケーシ ョ ンの SQL ア ク セス . . . . . . . . . . . . . . . D-1 COBOL アプ リ ケーシ ョ ン の SQL ア ク セ ス の提供 概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . D-2 制限 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . D-2 SQL ス テー ト メ ン ト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . D-3 コ ン ポーネ ン ト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . D-4 SQL ア ク セ ス の使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . D-6 手順 1 : サンプル XML テ ンプ レー ト の変更 . . . . . . . . . . . . . . . . . . . . . . D-6 手順 2 : XML テ ンプ レー ト で指定 し たデー タ フ ァ イ ルの コ ピー . . . . . . . . . . D-6 手順 3 : Schema Executor ユーテ ィ リ テ ィ の実行 . . . . . . . . . . . . . . . . . . . . D-7 手順 4 : シ ス テ ム テーブルの配布 (任意) . . . . . . . . . . . . . . . . . . . . . . . D-13 サンプル XML フ ァ イ ルの実行例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . D-14 補注 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . D-14 ix 図 3-1 x COALESCE でサポー ト さ れ る デー タ 型の組み合わせ と その結果 . . . . . . . . . . 3-35 表 1-1 1-2 1-3 1-4 1-5 1-6 1-7 1-8 1-9 1-10 1-11 1-12 1-13 1-14 1-15 1-16 1-17 2-1 2-2 2-3 2-4 2-5 2-6 2-7 2-8 3-1 3-2 3-3 3-4 3-5 3-6 3-7 3-8 3-9 3-10 3-11 3-12 3-13 SQL ス テー ト メ ン ト の種類 と 関連 タ ス ク . . . . . . . . . . . . . デー タ 定義ス テー ト メ ン ト - テーブル. . . . . . . . . . . . . . . デー タ 定義ス テー ト メ ン ト - イ ンデ ッ ク ス . . . . . . . . . . . . デー タ 定義ス テー ト メ ン ト - ト リ ガ . . . . . . . . . . . . . . . . デー タ 定義ス テー ト メ ン ト - ト リ ガ制御 . . . . . . . . . . . . . デー タ 定義ス テー ト メ ン ト - ス ト ア ド プ ロ シージ ャ . . . . . . デー タ 定義ス テー ト メ ン ト - ス ト ア ド プ ロ シージ ャ 制御. . . . デー タ 定義ス テー ト メ ン ト - ユーザー定義関数 . . . . . . . . . デー タ 操作ス テー ト メ ン ト - デー タ の取得 . . . . . . . . . . . . デー タ 操作ス テー ト メ ン ト - デー タ オプシ ョ ンの取得 . . . . . デー タ 操作ス テー ト メ ン ト - デー タ の変更 . . . . . . . . . . . . デー タ 操作ス テー ト メ ン ト - ビ ュ ー . . . . . . . . . . . . . . . . デー タ 操作ス テー ト メ ン ト - ス ト ア ド プ ロ シージ ャ . . . . . . デー タ 操作ス テー ト メ ン ト - シ ス テ ム ス ト ア ド プ ロ シージ ャ . デー タ 制御ス テー ト メ ン ト - セキ ュ リ テ ィ . . . . . . . . . . . . デー タ 制御ス テー ト メ ン ト - ユーザー と グループ . . . . . . . . デー タ 制御ス テー ト メ ン ト - ア ク セ ス権 . . . . . . . . . . . . . Pervasive PSQL 機能の制限 / 条件. . . . . . . . . . . . . . . . . . ク ラ イ ア ン ト DSN で有効な接続文字列 . . . . . . . . . . . . . . エン ジ ン DSN で有効な接続文字列 . . . . . . . . . . . . . . . . イ ン タ ーフ ェ イ ス がサポー ト し てい る ODBC API 関数 . . . . . ODBC ス テー ト メ ン ト 属性の合致の例外 . . . . . . . . . . . . . ODBC 接続属性の合致の例外 . . . . . . . . . . . . . . . . . . . . ODBC 記述子フ ィ ール ド の合致の例外 . . . . . . . . . . . . . . SQL 文法の合致. . . . . . . . . . . . . . . . . . . . . . . . . . . . サポー ト さ れ る 入力パ ラ メ ー タ お よ び戻 り 値のデー タ 型 . . . . ス ト ア ド プ ロ シージ ャ お よ び ト リ ガで禁止 さ れ る デー タ 型 . . 許可 さ れてい る DEFAULT 式のデー タ 型 . . . . . . . . . . . . . デフ ォ ル ト 値 と し ての日付お よ び時刻ス カ ラ 関数 . . . . . . . . デフ ォ ル ト 値 と ヌ ル値を許可す る 列 . . . . . . . . . . . . . . . . Emp テーブル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Dept テーブル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Addr テーブル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Loc テーブル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 方向左外部結合 . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 方向の放射状左外部結合 . . . . . . . . . . . . . . . . . . . . . 3 方向のチ ェーン状左外部結合 . . . . . . . . . . . . . . . . . . . 最適化が足 り ない 3 方向の放射状左外部結合 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-1 . 1-3 . 1-4 . 1-4 . 1-4 . 1-5 . 1-5 . 1-6 . 1-7 . 1-8 . 1-8 . 1-9 . 1-9 . 1-9 . 1-10 . 1-11 . 1-11 . 2-2 . 2-6 . 2-6 . 2-7 . 2-12 . 2-13 . 2-13 . 2-14 . 3-40 . 3-53 . 3-83 . 3-87 . 3-122 . 3-128 . 3-129 . 3-129 . 3-129 . 3-130 . 3-131 . 3-131 . 3-132 xi 3-14 3-15 3-16 3-17 3-18 3-19 3-20 3-21 3-22 4-1 5-1 5-2 5-3 5-4 5-5 5-6 6-1 6-2 6-3 6-4 6-5 6-6 6-7 6-8 6-9 6-10 6-11 6-12 6-13 6-14 6-15 6-16 6-17 6-18 6-19 6-20 6-21 6-22 6-23 6-24 6-25 6-26 xii 特殊文字 . . . . . . . . . . . . . . . . . . . . . . . . . . . . Addr テーブル . . . . . . . . . . . . . . . . . . . . . . . . . Loc テーブル . . . . . . . . . . . . . . . . . . . . . . . . . . カルテシ ア ン結合を使っ た SELECT ス テー ト メ ン ト . . . TOP 句がカー ソ ル タ イ プに与え る 影響 . . . . . . . . . . SET TIME ZONE を使用す る 日付 / 時刻関数 - デフ ォ ル ト SET TIME ZONE を使用す る 日付 / 時刻関数 - 指定 . . . . 現地時刻か ら UTC への変換例 . . . . . . . . . . . . . . . . Timestamp デー タ 型の例 . . . . . . . . . . . . . . . . . . . ビ ッ ト 演算の真理値表 . . . . . . . . . . . . . . . . . . . . 文字列関数 . . . . . . . . . . . . . . . . . . . . . . . . . . . 数値関数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 時刻 と 日付の関数 . . . . . . . . . . . . . . . . . . . . . . . シ ス テ ム関数 . . . . . . . . . . . . . . . . . . . . . . . . . . 論理関数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 変換関数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . Pervasive PSQL シ ス テ ム ス ト ア ド プ ロ シージ ャ . . . . . psp_columns の引数 . . . . . . . . . . . . . . . . . . . . . . psp_columns で返 さ れ る 結果セ ッ ト . . . . . . . . . . . . . psp_column_attributes の引数 . . . . . . . . . . . . . . . . . psp_column_attributes で返 さ れ る 結果セ ッ ト . . . . . . . . psp_column_rights の引数 . . . . . . . . . . . . . . . . . . . psp_column_rights で返 さ れ る 結果セ ッ ト . . . . . . . . . . psp_fkeys の引数 . . . . . . . . . . . . . . . . . . . . . . . . psp_fkeys で返 さ れ る 結果セ ッ ト . . . . . . . . . . . . . . . psp_groups の引数 . . . . . . . . . . . . . . . . . . . . . . . psp_groups で返 さ れ る 結果セ ッ ト . . . . . . . . . . . . . . psp_help_sp の引数 . . . . . . . . . . . . . . . . . . . . . . . psp_help_sp で返 さ れ る 結果セ ッ ト . . . . . . . . . . . . . psp_help_trigger の引数 . . . . . . . . . . . . . . . . . . . . psp_help_trigger で返 さ れ る 結果セ ッ ト . . . . . . . . . . . psp_help_udf の引数 . . . . . . . . . . . . . . . . . . . . . . psp_help_udf で返 さ れ る 結果セ ッ ト . . . . . . . . . . . . . psp_help_view の引数 . . . . . . . . . . . . . . . . . . . . . psp_help_view で返 さ れ る 結果セ ッ ト . . . . . . . . . . . . psp_indexes の引数 . . . . . . . . . . . . . . . . . . . . . . . psp_indexes で返 さ れ る 結果セ ッ ト . . . . . . . . . . . . . psp_pkeys の引数 . . . . . . . . . . . . . . . . . . . . . . . . psp_pkeys で返 さ れ る 結果セ ッ ト . . . . . . . . . . . . . . psp_rename の引数 . . . . . . . . . . . . . . . . . . . . . . . psp_stored_procedures の引数 . . . . . . . . . . . . . . . . . psp_stored_procedures で返 さ れ る 結果セ ッ ト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-134 3-165 3-165 3-166 3-167 3-182 3-182 3-183 3-183 4-9 5-2 5-6 5-9 5-14 5-15 5-19 6-2 6-3 6-3 6-6 6-7 6-9 6-10 6-12 6-13 6-15 6-15 6-17 6-17 6-19 6-19 6-21 6-21 6-23 6-23 6-25 6-25 6-28 6-28 6-30 6-31 6-31 6-27 6-28 6-29 6-30 6-31 6-32 6-33 6-34 6-35 6-36 6-37 6-38 A-1 A-2 A-3 A-4 A-5 A-6 A-7 A-8 A-9 A-10 B-1 C-1 C-2 C-3 C-4 C-5 C-6 C-7 C-8 C-9 C-10 C-11 C-12 C-13 C-14 C-15 C-16 C-17 C-18 C-19 C-20 C-21 C-22 C-23 C-24 psp_tables の引数 . . . . . . . . . . . . . . . . . . . . . . . . . . psp_tables で返 さ れ る 結果セ ッ ト . . . . . . . . . . . . . . . . . psp_table_rights の引数 . . . . . . . . . . . . . . . . . . . . . . . psp_table_rights で返 さ れ る 結果セ ッ ト . . . . . . . . . . . . . . psp_triggers の引数 . . . . . . . . . . . . . . . . . . . . . . . . . psp_triggers で返 さ れ る 結果セ ッ ト . . . . . . . . . . . . . . . . psp_udfs の引数 . . . . . . . . . . . . . . . . . . . . . . . . . . . psp_udfs で返 さ れ る 結果セ ッ ト . . . . . . . . . . . . . . . . . . psp_users の引数 . . . . . . . . . . . . . . . . . . . . . . . . . . psp_users で返 さ れ る 結果セ ッ ト . . . . . . . . . . . . . . . . . psp_views の引数 . . . . . . . . . . . . . . . . . . . . . . . . . . psp_views で返 さ れ る 結果セ ッ ト . . . . . . . . . . . . . . . . . Pervasive PSQL デー タ 型 と 対応す る ODBC デー タ 型 . . . . . Pervasive PSQL デー タ 型の範囲. . . . . . . . . . . . . . . . . . DECIMAL 演算の精度 と 小数位の計算方法 . . . . . . . . . . . 無限の表現 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 旧デー タ 型に代わ っ て使用 さ れ る 新デー タ 型 . . . . . . . . . Btrieve キーのデー タ 型 と 型 コ ー ド . . . . . . . . . . . . . . . . INTEGER キー タ イ プ . . . . . . . . . . . . . . . . . . . . . . . NUMERICS の符合値のシ フ ト 状態 と シ フ ト な し 状態の比較 . プ ラ ッ ト フ ォーム ご と の DBCobolNumeric 設定の指定方法. . TIMESTAMP デー タ 型 . . . . . . . . . . . . . . . . . . . . . . . ユーザー定義名での使用を避け る 語句 . . . . . . . . . . . . . シ ス テ ム テーブル . . . . . . . . . . . . . . . . . . . . . . . . . X$File シ ス テ ム テーブルの構造 . . . . . . . . . . . . . . . . . X$File シ ス テ ム テーブルの イ ンデ ッ ク ス定義 . . . . . . . . . X$Field シ ス テ ム テーブルの構造 . . . . . . . . . . . . . . . . X$Field シ ス テ ム テーブルの イ ンデ ッ ク ス定義 . . . . . . . . X$Index シ ス テ ム テーブルの構造 . . . . . . . . . . . . . . . . X$Index シ ス テ ム テーブルの イ ンデ ッ ク ス定義 . . . . . . . . X$Index シ ス テ ム テーブルの イ ンデ ッ ク ス定義 . . . . . . . . X$Attrib シ ス テ ム テーブルの構造 . . . . . . . . . . . . . . . . X$Attrib シ ス テ ム テーブルの イ ンデ ッ ク ス定義 . . . . . . . . X$View シ ス テ ム テーブルの構造 . . . . . . . . . . . . . . . . X$View シ ス テ ム テーブルの イ ンデ ッ ク ス定義 . . . . . . . . X$Proc シ ス テ ム テーブルの構造. . . . . . . . . . . . . . . . . X$Proc シ ス テ ム テーブルの イ ンデ ッ ク ス定義. . . . . . . . . X$User シ ス テ ム テーブルの構造. . . . . . . . . . . . . . . . . Xu$Flags シ ス テ ム テーブルの ビ ッ ト 位置定義 . . . . . . . . . X$User シ ス テ ム テーブルの イ ンデ ッ ク ス定義. . . . . . . . . X$Rights シ ス テ ム テーブルの構造. . . . . . . . . . . . . . . . Xr$Rights シ ス テ ム テーブルのビ ッ ト 位置定義 . . . . . . . . X$Rights シ ス テ ム テーブルの イ ンデ ッ ク ス定義. . . . . . . . X$Relate シ ス テ ム テーブルの構造 . . . . . . . . . . . . . . . . X$Relate シ ス テ ム テーブルの イ ンデ ッ ク ス定義. . . . . . . . X$Trigger シ ス テ ム テーブルの構造 . . . . . . . . . . . . . . . X$Trigger シ ス テ ム テーブルの イ ンデ ッ ク ス定義 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-34 . 6-34 . 6-38 . 6-38 . 6-41 . 6-41 . 6-43 . 6-43 . 6-46 . 6-46 . 6-48 . 6-48 . A-2 . A-4 . A-9 . A-13 . A-14 . A-15 . A-23 . A-25 . A-26 . A-28 . B-7 . C-3 . C-4 . C-4 . C-5 . C-7 . C-8 . C-8 . C-9 . C-11 . C-11 . C-12 . C-12 . C-13 . C-13 . C-14 . C-14 . C-15 . C-16 . C-16 . C-17 . C-18 . C-18 . C-20 . C-21 xiii C-25 C-26 D-1 D-2 D-3 D-4 xiv X$Depend シ ス テ ム テーブルの構造. . . . . . . . . . . . . . . . . . . . . . . X$Depend シ ス テ ム テーブルの イ ンデ ッ ク ス定義. . . . . . . . . . . . . . . COBOL デー タ 構造での SQL ス テー ト メ ン ト の使用 . . . . . . . . . . . . . COBOL アプリケーションの SQL ア ク セ ス を提供す る ために イ ン ス ト ール さ れ る コ ン ポーネ ン ト . . . . . . . . . . . . . . . . . . . . . . Schema Executor ユーテ ィ リ テ ィ のオプシ ョ ン . . . . . . . . . . . . . . . . . CobolSchemaExec ロ グ フ ァ イ ルに記載 さ れ る 可能性のあ る エ ラ ー コ ー ド . . . . . C-22 . . . . C-22 . . . . D-3 . . . . D-4 . . . . D-8 . . . . D-11 こ のマニ ュ アルについて こ のマニ ュ アルでは、 Pervasive PSQL v9 の言語機能 と 制約について説明 し ます。 xv こ のマニ ュ アルの読者 こ のマニ ュ アルでは、 Pervasive PSQL v9 の使い方について説明 し ます。 こ のマニ ュ アルは、 ODBC アーキ テ ク チ ャ や ODBC ド ラ イ バ コ ン ポーネ ン ト の 基 本 概念 に つ い て 理解 が で き て い る こ と と 、 Microsoft ODBC Software Development Kit を 使用で き る 環境に あ る こ と を 前提 と し て い ま す。 ま た、 最新のデー タ ーベース原理 と その用語、 C 言語、 お よ び コ ンパ イ ラ や リ ン カ な ど の開発環境についての知識 と 経験があ る こ と を前提に し てい ます。 xvi こ のマニ ュ アルの構成 次に、 各章の概要を示 し ます。 第 1 章 「SQL の概要」 Pervasive PSQL を使っ て作成で き る SQL ス テー ト メ ン ト の種類につい て説明 し ます。 第 2 章 「ODBC エン ジ ン リ フ ァ レ ン ス」 Pervasive PSQL の機能や特徴のほか、 SQL 文法 と ODBC API 規格への 適合性について も 説明 し ます。 第 3 章 「SQL 構文 リ フ ァ レ ン ス」 Pervasive PSQL でサポー ト さ れ る SQL の文法お よ び構文について説明 し ます。 第 4 章 「ビ ッ ト 演算子」 1 つま たは複数のオペ ラ ン ド の ビ ッ ト 操作に使用 さ れ る ビ ッ ト 処理演 算子について説明 し ます。 第 5 章 「ス カ ラ 関数」 単一値を処理 し 、 単一値を返す さ ま ざ ま な関数について説明 し ます。 第 6 章 「シ ス テ ム ス ト ア ド プ ロ シージ ャ 」 デー タ 定義言語 (DDL) では取 り 扱われない管理 タ ス ク や情報 タ ス ク を遂行す る ためのプ ロ シージ ャ について説明 し ます。 第 7 章 「パフ ォーマ ン ス リ フ ァ レ ン ス」 デー タ ベース エン ジ ンで使用 さ れ る 最適化の詳細 と 、SQL ス テー ト メ ン ト で こ れを最大限利用す る 方法について説明 し ます。 付録 A 「デー タ 型」 サポー ト さ れてい る デー タ 型の一覧を記載 し てい ます。 付録 B 「SQL の予約語」 サポー ト さ れてい る SQL キーワー ド の一覧を記載 し てい ます。 付録 C 「シ ス テ ム テーブル」 リ レ ーシ ョ ナル デー タ 辞書を構成す る シ ス テ ム テーブルについて説 明 し ます。 付録 D 「COBOL アプ リ ケーシ ョ ンの SQL ア ク セ ス」 COBOL の OCCURS コ ン ス ト ラ ク ト 、 部分的 REDEFINES、 お よ び可 変長レ コ ー ド レ イ ア ウ ト に関す る リ レーシ ョ ナル イ ン タ ーフ ェ イ ス サポー ト について説明 し ます。 こ のマニ ュ アルの巻末には索引が用意 さ れてい ます。 xvii 表記上の規則 特段の記述がない限り、 コマンド構文、 コード、 およびコード例では、 以下の 表記が使用されます。 大文字 と 小文字 の区別 通常、 コ マ ン ド と 予約語は、 大文字で表記 さ れます。 本書で 別途記述がない限 り 、 こ れ ら の項目は大文字、 小文字、 あ る いはその両方を使っ て入力で き ます。 た と えば、 MYPROG、 myprog、 ま たは MYprog と 入力す る こ と がで き ます。 [ ] 省略可能な情報には、 [log_name] の よ う に、 角か っ こ が使 用 さ れます。角かっ こ で囲ま れていない情報は必ず指定す る 必要があ り ます。 | 縦棒は、 [file name | @file name] の よ う に、 入力す る 情報 の選択肢を表 し ます。 < > <> は、 /D=<5|6|7> の よ う に、 必須項目に対す る 選択 肢を表 し ます。 変数 file name の よ う に斜体で表 さ れてい る 語は、 適切な値に置 き 換え る 必要のあ る 変数です。 ... [parameter...] の よ う に、 情報の後に省略記号が続 く 場合は、 その情報を繰 り 返 し 使用で き ます。 ::= 記号 ::= は、 あ る 項目が別の項目用語で定義 さ れてい る こ と を意味 し ま す。 た と えば、 a::=b は、 項目 a が b で定義 さ れ てい る こ と を意味 し ます。 * ア ス タ リ ス ク は、同一の接頭辞を持つ一連の API を示すワ イ ル ド カー ド 記号 と し て使用 さ れます。 メ モ 特段の記述がない限 り 、 本書におけ る Pervasive PSQL 製品への すべての リ フ ァ レ ン スは、現行バージ ョ ン Pervasive PSQL v9 について 述べてい ます。 xviii 詳細 ODBC 仕様の詳細については、『Microsoft ODBC Programmer’s Reference』 を 参照 し て く だ さ い。 xix xx 1 SQL の概要 構造化問い合わせ言語 (SQL) の概要 構造化問い合わせ言語 (SQL) は、英語に似た ス テー ト メ ン ト か ら 成 る デー タ ベース言語の 1 つで、 こ れを使っ て さ ま ざ ま なデー タ ベース操作を実行 で き ます。 ANSI (American National Standards Institute) と IBM は、 それぞ れ 独 自 の SQL 標準 を 定義 し て い ま す。 IBM の 標 準 は SAA (Systems Application Architecture) と 呼ばれ ま す。 Pervasive PSQL 製品 で は、 ANSI SQL と IBM SAA SQL の両方の機能をほ と ん ど実装 し てい る ほか、 こ れ ら の標準では定義 さ れていない独自の拡張機能 も 提供 し てい ます。 Pervasive PSQL では、 さ ま ざ ま な種類の SQL ス テー ト メ ン ト を作成で き ま す。 次の表に、 作成可能な SQL ス テー ト メ ン ト の種類 と 、 それぞれを使っ て実現で き る タ ス ク の一覧を示 し ます。 表 1-1 SQL ス テー ト メ ン ト の種類 と 関連 タ ス ク SQL ス テー ト メ ン ト の 種類 タスク デー タ 定義 テーブルを作成、 変更、 お よ び削除す る 。 イ ンデ ッ ク ス を作成ま たは削除す る 。 ス ト ア ド SQL プ ロ シージ ャ を作成ま たは削除す る 。 ト リ ガ を作成ま たは削除す る 。 デー タ 処理 テーブル内のデー タ を取得、 挿入、 更新、 お よ び削除 する。 ト ラ ンザ ク シ ョ ン を定義す る 。 ビ ュ ーを定義ま たは削除す る 。 ス ト ア ド SQL プ ロ シージ ャ を実行す る 。 ト リ ガ を実行す る 。 デー タ 制御 辞書のセキ ュ リ テ ィ を有効ま たは無効にす る 。 ユーザーお よ びグループを作成す る 。 テーブルのア ク セ ス権を付与ま たは取 り 消す。 こ の章では、 SQL ス テー ト メ ン ト の概要について分類別に説明 し ます。 各 ス テー ト メ ン ト の詳細については、 「SQL 構文 リ フ ァ レ ン ス」 (3-1 ページ) を参照 し て く だ さ い。 1-1 SQL の概要 こ の章は、 次のセ ク シ ョ ンか ら 構成 さ れてい ます。 1-2 「デー タ 定義ス テー ト メ ン ト 」 (1-3 ページ) 「デー タ 操作ス テー ト メ ン ト 」 (1-7 ページ) 「デー タ 制御ス テー ト メ ン ト 」 (1-10 ページ) デー タ 定義ス テー ト メ ン ト デー タ 定義ス テー ト メ ン ト デー タ 定義ス テー ト メ ン ト ではデー タ ベース の特性を指定で き ます。 こ れ を使っ てデー タ 定義ス テー ト メ ン ト を実行す る と 、 Pervasive PSQL に よ っ てデー タ ベース の記述がデー タ 辞書に格納 さ れます。 情報の格納や取得を 行 う 前に、 辞書内でデー タ ベース を定義す る 必要があ り ます。 Pervasive PSQL では、 デー タ 定義ス テー ト メ ン ト を作成 し て、 次の タ ス ク を実行で き ます。 テーブルを作成、 変更、 お よ び削除す る 。 イ ンデ ッ ク ス の作成 と 削除 ト リ ガの作成 と 削除 ス ト ア ド プ ロ シージ ャ の作成 と 削除 ユーザー定義関数の作成 と 削除 次のセ ク シ ョ ンでは、こ れ ら の タ ス ク に関連す る SQL ス テー ト メ ン ト の概 要について説明 し ます。 デー タ ベース の特性の定義に関連 し た一般的な情 報については、 Pervasive PSQL ソ フ ト ウ ェ ア開発キ ッ ト (SDK) に付属す る 『Pervasive PSQL Programmer’s Guide』 を参照 し て く だ さ い。 テーブルの作成、 変更、 および削除 デー タ ベース のテーブルを作成、 変更、 お よ び削除す る には、 次の ス テー ト メ ン ト を使っ て SQL を構築 し ます。 表 1-2 デー タ 定義ス テー ト メ ン ト - テーブル CREATE TABLE テーブルを定義 し 、 オプシ ョ ン で対応す る デー タ フ ァ イ ル を作成 し ます。 ALTER TABLE テーブル定義に変更 を 1 つ追加 し ま す。 ALTER TABLE ス テ ー ト メ ン ト を 使用す る と 、 テーブル定義への列の追加、 テーブル定義か ら の列の削除、 列のデー タ 型やデー タ 長 (あ る いは、 それ以外の特性) の変更、 主キーま たは外部キーの 追加や削除、 別のデー タ フ ァ イ ル と テーブル定義 と の関連 付け を行 う こ と がで き ます。 DROP TABLE デー タ 辞書か ら テーブル を削除 し 、 オプ シ ョ ン で関連す る デー タ フ ァ イ ルをデ ィ ス ク か ら 削除 し ます。 1-3 SQL の概要 イ ンデ ッ ク スの作成 と 削除 イ ン デ ッ ク ス を 作成お よ び削除す る には、 次の ス テー ト メ ン ト を 使 っ て SQL を構築 し ます。 表 1-3 デー タ 定義ス テー ト メ ン ト - イ ンデ ッ ク ス CREATE INDEX 既存の テーブルに新 し い イ ン デ ッ ク ス (名前付 き イ ン デ ッ ク ス) を定義 し ます。 DROP INDEX 名前付 き イ ンデ ッ ク ス を削除 し ます。 ト リ ガの作成 と 削除 ト リ ガ を作成お よ び削除す る には、次の ス テー ト メ ン ト を使っ て SQL を構 築 し ます。 表 1-4 デー タ 定義ス テー ト メ ン ト - ト リ ガ CREATE TRIGGER 既存のテーブルに ト リ ガ を定義 し ます。 DROP TRIGGER ト リ ガ を削除 し ます。 Pervasive PSQL は、 その他の SQL 制御ス テー ト メ ン ト も 提供 し てい ます。 こ れ ら の ス テー ト メ ン ト は、 ト リ ガ本体内でのみ使用で き ます。 ト リ ガで は次の ス テー ト メ ン ト を使用で き ます。 表 1-5 デー タ 定義ス テー ト メ ン ト - ト リ ガ制御 1-4 BEFORE INSERT、 UPDATE、 ま たは DELETE オペレーシ ョ ンの前 に実行す る ト リ ガ を定義 し ます。 AFTER INSERT、 UPDATE、 ま たは DELETE オペレーシ ョ ンの後 で実行す る ト リ ガ を定義 し ます。 デー タ 定義ス テー ト メ ン ト ス ト ア ド プ ロ シージ ャの作成 と 削除 ス ト ア ド プ ロ シージ ャ は、 あ ら か じ め コ ンパ イ ル し て辞書に保存 さ れてい る 複数の ス テー ト メ ン ト か ら 成っ てい ます。 ス ト ア ド プ ロ シージ ャ を作成 お よ び削除す る には、 次の ス テー ト メ ン ト を使用 し ます。 表 1-6 デー タ 定義ス テー ト メ ン ト - ス ト ア ド プ ロ シージ ャ CREATE PROCEDURE 新 し いプ ロ シージ ャ をデー タ 辞書に保管 し ます。 DROP PROCEDURE デー タ 辞書か ら ス ト ア ド プ ロ シージ ャ を削除 し ます。 Pervasive PSQL は、 その他の SQL 制御ス テー ト メ ン ト も 提供 し てい ます。 こ れ ら の ス テー ト メ ン ト は、 ス ト ア ド プ ロ シージ ャ 本体内でのみ使用で き ます。 ス ト ア ド プ ロ シージ ャ では次の ス テー ト メ ン ト を使用で き ます。 表 1-7 デー タ 定義ス テー ト メ ン ト - ス ト ア ド プ ロ シージ ャ制御 IF...THEN...ELSE 条件の真偽値に基づいた ス テー ト メ ン ト の実行制御を可能 に し ます。 LEAVE ブ ロ ッ ク ま たはループ ス テー ト メ ン ト を抜けて実行を継続 し ます。 LOOP ス テー ト メ ン ト のブ ロ ッ ク の実行を繰 り 返 し ます。 WHILE 指定 し た条件が True であ る 間、 ス テー ト メ ン ト のブ ロ ッ ク の実行を繰 り 返 し ます。 ユーザー定義関数 (UDF) の作成 と 削除 組み込み関数 に 加 え て、 Pervasive PSQL で は 独自 に ユ ー ザ ー定義関数 (UDF) を作成 し 、 それを Pervasive PSQL ス テー ト メ ン ト で使用す る こ と がで き ます。 ユーザー定義関数は一種のデー タ ベース オブジ ェ ク ト で、 再使用で き る 1 つ以上の Pervasive PSQL ス テー ト メ ン ト を カプセル化 し た も のです。 ユー ザー定義関数は 0 個以上の入力引数を取 り 、 そ こ か ら 1 つの戻 り 値を求め ます。 こ れが ス カ ラ 値です。 ユーザー定義関数は常に、デー タ ベース の コ ン テ キ ス ト 内に定義 さ れます。 こ の ス テー ト メ ン ト の実行が成功す る と 、特定のデー タ ベース に UDF 定義 が格納 さ れます。 格納 さ れた UDF は変更 し た り 、 呼び出 し た り 、 ま た削除 し た り で き ます。 Pervasive PSQL は ス カ ラ ユーザー定義関数をサポー ト し てい ます。 1-5 SQL の概要 ス カ ラ ユーザー定義関数は、 Pervasive PSQL ス テー ト メ ン ト の RETURNS 句で指定 さ れ た デー タ 型の単一値 を 返 し ま す。 ス カ ラ UDF には複数の Pervasive PSQL ス テー ト メ ン ト を含む こ と がで き ます。 戻 り 値のデー タ に は、 text 型、 ntext 型、 image 型、 cursor 型、 ま たは timestamp 型以外であれ ば、 ど のデー タ 型の値で も 指定で き ます。 ユーザー定義関数を作成お よ び削除す る には、 次の ス テー ト メ ン ト を使用 し ます。 表 1-8 デー タ 定義ス テー ト メ ン ト - ユーザー定義関数 1-6 CREATE FUNCTION ス カ ラ ユーザー定義関数をデー タ ベース に作成 し ます。 DROP FUNCTION デー タ ベース か ら ス カ ラ ユーザー定義関数を削除 し ます。 デー タ 操作ス テー ト メ ン ト デー タ 操作ス テー ト メ ン ト デー タ 操作ス テー ト メ ン ト を使用す る と 、 デー タ ベース の内容にア ク セ ス し て変更を加え る こ と がで き ます。 Pervasive PSQL ではデー タ 操作ス テー ト メ ン ト を構築 し て、 次の タ ス ク を実行で き ます。 テーブルか ら のデー タ の取得 テーブル内のデー タ の変更 ト ラ ンザ ク シ ョ ンの定義 ビ ュ ーの作成 と 削除 ス ト ア ド プ ロ シージ ャ の実行 ト リ ガの実行 次のセ ク シ ョ ンでは、こ れ ら の タ ス ク に関連す る SQL ス テー ト メ ン ト の概 要について説明 し ます。 デー タ の取得 デー タ ベース か ら 情報を取得す る ために使用す る ス テー ト メ ン ト はすべて SELECT ス テー ト メ ン ト に基づき ます。 表 1-9 デー タ 操作ス テー ト メ ン ト - デー タ の取得 SELECT デー タ ベース内の 1 つま たは複数のテーブルか ら デー タ を取得 し ます。 SELECT ス テー ト メ ン ト を作成する 場合、 さ ま ざ ま な句を使っ て異な る オ プシ ョ ン を指定で き ま す (それぞれの句の詳細については、 「ODBC エ ン ジ ン リ フ ァ レ ン ス」 (2-1 ページ) の SELECT ス テー ト メ ン ト の項を参照)。 SELECT ス テー ト メ ン ト で使用する 句の種類は次の と お り です。 1-7 SQL の概要 表 1-10 デー タ 操作ス テー ト メ ン ト - デー タ オプ シ ョ ンの取得 FROM デー タ を取得す る テーブルま たはビ ュ ーを指定 し ます。 WHERE SELECT ス テー ト メ ン ト で取得す る デー タ を修飾す る 検索条件 を定義 し ます。 GROUP BY 指定 し た条件に従っ て行のセ ッ ト を組み合わせ、 グループ内の 1 つ以上の列を対象に集計値を取得で き る よ う に し ます。 HAVING グループの集計値が満た さ な ければな ら ない条件を指定 し て、 ビ ュ ーの内容を制限 し ます。 ORDER BY Pervasive PSQL が選択 し た行を返す順序を決定 し ます。 ま た、 UNION キーワ ー ド を使っ て、 複数の SELECT ク エ リ か ら 1 つの結 果テーブルを取得す る こ と も で き ます。 デー タ の変更 テーブルやビ ュ ーのデー タ を追加、 変更、 ま たは削除す る には、 以下の各 ス テー ト メ ン ト を使用 し ます。 表 1-11 デー タ 操作ス テー ト メ ン ト - デー タ の変更 INSERT 1 つ以上のテーブル ま たは 1 つの ビ ュ ーに行を追加 し ます。 UPDATE テーブル ま たはビ ュ ーのデー タ を変更 し ます。 DELETE テーブル ま たはビ ュ ーか ら 行を削除 し ます。 DELETE ま たは UPDATE ス テー ト メ ン ト を作成す る 場合、 WHERE 句 を 使っ て、 目的のデー タ を制限す る 検索条件を定義す る こ と も で き ます。 ト ラ ンザク シ ョ ンの定義 デー タ ベース内のデー タ を更新す る には、個別に SQL ス テー ト メ ン ト を発 行す る か、「 ト ラ ンザ ク シ ョ ン」 (関連す る ス テー ト メ ン ト の論理的な単位) を定義 し ます。 ト ラ ンザ ク シ ョ ン を定義す る と 、 作業単位に含まれ る すべ ての ス テー ト メ ン ト が正常に実行 さ れ る か、すべての ス テ ー ト メ ン ト が実 行 さ れない こ と にな り ます。ト ラ ンザ ク シ ョ ン を使用す る と 、複数の ス テー ト メ ン ト を グループ化 し て、 デー タ ベース の論理的な整合性を確実にで き ます。 Pervasive PSQL は ODBC API SQLTransact をサポー ト し てい ます。詳細につ いては、 『Microsoft ODBC Programmer’s Reference』 を参照 し て く だ さ い。 1-8 デー タ 操作ス テー ト メ ン ト ビ ュ ーの作成 と 削除 ビ ュ ーを作成お よ び削除す る には、次の ス テー ト メ ン ト を使っ て SQL を構 築 し ます。 表 1-12 デー タ 操作ス テー ト メ ン ト - ビ ュ ー CREATE VIEW デー タ ベース ビ ュ ーを定義 し 、辞書にその定義を格納 し ます。 DROP VIEW デー タ 辞書か ら ビ ュ ーを削除 し ます。 ス ト ア ド プ ロ シージ ャの作成 ス ト ア ド プ ロ シージ ャ は、 あ ら か じ め コ ンパ イ ル し て辞書に保存 さ れてい る 複数の ス テー ト メ ン ト か ら 成っ てい ます。 ス ト ア ド プ ロ シージ ャ を実行 す る には、 次の ス テー ト メ ン ト を使用 し ます。 表 1-13 デー タ 操作ス テー ト メ ン ト - ス ト ア ド プ ロ シージ ャ CALL ま たは EXEC[UTE] あ ら か じ め コ ンパ イ ル さ れたプ ロ シージ ャ を呼び出 し て実行 し ます。 シ ス テム ス ト ア ド プ ロ シージ ャの実行 シ ス テ ム ス ト ア ド プ ロ シージ ャ は、 デー タ 定義言語 (DDL) では取 り 扱 われない管理 タ ス ク や情報 タ ス ク の遂行に利用で き ます。 シ ス テ ム ス ト ア ド プ ロ シージ ャ には psp_ プ レ フ ィ ッ ク ス が付 き ます。 ス ト ア ド プ ロ シー ジ ャ を実行す る には、 次の ス テー ト メ ン ト を使用 し ます。 表 1-14 デー タ 操作ス テー ト メ ン ト - シス テム ス ト ア ド プ ロ シージ ャ CALL ま たは EXEC[UTE] シ ス テ ム ス ト ア ド プ ロ シージ ャ を呼び出 し て実行 し ます。 詳細については、 「シ ス テ ム ス ト ア ド プ ロ シージ ャ 」 (6-1 ページ) を参照 し て く だ さ い。 ト リ ガの実行 ト リ ガは、 あ ら か じ め コ ンパ イ ル し て辞書に保存 さ れてい る 複数の ス テー ト メ ン ト か ら 成っ てい ます。 ト リ ガは、 指定 し た条件にな る と 、 エン ジ ン に よ り 自動的に実行 さ れます。 1-9 SQL の概要 デー タ 制御ス テー ト メ ン ト デー タ 制御ス テー ト メ ン ト ではデー タ ベース のセキ ュ リ テ ィ を定義で き ま す。 辞書を作成す る 場合、 その辞書のセキ ュ リ テ ィ を明示的に有効にす る ま で、 その辞書のセ キ ュ リ テ ィ は定義 さ れ ま せん。 Pervasive PSQL では、 デー タ 制御ス テー ト メ ン ト を作成 し て、 次の タ ス ク を実行で き ます。 セキ ュ リ テ ィ の有効化ま たは無効化 ユーザー と グループの作成 と 削除 ア ク セ ス権の付与 と 取 り 消 し メ モ Btrieve デー タ フ ァ イ ルが Btrieve オーナー ネーム で保護 さ れ、 デー タ ベー ス が リ レ ーシ ョ ナル セ キ ュ リ テ ィ で保護 さ れていない場 合、 リ レ ーシ ョ ナル エ ン ジ ンは ODBC オペ レーシ ョ ン実行時にオー ナー ネームに従い ます (た と えば、 タ イ プ 1 ま たは 3 のオーナー ネー ム には読み取 り 専用ア ク セ ス が許可 さ れ ま すが、 0 ま た は 2 のオー ナー ネームにはア ク セ ス は許可 さ れません) 。 デー タ ベース が リ レー シ ョ ナル セキ ュ リ テ ィ で保護 さ れてい る 場合は、ODBC オペレーシ ョ ン 実行時に定義 さ れ た デー タ ベー ス ユーザーの ア ク セ ス 権のみに 従っ てデー タ ベースへのア ク セ ス を許可 し ます。 こ れ ら のア ク セ ス権 は指定 さ れたオーナー ネーム を使っ て付与 さ れなければな り ません。 次のセ ク シ ョ ンでは、こ れ ら の タ ス ク に関連す る SQL ス テー ト メ ン ト の概 要について説明 し ます。 セキ ュ リ テ ィ の有効化 と 無効化 デー タ ベース のセキ ュ リ テ ィ を有効ま たは無効にす る には、 次の ス テー ト メ ン ト を使用 し ます。 表 1-15 デー タ 制御ス テー ト メ ン ト - セキ ュ リ テ ィ SET SECURITY 1-10 デー タ ベース のセ キ ュ リ テ ィ を有効ま たは無効に し 、 Master パ ス ワー ド を設定 し ます。 デー タ 制御ス テー ト メ ン ト ユーザー と グループの作成 と 削除 デー タ ベース のユーザー と ユーザー グループ を作成ま たは削除す る には、 次の ス テー ト メ ン ト を使っ て SQL を構築 し ます。 表 1-16 デー タ 制御ス テー ト メ ン ト - ユーザー と グループ CREATE GROUP 新 し いユーザーのグループを作成 し ます。 DROP GROUP ユーザーのグループを削除 し ます。 GRANT LOGIN TO ユーザー と パ ス ワー ド を作成す る か、ユーザーを グルー プに追加 し ます。 REVOKE LOGIN FROM 辞書か ら ユーザーを削除 し ます。 ア ク セス権の付与 と 取 り 消 し ユーザーやグループにア ク セ ス権を付与ま たは取 り 消すには、 次の ス テー ト メ ン ト を使用 し ます。 表 1-17 デー タ 制御ス テー ト メ ン ト - ア ク セス権 GRANT (ア ク セ ス権) 指定 し た種類のア ク セ ス権を ユーザーま たはグルー プに付与 し ます。 GRANT (ア ク セ ス権) ス テー ト メ ン ト で付与で き る ア ク セ ス権は、 All、 Insert、 Delete、 Alter、 Select、 Update、 お よ び References です。 GRANT CREATETAB TO テーブルを作成す る ためのア ク セ ス権を ユーザーま たはグループに付与 し ます。 REVOKE (ア ク セ ス権) ア ク セ ス権を ユーザーま たはグループか ら 取 り 消 し ます。 REVOKE CREATETAB FROM テーブルを作成す る ためのア ク セ ス権を ユーザーま たはグループか ら 取 り 消 し ます。 1-11 SQL の概要 1-12 ODBC エ ン ジ ン リ フ ァ レ ン ス 2 制限、 接続文字列、 お よ び ODBC 合致 こ の章では、 Pervasive PSQL v9 ODBC イ ン タ ーフ ェ イ ス の制限 と 適合性に ついて説明 し ます。 「Pervasive ODBC エン ジ ン イ ン タ ーフ ェ イ ス制限」 (2-2 ページ) 「デー タ ソ ース名接続文字列キーワー ド 」 (2-5 ページ) 「ODBC の合致」 (2-7 ページ) 「SQL 文法の合致」 (2-14 ページ) ODBC API、 SQL 文法、 お よ び ス カ ラ 関数の詳細につい て は、 『Microsoft ODBC Programmer’s Reference』 を参照 し て く だ さ い。 2-1 ODBC エ ン ジ ン リ フ ァ レ ン ス Pervasive ODBC エ ン ジ ン イ ン タ ー フ ェ イ ス制限 次の表は、Pervasive ODBC エン ジ ン イ ン タ ーフ ェ イ ス の機能に適用 さ れ る 制限ま たは条件を示 し ます。 Pervasive PSQL デー タ ベース には、 40 億のオブジ ェ ク ト を さ ま ざ ま に組み 合わせて含む こ と がで き ます。 オブジ ェ ク ト はデー タ 辞書フ ァ イ ルに保存 さ れます。 『Pervasive PSQL Programmer’s Guide』 の 「名前付け規則」 セ ク シ ョ ン も 参 照 し て く だ さ い。 こ のマニ ュ アルは、 Pervasive PSQL Software Developer Kit (SDK) に含まれてい ます。 表 2-1 Pervasive PSQL 機能の制限 / 条件 2-2 Pervasive PSQL 機能 制限または条件 ス ト ア ド プ ロ シージ ャ のパ ラ メ ー タ リ ス ト 内の引数の数 300 CHAR 列のサ イ ズ 8,000 バ イ ト 文字列 リ テ ラ ル 文字列内の文字は、 10 進数値 1 か ら 255 の間のいずれかの ANSI 文字に な り ます。 テーブル内の列数 1536 ト リ ガ ま た は ス ト ア ド プ ロ シージ ャ で使用可能な列数 300 列名 『Advanced Operations Guide』 の 表 1-1 「識別子の種類別の制限」 (1-3 ページ) を参照 し て く だ さ い。 列のサ イ ズ 2 GB 相関名 メ モ リ に よ る 制限 カー ソ ル名 18 バ イ ト デー タ ベース名 『Advanced Operations Guide』 の 表 1-1 「識別子の種類別の制限」 (1-3 ページ) を参照 し て く だ さ い。 デー タ ベース セ ッ シ ョ ン数 メ モ リ に よ る 制限 デー タ フ ァ イ ル パ ス名 64 バ イ ト (デー タ フ ァ イ ル パ ス 名の 最大 長 は Xf$Loc パ ス お よ び デ ー タ フ ァ イ ル パ ス の組み合わせです) 1 Pervasive ODBC エ ン ジ ン イ ン タ ー フ ェ イ ス制限 表 2-1 Pervasive PSQL 機能の制限 / 条件 Pervasive PSQL 機能 制限または条件 外部キー名 『Advanced Operations Guide』 の 表 1-1 「識別子の種類別の制限」 (1-3 ページ) を参照 し て く だ さ い。 グループ名 『Advanced Operations Guide』 の 表 1-1 「識別子の種類別の制限」 (1-3 ページ) を参照 し て く だ さ い。 イ ンデ ッ ク ス名 『Advanced Operations Guide』 の 表 1-1 「識別子の種類別の制限」 (1-3 ページ) を参照 し て く だ さ い。 ラ ベル名 メ モ リ に よ る 制限 AND でつないだ述部の数 300。 た と えば、 次の ス テー ト メ ン ト で は、AND でつないだ述部が 2 つ使用 さ れてい ます。 SELECT * FROM person WHERE First_Name = 'Janis' and Last_Name = 'Nipart' and Perm_Street = '1301 K Street NW.' パラ メ ータ名 126 バ イ ト パス ワー ド 『Advanced Operations Guide』 の 表 1-1 「識別子の種類別の制限」 (1-3 ページ) を参照 し て く だ さ い。 プ ロ シージ ャ 名 『Advanced Operations Guide』 の 表 1-1 「識別子の種類別の制限」 (1-3 ページ) を参照 し て く だ さ い。 参 照 整 合 性 (RI) 制 約 (た と え ば、 Xr$Name) 20 バ イ ト 一重引用符の表記 2 つの連続 し た一重引用符 ('') 結果名 メ モ リ に よ る 制限 セーブポ イ ン ト 名 メ モ リ に よ る 制限 ク エ リ 内の SELECT リ ス ト の列数 1600 SQL ス テー ト メ ン ト 内の単独項目 (引 用符で囲ま れた リ テ ラ ル文字列) のサ イズ ヌ ル終端文字 と 引用符 を 除 き 、 14,997 (合計 15,000) SQL ス テー ト メ ン ト の長 さ 64 KB 2-3 ODBC エ ン ジ ン リ フ ァ レ ン ス 表 2-1 Pervasive PSQL 機能の制限 / 条件 Pervasive PSQL 機能 制限または条件 セ ッ シ ョ ン あ た り の SQL ス テー ト メ ン ト数 メ モ リ に よ る 制限 ス ト ア ド プ ロ シージ ャ のサ イ ズ 64 KB テーブル名 『Advanced Operations Guide』 の 表 1-1 「識別子の種類別の制限」 (1-3 ページ) を参照 し て く だ さ い。 テーブルの行数 20 億 ク エ リ あ た り の結合テーブル数 メ モ リ に よ る 制限 ト リ ガ名 『Advanced Operations Guide』 の 表 1-1 「識別子の種類別の制限」 (1-3 ページ) を参照 し て く だ さ い。 ユーザー名 『Advanced Operations Guide』 の 表 1-1 「識別子の種類別の制限」 (1-3 ページ) を参照 し て く だ さ い。 VARCHAR 列のサ イ ズ 8,000 バ イ ト 変数名 メ モ リ に よ る 制限 ビ ュ ー名 『Advanced Operations Guide』 の 表 1-1 「識別子の種類別の制限」 (1-3 ページ) を参照 し て く だ さ い。 1 1 イ ンデ ッ ク ス を作成で き る CHAR 列 ま たは VARCHAR 列の最大サ イ ズは 255 バ イ ト です。 2-4 デー タ ソ ース名接続文字列キーワー ド デー タ ソ ース名接続文字列キーワー ド DSN への接続に使用 さ れ る 接続文字列には、 ド ラ イ バが定義す る キーワー ド をい く つで も 含む こ と がで き ます。 こ れ ら のキーワー ド を使用す る こ と に よ り 、 ド ラ イ バはデー タ ソ ースへ接続す る のに十分な情報を得 る こ と が で き ます。 ド ラ イ バ (た と えば、 Pervasive ODBC エン ジ ン イ ン タ ーフ ェ イ ス ま たは Pervasive ODBC ク ラ イ ア ン ト イ ン タ ーフ ェ イ ス)は、デー タ ソ ー ス と の接続に必要な キーワー ド を定義 し ます。 接続文字列が Pervasive PSQL v9 で果たす役割は、以前のバージ ョ ン での役 割 と 同 じ です。 こ れは、 接続す る デー タ ソ ース の識別に使用 さ れます。 現 状での違いは、 接続文字列中に リ ス ト す る ド ラ イ バ定義のキーワー ド にあ り ます。 Pervasive.SQL 7 では、 異な る セ ッ ト のキーワー ド を使っ てデー タ ソ ース を識別 し てい ま し た。 2-5 ODBC エ ン ジ ン リ フ ァ レ ン ス Pervasive PSQL v9 の接続文字列で使用 さ れ る キーワードは次の と お り です。 表 2-2 ク ラ イ ア ン ト DSN で有効な接続文字列 DSN SQLDataSources に よ っ て返 さ れ る デー タ ソ ー ス 名、 ま たは SQLDriverConnect のデー タ ソ ース ダ イ ア ロ グ ボ ッ ク ス名。 DRIVER SQLDrivers 関数に よ っ て返 さ れ る ド ラ イ バの説明。ク ラ イ ア ン ト DSN では、"Pervasive ODBC ク ラ イ ア ン ト イ ン タ ーフ ェ イ ス " にな り ます。 ServerName サーバーのア ド レ ス ま たはホ ス ト 名、お よ びデー タ が 存在す る ポー ト 番号。 ServerDSN こ の DSN が参照す る エ ン ジ ン デー タ ソ ース の名前。 TransportHint ServerName を チ ェ ッ ク す る 転送プ ロ ト コ ル を指定 し ます。 転送プ ロ ト コ ルの リ ス ト は、 検索す る 順番で指 定 し ます。 PWD ユーザー ID に対応す る パ ス ワー ド 。 ArrayFetchOn 配列フ ェ ッ チを有効に し ます。 配列フ ェ ッ チは、 ク ラ イ ア ン ト と サ ー バ ー 間 で の デー タ フ ェ ッ チ の パ フ ォーマ ン ス を向上す る ために使用 さ れます。デフ ォ ル ト の設定は、 「配列フ ェ ッ チを有効にす る 」 です。 ArrayBufferSize 配列バ ッ フ ァ のサ イ ズ。 1 KB か ら 64KB ま での値を 受け付け る こ と がで き ます。デフ ォ ル ト の設定は 8KB です。 UID ユーザー ロ グ イ ン ID。 表 2-3 エ ン ジ ン DSN で有効な接続文字列 2-6 DSN SQLDataSources に よ っ て返 さ れ る デー タ ソ ー ス 名、 ま たは SQLDriverConnect のデー タ ソ ース ダ イ ア ロ グ ボ ッ ク ス名。 DRIVER SQLDrivers 関数に よ っ て返 さ れ る ド ラ イ バの説明。エ ン ジ ン DSN では、"Pervasive ODBC エン ジ ン イ ン タ ー フ ェ イ ス " にな り ます。 DBQ デー タ ベース名。 UID ユーザー ロ グ イ ン ID。 PWD ユーザー ID に対応す る パ ス ワー ド 。 ODBC の合致 ODBC の合致 ODBC イ ン タ ー フ ェ イ スの合致 Pervasive ODBC エン ジ ン イ ン タ ーフ ェ イ ス は、 コ ア、 レベル 1、 お よ びレ ベル 2 の イ ン タ ーフ ェ イ ス合致レベルに対す る ODBC v3.51 仕様に完全準 拠 し てい ます。 ODBC イ ン タ ー フ ェ イ スの合致の例外 コ ア レ ベル SQL_BEST_ROWID Pervasive ODBC エン ジ ン イ ン タ ーフ ェ イ ス では、テーブル内の行を識別す る 最適な列セ ッ ト と し て固有の イ ンデ ッ ク ス が使用 さ れます。 新 し い行が 挿入 さ れ る と き 、Pervasive ODBC エン ジ ン イ ン タ ーフ ェ イ スは自動 イ ン ク リ メ ン ト 列の値は返 し ま せん。 自動インクリメント列の値は、 @@IDENTITY 変数を使用す る こ と に よ っ て決定で き ます。 「@@IDENTITY」 (3-216 ペー ジ) を参照 し て く だ さ い。 レ ベル 2 SQL_ROWVER 上記の SQL_BEST_ROWID を参照 し て く だ さ い。 SQL_ATTR_LOGIN_TIMEOUT サポー ト さ れてい ません ODBC API の合致 次の表は、Pervasive ODBC エン ジ ン イ ン タ ーフ ェ イ ス に よ り サポー ト さ れ る ODBC API 関数、 お よ び ODBC の合致レベルの一覧を示 し ます。 表 2-4 イ ン タ ー フ ェ イ スがサポー ト し ている ODBC API 関数 ODBC 関数 ODBC 合致レ ベル SQLAllocHandle コア SQLBindCol コア SQLBindParameter レベル 1[1] SQLBrowseConnect レベル 1 2-7 ODBC エ ン ジ ン リ フ ァ レ ン ス 表 2-4 イ ン タ ー フ ェ イ スがサポー ト し ている ODBC API 関数 2-8 ODBC 関数 ODBC 合致レ ベル SQLBulkOperations レベル 1 SQLCancel コ ア [1] SQLCloseCursor コア SQLColAttribute コ ア [1] SQLColumnPrivileges レベル 2 SQLColumns コア SQLConnect コア SQLCopyDesc コア SQLDataSources コア SQLDescribeCol コ ア [1] SQLDescribeParam レベル 2 SQLDisconnect コア SQLDriverConnect コア SQLDrivers コア SQLEndTran コア SQLExecDirect コア SQLExecute コア SQLFetch コア SQLFetchScroll コア SQLForeignKeys レベル 2 SQLFreeHandle コア SQLFreeStmt コア SQLGetConnectAttr コア SQLGetCursorName コア SQLGetData コア ODBC の合致 表 2-4 イ ン タ ー フ ェ イ スがサポー ト し ている ODBC API 関数 ODBC 関数 ODBC 合致レ ベル SQLGetDescField コア SQLGetDescRec コア SQLGetDiagField コア SQLGetDiagRec コア SQLGetEnvAttr コア SQLGetFunctions コア SQLGetInfo コア SQLGetStmtAttr コア SQLGetTypeInfo コア SQLMoreResults レベル 1 SQLNativeSql コア SQLNumParams コア SQLNumResultCols コア SQLParamData コア SQLPrepare コア SQLPrimaryKeys レベル 1 SQLProcedureColumns レベル 1 SQLProcedures レベル 1 SQLPutData コア SQLRowCount コア SQLSetConnectAttr コア SQLSetCursorName コア SQLSetDescRec コア SQLSetEnvAttr コア SQLSetPos レベル 1 2-9 ODBC エ ン ジ ン リ フ ァ レ ン ス 表 2-4 イ ン タ ー フ ェ イ スがサポー ト し ている ODBC API 関数 ODBC 関数 ODBC 合致レ ベル SQLSetStmtAttr コア SQLStatistics コア SQLTablePrivileges レベル 1 SQLTables コア サポー ト さ れない ODBC デー タ 型 次の C 言語のデー タ 型はサポー ト さ れません。 SQL_C_NUMERIC SQL_C_SBIGINT SQL_C_UBIGINT ODBC API 合致の例外 次のセ ク シ ョ ンでは、 表 2-4 (2-7 ページ) で示 し た ODBC API 合致に対 し ての、 例外について説明 し ます。 SQLGetTypeInfo SQLGetTypeInfo を使用する と 、Pervasive ODBC エン ジ ン イ ン タ ーフ ェ イ ス に よ っ て指定 さ れたネ イ テ ィ ブ デー タ 型名 ( タ イ プ名) の リ ス ト が生 成 さ れます。 た と えば、SQL_CHAR が CHARACTER に割 り 当て ら れ ます。 CREATE TABLE ス テー ト メ ン ト ま たは ALTER TABLE ス テー ト メ ン ト 内 の列のデー タ 型名、 あ る いはプ ロ シージ ャ のパ ラ メ ー タ や、 プ ロ シージ ャ お よ び ト リ ガで宣言 さ れた変数のデー タ 型名には、 こ の関数か ら 戻 さ れ る 名前を使用 し て く だ さ い。 SQLSpecialColumns Pervasive ODBC エン ジ ン イ ン タ ーフ ェ イ ス では、テーブル内の行を一意に 識別す る 最適な列セ ッ ト と し て固有の イ ンデ ッ ク ス が使用 さ れ ます。 新し い行が挿入されるとき、 Pervasive ODBC エンジン インターフェイスは自動インク リメント列の値は返しません。 自動 イ ン ク リ メ ン ト 列の値は、 @@IDENTITY 変数を使用す る こ と に よ っ て決定で き ます。 「@@IDENTITY」 (3-216 ペー ジ) を参照 し て く だ さ い。 2-10 ODBC の合致 SQLGetInfo Pervasive ODBC インターフェイスは、 SQL_DRIVER_VER と SQL_DBMS_VER で同一の値を返 し ます。 こ のバージ ョ ン値は次の形式で返 さ れます。 09.00.0147 010 こ の値は、 次の表で示 さ れてい る よ う に 4 つの構成要素に解釈で き ます。 要素 値 説明 09 メ ジ ャ ー バージ ョ ン Pervasive PSQL デー タ ベース エ ン ジ ン の メ ジ ャ ー バージ ョ ン。 00 マ イ ナー バージ ョ ン Pervasive PSQL デー タ ベース エ ン ジ ン のマ イ ナー バージ ョ ン。 一般に、 サー ビ ス パ ッ ク で更新 さ れます。 0147 ビル ド 番号 ビル ド の詳細。 Pervasive Software が リ リ ース版を生成 し た時点の ビル ド 回数 を示す こ と に よ っ て、 その リ リ ース を 特定 し ます。 010 ポ イ ン ト ビル ド ビル ド のマ イ ナー ア ッ プデー ト 。 ビル ド 番号 と ポ イ ン ト ビル ド に よ っ て、 特 定の 時点 で 作成 さ れ た 一意 な 製品 リ リ ース を識別で き ます。 次の表では、SQLGetInfo で一般的に返 さ れ る その他の値について ま と め てい ます。 ア イ テム 値 SQL_DRIVER_NAME W3ODBCCI.DLL SQL_DRIVER_VER 09.00.0147 010 SQL_DRIVER_ODBC_VER 03.51 SQL_DBMS_NAME Pervasive PSQL SQL_DBMS_VER 09.00.0147 010 SQL_ODBC_VER 03.52.0000 SQL_ODBC_API_CONFORMANCE SQL_OAC_LEVEL2 SQL_ODBC_INTERFACE_CONFORMANCE SQL_OIC_LEVEL2 2-11 ODBC エ ン ジ ン リ フ ァ レ ン ス ODBC 属性の合致 Pervasive ODBC エン ジ ン イ ン タ ーフ ェ イ ス は、 ODBC v3.51 の属性の合致 に完全準拠 し てい ます。 ODBC 属性の合致の例外 ス テー ト メ ン ト 属性の合致 次の表は、 ODBC ス テー ト メ ン ト 属性の合致の例外を示 し ます。 表 2-5 ODBC ス テー ト メ ン ト 属性の合致の例外 2-12 fOption (数値) コメント SQL_ATTR_QUERY_TIMEOUT(0) SQLSetStmtAttr お よ び SQLSetConnectAttr を介 し てサポー ト さ れます。 SQLExecDirect、 SQLExecute、 SQLFetch お よ び SQLExtendedFetch にのみ適用で き ま す。 DDL ス テー ト メ ン ト に適用 し て はいけ ません。 SQL_ATTR_METADATA_ID(10014) デ フ ォ ル ト 値 は SQL_FALSE で す。 Pervasive ODBC ド ラ イ バは、 こ の属性 値 を SQL_TRUE に設定す る こ と を 許 可 し てい ません。 SQL_ATTR_ENABLE_AUTO_IPD(15) デ フ ォ ル ト 値 は SQL_TRUE で す。 Pervasive ODBC ド ラ イ バは、 こ の属性 値を SQL_FALSE に設定す る こ と を許 可 し てい ません。 SQL_ATTR_PARAM_BIND_TYPE(18) SQL_PARAM_BIND_BY_COLUMN の みサポー ト さ れます。 ODBC の合致 接続属性の合致 次の表は、 ODBC 接続属性の合致の例外を示 し ます。 表 2-6 ODBC 接続属性の合致の例外 fOption (数値) コメント SQL_ATTR_AUTO_IPD(10001) デ フ ォ ル ト 値は SQL_TRUE で す。 Pervasive ODBC ド ラ イ バ は、 こ の属性値 を SQL_FALSE に設定す る こ と を許可 し てい ま せん。 SQL_ATTR_METADATA_ID(10014) デフ ォ ル ト 値は SQL_FALSE で す。 Pervasive ODBC ド ラ イ バ は、こ の属性値を SQL_TRUE に 設定す る こ と を許可 し てい ませ ん。 SQL_ATTR_CONNECTION_TIMEOUT(113) デフ ォ ル ト 値は 0 です。 それ以 外の値はサポー ト さ れてい ませ ん。 ODBC 記述子フ ィ ール ド の合致 Pervasive ODBC エ ン ジ ン イ ン タ ー フ ェ イ ス は、 ODBC v3.51 の 記述子 フ ィ ール ド の合致に完全準拠 し てい ます。 ODBC 記述子 フ ィ ール ド の合致の例外 次の表は、 ODBC 記述子フ ィ ール ド の合致の例外を示 し ます。 表 2-7 ODBC 記述子フ ィ ール ド の合致の例外 fOption (数値) コメント SQL_DESC_BIND_TYPE APD では、 SQL_BIND_BY_COLUMN の みサポー ト さ れます。 SQL_DESC_ROWVER 「ODBC イ ン タ ー フ ェ イ ス の合致の例外」 を参照 し て く だ さ い。 2-13 ODBC エ ン ジ ン リ フ ァ レ ン ス SQL 文法の合致 ODBC バージ ョ ン 2.5 の仕様では、 最小、 コ ア、 お よ び拡張 と い う 3 つの SQL 文法の合致レベルが提供 さ れてい ます。 レベルが高 く な る ほ ど、 よ り 完全 なデー タ 定義の実装 と デー タ 操作言語の サ ポー ト が提供 さ れ ま す。 Pervasive ODBC エ ン ジ ン イ ン タ ーフ ェ イ ス では、 最小 SQL 文法に加え、 多数の コ アお よ び拡張の ス テー ト メ ン ト 文法を完全サポー ト し てい ま す。 Pervasive ODBC エン ジ ン イ ン タ ーフ ェ イ ス がサポー ト し てい る SQL 文法 は、 次の表に要約 さ れてい ます。 表 2-8 SQL 文法の合致 SQL ス テー ト メ ン ト 文法 最小 コア 拡張 ALTER TABLE ○ CREATE GROUP ○ CREATE INDEX ○ CREATE PROCEDURE ○ CREATE TABLE ○ CREATE TRIGGER ○ CREATE VIEW ○ DELETE (位置付け) ○ DELETE (検索済み) ○ DROP GROUP ○ DROP INDEX ○ DROP PROCEDURE DROP TABLE ○ ○ DROP TRIGGER DROP VIEW ○ GRANT ○ INSERT JOIN LEFT OUTER (SELECT) 2-14 ○ ○ ○ SQL 文法の合致 表 2-8 SQL 文法の合致 SQL ス テー ト メ ン ト 文法 最小 コア REVOKE SELECT (into 付 き ) 拡張 ○ ○ - 概算数値 リ テ ラ ル ○ - 述部間 ○ - 相関名 ○ - 日付演算 ○ - 日付 リ テ ラ ル ○ ○ - 正確な数値 リ テ ラ ル ○ - 拡張述部 - in- 述部 ○ - セ ッ ト 関数 ○ - 時刻 リ テ ラ ル ○ - タ イ ム ス タ ンプ リ テ ラ ル ○ ○ サブ ク エ リ UNION ○ SET SECURITY ○ UPDATE (位置付け) ○ UPDATE (検索済み) ○ SQL ス テー ト メ ン ト 内のデ リ ミ タ 付き識別子 列名お よ びテーブル名に非 ODBC 標準文字が含まれ る 場合、列名 と テーブ ル名はデ リ ミ タ 付 き 識別子 と し て表記で き ます。 デ リ ミ タ 付 き 識別子のデ リ ミ タ 文字は二重引用符です。 た と えば、 次の よ う にな り ます。 SELECT " 姓 " FROM " 非標準テーブル " 2-15 ODBC エ ン ジ ン リ フ ァ レ ン ス 2-16 SQL 構文 リ フ ァ レ ン ス 3 Pervasive PSQL でサポー ト さ れ る 構文の リ フ ァ レ ン ス Pervasive PSQL でサポー ト さ れ る SQL の文法を詳述 し ます。 「ス テー ト メ ン ト の文法」 (3-2 ページ) 「グ ロ ーバル変数」 (3-216 ページ) 「ほかの特性」 (3-219 ページ) ODBC API、 ODBC SQL 文法、 お よ び ス カ ラ 関数 の 詳細 に つ い て は、 『Microsoft ODBC Programmer’ Reference』 を参照 し て く だ さ い。 3-1 SQL 構文 リ フ ァ レ ン ス ス テー ト メ ン ト の文法 以降のページでは、サポー ト さ れてい る SQL 文法要素すべての完全な文法 について説明 し ます。 メ モ ほ と ん ど の SQL 例は、 Pervasive PSQL Control Center で提供 さ れ る SQL Editor を使っ て テ ス ト す る こ と がで き ます。 例外については、 文法要素の解説に示 さ れてい ます。 SQL Editor に関す る 詳 し い情報は、 『Pervasive PSQL User’s Guide』 の 「SQL Editor」 を参照 し て く だ さ い。 3-2 ス テー ト メ ン ト の文法 ADD 備考 ADD 句は ALTER TABLE ス テー ト メ ン ト 内で使用 し 、追加す る 列の定義、 列の制約、 ま たはテーブルの制約を 1 つま たは複数指定 し ます。 関連項目 「ALTER TABLE」 (3-8 ページ) 3-3 SQL 構文 リ フ ァ レ ン ス ALL 備考 サブ ク エ リ の前に ALL キー ワ ー ド を指定す る と 、 Pervasive PSQL v9 でサ ブ ク エ リ が実行 さ れ、 その結果を使用 し て外部 ク エ リ の条件が評価 さ れま す。 サブ ク エ リ が返すすべての行が、 特定の行に対す る 外部 ク エ リ の条件 を満たす場合、 Pervasive PSQL v9 は ス テー ト メ ン ト の最終的な結果テーブ ルにその行を含みます。 一 般 に、 ALL キ ー ワ ー ド の 代 わ り に EXISTS キ ー ワ ー ド ま た は NOT EXISTS キー ワー ド を使用で き ます。 例 次の SELECT ス テー ト メ ン ト は、 Person テーブルの ID 列 と 、 サブ ク エ リ の結果テーブルの ID 列を比較 し ます。 SELECT p.ID, p.Last_Name FROM Person p WHERE p.ID <> ALL (SELECT f.ID FROM Faculty f WHERE f.Dept_Name = 'Chemistry') Person テーブルの ID 値 と 一致す る 値がサブ ク エ リ の結果テーブルの ID 値 にない場合、 Pervasive PSQL は ス テー ト メ ン ト の最終的な結果テーブルに Person テーブルの行を含みます。 関連項目 「SELECT (into 付き )」 (3-152 ページ) 「SELECT」 (3-153 ページ) 「UNION」 (3-194 ページ) 3-4 ス テー ト メ ン ト の文法 ALTER (名前変更) ALTER (名前変更) ス テー ト メ ン ト に よ り 、 イ ンデ ッ ク ス、 ユーザー定義 関数、 ス ト ア ド プ ロ シージ ャ 、 テーブル、 ト リ ガ、 ま たはビ ュ ーの名前を 変更で き ます。 構文 ALTER オブジ ェ ク ト の種類 RENAME 修飾 さ れたオブジ ェ ク ト 名 TO 新 し いオ ブジ ェ ク ト 名 オブジ ェ ク ト の種類 ::= INDEX | FUNCTION | PROCEDURE | TABLE | TRIGGER | VIEW 修飾 さ れたオブジ ェ ク ト 名 ::= デー タ ベース名 . テーブル名 . オブジ ェ ク ト 名 | デー タ ベース名 . オブジ ェ ク ト 名 | テーブル名 . オブジ ェ ク ト 名 | オブジ ェ ク ト 名 デー タ ベース名 , テーブル名 , オブジ ェ ク ト 名 , 新 し いオブジ ェ ク ト 名 ::= ユー ザー定義名 備考 以下のオブジ ェ ク ト は、 Pervasive PSQL v9 よ り 前のバージ ョ ンの Pervasive PSQL で作成 さ れてい る 場合には、 名前を変更で き ません。 ス ト ア ド プ ロ シージ ャ ト リガ ビ ュー 以前の リ リ ース では、 こ れ ら のオブジ ェ ク ト の名前に よ る イ ンデ ッ ク スは 変更不可 と し て作成 さ れま し た。 上記のオブジ ェ ク ト を Pervasive PSQL v9 で作成 し た場合、 オブジ ェ ク ト に対す る イ ンデ ッ ク スは変更可能にな り ま す。 ど のオ ブ ジ ェ ク ト の種類 も デー タ ベー ス名 を 使 っ て修飾で き ま す。 た だ し 、 INDEX ま たは TRIGGER オブジ ェ ク ト を修飾する 場合は、 テーブル名 も 含め る 必要が あ り ま す。 テ ー ブル名は、 INDEX お よ び TRIGGER オブ ジ ェ ク ト を修飾す る 場合にのみ使用で き ます。 ALTER ス テー ト メ ン ト は、ODBC が現在デー タ ベース に接続 さ れてい る か ど う かにかかわ ら ず、 そのデー タ ベース内のオブジ ェ ク ト の名前を変更で き ま す。 変更す る オブ ジ ェ ク ト が、 現在セ ッ シ ョ ン が接続 さ れて い な い デー タ ベース内にあ る 場合は、 デー タ ベース名を使っ てオブ ジ ェ ク ト の種 3-5 SQL 構文 リ フ ァ レ ン ス 類を修飾す る 必要があ り ます。 名前変更 さ れたオブジ ェ ク ト は、 同一デー タ ベース内にデー タ ベース名 と し て現れます。 修飾子のデー タ ベース名を省略す る と 、 現在セ ッ シ ョ ンが接続 さ れてい る デー タ ベース を基にオブジ ェ ク ト が識別 さ れ、 名前が変更 さ れます。 新 し いオ ブ ジ ェ ク ト 名の修飾子にデー タ ベー ス 名 を 使用 し てはい け ま せ ん。 注意 し て く だ さ い。 新 し い名前の コ ン テ キ ス ト は、 元の名前の コ ン テ キ ス ト と 常に一致 さ せます。 メ モ デー タ ベース エン ジ ンは、 名前変更 さ れたオブジ ェ ク ト の依存 関係をチ ェ ッ ク し ません。 オブジ ェ ク ト の名前を変更 し た ら 、必ず、以 前 (変更元) の名前で依存関係が設定 さ れてい る すべてのオブジ ェ ク ト を適切に修正 し て く だ さ い。 た と えば、 あ る ト リ ガが t1 と い う 名前 のテーブルを参照 し てい る と し ます。 テーブル t1 の名前を t5 に変更す る と 、 ト リ ガには正 し く 実行 さ れない不正な SQL が含まれ る こ と にな り ます。 例 次の ス テー ト メ ン ト は、 現在セ ッ シ ョ ンが接続 さ れてい る デー タ ベース に あ る イ ンデ ッ ク ス "suplid" の名前を "vendor_id" へ変更 し ます。 イ ンデ ッ ク ス が適用 さ れてい る テーブルは region5 です。 ALTER INDEX RENAME region5.suplid TO vendor_id 次の ス テー ト メ ン ト は、 デー タ ベース foodforlife にあ る ユーザー定義関数 "calbrned" の名前を "caloriesburned" へ変更 し ます。 ALTER FUNCTION RENAME foodforlife.calbrned TO caloriesburned 次の ス テー ト メ ン ト は、 デー タ ベー ス international に あ る ス ト ア ド プ ロ シージ ャ "checkstatus" の名前を "eligibility" へ変更 し ます。 ALTER PROCEDURE RENAME international.checkstatus TO eligibility 次の ス テー ト メ ン ト は、 現在セ ッ シ ョ ンが接続 さ れてい る デー タ ベース に あ る テーブル "payouts" の名前を "accts_payable" へ変更 し ます。 ALTER TABLE RENAME payouts TO accts_payable 次の ス テー ト メ ン ト は、 デー タ ベース electronics のテーブル domestic にあ る ト リ ガ "testtrig3" の名前を "new_customer" へ変更 し ます。 ALTER TRIGGER RENAME electronics.domestic.testtrig3 TO new_customer 次の ス テー ト メ ン ト は、 現在セ ッ シ ョ ンが接続 さ れてい る デー タ ベース に あ る ビ ュ ー "suplrcds" の名前を "vendor_codes" へ変更 し ます。 ALTER VIEW RENAME suplrcds TO vendor_codes 3-6 ス テー ト メ ン ト の文法 関連項目 「CREATE FUNCTION」 (3-39 ページ) 「CREATE PROCEDURE」 (3-50 ページ) 「CREATE TABLE」 (3-62 ページ) 「CREATE TRIGGER」 (3-73 ページ) 「CREATE VIEW」 (3-76 ページ) 「psp_rename」 (6-29 ページ) 3-7 SQL 構文 リ フ ァ レ ン ス ALTER TABLE ALTER TABLE ス テー ト メ ン ト に よ り 、 テーブル定義を変更 し ます。 構文 ALTER TABLE テーブル名 [IN DICTIONARY] [USING ' パ ス名 '] [WITH REPLACE] 変更オプシ ョ ン リ ス ト テーブル名 ::= ユーザー定義名 パ ス名 ::= フ ァ イ ル名のみ、 ま たは相対パス と フ ァ イ ル名 変更オプシ ョ ン リ ス ト ::= 変更オプシ ョ ン | ( 変更オプシ ョ ン [, 変更オプ シ ョ ン ]...) 変更オプシ ョ ン ::= ADD [COLUMN] 列定義 | ADD テーブル制約定義 | ALTER [COLUMN] 列定義 | DROP [COLUMN] 列名 | DROP CONSTRAINT 制約名 | DROP PRIMARY KEY | MODIFY [COLUMN] 列定義 | PSQL_MOVE [COLUMN] 列名 TO [[PSQL_PHYSICAL] PSQL_POSITION] 新 し い列位置 | RENAME COLUMN 列名 TO 新 し い列名 列定義 ::= 列名 デー タ 型 [DEFAULT デフ ォ ル ト 値の式 ] [ 列制約定義 [ 列制 約定義 ]...[CASE (文字列) | COLLATE コ レーシ ョ ン名 ] 列名 ::= ユーザー定義名 新 し い列位置 ::= 新 し い位置を表す序数値 (正の整数値) 値は、 0 よ り 大 き く 、 テーブル内の列の総数以下でなければな り ません。 新 し い列名 ::= ユーザー定義名 デー タ 型 ::= デー タ 型名 [( 桁数 [, 小数位 ])] 桁数 ::= 整数 小数位 ::= 整数 デフ ォ ル ト 値の式 ::= デフ ォ ル ト 値の式 + デフ ォ ル ト 値の式 | デフ ォ ル ト 値の式 - デフ ォ ル ト 値の式 | デフ ォ ル ト 値の式 * デフ ォ ル ト 値の式 | デフ ォ ル ト 値の式 / デフ ォ ル ト 値の式 | デフ ォ ル ト 値の式 & デフ ォ ル ト 値の式 | デフ ォ ル ト 値の式 | デフ ォ ル ト 値の式 | デフ ォ ル ト 値の式 ^ デフ ォ ル ト 値の式 | ( デフ ォ ル ト 値の式 ) 3-8 ス テー ト メ ン ト の文法 | - デフ ォ ル ト 値の式 | + デフ ォ ル ト 値の式 | ~ デフ ォ ル ト 値の式 | ? | リ テラル | ス カ ラ 関数 | {fn ス カ ラ 関数} | USER | NULL デフ ォ ル ト の リ テ ラ ル ::= ' 文字列 ' | 数字 | {d ' 日付 リ テ ラ ル '} | {t ' 時刻 リ テ ラ ル '} | {ts ' タ イ ム ス タ ンプ リ テ ラ ル '} デフ ォ ル ト の ス カ ラ 関数 ::= USER ( ) | NULL ( ) | NOW ( ) | CURDATE ( ) | CURTIME ( ) | CURRENT_DATE ( ) | CURRENT_TIME ( ) | CURRENT_TIMESTAMP( ) | CONVERT( ) 列制約定義 ::= [CONSTRAINT 制約名 ] 列制約 制約名 ::= ユーザー定義名 列制約 ::= NOT NULL | UNIQUE | PRIMARY KEY | REFERENCES テーブル名 [( 列名 )] [ 参照ア ク シ ョ ン ] 参照ア ク シ ョ ン ::= 参照更新ア ク シ ョ ン [ 参照削除ア ク シ ョ ン ] | 参照削除ア ク シ ョ ン [ 参照更新ア ク シ ョ ン ] 参照更新ア ク シ ョ ン ::= ON UPDATE RESTRICT 参照削除ア ク シ ョ ン ::= ON DELETE CASCADE | ON DELETE RESTRICT コ レーシ ョ ン名 ::= ' 文字列 ' | ユーザー定義名 テーブル制約定義 ::= [CONSTRAINT 制約名 ] テーブル制約 テーブル制約 ::= UNIQUE ( 列名 [, 列名 ]... ) 3-9 SQL 構文 リ フ ァ レ ン ス | PRIMARY KEY ( 列名 [, 列名 ]... ) | FOREIGN KEY ( 列名 [, 列名 ]) REFERENCES テーブル名 [ ( 列名 [, 列名 ]... ) ] [ 参照ア ク シ ョ ン ] 備考 主キーお よ び外部キー と 参照整合性に関す る 情報につい ては、 CREATE TABLE を参照 し て く だ さ い。 ALTER TABLE では、 テーブルが排他 ロ ッ ク さ れて い る 必要が あ り ま す。 別の ス テー ト メ ン ト に よ り 同 じ テーブルが開いてい る と 、 ALTER TABLE は失敗 し て ス テー タ ス コ ー ド 88 を返 し ます。 デー タ 操作ス テー ト メ ン ト を実行す る 前に、 すべてのデー タ 定義ス テー ト メ ン ト を実行 し ておいて く だ さ い。 こ れを示す例は、 「PSQL_MOVE」 (3-16 ページ) を参照 し て く だ さ い。 IN DICTIONARY こ のキー ワー ド を使用す る 目的は、 基 と な る 物理デー タ は変更 し ない ま ま で DDF に変更を加え たい こ と を、 デー タ ベース エン ジ ンに通知す る こ と です。 IN DICTIONARY は非常に強力で高度な機能です。 こ れは、 シ ス テ ム管理者に よ っ てのみ、 も し く は絶対的に必要な場合にのみ使用 し て く だ さ い。 通常、 Pervasive PSQL は DDF と デー タ フ ァ イ ルの完全な同期を保 ち ますが、 こ の機能に よ り 、 ユーザーは柔軟にテーブルの辞書定義を既存 のデー タ フ ァ イ ルに合致 さ せ る こ と が可能にな り ま す。 こ の キー ワ ー ド は、 既存のデー タ フ ァ イ ル と 合致する 定義を辞書内に作成 し たい場合、 あ る いは USING 句を使っ てテーブルのデー タ フ ァ イ ル パ ス名を変更 し たい 場合に有用です。 こ のキー ワー ド をバ ウ ン ド デー タ ベース で使 う こ と はで き ません。 IN DICTIONARY は ALTER TABLE に 加 え、 CREATE お よ び DROP TABLE で使用で き ます。 IN DICTIONARY は、 ど の CREATE/ALTER オプ シ ョ ンが指定 さ れてい よ う と 、 辞書エ ン ト リ にのみ影響 し ます。 Pervasive PSQL では複数のオプ シ ョ ン (ADD、 DROP、 ADD CONSTRAINT な ど の あ ら ゆ る 組み合わせ) が許可 さ れ る こ と か ら 、 IN DICTIONARY は、 DDF だけが ス キーマの変更に よ っ て影響を受け る こ と を保証す る ために、 すべ ての状況下で優先 さ れます。 3-10 ス テー ト メ ン ト の文法 DDF のみが存在す る (デー タ フ ァ イ ルは存在 し ない) テーブルは、「デ タ ッ チ さ れた」 エン ト リ と 呼ばれます。 こ れ ら のテーブルには、 ク エ リ や基 と な る 物理フ ァ イ ルを開 こ う と す る その他の操作を介 し て ア ク セ ス で き ませ ん。 こ の こ と か ら 、 IN DICTIONARY が DROP TABLE に追加 さ れま し た。 こ れは、 CREATE TABLE を使っ てデ タ ッ チ さ れたエン ト リ の作成が可能 にな っ たためです。 デ タ ッ チ さ れた テーブルま たは存在 し ないテーブルを照会す る と 、 " テー ブルが見つか り ません " と い う エ ラ ーにな り ます。 テーブルの存在を確認 し たに も かかわ ら ず " テーブルが見つか り ません " エ ラ ーを受け取っ た場 合、 こ のエ ラ ーはデー タ フ ァ イ ルを開けなか っ た こ と が原因で発生 し てい ます。 こ れはデ タ ッ チ さ れたテーブルを示 し ます。 テーブルが実際に存在す る か ど う かは、 SQLTables を使用す る か、 X$File の Xf$Name 列に直接 ク エ リ を実行す る こ と に よ り 確認で き ます。 SELECT * FROM X$File WHERE Xf$Name = ' テーブル名 ' デ タ ッ チ さ れ た テ ー ブ ル の 場 合 は 混 乱 を 招 く 可 能 性 が あ る の で、 IN DICTIONARY 機能は非常に注意 し て使用 し なければな り ません。テーブル 定義を物理フ ァ イ ル と 合致 さ せ る ために使用す る も のであ り 、 テーブル定 義のデ タ ッ チに使用 し てはな ら ない と い う こ と が き わめて重要です。 次の 例 で、 test123.btr フ ァ イ ル は 存在 し な い と 仮定 し て 考 え て み ま し ょ う (USING は次のサブ ト ピ ッ ク で説明 さ れてい ます)。 CREATE TABLE t1 USING 't1.btr' (c1 INT) ALTER TABLE t1 IN DICTIONARY USING 'test123.btr' ま たは、 両方の ス テー ト メ ン ト を組み合わせ る と 次の よ う にな り ます。 CREATE TABLE t1 IN DICTIONARY USING 'test123.btr' (c1 INT) その後 SELECT from t1 を実行す る と 、 テーブルが見つか ら なか っ た と い う エ ラ ーが返 さ れます。 テーブルを作成 し ただけであ っ て、 ど の よ う に し て も それを見つけ る こ と がで き ないので、 混乱が生 じ る こ と があ り ま す。 ま た、IN DICTIONARY を指定 し ないでテーブルを DROP し よ う と す る と 、 同様のエ ラ ーが返 さ れます。 こ れ ら のエ ラ ーは、 テーブルに関連付け ら れ たデー タ フ ァ イ ルが存在 し ない こ と が原因で発生 し ます。 既存の Btrieve デー タ フ ァ イ ルに対 し て リ レーシ ョ ナル イ ンデ ッ ク ス定義 を 作 成 す る (た と え ば、 ALTER TABLE ス テ ー ト メ ン ト を 発行 し て IDENTITY 型の列定義を追加す る ) たびに、 Pervasive PSQL はその フ ァ イ ルに定義 さ れてい る Btrieve イ ンデ ッ ク ス を自動的にチ ェ ッ ク し 、 既存の Btrieve イ ン デ ッ ク ス が リ レ ーシ ョ ナル イ ン デ ッ ク ス 定義に必要な パ ラ メ ー タ のセ ッ ト を提供 し てい る か ど う か を判定 し ます。既存の Btrieve イ ン デ ッ ク ス と 作成す る 新 し い定義が一致す る 場合は、 リ レ ーシ ョ ナル イ ン デ ッ ク ス 定義 と 既存の Btrieve イ ンデ ッ ク ス の間に関連付けが作成 さ れ ま す。 一致する イ ンデ ッ ク ス がない場合は、Pervasive PSQL は新 し い イ ンデ ッ ク ス定義を作成 し 、IN DICTIONARY が指定 さ れていなければ、デー タ フ ァ イ ルに新 し い イ ンデ ッ ク ス を作成 し ます。 3-11 SQL 構文 リ フ ァ レ ン ス USING USING キ ー ワ ー ド を 使用す る と 、 特定 の デー タ フ ァ イ ル を CREATE TABLE ま たは ALTER TABLE ア ク シ ョ ン と 関連付け る こ と がで き ます。 Pervasive PSQL は接続に名前付 き デー タ ベース を必要 と す る ので、 指定す る パス名は常に単純な フ ァ イ ル名であ る か、 ま たは相対パ ス と フ ァ イ ル名 でなければな り ません。 パ スは常に、 接続す る 名前付 き デー タ ベース に指 定 さ れた最初のデー タ パ ス と の相対にな り ます。 渡 さ れたパス名お よ びフ ァ イ ル名は、 SQLPrepare が呼び出 さ れ る と き に部 分的に検証 さ れます。 パ ス名を指定す る と き は、 次の規則に従 う 必要があ り ます。 テ キ ス ト は、 文法定義で示 さ れてい る よ う に、 一重引用符で囲ま なけれ ばな り ません。 テ キ ス ト の長 さ は、指定 さ れたエン ト リ が X$File 内の Xf$Loc に収ま る よ う に、 1 か ら 64 文字ま ででなければな り ません。 エ ン ト リ は入力 し た ま ま正確に Xf$Loc に格納 さ れます (ただ し 、 後続の空白は切 り 捨て ら れ、 無視 さ れます)。 パ ス は、 単純 な 相対パ ス で な け れば な り ま せん。 サーバー ま た は ボ リ ュ ーム を参照す る パ スは許可 さ れません。 1 つの ピ リ オ ド ("." は現在のデ ィ レ ク ト リ )、 2 つの ピ リ オ ド (".." は親 デ ィ レ ク ト リ )、 円記号 "\"、 あ る いは こ れ ら 3 つのあ ら ゆ る 組み合わせ を含む相対パス を使用で き ます。 パス は、SQL テーブル名を表すフ ァ イ ル名を含んでい る 必要があ り ます (パ ス名は円記号 "\" ま たはデ ィ レ ク ト リ 名で終わっ てはいけ ません) 。 フ ァ イ ル名は、 相対パ ス付 き で指定 さ れた フ ァ イ ル名 も 含めてすべて、名前付 き デー タ ベース の設定で定義 さ れてい る 最初のデー タ パ ス と の相対にな り ます。 ルー ト ベース の相対パ ス も 使用で き ます。 た と えば、 最初のデー タ パ ス を D:\PVSW\DEMODATA と し た場合、 Pervasive PSQL は次の ス テー ト メ ン ト 内のパス名を D:\TEMP\TEST123.BTR と 解釈 し ます。 CREATE TABLE t1 USING '\temp\test123.btr' (c1 int) 3-12 相対パス内の円記号 ("\") 文字は、 好みに応 じ て、 LINUX ス タ イ ル ("/ ") と 通常使われ る 円記号 ("\") の ど ち ら を指定 し て も か ま い ま せん。 必要で あ れば、 2 種類の記号 を 混在 さ せて使用す る こ と も で き ま す。 デ ィ レ ク ト リ 構造ス キーマは知っ てい る か も し れませんが、接続 さ れて い る サーバーの種類を知っ てい る (あ る いは管理 し てい る ) と は限 ら な いので、こ れは便利な機能です。 パ ス は入力 し た と お り に X$File に格納 さ れます。 Pervasive PSQL エ ン ジ ンは、 パ ス を利用 し て フ ァ イ ルを開 く 際、 円記号文字を適切なプ ラ ッ ト フ ォ ーム の タ イ プに変換 し ま す。 ま た、 デー タ フ ァ イ ルはサポー ト さ れ る すべてのプ ラ ッ ト フ ォ ーム間で バ イ ナ リ 互換性を共有す る ため、デ ィ レ ク ト リ 構造がプ ラ ッ ト フ ォーム 間で同一であ る (お よ び、 パ ス に基づ く フ ァ イ ル名が相対パ ス で指定 さ ス テー ト メ ン ト の文法 れてい る ) 限 り は、 デー タ ベース フ ァ イ ルお よ び DDF を こ れ ら に変更 を加え る こ と な く 、あ る プ ラ ッ ト フ ォームか ら 別のプ ラ ッ ト フ ォームへ 移動する こ と がで き ます。 こ れは、 複数のプ ラ ッ ト フ ォームに ま たがっ て、 標準化 さ れたデー タ ベー ス ス キーマ を よ り 簡単に配置す る のに役 立ち ます。 相対パス を指定す る 場合、 まず USING 句のデ ィ レ ク ト リ 構造は存在 し てい る 必要があ り ます。Pervasive PSQL は、USING 句で指定 さ れたパ ス 条件を満たすデ ィ レ ク ト リ を作成 し ません。 USING 句を使用 し て、 既存のテーブル と 関連付け る 既存デー タ フ ァ イ ル の物理 ロ ケーシ ョ ン と 名前を指定 し ます。 USING 句では ま た、 既存の辞書 定義を使用 し て、特定の ロ ケーシ ョ ンに新 し いデー タ フ ァ イ ルを作成す る こ と がで き ま す (USING 句に指定 し た文字列は、 X$File 辞書フ ァ イ ルの Xf$Loc 列に格納 さ れます)。 新 し い フ ァ イ ルを作成す る と き 、 フ ァ イ ル情 報のい く つか を元のデー タ フ ァ イ ルか ら 取得す る 必要が あ る ので、 元の デー タ フ ァ イ ルは使用可能でなければな り ません。 DEMODATA サンプル デー タ ベース では、Person テーブルは PERSON.MKD フ ァ イ ル と 関連付け ら れて い ま す。 PERSON2.MKD と い う 名前の新 し い フ ァ イ ルを作成す る 場合、 次の例の ス テー ト メ ン ト は、 Person テーブルが 新 し い フ ァ イ ル と 関連付け ら れ る よ う 、 Person テーブルの辞書定義を変更 し ます。 ALTER TABLE Person IN DICTIONARY USING 'person2.mkd' USING 句には単純な フ ァ イ ル名か相対パ ス のいずれか を使用 し な ければ な り ません。相対パス を指定 し た場合、Pervasive PSQL はそのパ ス を、デー タ ベー ス名 と 関連付け ら れてい る 最初のデー タ フ ァ イ ル パ ス と の相対 と 解釈 し ます。 USING 句は、ALTER TABLE のほかの標準オプシ ョ ンに加えて指定す る こ と がで き ま す。 こ れは、 USING パ ス を指定す る ス テー ト メ ン ト と 同 じ ス テー ト メ ン ト 内で列を操作で き る と い う こ と です。 テーブル デー タ を格納す る ために現在使用 し てい る デー タ フ ァ イ ル名 と 異な る デー タ フ ァ イ ル名を指定す る と 、 Pervasive PSQL は新 し い フ ァ イ ル を作成 し 、 既存 フ ァ イ ルのデー タ をすべて新規 フ ァ イ ルに コ ピー し ま す。 た と えば、 Person テーブルのデー タ を保持 し てい る 現在のデー タ フ ァ イ ル は person.mkd であ る と 仮定 し ます。 上記の ス テー ト メ ン ト で示 さ れ る よ う に、 person2.mkd フ ァ イ ル を 使用す る よ う Person テーブル を 変更 し ま す。 person.mkd の 内 容 が person2.mkd に コ ピ ー さ れ ま す。 そ う す る と 、 person2.mkd が Person テーブル と 関連付け ら れたデー タ フ ァ イ ル と な り 、 デー タ ベース操作は person2.mkd に作用 し ま す。 person.mkd は削除 さ れ ま せんが、 デー タ ベース には も う 関連付け ら れな く な り ます。 デー タ を コ ピーす る のは、 Pervasive PSQL では、 USING と 同時にそれ以外 のすべての ALTER TABLE オプシ ョ ン を指定で き る ためです。作成 さ れた 3-13 SQL 構文 リ フ ァ レ ン ス 新 し いデー タ フ ァ イ ルには、既存テーブルのデー タ が完全に読み込まれ る 必要があ り ます。 フ ァ イ ル構造は単純に コ ピー さ れ る のではな く 、 内容全 体が移行 さ れ ま す。 こ れは、 Btrieve の BUTIL -CREATE と BUTIL -COPY を実行す る のに似てい ます。 こ の こ と は、 SQL テーブルを再構築 し た り 、 以前は多数の レ コ ー ド を格納 し ていたが現在は少数の レ コ ー ド し か格納 し ていない フ ァ イ ルを圧縮 し た り す る のに役立ち ます。 メ モ ALTER TABLE USING は、 既存のデー タ フ ァ イ ルの内容を新 し く 指定 さ れたデー タ フ ァ イ ルに コ ピー し 、古いデー タ フ ァ イ ルは元の ま ま、 ただ し リ ン ク は解除 し て残 し てお き ます。 WITH REPLACE WITH REPLACE が USING キー ワ ー ド と 共に指定 さ れた と き はいつで も 、 Pervasive PSQL は自動的に既存の フ ァ イ ル名を指定 さ れた フ ァ イ ル名で上 書 き し ます。 オペレーテ ィ ン グ シ ス テ ムが フ ァ イ ルの上書 き を許 し てい る 限 り 、 既存フ ァ イ ルは常に上書 き さ れます。 WITH REPLACE はデー タ フ ァ イ ルにのみ作用 し 、DDF には作用 し ません。 WITH REPLACE を使用する 際には次の規則が適用 さ れます。 WITH REPLACE は USING と 併せてのみ使用で き ます。 IN DICTIONARY と 一緒に使用す る と 、 WITH REPLACE は無視 さ れま す。 IN DICTIONARY は DDF にのみ作用す る こ と を指定す る も のだか ら です。 メ モ ALTER TABLE で WITH REPLACE を使用 し て も 、 デー タ は消 失 し た り 破棄 さ れません。 新 し く 作成 さ れたデー タ フ ァ イ ルは、 既存 フ ァ イ ルを上書 き し た フ ァ イ ルであ っ て も 、 以前の フ ァ イ ルのデー タ をすべて含んでい ます。 ALTER TABLE コ マ ン ド を使用す る こ と で、 デー タ を失 う こ と はあ り ません。 Pervasive PSQL に既存 フ ァ イ ル (フ ァ イ ルは、 USING 句で指定 さ れた ロ ケ ー シ ョ ン に な け れ ば な り ま せ ん) を 置 き 換 え る よ う 指示す る に は、 USING 句で WITH REPLACE を使用 し ます。 WITH REPLACE を使用す る と 、 Pervasive PSQL は新 し い フ ァ イ ルを作成 し 、 既存フ ァ イ ルのデー タ を すべて新規フ ァ イ ルに コ ピー し ま す。 WITH REPLACE を使用 し ていない と き 、 指定 さ れた ロ ケーシ ョ ン に フ ァ イ ルが存在す る と 、 Pervasive PSQL は ス テー タ ス コ ー ド を返 し 、 新 し い フ ァ イ ルを作成 し ません。 ス テー タ ス コ ー ド はエ ラ ー -4940 です。 MODIFY COLUMN と ALTER COLUMN 3-14 ス テー ト メ ン ト の文法 列のデー タ 型やヌ ル値を許可す る か ど う か を変更す る 機能は、 次の制約を 受け ます。 タ ーゲ ッ ト 列では、 PRIMARY/FOREIGN KEY 制約を定義す る こ と はで き ません。 旧デー タ 型を新 し いデー タ 型に変換す る こ と に よ っ て (演算ま たはサ イ ズの) オーバーフ ロ ーが発生する 場合、 ALTER TABLE 操作は中止 さ れ ます。 ヌ ル値を許可す る 列が ヌ ル値を含む場合、その列を ヌ ル値を許可 し ない 列に変更す る こ と はで き ません。 キー列のデー タ 型を変更す る 必要があ る 場合は、 キーを削除 し 、 デー タ 型 を変更 し てか ら 再びキーを追加す る こ と に よ り 実現で き ます。 関連す る す べてのキー列の同期が と れてい る よ う に し なければな ら ない、 と い う こ と に留意 し て く だ さ い。 た と えば、 テーブル T1 に主キーがあ り 、 こ のキー がテーブル T2 お よ び T3 の外部キーに よ っ て参照 さ れ る 場合は、 まず外部 キーを削除 し なければな り ません。 外部キーを削除 し た後で、 主キーを削 除す る こ と がで き ます。 次に、 3 つの列をすべて同 じ デー タ 型に変更す る 必要があ り ます。 最後に、 主キーを再び追加 し てか ら 、 外部キーを追加 し ます。 ANSI 標準には ALTER キー ワ ー ド が含 ま れてい ま す。 Pervasive PSQL で は、ALTER TABLE ス テー ト メ ン ト で ALTER と MODIFY の ど ち ら のキー ワー ド も 使用で き ます。 ALTER ALTER ALTER ALTER TABLE TABLE TABLE TABLE t1 t1 t1 t1 MODIFY c1 INTEGER ALTER c1 INTEGER MODIFY COLUMN c1 INTEGER ALTER COLUMN c1 INTEGER Pervasive PSQL では、 実際のデー タ が、 列の長 さ を小 さ く し た新 し い列で オーバーフ ロ ー し ないのであれば、列の長 さ を小 さ く す る こ と がで き ます。 こ の動作は、 Microsoft SQL Server の動作に似てい ます。 1 つの ALTER TABLE ス テー ト メ ン ト で、 複数の列を追加、 削除、 ま たは 変更す る こ と がで き ます。 こ れは操作を簡略化 し ますが、 こ の動作は ANSI 互換 と みな さ れません。 次に、 複数列の ALTER ス テー ト メ ン ト の例を示 し ます。 ALTER TABLE t1 (ALTER c2 INT, ADD D1 CHAR(20), DROP C4, ALTER C5 LONGVARCHAR, ADD D2 LONGVARCHAR NOT NULL) 旧デー タ 型 (Pervasive.SQL v7 以前) をすべて、 Pervasive PSQL v9 でサポー ト さ れてい る ネ イ テ ィ ブなデー タ 型に変換で き ます。 し か し 、 逆に新デー タ 型を旧デー タ 型に変換す る こ と はで き ません。 NOTE/LVAR 列を持つ古いテーブルに LONGVARCHAR/LONGVARBINARY 列 を 追 加 す る に は、 ま ず、 NOTE/LVAR 列 を LONGVARCHAR ま た は LONGVARBINARY 列 に 変換 し な け れば な り ま せ ん。 NOTE/LVAR 列 を 3-15 SQL 構文 リ フ ァ レ ン ス LONGVARCHAR/LONGVARBINARY に変換 し た ら 、 テーブルにそれ以外 の LONGVARCHAR/LONGVARBINARY 列を追加で き ます。 古いエン ジ ン では、 テーブル当た り 1 つの可変長列 し か扱 う こ と がで き ないため、 前述 の新 し い テーブル を使 っ て作業す る こ と はで き な いので注意 し て く だ さ い。 PSQL_MOVE PSQL_MOVE 構文を使用す る と 、 テーブルの列を希望す る 位置に保持す る こ と がで き ます。 既存の列や、 追加 さ れた新 し い列の位置を変更 し たい場 合があ り ます。 列を論理的お よ び物理的に移動 さ せ る こ と がで き ます。 移動の種類 結果 論理的 結果セ ッ ト に リ ス ト さ れ る 列の位置は変わ り ま すが、 テーブ ル内の列の物理的順序は変わ り ません。 た と えば、 "SELECT * FROM テーブル名 " の よ う な ク エ リ で生成 さ れ る 結果セ ッ ト に お け る 列 の 配 置 方 法 を 変 更 で き ま す。 論 理 的 移 動 は、 "SELECT * FROM テーブル名 " の よ う な、 列を列挙す る ク エ リ にのみ影響を及ぼ し ます。 物理的 列は、 フ ァ イ ル内の現在位置か ら 新 し い位置へ物理的に移動 さ れます。 物理的移動は、テーブルのデー タ フ ァ イ ルに影響を 及ぼ し ます。 列を物理的に移動す る 場合は、 PSQL_PHYSICAL キ ー ワ ー ド を 指 定 す る 必 要 が あ り ま す。 PSQL_PHYSICAL キー ワ ー ド を省略す る と 、 デ フ ォ ル ト で論理的移動が生 じ ま す。 ALTER TABLE ス テー ト メ ン ト で IN DICTIONARY が使用 さ れ てい る 場合は、 DDF 内の列のオ フ セ ッ ト のみが変更 さ れ る の で 注 意 し て く だ さ い。 デ ー タ フ ァ イ ル に 対 し 、 MOVE ... PSQL_PHYSICAL よ り IN DICTIONARY が 優先 さ れ る た め、 デー タ フ ァ イ ル内の列は物理的に移動 さ れません。 メ モ 一度列を論理的に移動 し た ら 、 その並び順が結果セ ッ ト におけ る 列のデフ ォ ル ト の列挙順にな り ます。 た と えば、 列を論理的に移動 さ せた後で物理的に移動 さ せた場合、 "SELECT * FROM テーブル名 " の よ う な ク エ リ では、 論理順が使用 さ れます。 PSQL_MOVE キーワー ド には、 ゼ ロ よ り 大き く 、 列の総数 よ り も 小 さ い値 で列の位置を指定す る 必要があ り ます。 た と えば、 テーブル t1 には col1 と col2 の 2 つの列だけが あ る と し ま す。 次の ス テー ト メ ン ト は ど ち ら も エ ラ ーを返 し ます。 ALTER TABLE t1 PSQL_MOVE col1 to 0 ALTER TABLE t1 PSQL_MOVE col1 to 3 3-16 ス テー ト メ ン ト の文法 最初の ス テー ト メ ン ト は列を位置 0 へ移動 し よ う と し てい ます。 2 番目の ス テー ト メ ン ト は列を位置 3 へ移動 し よ う と し てい ますが、 こ れは列の総 数であ る 2 よ り も 大き い数値です。 ALTER TABLE では、 テーブルが排他 ロ ッ ク さ れて い る 必要が あ り ま す。 別の ス テー ト メ ン ト に よ り 同 じ テーブルが開いてい る と 、 ALTER TABLE は失敗 し て ス テー タ ス コ ー ド 88 を返 し ます。 デー タ 操作ス テー ト メ ン ト を実行す る 前に、 すべてのデー タ 定義ス テー ト メ ン ト を実行 し ておいて く だ さ い。 た と えば、次の ス ト ア ド プ ロ シージ ャ では、INSERT ス テー ト メ ン ト がテー ブル t1 を 開い て い る こ と に よ り 、 ALTER TABLE ス テー ト メ ン ト が排他 ロ ッ ク を取得で き ないため、 実行が失敗 し 、 ス テー タ ス コ ー ド 88 が返 さ れます。 CREATE PROCEDURE proc1() AS BEGIN CREATE TABLE t1(c1 INT,c2 INT,c3 INT); INSERT INTO t1 VALUES (123,345,678); ALTER TABLE t1 PSQL_MOVE c3 to 1; END; こ れ を 解決す る 方法は、 最初に テーブル作成 と デー タ 挿入に関連す る ス テー ト メ ン ト を実行 し てか ら 、 プ ロ シージ ャ を呼び出す こ と です。 CREATE TABLE t1(c1 INT,c2 INT,c3 INT); INSERT INTO t1 VALUES (123,345,678); CALL proc1; CREATE PROCEDURE proc1() AS BEGIN ALTER TABLE t1 PSQL_MOVE c3 to 1; END; RENAME COLUMN RENAME COLUMN を使用す る と 、 列の名前を別の名前に変更で き ま す。 既存の列名に変更す る こ と はで き ません。 列名を変更す る こ と に よ り 、 以前の名前を参照 し てい る オブジ ェ ク ト が無 効にな る 場合があ り ます。 た と えば、あ る ト リ ガがテーブル t1 の列 c1 を参 照 し てい る と し ます。 列名を c1 か ら c5 に変更す る と 、 ト リ ガは正常に実 行で き な く な り ます。 メ モ デー タ ベー ス エ ン ジ ン は、 名前変更 さ れ た 列 の 依存関係 を チ ェ ッ ク し ません。 列の名前を変更 し た ら 、 必ず、 以前 (変更元) の 名前で依存関係が設定 さ れてい る すべてのオブジ ェ ク ト を適切に修正 し て く だ さ い。 3-17 SQL 構文 リ フ ァ レ ン ス ON DELETE CASCADE 「CREATE TABLE」 の 「削除規則」 (3-65 ページ) を参照 し て く だ さ い。 例 次の ス テー ト メ ン ト に よ っ て、 Emergency_Phone 列が Person テーブルに追 加 さ れます。 ALTER TABLE person ADD Emergency_Phone NUMERIC(10,0) 次の ス テー ト メ ン ト に よ っ て、 col1 と col2 の 2 つの整数列が Class テーブ ルに追加 さ れます。 ALTER TABLE class(ADD col1 INT, ADD col2 INT) テーブル定義か ら 列 を 削除す る には、 DROP 句内に列の名前 を 指定 し ま す。 次の ス テー ト メ ン ト に よ っ て、 Emergency_Phone 列が Person テーブル か ら 削除 さ れます。 ALTER TABLE person DROP Emergency_Phone 次の ス テー ト メ ン ト に よ っ て、 Class テーブルか ら col1 と col2 が削除 さ れ ます。 ALTER TABLE class(DROP col1, DROP col2) 次の ス テー ト メ ン ト に よ っ て、 Faculty テーブル内の制約 c1 が削除 さ れま す。 ALTER TABLE Faculty(DROP CONSTRAINT c1) こ の例では、 Class テーブルに整数列 col3 が追加 さ れ、 列 col2 が削除 さ れ ます。 ALTER TABLE class(ADD col3 INT, DROP col2) 次の例では、Faculty テーブル内の ID フ ィ ール ド に c1 と い う 名前の主キー が作成 さ れます。 ヌ ル値を許可す る 列には主キーを作成で き ない こ と に注 意 し て く だ さ い。 作成 し よ う と す る と 、 " ヌ ル値を許可す る 列は、 主キー では使用で き ません " と い う エ ラ ーが発生 し ます。 ALTER TABLE Faculty(ADD CONSTRAINT c1 PRIMARY KEY(ID)) 次の例では、 Faculty テーブル内に主キー PK_ID が作成 さ れます。 ALTER TABLE Faculty(ADD PRIMARY KEY(ID)) 次の例では、 制約 UNIQUE が列 col1 と col2 に追加 さ れます。 ALTER TABLE Class(ADD UNIQUE(col1,col2)) 3-18 ス テー ト メ ン ト の文法 次の例では、 Faculty テーブル内の主キーが削除 さ れます。 テーブルに複数 の主キーがあ っ てはな ら ないので、 既に主キーが定義 さ れてい る テーブル に主キーを追加す る こ と はで き ません。テーブルの主キーを変更す る には、 既存のキーを削除 し てか ら 新 し い主キーを追加 し ます。 ALTER TABLE Faculty(DROP PRIMARY KEY) 親テーブルか ら 主キーを削除す る には、 その前に、 従属テーブルか ら 対応 す る 外部キーをすべて削除す る 必要があ り ます。 次の例は、 Class テーブルに新規の外部キーを追加 し ます。 Faculty の ID 列 は イ ンデ ッ ク ス と し て定義 さ れてお り 、 ヌ ル値は含まれません。 ヌ ル値を 許可す る 列には外部キーを作成で き ません。 ALTER TABLE Class ADD CONSTRAINT Teacher FOREIGN KEY (Faculty_ID) REFERENCES Faculty (ID) ON DELETE RESTRICT こ の例では、 削除制限規則に よ っ て、 あ る 教職員の全講座を変更ま たは削 除せずに、 その教職員をデー タ ベース か ら 削除で き ない よ う にな っ てい ま す。 ま た、REFERENCES 句に リ ス ト さ れてい る 列 (ID) は任意であ る こ と に 注目 し て く だ さ い。 ス テー ト メ ン ト を よ り 明確にす る ために、 好みに よ っ て REFERENCES 句 に 列 の リ ス ト を 含 め る こ と が で き ま す。 た だ し 、 REFERENCES 句で参照で き る 列は参照テーブルの主キーのみです。 次の ス テー ト メ ン ト では、 上記の例で追加 し た外部キーを削除す る 方法を 示 し ます。Pervasive PSQL は従属テーブルか ら 外部キーを削除 し 、従属テー ブル と 親テーブル間の参照制約を取 り 除 き ます。 ALTER TABLE Class DROP CONSTRAINT Teacher 次の例は、 CONSTRAINT 句を使用しないで Class テーブルに外部キーを追加 します。 この場合、 外部キーの制約は内部的に生成され、 Faculty の主キー (ID) を参照するように定義されます。 REFERENCES 句にリストされている列は 任意です。 ステートメントをより明確にするために、 好みによって REFERENCES 句に列の リ ス ト を含め る こ と がで き ます。 ただ し 、REFERENCES 句で参照 で き る 列は参照テーブルの主キーのみです。 ALTER TABLE Class ADD FOREIGN KEY (Faculty_ID) REFERENCES Faculty (ID) ON DELETE RESTRICT こ れに よ り 、 外部キー FK_Faculty_ID が作成 さ れます。 外部キーを削除す る には、 CONSTRAINT キーワー ド を指定 し ます。 ALTER TABLE Class DROP CONSTRAINT FK_Faculty_ID 3-19 SQL 構文 リ フ ァ レ ン ス 次の例では、 テーブル内の制約 と 列の追加や削除が 2 回以上繰 り 返 さ れて い ます。 こ の ス テー ト メ ン ト に よ り 、 Faculty テーブル内の列 salary が削除 さ れ、 整数型の列 col1 が追加 さ れ、 制約 c1 が削除 さ れます。 ALTER TABLE Faculty(DROP salary, ADD col1 INT, DROP CONSTRAINT c1) 次の例では、 2 つ以上の列のデー タ 型が変更 さ れてい ます。 ALTER TABLE t1 (ALTER c2 INT, ADD D1 CHAR(20), DROP C4, ALTER C5 LONGVARCHAR, ADD D2 LONGVARCHAR NOT NULL) ALTER TABLE t2 (ALTER c1 CHAR(50), DROP CONSTRAINT MY_KEY, DROP PRIMARY KEY, ADD MYCOLUMN INT) 次の例では、 列オプシ ョ ンの ALTER と MODIFY を使っ て、 列のデフ ォ ル ト 値お よ びオル タ ネー ト コ レーテ ィ ン グ シーケ ン ス を設定 し た り 削除す る 方法が示 さ れてい ます。 CREATE TABLE t1 (c1 INT DEFAULT 10, c2 CHAR(10)) ALTER TABLE t1 ALTER c1 INT DEFAULT 20 -列 c1 のデフ ォ ル ト 値を 20 に再設定す る ALTER TABLE t1 ALTER c1 INT -列 c1 のデフ ォ ル ト 値を削除す る ALTER TABLE t1 ALTER c2 CHAR(10) COLLATE 'c:\pvsw\samples\upper.alt' -列 c2 のオル タ ネー ト コ レーテ ィ ン グ シーケ ン ス を設定す る ALTER TABLE t1 ALTER c2 CHAR(10) -列 c2 のオル タ ネー ト コ レーテ ィ ン グ シーケ ン ス を削除す る upper.alt は、 ソ ー ト す る 際に大文字 と 小文字を同等に扱い ます。 た と えば、 デー タ ベース に abc、 ABC、 DEF、 Def と い う 値が こ の順序で挿入 さ れてい る 場合、 upper.alt を使っ て ソ ー ト す る と 、 abc、 ABC、 DEF、 Def の よ う に 返 さ れます (値 abc と ABC、 DEF と Def は同 じ も の と 判断 さ れ、 こ れ ら は 挿入 さ れた順序で返 さ れます) 。 標準の ASCII ソ ー ト では、 大文字は小文 字の前に配列 さ れてお り 、 ソ ー ト 結果は ABC、 DEF、 Def、 abc の よ う にな り ます。 次の ス テー ト メ ン ト は、 列 Registrar_ID が結果セ ッ ト に リ ス ト さ れ る と き の位置を、 現在位置か ら 2 番目へ論理的に移動 さ せます。 ALTER TABLE Billing PSQL_MOVE Registrar_ID TO 2 次の ス テー ト メ ン ト は、 列 Amount_Owed と Amount_Paid が結果セ ッ ト に リ ス ト さ れ る と き の位置を、 それぞれ現在位置か ら 2 番目 と 3 番目へ移動 さ せます。 ALTER TABLE Billing ( PSQL_MOVE Amount_Owed TO 2, PSQL_MOVE Amount_Paid TO 3 ) 3-20 ス テー ト メ ン ト の文法 次の ス テー ト メ ン ト は、 列 Registrar_ID のデー タ フ ァ イ ル内の位置を、 現 在位置か ら 2 列目へ物理的に移動 さ せます。 ALTER TABLE Billing PSQL_MOVE Registrar_ID TO PSQL_PHYSICAL 2 次の ス テー ト メ ン ト は、 列 Amount_Owed と Amount_Paid のデー タ フ ァ イ ル内の位置を、 それぞれ現在位置か ら 2 列目 と 3 列目へ移動 さ せます。 ALTER TABLE Billing ( PSQL_MOVE Amount_Owed TO PSQL_PHYSICAL 2, PSQL_MOVE Amount_Paid TO PSQL_PHYSICAL 3 ) テーブル t1 には列 c1 と col2 があ る と し ます。 次の ス テー ト メ ン ト に よ っ て、 列 c1 の名前が c2 に変更 さ れます。 ALTER TABLE t1 RENAME COLUMN c1 TO c2 テーブル t1 には列 c1 と col2 があ る と し ます。 次の ス テー ト メ ン ト は、 列 の名前 (col2) を既存の列の名前 (c1) に変更 し よ う と す る ため、 エ ラ ー (列名が重複 し てい ます) が返 さ れます。 ALTER TABLE t1 (RENAME COLUMN c1 TO c2, RENAME COLUMN col2 TO c1) 3-21 SQL 構文 リ フ ァ レ ン ス ANY 備考 ANY キー ワ ー ド は、 ALL キー ワ ー ド と 似た働 き を持ち ま すが、 Pervasive PSQL v9 では、 サブ ク エ リ の結果テーブルの任意の行で条件が満た さ れて いた場合に比較 さ れた行が結果テーブルに含まれます。 例 次の ス テー ト メ ン ト は、Person テーブルの ID 列 と 、 サブ ク エ リ の結果テー ブルの ID 列を比較 し ます。 Person テーブルの ID 値 と 一致す る 値がサブ ク エ リ の結果テーブルの ID 値にあ る 場合、 Pervasive PSQL では、 Person テー ブルの行が SELECT ス テー ト メ ン ト の結果テーブルに含まれます。 SELECT p.ID, p.Last_Name FROM Person p WHERE p.ID = ANY (SELECT f.ID FROM Faculty f WHERE f.Dept_Name = 'Chemistry') 関連項目 「SELECT」 (3-153 ページ) 3-22 ス テー ト メ ン ト の文法 AS 備考 AS 句を使用 し て、 選択項目 ま たはテーブルに名前を割 り 当て ま す。 こ の 名前は、 ス テー ト メ ン ト のほかの場所で、 選択項目を参照す る と き に使用 で き ます。AS 句を非集計列に使用する と 、WHERE、ORDER BY、GROUP BY、HAVING の各句で名前を参照で き ます。AS 句を集計列に使用す る と 、 ORDER BY 句のみで名前を参照で き ます。 定義する名前は、 SELECT リスト内で重複しないようにする必要があります。 例 次の ス テー ト メ ン ト の AS 句は、 選択項目 SUM (Amount_Paid) に名前 Total を割 り 当て、 結果を学生ご と の合計で ソ ー ト す る よ う に Pervasive PSQL に 指示 し ます。 SELECT Student_ID, SUM (Amount_Paid) AS Total FROM Billing GROUP BY Student_ID ORDER BY Total AS キーワ ー ド は、 次の例の よ う にテーブル エ イ リ ア ス に使用す る 場合は 省略可能です。 FROM 句内で AS 句を テーブル名に使用す る と 、 WHERE、 ORDER BY、 GROUP BY、 HAVING の各句で名前を参照で き ます。 SELECT DISTINCT c.Name, p.First_Name, c.Faculty_Id FROM Person AS p, class AS c WHERE p.Id = c.Faculty_Id ORDER BY c.Faculty_Id こ の ク エ リ は次の よ う に、 FROM 句で AS 句を使用 し ない よ う 書 き 直す こ と がで き ます。 SELECT DISTINCT c.Name, p.First_Name, c.Faculty_Id FROM Person p, class c WHERE p.Id = c.Faculty_Id ORDER BY c.Faculty_Id テーブル エ イ リ ア ス を確立 し た ら 、 WHERE 句内にテーブル名 と エ イ リ ア ス が混在 し てはいけ ません。 次は動作 し ません。 SELECT DISTINCT c.Name, p.First_Name, c.Faculty_Id FROM Person p, class c WHERE Person.Id = c.Faculty_Id ORDER BY c.Faculty_Id 関連項目 「SELECT」 (3-153 ページ) 3-23 SQL 構文 リ フ ァ レ ン ス BEGIN [ATOMIC] 備考 個々の ス テー ト メ ン ト を グループに ま と め る と 、 1 つの単位 と し て扱 う こ と がで き て便利です。 BEGIN お よ び END ス テー ト メ ン ト は、 複合ス テー ト メ ン ト 内で ス テー ト メ ン ト を 1 つの単位に ま と め る た めに使用 さ れ ま す。 複合ス テー ト メ ン ト は、 ス ト ア ド プ ロ シージ ャ の本体ま たは ト リ ガ宣 言内でのみ使用で き ます。 ATOMIC は、 単位内の一連の ス テー ト メ ン ト はすべて成功す る か、 すべて 失敗す る かのいずれであ る こ と を示 し ます。 BEGIN ATOMIC ... END 単位 内の条件が 1 つで も 満た さ れない場合、 レ コ ー ド は影響を受け ません。 条 件が複数の行に影響を与え る 場合、 すべての行が影響を受け る か、 ど の行 も 影響を受け ません。 レ コ ー ド に影響を与え る ためには、BEGIN ATOMIC ... END 単位内のすべての条件が真を返す必要があ り ます。 例 次の例では、 2 つの UPDATE が ATOMIC 単位 と し て ま と め ら れてい ます。 Person テーブル内の Perm_State 列は、 ほかすべての条件が真の場合にのみ 更新 さ れます。 つま り 、 Bill Andrew の レ コ ー ド の Perm_State には "TX" が 入っ てお り 、Yvette Lopez の レ コ ー ド の Perm_State には "OR" が入っ てい る 場合です。 こ れ ら の条件のいずれかが真でない場合、 ど ち ら の レ コ ー ド も 更新 さ れません。 BEGIN ... END 単位は 1 つのプ ロ シージ ャ 内にあ る も の と し ます。 BEGIN ATOMIC UPDATE Person SET Perm_State = 'MA' WHERE Perm_State = 'TX' AND First_Name = 'Bill' AND Last_Name = 'Andrew'; UPDATE Person SET Perm_State = 'WA' WHERE Perm_State = 'OR' AND First_Name = 'Yvette' AND Last_Name = 'Lopez'; END 関連項目 「CREATE PROCEDURE」 (3-50 ページ) 「CREATE TRIGGER」 (3-73 ページ) 3-24 ス テー ト メ ン ト の文法 CALL 備考 ス ト ア ド プ ロ シージ ャ を呼び出す場合は、CALL ス テー ト メ ン ト を使用 し ます。 ス ト ア ド プ ロ シージ ャ は、 ユーザー定義の も ので も シ ス テ ム ス ト ア ド プ ロ シージ ャ で も か ま い ません。 例 次の例では、 パ ラ メ ー タ のないユーザー定義のプ ロ シージ ャ を呼び出 し ま す。 CALL NoParms() ま たは CALL NoParms 次の例では、 パ ラ メ ー タ のあ る ユーザー定義のプ ロ シージ ャ を呼び出 し ま す。 CALL Parms(vParm1, vParm2) CALL CheckMax(N.Class_ID) 次の ス テー ト メ ン ト は、 Department テーブル内のすべての列に関す る 列情 報を リ ス ト し ます。 CALL psp_columns('Demodata','Department') 関連項目 「CREATE PROCEDURE」 (3-50 ページ) 「CREATE TRIGGER」 (3-73 ページ) 「EXECUTE」 (3-102 ページ) 「シ ス テ ム ス ト ア ド プ ロ シージ ャ 」 (6-1 ページ) 3-25 SQL 構文 リ フ ァ レ ン ス CASCADE 備考 外 部 キ ー の 作 成時 に CASCADE を 指定 し た 場合、 Pervasive PSQL で DELETE CASCADE 規則が使用 さ れます。ユーザーが親テーブルの行を削 除す る と 、 Pervasive PSQL に よ っ て従属テーブルの対応す る 行が削除 さ れ ます。 DELETE CASCADE は注意 し て使用 し て く だ さ い。 Pervasive PSQL では、 自己参照す る テーブルに対 し 、 循環す る カ ス ケー ド 削除を使用で き ま す。 『Advanced Operations Guide』 の 「削除カ ス ケー ド 」 (6-5 ページ) に記載 さ れてい る 例を参照 し て く だ さ い。 関連項目 「ALTER TABLE」 (3-8 ページ) 「CREATE TABLE」 (3-62 ページ) 3-26 ス テー ト メ ン ト の文法 CASE (式) CASE 式は値を返 し ます。 CASE 式には 2 つの形式があ り ます。 単一 When/Then。 こ の形式は、 1 つの値式を一連の値式 と 比較 し て結果 を判定 し ます。 値式は、 それ ら が列挙 さ れてい る 順に評価 さ れます。 値 式が TRUE と 評価 さ れた場合、 CASE は THEN 句の値式を返 し ます。 検索 When/Then。 こ の形式は、 一連のブール式を評価 し て結果を判定 し ます。 ブール式は、 それ ら が列挙 さ れてい る 順に評価 さ れます。 ブール 式が TRUE と 評価 さ れた場合、 CASE は THEN 句の式を返 し ます。 ど ち ら の形式 も オプシ ョ ン の ELSE 引数を サポー ト し てい ま す。 ELSE 句 を使用 し ない場合は、 ELSE NULL であ る こ と を意味 し ます。 構文 単一 When/Then : CASE case 値式 WHEN when 式 THEN then 式 [...] END [ELSE else 式 ] 検索 When/Then : CASE WHEN 検索式 THEN then 式 [...] END [ELSE else 式 ] 引数 case 値式 単一 When/Then 形式の CASE で評価 さ れ る 式。 when 式 case 値式 と 比較 さ れ る 式。 case 値式 と 各 when 式のデー タ 型は同 じ であ る か、 ま たは暗黙に型変換 さ れなければな り ません。 then 式 case 式 = when 式が TRUE と 評価 さ れた場合に返 さ れ る 式。 else 式 TRUE と 評価 さ れ る 比較演算がない場合に返 さ れ る 式。 こ の引数を省略 し た場合、 TRUE と 評価 さ れ る 比較演算がなければ、 CASE は NULL を返 し ます。 3-27 SQL 構文 リ フ ァ レ ン ス 検索式 検索形式の CASE で評価 さ れ る ブール式。 検索式には、 有効なブール式で あればど の よ う な式で も 指定で き ます。 備考 CASE 式 は SELECT ス テ ー ト メ ン ト 内 で 使用す る 必要 が あ り ま す。 SELECT ス テー ト メ ン ト は ス ト ア ド プ ロ シージ ャ やビ ュ ー内に記述で き ます。 例 次の ス テー ト メ ン ト は、 単一 When/Then 形式を使っ て、 Course テーブルに リ ス ト さ れてい る 美術講座の必須条件を レ ポー ト し ます。 SELECT name 'Course ID', description 'Course Title', CASE name WHEN 'Art 101' THEN 'None' WHEN 'Art 102' THEN 'Art 101 or instructor approval' WHEN 'Art 203' THEN 'Art 102' WHEN 'Art 204' THEN 'Art 203' WHEN 'Art 305' THEN 'Art 101' WHEN 'Art 406' THEN 'None' WHEN 'Art 407' THEN 'Art 305' END AS 'Prerequisites' FROM "Course" WHERE Dept_Name = 'Art' ORDER BY name こ の ク エ リ に よ っ て次の一覧が返 さ れます。 3-28 Course ID Course Title Prerequisites Art 101 Drawing I None Art 102 Drawing II Art 101 or instructor approval Art 203 Drawing III Art 102 Art 204 Drawing IV Art 203 Art 305 Sculpture Art 101 Art 406 Modern Art None Art 407 Baroque Art Art 305 ス テー ト メ ン ト の文法 前の ス テー ト メ ン ト に ELSE 句を含め る よ う に変更で き ます。 SELECT name 'Course ID', description 'Course Title', CASE name WHEN 'Art 101' THEN 'None' WHEN 'Art 102' THEN 'Art 101 or instructor approval' WHEN 'Art 203' THEN 'Art 102' WHEN 'Art 204' THEN 'Art 203' WHEN 'Art 305' THEN 'Art 101' ELSE 'Curriculum plan for Art History majors' END AS 'Prerequisites' FROM "Course" WHERE Dept_Name = 'Art' ORDER BY name こ の ク エ リ に よ っ て今度は次の一覧が返 さ れます。 Course ID Course Title Prerequisites Art 101 Drawing I None Art 102 Drawing II Art 101 or instructor approval Art 203 Drawing III Art 102 Art 204 Drawing IV Art 203 Art 305 Sculpture Art 101 Art 406 Modern Art Curriculum plan for Art History majors Art 407 Baroque Art Curriculum plan for Art History majors 次の ス テー ト メ ン ト では検索 When/Then 形式を使っ て、 個人別に資格のあ る 奨学金プ ロ グ ラ ム を レ ポー ト し ます。 SELECT last_name, first_name, CASE WHEN scholarship = 1 THEN 'Scholastic' WHEN citizenship <> 'United States' THEN 'Foreign Study' WHEN (date_of_birth >= '1960-01-01' AND date_of_birth <= '1970-01-01') THEN 'AJ-44 Funds' ELSE 'NONE' END AS 'Funding Program' FROM "Person" ORDER BY last_name 3-29 SQL 構文 リ フ ァ レ ン ス 以下に、 こ の ク エ リ に よ っ て返 さ れ る 一覧の一部を示 し ます。 Last_Name First_Name Funding Program Abad Alicia Scholastic Abaecherli David Scholastic Abebe Marta Foreign Study Abel James Scholastic Abgoon Bahram Foreign Study Abken Richard None Abu Austin Foreign Study Abuali Ibrahim AJ-44 Funds Acabbo Joseph Scholastic Acar Dennis Foreign Study 次の例は、 ストアド プロシージャ内で CASE 式を使用する方法を示します。 CREATE PROCEDURE pcasetest () RETURNS (d1 CHAR(10), CHAR(10)); BEGIN SELECT c1, CASE WHEN c1 = 1 THEN c4 WHEN c1 = 2 THEN c5 ELSE CASE WHEN c2 = 100.22 THEN c4 WHEN c2 = 101.22 THEN c5 END END FROM tcasetest; END CALL pcasetest 次の例は、 ビ ュ ー内で CASE 式を使用する 方法を示 し ます。 CREATE VIEW vcasetest (vc1, vc2) AS SELECT c1, CASE WHEN c1 = 1 THEN c4 WHEN c1 = 2 THEN c5 ELSE CASE WHEN c2 = 100.22 THEN c4 WHEN c2 = 101.22 THEN c5 END END FROM TCASEWHEN SELECT * FROM vcasetest 3-30 d2 ス テー ト メ ン ト の文法 関連項目 「COALESCE」 (3-34 ページ) 「SELECT」 (3-153 ページ) 3-31 SQL 構文 リ フ ァ レ ン ス CASE (文字列) 備考 CASE キー ワ ー ド は、 文字列型の列を対象 と す る 制限句を評価す る と き 、 Pervasive PSQL に大文字小文字を無視 さ せます。 た と えば、 Name と い う 名前の列があ り 、 CASE 属性付 き で定義 さ れてい る と し ます。Name = 'Smith' と Name = 'SMITH' を使っ て 2 行挿入 し た場合、 制限に Name = 'smith' と 指定 し た ク エ リ では、 両方の列が正 し く 返 さ れ ま す。 例 次の例は、CASE キーワー ド を使っ て Student テーブルに列を追加す る 方法 を示 し ます。 ALTER TABLE Student ADD Name char(64) CASE 次の例は、 CASE キーワー ド を使っ て列を変更す る 方法を示 し ます。 ALTER TABLE Student MODIFY Name char(64) CASE 関連項目 「ALTER TABLE」 (3-8 ページ) 「SELECT」 (3-153 ページ) 3-32 ス テー ト メ ン ト の文法 CLOSE 備考 CLOSE ス テー ト メ ン ト に よ り 、 オープン し てい る SQL カー ソ ルを ク ロ ー ズ し ます。 カー ソ ル名が示すカー ソ ルはオープン し てい る 必要があ り ます。 カー ソ ル と 変数は ス ト ア ド プ ロ シージ ャ と ト リ ガ内部でのみ許可 さ れ る ため、 こ の ス テー ト メ ン ト は ス ト ア ド プ ロ シージ ャ ま たは ト リ ガの内部で のみ使用で き ます。 構文 CLOSE カー ソ ル名 例 次の例では、 カー ソ ル BTUCursor が ク ロ ーズ し ます。 CLOSE BTUCursor; CREATE PROCEDURE MyProc(IN :CourseName CHAR(7)) AS BEGIN DECLARE cursor1 CURSOR FOR SELECT Degree, Residency, Cost_Per_Credit FROM Tuition ORDER BY ID; ......... ......... FETCH cursor1 INTO :CourseName; ......... CLOSE cursor1; ......... END 関連項目 「OPEN」 (3-137 ページ) 「CREATE PROCEDURE」 (3-50 ページ) 「CREATE TRIGGER」 (3-73 ページ) 3-33 SQL 構文 リ フ ァ レ ン ス COALESCE COALESCE ス カ ラ 関数は 2 つ以上の引数を取 り 、その式 リ ス ト を左か ら 調 べて最初の非 ヌ ル引数を返 し ます。 構文 COALESCE ( 式 , 式 [, 式 ...]) 引数 式 任意の有効な式 戻 り 値の型 COALESCE 関数は、 式 リ ス ト 内のいずれかの式の値を返 し ます。 戻 り 値の デー タ 型の詳細な一覧については、「サポー ト さ れ る デー タ 型の組み合わせ と 結果のデー タ 型」 (3-35 ページ) を参照 し て く だ さ い。 制限 こ の関数は少な く と も 2 つの引数を取 り ます。 有効 : COALESCE(10, 20) 無効 : COALESCE() メ モ 無効な例では、 解析時エ ラ ーが発生 し ます。 COALESCE には少な く と も 2 つの引数がなければな り ません。 式 リ ス ト には、 少な く と も 1 つは ヌ ルでない引数が含まれてい る 必要があ り ます。 有効 : COALESCE (NULL, NULL, 20) 無効 : COALESCE (NULL, NULL, NULL) メ モ 無効な例では、 解析時エ ラ ーが発生 し ます。 COALESCE のすべての引数を NULL 関数にする こ と はで き ません。 3-34 ス テー ト メ ン ト の文法 こ の関数は、 式 リ ス ト に指定す る デー タ 型の組み合わせに よ っ てはサポー ト し ていない も のがあ り ます。 た と えば、 COALESCE では BINARY 型 と VARCHAR 型を引数に持つ こ と はで き ません。 こ れ ら の型はど ち ら も 他方へ暗黙的に型変換で き ないか ら です。 サポー ト さ れるデー タ 型の組み合わせ と 結果のデー タ 型 次の図は、 サポー ト さ れてい る さ ま ざ ま なデー タ 型の組み合わせの詳細を 示す と 同時に、 それ ら を COALESCE 関数で用いた場合に結果 と し て生 じ る デー タ 型の確認に役立ち ます。 図 3-1 COALESCE でサポー ト さ れるデー タ 型の組み合わせ と その結果 3-35 SQL 構文 リ フ ァ レ ン ス 図表の要素 説明 こ れ ら の型は COALESCE 関数で直接使用で き ます。 結果はオペランド 2 の型にな り ます。 こ れ ら の型は COALESCE 関数で直接使用で き ます。 結果はオペランド 1 の型にな り ます。 空のセル こ れ ら の型には互換性が あ り ま せん。 COALESE で直接使用す る こ と はで き ま せん。 明 示的な CONVERT が必要です。 D 結果は SQL_DOUBLE 型にな り ます。 B 結果は SIM_BCD 型にな り ます。 I 結果は SQL_INTEGER 型にな り ます。 S 結果は SQL_SMALLINT 型にな り ます。 メ モ COALESCE 関数でサポートされていない型の組み合わせ (図で空 のセルになっています) を使用する と 、 解析時エラーが発生 し ます。 ODBC エ ラ ー : SQLSTATE = 01S01、 ネ イ テ ィ ブ エ ラ ー コ ー ド = 0 行のエ ラ ーです。 割 り 当てエ ラ ーです。 式の評価エ ラ ーです。 例 SELECT COALESE(NULL,10 + 2,15,NULL) 10+2 は SMALLINT と し て扱われ、 ResultType (SQL_SMALLINT, SQL_SMALLINT) は SQL_SMALLINT にな り ます。 し たがっ て、 結果の型 は SQL_SMALLINT にな り ます。 最初のパ ラ メ ー タ は ヌ ルです。 2 番目の式は 12 と 評価 さ れます。 こ の値は ヌ ルでな く 、 結果の型の SQL_SMALLINT へ変換で き ます。 そのため、 こ の例の戻 り 値は 12 にな り ます。 SELECT COALESCE(10, 'abc' + 'def') 10 は SMALLINT と し て扱われ、 ResultType (SQL_SMALLINT, SQL_VARCHAR) は SQL_SMALLINT にな り ます。 し たがっ て、 結果の型 は SQL_SMALLINT にな り ます。 最初のパ ラ メ ー タ は 10 で、こ の値は結果の型の SQL_SMALLINT へ変換で き ます。 そのため、 こ の例の戻 り 値は 10 にな り ます。 3-36 ス テー ト メ ン ト の文法 COMMIT COMMIT ス テー ト メ ン ト に よ り 、 論理 ト ラ ンザ ク シ ョ ンの終了を示 し 、 テ ン ポ ラ リ デー タ をパーマネ ン ト デー タ に変換 し ます。 構文 COMMIT [ ] 備考 COMMIT (お よ び START TRANSACTION) は ス ト ア ド プ ロ シージ ャ 内 で の み サ ポ ー ト さ れ ま す。 SQL Editor で は、 COMMIT お よ び START TRANSACTION は使用で き ません (SQL Editor は AUTOCOMMIT を オン に設定 し ます)。 ス ト ア ド プ ロ シージ ャ 内で コ ミ ッ ト さ れた ス テー ト メ ン ト は、呼び出 し 元 の ODBC ア プ リ ケーシ ョ ン の一番外側の ト ラ ン ザ ク シ ョ ン に よ っ て制御 さ れます。これはつまり、SQLSetConnectOption で指定 さ れた AUTOCOMMIT モー ド に従っ て、 ODBC アプ リ ケーシ ョ ンか ら 外部的に呼び出 し てい る ス ト ア ド プ ロ シージ ャ が、 2 種類あ る 動作の う ち 1 つを実行す る と い う こ と です。 自動的に コ ミ ッ ト す る (AUTOCOMMIT がオ ン、 デ フ ォ ル ト ) か、 SQLTransact が SQL_COMMIT ま たは SQL_ROLLBACK で呼び出 さ れ る の を待つ (AUTOCOMMIT がオ フ に設定 さ れてい る 場合) のいずれかです。 START TRANSACTION ス テー ト メ ン ト を 2 回以上呼び出 し てネ ス ト さ れ た ト ラ ンザ ク シ ョ ン を開始す る こ と はで き ますが、 ネ ス ト さ れた コ ミ ッ ト ブ ロ ッ ク を コ ミ ッ ト す る か ロ ール バ ッ ク す る かを制御す る のは、一番外側 の COMMIT です。 た と えば、 ト ラ ンザ ク シ ョ ンが 5 レベルま でネ ス ト さ れ て い る 場合、 すべ て の ト ラ ン ザ ク シ ョ ン を コ ミ ッ ト す る に は 5 つの COMMIT ス テー ト メ ン ト が必要にな り ます。 COMMIT は、 一番外側の ト ラ ンザ ク シ ョ ンが コ ミ ッ ト さ れ る ま で ロ ッ ク を解除 し ません。 COMMIT と COMMIT WORK の機能は同 じ です。 例 次 の 例 で は、 ス ト ア ド プ ロ シ ー ジ ャ の 中 で、 Billing テ ー ブ ル 内 の Amount_Owed 列を更新す る ト ラ ンザ ク シ ョ ンが開始 さ れます。こ の作業が コ ミ ッ ト さ れ る と 、 別の ト ラ ンザ ク シ ョ ンに よ っ て Amount_Paid 列が更新 さ れてゼ ロ に設定 さ れます。最後の COMMIT WORK ス テー ト メ ン ト に よ り 、 2 番目の ト ラ ンザ ク シ ョ ンが終了 し ます。 START TRANSACTION; UPDATE Billing B SET Amount_Owed = Amount_Owed - Amount_Paid WHERE Student_ID IN 3-37 SQL 構文 リ フ ァ レ ン ス (SELECT DISTINCT E.Student_ID FROM Enrolls E, Billing B WHERE E.Student_ID = B.Student_ID); COMMIT WORK; START TRANSACTION; UPDATE Billing B SET Amount_Paid = 0 WHERE Student_ID IN (SELECT DISTINCT E.Student_ID FROM Enrolls E, Billing B WHERE E.Student_ID = B.Student_ID); COMMIT WORK; CREATE PROCEDURE UpdateBilling( ) AS BEGIN START TRANSACTION ; UPDATE Billing SET Amount_Owed = Amount_Owed + Amount_Owed; UPDATE Billing set Amount_Owed = Amount_Owed + 100 WHERE Student_ID = 10; COMMIT ; END; 関連項目 「CREATE PROCEDURE」 (3-50 ページ) 「ROLLBACK」 (3-148 ページ) 「START TRANSACTION」 (3-192 ページ) 3-38 ス テー ト メ ン ト の文法 CREATE FUNCTION CREATE FUNCTION ス テー ト メ ン ト に よ り 、 デー タ ベー ス に ス カ ラ ユー ザー定義関数 (UDF) を作成 し ます。 ユーザー定義関数は ク エ リ か ら 呼び 出す こ と がで き ます。 構文 CREATE FUNCTION 関数名 ([[IN] { : パ ラ メ ー タ 名 ス カ ラ パ ラ メ ー タ のデー タ 型 } [...]]) RETURNS ス カ ラ 戻 り 値のデー タ 型 [AS] BEGIN 関数本体 RETURN ス カ ラ 式 END; 引数 関数名 ス カ ラ ユーザー定義関数 (UDF) の名前。 UDF 名は識別子の規則に従っ て い る 必要があ り 、 ま たデー タ ベース内お よ びそのオーナーに対 し て一意で なければな り ません。 パラ メ ータ名 ス カ ラ UDF のパ ラ メ ー タ 。 最大 300 個のパ ラ メ ー タ を使用で き ます。 関数 を呼び出す と き に値を指定す る 必要があ り ます。 ス カ ラ パ ラ メ ー タ のデー タ 型 指定 し たパ ラ メ ー タ 名のデー タ 型。 ス カ ラ 戻 り 値のデー タ 型 ス カ ラ UDF の戻 り 値。 ス カ ラ 型のみサポー ト さ れます。 関数本体 ス カ ラ 関数を構成す る ス テー ト メ ン ト 。 スカ ラ式 ス カ ラ 関数が返すス カ ラ 値を指定 し ます。 備考 ス カ ラ UDF を作成す る デー タ ベース に対 し 、 CREATE FUNCTION 権限を 持っ てい る 必要があ り ます。 完全修飾 さ れた UDF 名 (デー タ ベース名 . 関数名) は、 それぞれ皆デー タ ベース内で一意でなければな り ません。 UDF 名を組み込み関数や同一デー タ ベース内のほかの UDF と 同 じ 名前にす る こ と はで き ません。 3-39 SQL 構文 リ フ ァ レ ン ス 制約 ス カ ラ 入力パ ラ メ ー タ のみサポー ト さ れます。 OUTPUT お よ び INOUT パ ラ メ ー タ は使用で き ません。 デフ ォ ル ト で、 す べてのパ ラ メ ー タ が入力にな り ます。 "IN" キーワ ー ド を指定する 必要はあ り ません。 制限 ユーザー定義関数を作成す る 際は以下の制限に注意 し て く だ さ い。 属性 制限 パラ メ ータ数 300 UDF 本体のサ イ ズ 64 KB UDF 名の最大長 半角 30 文字 UDF 変数名の最大長 半角 128 文字 サポー ト さ れる ス カ ラ 入力パ ラ メ ー タ および戻 り 値のデー タ 型 Pervasive PSQL でサポー ト さ れてい る 、 ス カ ラ 入力パ ラ メ ー タ と 戻 り 値の デー タ 型を以下に示 し ます。 表 3-1 サポー ト さ れる入力パラ メ ー タ および戻 り 値のデー タ 型 3-40 BIGINT BINARY BIT BLOB CHAR CHARACTER CLOB CURRENCY DATE DEC DECIMAL DECIMAL DOUBLE DOUBLE PRECISION FLOAT IDENTITY INT INTEGER LONG LONG VARBINARY LONG VARCHAR LONGVARBINARY LONGVARCHAR NUMERIC NUMERIC NUMERIC REAL SMALLIDENTITY SMALLINT SMALLINT SMALLINT SPT_BINARY SPT_BIT SPT_CHAR SPT_DATE SPT_DECIMAL ス テー ト メ ン ト の文法 表 3-1 サポー ト さ れる入力パラ メ ー タ および戻 り 値のデー タ 型 SPT_DOUBLE SPT_INTEGER SPT_LONGVARBIN SPT_LONGVARCHAR SPT_NUMERIC SPT_REAL SPT_SMALLINT SPT_TIME SPT_TIMESTAMP SPT_TINYINT SPT_VARBINARY SPT_VARCHAR TIME TIMESTAMP TIMESTAMP TINYINT UBIGINT UINT UINTEGER USMALLINT UTINYINT VARBINARY VARBINARY VARCHAR 例 次の例では、 Box テーブルに保存 さ れてい る 四角形のボ ッ ク ス の細目を基 に、 その四角形の面積を計算す る 関数を作成 し ます。 CREATE FUNCTION CalculateBoxArea(:boxName char(20)) RETURNS REAL AS BEGIN DECLARE :len REAL; DECLARE :breadth REAL; SELECT len, breadth INTO :len, :breadth FROM box WHERE name = :boxName; RETURN(:len * :breadth); END; 次の例では、 2 つの整数を比較 し 、 小 さ い方の値を返す関数を作成 し ます。 CREATE FUNCTION GetSmallest(:A integer, :B Integer) RETURNS Integer AS BEGIN DECLARE :smallest INTEGER IF (:A < :B ) THEN SET :smallest = :A; ELSE SET :smallest = :B; END IF; RETURN :smallest; END; 3-41 SQL 構文 リ フ ァ レ ン ス 次の例では、 SI = PTR/100 と い う 式を使っ て単利を計算す る 関数を作成 し ます。 式中の P は元金、 T は年数、 R は利子率です。 CREATE FUNCTION CalculateInterest(IN :principle float, IN :period real, IN :rate double) RETURNS DOUBLE AS BEGIN DECLARE :interest DOUBLE; SET :interest = ((:principle * :period * :rate) / 100); RETURN (:interest); END; ス カ ラ ユーザー定義関数の呼び出 し ス カ ラ 式がサポー ト さ れ る 場所な ら ど こ で も 、 関数名の後にカ ン マ区切 り の引数の リ ス ト を指定す る こ と に よ っ て、 ユーザー関数を呼び出す こ と が で き ます。 引数の リ ス ト はかっ こ で囲みます。 UDF は、デー タ ベース修飾子のプ レ フ ィ ッ ク ス を付けて も 付けな く て も 呼 び出せ ま す。 デー タ ベー ス 修飾子 を 前に付け な い場合は、 UDF は現在の デー タ ベース コ ン テ キ ス ト か ら 実行 さ れます。 デー タ ベース修飾子を前に 付け た場合は、 指定 し たデー タ ベー ス の コ ン テ キ ス ト か ら 実行 さ れ ま す。 (下記の例では、デー タ ベース修飾子のプ レ フ ィ ッ ク ス を使用 し てい る も の と 使用 し ていない も のがあ り ます。) 制限 関数を呼び出す と き 、 引数にパ ラ メ ー タ 名は指定で き ません。 すべてのパ ラ メ ー タ の引数値 ( 「実引数」 と も 呼ばれ ます) は、 CREATE FUNCTION ス テー ト メ ン ト で定義 さ れたパ ラ メ ー タ の引数値 ( 「仮引数」 と も 呼ばれます) と 同 じ 順序でなければな り ません。 例 プ ロ シージ ャ 内での UDF CREATE PROCEDURE procTestUdfInvoke() AS begin DECLARE :a integer; SET :a = 99 + (222 + Demodata.GetSmallest(10, 9)) + 10; PRINT :a; end; CALL procTestUdfInvoke() 3-42 ス テー ト メ ン ト の文法 次の例は、 デー タ ベース修飾子が省略 さ れてい る 点を除けば、 前の例 と 似 てい ます。 create procedure procTestUdfInvoke2() as begin declare :a integer; set :a = 99 + (222 + GetSmallest(10, 9)) +10; print :a; end; call procTestUdfInvoke2 SELECT リ ス ト 内での UDF SELECT GetSmallest(100,99) WHERE 句での UDF SELECT name FROM class WHERE id <= GetSmallest(10,20) UDF 内での UDF CREATE FUNCTION funcTestUdfInvoke() RETURNS integer AS begin DECLARE :a integer; SET :a = 99 + (222 - Demodata.GetSmallest(10, 9)); RETURN :a; END; INSERT ス テー ト メ ン ト 内での UDF CREATE TABLE t1(col1 integer, col2 integer, col3 float) INSERT INTO t1 VALUES (GetSmallest(10,20), 20 , 2.0) INSERT INTO t1 (SELECT * FROM t1 WHERE col1 = getSmallest(10,20)) UPDATE ス テー ト メ ン ト 内での UDF UPDATE t1 SET col2 = Demodata.GetSmallest(2,10) WHERE col1 = 2 UPDATE t1 SET col1 = 3 WHERE col2 = Demodata.GetSmallest(10, 5) GROUP BY ス テー ト メ ン ト 内での UDF SELECT col2 FROM t1 GROUP BY getSmallest(10,2), col2 3-43 SQL 構文 リ フ ァ レ ン ス ORDER BY ス テー ト メ ン ト 内での UDF SELECT col2 FROM t1 ORDER BY Demodata.getSmallest(10,2), col2 再帰 UDF CREATE FUNCTION factorial(IN :n integer) RETURNS double AS BEGIN DECLARE :fact double; IF (:n <= 0) THEN SET :fact = 1; else SET :fact = (:n * Demodata.factorial(:n - 1)); END IF; RETURN :fact; END; SELECT Demodata.factorial(20) を使用する と 、20 の階乗値を取得で き ます。 デフ ォ ル ト 値を持つ UDF CREATE FUNCTION testUdfDefault(:z integer = 10) RETURNS integer AS begin RETURN :z-1; end; SELECT Demodata.testUdfDefault() こ の関数は、 パ ラ メ ー タ の値が渡 さ れな か っ た場合には、 指定 し たデフ ォ ル ト 値を使用 し ます。 動的パ ラ メ ー タ を持つ IUDF SELECT name FROM class WHERE id <= GetSmallest(?,?) 式 と し ての IUDF SELECT 10 + Demodata.Getsmallest(10,20) + 15 UDF をパ ラ メ ー タ と し て使用す る SELECT demodata.calculateinterest (10+demodata.getsmallest(3000, 2000), demodata.factorial(2), demodata.testUdfDefault(3)) 関連項目 「DROP FUNCTION」 (3-93 ページ) 3-44 ス テー ト メ ン ト の文法 CREATE GROUP CREATE GROUP ス テー ト メ ン ト に よ り 、 1 つま たは複数のセキ ュ リ テ ィ グループ を作成 し ます。 構文 CREATE GROUP グループ名 [, グループ名 ]... グループ名 ::= ユーザー定義名 例 次の例では、 pervasive と い う 名前のグループが作成 さ れます。 CREATE GROUP pervasive 次の例では、 リ ス ト を使用 し て一度に複数のグループ を作成 し ます。 CREATE GROUP pervasive_dev, pervasive_marketing 関連項目 「DROP GROUP」 (3-94 ページ) 「GRANT」 (3-109 ページ) 「REVOKE」 (3-145 ページ) 「SET SECURITY」 (3-179 ページ) 3-45 SQL 構文 リ フ ァ レ ン ス CREATE INDEX CREATE INDEX ス テー ト メ ン ト を使用 し て、 指定 さ れた テーブルに名前 付 き イ ンデ ッ ク ス を作成 し ます。 構文 CREATE [UNIQUE | NOT MODIFIABLE] INDEX イ ンデ ッ ク ス名 [IN DICTIONARY] ON テーブル名 [ イ ンデ ッ ク ス定義 ] イ ンデ ッ ク ス定義 ::= ( イ ンデ ッ ク ス セ グ メ ン ト の定義 [, イ ンデ ッ ク ス セ グ メ ン ト の定義 ]... ) イ ンデ ッ ク ス セグ メ ン ト の定義 ::= 列名 [ASC | DESC] イ ンデ ッ ク ス名 ::= ユーザー定義名 備考 VARCHAR 型お よ び CHAR 型 の 列 の 最 大 サ イ ズ は 255 バ イ ト で す。 VARCHAR 型の列は、 長 さ バ イ ト (Btrieve lstring) ま たはゼ ロ 終端バ イ ト (Btrieve zstring) が予約 さ れ、 有効 な 記憶デー タ が 1 バ イ ト 少 な い点 が CHAR 型の列 と 異な り ます。 言い換え る と 、 CHAR(255) 型では 255 の有効 文字を用意で き ますが、 VARCHAR 型では、 サ イ ズ ま たは ヌ ル終端文字用 に 1 バ イ ト を予約 し た後の 254 の有効文字 し か用意で き ません。 VARCHAR 型ま たは CHAR 型の列では、 列が ヌ ル値を許可 し てお り 、 さ ら に列の最大サ イ ズであ る 場合に、 その列で イ ンデ ッ ク ス を作成す る こ と は で き ません。 デー タ フ ァ イ ルの中で、 ヌ ル値を許可す る 列の前には 1 バ イ ト の ヌ ル イ ン ジ ケー タ が置かれます。 ヌ ル値を許可す る 列で イ ンデ ッ ク ス を作成す る と 、 ヌ ル イ ン ジ ケー タ 用の 1 バ イ ト のセグ メ ン ト と 、 も う 1 つ の列用のセグ メ ン ト を基にセグ メ ン ト キーが作成 さ れます。 キーに許可 さ れ る 最大 サ イ ズ は 255 バ イ ト で す。 ヌ ル 値 を 許可す る 255 バ イ ト の VARCHAR 型ま たは CHAR 型の列に対す る イ ンデ ッ ク ス では、 キーで許容 さ れ る 最大サ イ ズ を超え る 256 バ イ ト のキーが必要 と な り ます。 既存のデー タ フ ァ イ ルに対 し て リ レーシ ョ ナル イ ンデ ッ ク ス 定義を作成 す る (CREATE INDEX ま たは CREATE INDEX IN DICTIONARY を使用す る ) たびに、 Pervasive PSQL はその フ ァ イ ルに定義 さ れてい る Btrieve イ ン デ ッ ク ス を自動的にチ ェ ッ ク し 、既存の Btrieve イ ンデ ッ ク ス が リ レーシ ョ ナル イ ンデ ッ ク ス 定義に必要なパ ラ メ ー タ のセ ッ ト を提供 し てい る か ど う か を判定 し ます。既存の Btrieve イ ンデ ッ ク ス と 作成す る 新 し い定義が一 致す る 場合は、 リ レ ーシ ョ ナル イ ン デ ッ ク ス 定義 と 既存の Btrieve イ ン デ ッ ク ス の間に関連付けが作成 さ れ ま す。 一致するインデックスがない場合 は、 Pervasive PSQL は新 し い イ ンデ ッ ク ス定義を作成 し 、 IN DICTIONARY が指定 さ れていなければ、デー タ フ ァ イ ルに新 し い イ ンデ ッ ク ス を作成 し ます。 3-46 ス テー ト メ ン ト の文法 Pervasive PSQL v9 ヌ ル値を許可す る 列 : ページ サ イ ズが 4096 バ イ ト の デー タ フ ァ イ ルでは、 フ ァ イ ル当た り の イ ンデ ッ ク ス セグ メ ン ト 数は 119 に制限 さ れます。 真の ヌ ルがサポー ト さ れ る イ ンデ ッ ク ス の設定 さ れた ヌ ル値を許可す る 列には 2 つのセグ メ ン ト か ら 成 る イ ンデ ッ ク ス が必要なた め、 1 つのテーブルでは イ ンデ ッ ク ス付 き の ヌ ル値を許可す る 列 (Btrieve フ ァ イ ルでは、 イ ンデ ッ ク ス 付 き で ヌ ル値を許可す る 真の ヌ ル フ ィ ール ド ) は 59 個ま で し か持て ません。 ページ サ イ ズが小 さ く な る と 、 こ の制 限 も 小 さ く な り ます。 Pervasive PSQL v9 で、 フ ァ イ ル作成モー ド を 7.x ま たは 8.x に設定 し 、 TRUENULLCREATE をデフ ォ ル ト 値のオンに設定 し て 作成 さ れた フ ァ イ ルはすべて、 真の ヌ ルをサポー ト し ます。 以前の フ ァ イ ル形式 で作成 さ れ た フ ァ イ ル、 あ る い は Pervasive.SQL 7 を 使用す る か TRUENULLCREATE をオ フ に設定 し て作成 さ れた フ ァ イ ルは、真の ヌ ルを サポー ト せず、 こ の制限を受け ません。 UNIQUE セグ メ ン ト キーは、特定の行のセグ メ ン ト の組み合わせが フ ァ イ ル内で重複 し ない こ と を保証 し ます。 こ れは、 個々のセグ メ ン ト が重複 し ない こ と を保証 し ません し 、 要求 も し ません。 メ モ 次のデー タ 型以外のすべてのデー タ 型に イ ンデ ッ ク ス を設定で き ます。 BIT LONGVARBINARY LONGVARCHAR BLOB CLOB IN DICTIONARY こ のキー ワー ド を使用す る 目的は、 基 と な る 物理デー タ は変更 し ない ま ま で DDF に変更を加え たい こ と を、 Pervasive PSQL に通知す る こ と です。 こ のキー ワー ド をバ ウ ン ド デー タ ベース で使 う こ と はで き ません。 IN DICTIONARY は非常に強力で高度な機能です。 こ れは、 シ ス テ ム管理 者に よ っ てのみ、 も し く は絶対的に必要な場合にのみ使用 し て く だ さ い。 通常、 Pervasive PSQL は DDF と デー タ フ ァ イ ルの完全な同期を保ち ます が、 こ の機能に よ り ユーザーは、 同期 し ていないテーブルの辞書定義を既 存のデー タ フ ァ イ ルに合致 さ せ る こ と が柔軟に行え る よ う にな り ます。 こ れは、既存のデー タ フ ァ イ ル と 合致す る 定義を辞書内に作成 し たい場合に 有用です。 注意 DDF の変更を、基 と な る デー タ フ ァ イ ルへの変更 と 並行 し て行 わない と 、 重大な問題が生 じ る こ と があ り ます。 3-47 SQL 構文 リ フ ァ レ ン ス 分離 さ れた イ ンデ ッ ク ス、つま り 、DDF にのみ存在 し デー タ フ ァ イ ルには 存在 し ない イ ンデ ッ ク ス を作成 し た場合、 IN DICTIONARY を使用 し ない でその イ ンデ ッ ク ス を削除 し よ う と す る と 、 ス テー タ ス コ ー ド 6 (不正な キー番号) が返 さ れ る こ と があ り ます。 こ のエ ラ ーは、 デー タ ベース エン ジ ンがデー タ フ ァ イ ルか ら イ ンデ ッ ク ス を削除 し よ う と し て も 、 その よ う な イ ンデ ッ ク ス はデー タ フ ァ イ ルに存在 し ないために削除で き ない こ と か ら 発生 し ます。 SQL を使っ て イ ンデ ッ ク ス を作成す る 場合、 Btrieve イ ンデ ッ ク ス (キー) に割 り 当て る 番号は制御で き ません。 SQL を使っ て、 イ ンデ ッ ク ス が定義 さ れていない Btrieve フ ァ イ ルに イ ンデ ッ ク ス を作成 し た場合、作成 さ れ る 最初の イ ンデ ッ ク ス は イ ンデ ッ ク ス #0、 2 番目の イ ンデ ッ ク スは イ ンデ ッ ク ス #1、 と い う よ う にな り ます。 Btrieve フ ァ イ ルに既に 1 つ以上の イ ン デ ッ ク ス が定義 さ れて い る 場合、 SQL を介 し て イ ンデ ッ ク ス を追加す る と 、 イ ンデ ッ ク ス が必要な属性を 持っ てい る こ と を確認す る ために、 Pervasive PSQL に よ っ て Btrieve イ ン デ ッ ク ス が調べ ら れ ま す。 新 し い イ ン デ ッ ク ス のデ ィ ス ク リ プ シ ョ ン は INDEX.DDF に挿入 さ れます。 Pervasive PSQL が既存の Btrieve イ ンデ ッ ク ス と 合致す る 場合、 挿入 さ れたデ ィ ス ク リ プシ ョ ンには既存 イ ンデ ッ ク ス の イ ンデ ッ ク ス番号が含ま れ、 デー タ フ ァ イ ルに新 し い Btrieve イ ンデ ッ ク ス は生成 さ れません。 Pervasive PSQL が既存の Btrieve イ ンデ ッ ク ス と 合致 し ない場合は、未使用 の イ ンデ ッ ク ス番号の う ち最小の番号がデ ィ ス ク リ プシ ョ ンに指定 さ れま す。 新 し い イ ンデ ッ ク ス のデ ィ ス ク リ プシ ョ ンは INDEX.DDF に挿入 さ れ ます。 IN DICTIONARY が指定 さ れていない場合は、 デ ィ ス ク リ プシ ョ ン に指定 さ れた イ ンデ ッ ク ス番号を使っ て、 デー タ フ ァ イ ルに Btrieve イ ン デ ッ ク ス が作成 さ れます。 ど の イ ンデ ッ ク ス番号を使っ て INDEX.DDF に新 し い イ ンデ ッ ク ス を作成 す る かは指定で き ないため、 イ ンデ ッ ク ス番号を調べ る こ と は手動処理に な り ます。 まず、 基 と な る Btrieve フ ァ イ ルで BUTIL -STAT コ マ ン ド を発 行 し 、 Btrieve イ ンデ ッ ク ス の リ ス ト を取得 し ます。 次に、 X$Index を照会 す る と 、 ど の SQL イ ンデ ッ ク ス番号が次に使用 さ れ る かがわか り ます。 SELECT X$Index.* from X$Index WHERE Xi$file in (SELECT Xf$Id FROM X$File WHERE Xf$Name = 'tablename') tablename はデー タ ベース テーブルの名前に置き 換え て く だ さ い。 例 次の例では、 Faculty テーブル内の Dept_name に基づいて、 Dept と い う 名 の イ ンデ ッ ク ス が作成 さ れます。 CREATE INDEX Dept on Faculty(Dept_Name) 3-48 ス テー ト メ ン ト の文法 次の例では、 Person テーブルに変更で き ないセグ メ ン ト イ ンデ ッ ク ス が作 成 さ れます。 CREATE NOT MODIFIABLE INDEX X_Person on Person(ID, Last_Name) 次の例では、 デー タ フ ァ イ ル と 関連付け ら れない 「デ タ ッ チ さ れた」 テー ブルが作成 さ れ、 その後でテーブル定義への イ ンデ ッ ク ス の追加 と 削除が 行われます。 こ の イ ンデ ッ ク ス も ま た、 関連付け ら れ る 基 と な る Btrieve イ ンデ ッ ク ス が存在 し ないため、 分離 さ れた イ ンデ ッ ク ス と な り ます。 CREATE TABLE t1 IN DICTIONARY (c1 int, c2 int) CREATE INDEX idx_1 IN DICTIONARY on t1(c1) DROP INDEX t1.idx_1 IN DICTIONARY 関連項目 「DROP INDEX」 (3-95 ページ) 3-49 SQL 構文 リ フ ァ レ ン ス CREATE PROCEDURE CREATE PROCEDURE ス テー ト メ ン ト に よ り 、 新規の ス ト ア ド プ ロ シー ジ ャ を作成 し ます。 ス ト ア ド プ ロ シージ ャ は、 あ ら か じ め定義 さ れデー タ ベース辞書に保存 さ れてい る SQL ス テー ト メ ン ト です。 構文 CREATE PROCEDURE プ ロ シージ ャ 名 ([ パ ラ メ ー タ [, パ ラ メ ー タ ]... ] ) [RETURNS ( 結果 [, 結果 ]... )] 備考を参照 [WITH DEFAULT HANDLER] as ま たはセ ミ コ ロ ン プ ロ シージ ャ ス テー ト メ ン ト プ ロ シージ ャ 名 ::= ユーザー定義名 パ ラ メ ー タ ::= パ ラ メ ー タ タ イ プ名 デー タ 型 [ DEFAULT プ ロ シージ ャ 式 | = プ ロ シージ ャ 式 ] | SQLSTATE パ ラ メ ー タ タ イ プ名 ::= パ ラ メ ー タ 名 | パラ メ ータ タ イプ パラ メ ータ名 | パラ メ ータ名 パラ メ ータ タ イ プ パ ラ メ ー タ タ イ プ ::= IN | OUT | INOUT | IN_OUT パ ラ メ ー タ 名 ::= ユーザー定義名 プ ロ シージ ャ 式 ::= 通常の式 と 同様、 ただ し 、 IF 式 と ODBC 式 の ス カ ラ 関数 は使用で き ない 結果 ::= ユーザー定義名 デー タ 型 as ま たはセ ミ コ ロ ン ::= AS | ; プ ロ シージ ャ ス テー ト メ ン ト ::= [ ラ ベル名 :] BEGIN [ATOMIC] [ プ ロ シージ ャ ス テー ト メ ン ト [; プ ロ シージ ャ ス テー ト メ ン ト ]...] END [ ラ ベル名 ] | CALL プ ロ シージ ャ 名 ( プ ロ シージ ャ 式 [, プ ロ シージ ャ 式 ]... ) | CLOSE カー ソ ル名 | DECLARE カー ソ ル名 CURSOR FOR 選択ス テー ト メ ン ト [FOR UPDATE | FOR READ ONLY] | DECLARE 変数名 デー タ 型 [DEFAULT プ ロ シージ ャ 式 | = プ ロ シー ジ ャ式 ] | DELETE WHERE CURRENT OF カー ソ ル名 | 削除ス テー ト メ ン ト | FETCH [ フ ェ ッ チ方向 [FROM]] カー ソ ル名 [INTO 変数名 [, 変数名 ]] 3-50 ス テー ト メ ン ト の文法 | IF プ ロ シージ ャ 検索条件 THEN プ ロ シージ ャ ス テー ト メ ン ト [; プ ロ シージ ャ ス テー ト メ ン ト ]...[ ELSE プ ロ シージ ャ ス テー ト メ ン ト [; プ ロ シージ ャ ス テー ト メ ン ト ]...] END IF | IF プ ロ シージ ャ 検索条件 プ ロ シージ ャ ス テー ト メ ン ト [ELSE プ ロ シー ジ ャ ス テー ト メ ン ト ] | 挿入ス テー ト メ ン ト | LEAVE ラ ベル名 | [ ラ ベル名 :] LOOP プ ロ シージ ャ ス テー ト メ ン ト [; プ ロ シージ ャ ス テー ト メ ン ト ]...END LOOP [ ラ ベル名 ] | OPEN カー ソ ル名 | PRINT プ ロ シージ ャ 式 [, ' 文字列 '] - Windows ベース のプ ラ ッ ト フ ォ ームにのみ適用 さ れ る | RETURN [ プ ロ シージ ャ 式 ] | ト ラ ンザ ク シ ョ ン ス テー ト メ ン ト | into 付 き 選択ス テー ト メ ン ト | 選択ス テー ト メ ン ト | SET 変数名 = プ ロ シージ ャ 式 | SIGNAL [ABORT] sqlstate 値 || START TRANSACTION | 更新ス テー ト メ ン ト | UPDATE SET 列名 = プ ロ シージ ャ 式 [, 列名 = プ ロ シージ ャ 式 ]...WHERE CURRENT OF カー ソ ル名 | [ ラ ベル名 : ] WHILE プ ロ シージ ャ 検索条件 DO [ プ ロ シージ ャ ス テー ト メ ン ト [; プ ロ シージ ャ ス テー ト メ ン ト ]]...END WHILE [ ラ ベ ル名 ] | [ ラ ベル名 : ] WHILE プ ロ シージ ャ 検索条件 プ ロ シージ ャ ス テー ト メ ン ト | テーブル変更ス テー ト メ ン ト | イ ンデ ッ ク ス作成ス テー ト メ ン ト | テーブル作成ス テー ト メ ン ト | ビ ュ ー作成ス テー ト メ ン ト | イ ンデ ッ ク ス削除ス テー ト メ ン ト | テーブル削除ス テー ト メ ン ト | ビ ュ ー削除ス テー ト メ ン ト | 権限付与ス テー ト メ ン ト | 権限取消ス テー ト メ ン ト | 設定ス テー ト メ ン ト ト ラ ンザ ク シ ョ ン ス テー ト メ ン ト ::= コ ミ ッ ト ス テー ト メ ン ト | ロ ールバ ッ ク ス テー ト メ ン ト | リ リ ース ス テー ト メ ン ト コ ミ ッ ト ス テー ト メ ン ト ::= COMMIT ス テー ト メ ン ト 参照 ロ ールバ ッ ク ス テー ト メ ン ト ::= リ リ ース ス テー ト メ ン ト ::= ROLLBACK ス テー ト メ ン ト 参照 RELEASE SAVEPOINT ステートメント参照 3-51 SQL 構文 リ フ ァ レ ン ス テーブル作成ス テー ト メ ン ト ::= CREATE TABLE ス テー ト メ ン ト 参照 テーブル変更ス テー ト メ ン ト ::= ALTER TABLE ス テー ト メ ン ト 参照 テーブル削除ス テー ト メ ン ト ::= DROP TABLE ス テー ト メ ン ト イ ンデ ッ ク ス作成ス テー ト メ ン ト ::= CREATE INDEX ス テー ト メ ン ト 参照 イ ンデ ッ ク ス削除ス テー ト メ ン ト ::= DROP INDEX ス テー ト メ ン ト 参照 ビ ュ ー作成ス テー ト メ ン ト ::= CREATE VIEW ス テー ト メ ン ト 参照 ビ ュ ー削除ス テー ト メ ン ト ::= DROP VIEW ス テー ト メ ン ト 参照 権限付与ス テー ト メ ン ト ::= GRANT ス テー ト メ ン ト 参照 権限取消ス テー ト メ ン ト ::= REVOKE ス テー ト メ ン ト 参照 設定ス テー ト メ ン ト ::= SET DECIMALSEPARATORCOMMA ステートメント参照 ラ ベル名 ::= ユーザー定義名 カー ソ ル名 ::= ユーザー定義名 変数名 ::= ユーザー定義名 プ ロ シージ ャ 検索条件 ::= 通常の検索条件 と 同様、 ただ し 、 サブ ク エ リ を含む式 は使用で き ない フ ェ ッ チ方向 ::= | NEXT sqlstate 値 ::= ' 文字列 ' 備考 ス ト ア ド プ ロ シージ ャ を実行す る には、 CALL ま たは EXECUTE ス テー ト メ ン ト を使用 し ます。 なお、 プ ロ シージ ャ では変数名 と パ ラ メ ー タ 名は コ ロ ン (:) で始ま る 必要 があ り ます。 こ れは、 変数やパ ラ メ ー タ を定義す る と き と 使用す る と き の 両方に当ては ま り ます。 ス ト ア ド プ ロ シ ー ジ ャ が 結果 セ ッ ト ま た は ス カ ラ 値 を 返す場合 は、 RETURNS 句が必要です。 WITH DEFAULT HANDLER 句が存在する 場合は、 エ ラ ーが発生 し た と き にプ ロ シージ ャ が引 き 続 き 実行 さ れます。 デフ ォ ル ト の動作 ( こ の句が存 在 し な い場合) では、 SQLSTATE が ス テー ト メ ン ト に よ っ て発生 し た エ ラ ー状態にな り 、 プ ロ シージ ャ が中止 さ れます。 IF ス テー ト メ ン ト の最初 (ま たは最後) に StmtLabel を使用す る こ と は、 ANSI SQL 3 の拡張機能です。 PRINT ス テー ト メ ン ト は Windows ベース のプ ラ ッ ト フ ォ ーム にのみ適用 さ れます。 ほかのオペレーテ ィ ン グ シ ス テ ムのプ ラ ッ ト フ ォーム では無視 さ れます。 SQL Editor において、 変数パ ラ メ ー タ を使っ て ス ト ア ド プ ロ シージ ャ を テ ス ト す る 唯一の方法は、 その ス ト ア ド プ ロ シージ ャ を別の ス ト ア ド プ ロ 3-52 ス テー ト メ ン ト の文法 シージ ャ か ら 呼び出す こ と です。こ の手法は、pdate (CREATE PROCEDURE pdate();) (3-55 ページ) の例で示 さ れてい ます。 変数は、ス ト ア ド プ ロ シージ ャ 内でのみ SELECT 項目 と し て使用す る こ と がで き ま す。 こ の手法は、 varsub1 (CREATE PROCEDURE varsub1 ();) の 例で示 さ れてい ます。 デー タ 型の制限 次のデー タ 型は、 パ ラ メ ー タ と し て渡 し た り 、 ス ト ア ド プ ロ シージ ャ ま た は ト リ ガ内で変数 と し て宣言 し た り す る こ と はで き ません。 表 3-2 ス ト ア ド プ ロ シージ ャ および ト リ ガで禁止 さ れるデー タ 型 BFLOAT4 BFLOAT8 MONEY NUMERIC NUMERICSA NUMERICSTS 制限 ストアド プロシージャを作成する 際、 次の制限に注意を払 う 必要があ り ます。 属性 制限 ト リ ガ ま たは ス ト ア ド プ ロ シージ ャ で使用可能な列数 300 ス ト ア ド プ ロ シージ ャ のパ ラ メ ー タ リ ス ト 内の引数の数 300 ス ト ア ド プ ロ シージ ャ のサ イ ズ 64 KB 例 次の例では、 ス ト ア ド プ ロ シージ ャ Enrollstudent が作成 さ れ、 Student ID と Class ID が指定 さ れて レ コ ー ド が Enrolls テーブルに挿入 さ れます。 CREATE PROCEDURE Enrollstudent(IN :Stud_id INTEGER, IN :Class_Id INTEGER, IN :GPA REAL); BEGIN INSERT INTO Enrolls VALUES(:Stud_id, :Class_id, :GPA); END; 次の ス テー ト メ ン ト を使用 し て、 ス ト ア ド プ ロ シージ ャ を呼び出 し ます。 CALL Enrollstudent(1023456781, 146, 3.2) 次の ス テー ト メ ン ト を使用 し て、 新 し く 挿入 し た レ コ ー ド を取得 し ます。 SELECT * FROM Enrolls WHERE Student_id = 1023456781 CALL ス テー ト メ ン ト は引数を渡 し てプ ロ シージ ャ を呼び出 し 、 SELECT ス テー ト メ ン ト は追加 さ れた行を表示 し ます。 3-53 SQL 構文 リ フ ァ レ ン ス 次のプ ロ シージ ャ では、呼び出 し 側か ら 渡 さ れた classId パ ラ メ ー タ を使用 し て Class テーブルを読み取 り 、 講座の登録者数が ま だ制限数に達 し てい ない こ と を確認 し ます。 CREATE PROCEDURE Checkmax(in :classid integer) ; Begin DECLARE :numenrolled integer; DECLARE :maxenrolled integer; SELECT COUNT(*) INTO :numenrolled FROM Enrolls WHERE class_ID = :classid; SELECT Max_size INTO :maxenrolled FROM Class WHERE id = :classid; IF (:numenrolled > :maxenrolled) THEN PRINT ' 登録は失敗 し ま し た。 登録 さ れた生徒数が、 こ の講座の制限数 に達 し ま し た。 '; ELSE PRINT ' 登録可能です。 登録 さ れた生徒数は、 こ の講座の制限数に ま だ 達 し てい ません。 '; END IF; END; CALL Checkmax(101) COUNT( 式 ) に よ っ て、 述部にあ る 式の非ヌ ル値がすべて カ ウ ン ト さ れ る と い う こ と を覚え ておいて く だ さ い。 COUNT(*) では ヌ ル値を含むすべて の値がカ ウ ン ト さ れます。 ス ト ア ド プ ロ シージ ャ を作成する と き に OUT パ ラ メ ー タ を使用す る 例を 以下に示 し ます。 こ のプ ロ シージ ャ を呼び出す と 、 WHERE 句を満たす生 徒数が変数 :outval に返 さ れます。 CREATE PROCEDURE PROCOUT (out :outval INTEGER) AS BEGIN SELECT COUNT(*) INTO :outval FROM Enrolls WHERE Class_Id = 101; END; ス ト ア ド プ ロ シージ ャ を作成す る と き に INOUT パ ラ メ ー タ を使用す る 例 を以下に示 し ます。 こ のプ ロ シージ ャ の呼び出 し では、 INPUT パ ラ メ ー タ :IOVAL が要求 さ れ、 出力の値が変数 :IOVAL に返 さ れます。 プ ロ シージ ャ では、 入力デー タ と IF 条件に基づいて こ の変数の値が設定 さ れます。 CREATE PROCEDURE ProcIODate (INOUT :ioval DATE) AS BEGIN IF :ioval = '1982-03-03' THEN SET :ioval = '05.05.82'; ELSE 3-54 ス テー ト メ ン ト の文法 SET :ioval = '1982-03-03'; END IF; END; 上記のプ ロ シージ ャ は、 call prociodate('1982-03-03') の よ う に、 リ テ ラ ル値を使っ て呼び出す こ と はで き ま せん。 こ れには OUTPUT パ ラ メ ー タ が必要にな り ます。最初に ODBC 呼び出 し を使っ てパ ラ メ ー タ をバ イ ン ド する 必要があ り ます。 そ う でなければ、 次に示す よ う に、 こ のプ ロ シージ ャ を呼び出す別のプ ロ シージ ャ を作成す る こ と で、 プ ロ シージ ャ の テ ス ト を行え ます。 CREATE PROCEDURE pdate(); BEGIN DECLARE :a DATE; CALL prociodate(:a); PRINT :a; END CALL pdate 次の例は、 プ ロ シージ ャ で RETURNS 句を使用す る 方法を示 し ます。 こ の 例では、 Class テーブルの中で、 Start Date が、 CALL ス テー ト メ ン ト で渡 さ れ る 日付 と 等 し いデー タ がすべて返 さ れます。 CREATE PROCEDURE DateReturnProc(IN :pdate DATE) RETURNS( ID INTEGER, Name CHAR(7), Section CHAR(3), Max_Size USMALLINT, Start_Date DATE, Start_Time TIME, Finish_Time TIME, Building_Name CHAR(25), Room_Number UINTEGER, Faculty_ID UBIGINT ); BEGIN SELECT ID, Name, Section, Max_Size, Start_Date, Start_Time, Finish_Time, Building_Name, Room_Number, Faculty_ID FROM class WHERE Start_Date = :pdate; END; CALL DateReturnProc('2001-06-05') RETURNS 句内のユーザー定義名は、 こ の例で示 さ れてい る よ う に、 選択 リストに現れ る 列名 と 同 じ 名前にする 必要がない こ と に注目 し て く だ さ い。 3-55 SQL 構文 リ フ ァ レ ン ス 次のプ ロ シージ ャ は、 Class テーブルの中で、 Start Date が CALL ス テー ト メ ン ト で渡 さ れた日付 と 等 し いデー タ を返 し ます。 CREATE PROCEDURE DateReturnProc (IN :pdate date, IN :flag) AS BEGIN IF (:flag = 1) THEN SELECT ID, Name, Room_Number FROM Class WHERE start_date = :pdate; ELSE SELECT Name FROM Class WHERE start_date = :pdate; END IF; END; CALL DateReturnProc('2001-06-05', 1) ; 次の例は、 位置付け DELETE に適用 さ れ る WHERE CURRENT OF 句の使 い方を示 し ます。 CREATE PROCEDURE MyProc(IN :CourseName CHAR(7)) AS BEGIN DECLARE c1 CURSOR FOR SELECT name FROM course WHERE name = :CourseName FOR UPDATE; OPEN c1; FETCH NEXT FROM c1 INTO :CourseName; DELETE WHERE CURRENT OF c1; CLOSE c1; END; CALL MyProc('HIS 305') (DELETE の WHERE 句の中で SELECT を使用 し た場合、それは位置付け DELETE ではな く 検索済み DELETE にな る ので注意 し て く だ さ い。) 次の例は、 変数 (:i) を SELECT 項目 と し て使用す る 方法を示 し ます。 例 では、 table1 は ま だ存在 し な い も の と し ま す。 person テーブルの、 ID が 950000000 よ り 大 き いすべての レ コ ー ド が選択 さ れ、 table1 の col2 に挿入 さ れ ます。 col1 には、 WHILE ループで定義 さ れ る と お り 、 値 0、 1、 2、 3 ま たは 4 が格納 さ れます。 CREATE TABLE table1 (col1 CHAR(10), col2 BIGINT); CREATE PROCEDURE varsub1 (); BEGIN DECLARE :i INT; SET :i = 0; 3-56 ス テー ト メ ン ト の文法 WHILE :i < 5 DO BEGIN INSERT INTO table1 (col1, col2) SELECT :i , A.ID FROM PERSON A WHERE A.ID > 950000000; SET :i = :i + 1; END; END WHILE; END CALL varsub1 SELECT * FROM table1 -- 110 行を返 し ます 一連の ス テー ト メ ン ト がすべて成功す る か失敗す る よ う に、 ATOMIC を使 用 し て ス テー ト メ ン ト を 1 つに ま と め る 例を以下に示 し ます。ATOMIC は、 ス ト ア ド プ ロ シージ ャ ま たは ト リ ガの本体でのみ使用で き ます。 最初のプ ロ シージ ャ では ATOMIC を指定せず、 2 番目のプ ロ シージ ャ で指 定 し ます。 CREATE TABLE t1 (c1 INTEGER) CREATE UNIQUE INDEX t1i1 ON t1 (c1) CREATE PROCEDURE p1 (); BEGIN INSERT INTO t1 VALUES (1); INSERT INTO t1 VALUES (1); END; CREATE PROCEDURE p2 (); BEGIN ATOMIC INSERT INTO t1 VALUES (2); INSERT INTO t1 VALUES (2); END; CALL p1() CALL p2() SELECT * FROM t1 ど ち ら のプ ロ シージ ャ も 、 重複のない イ ンデ ッ ク ス に重複す る 値を挿入 し よ う と す る ためにエ ラ ーが返 さ れます。 プ ロ シージ ャ p1 内の最初の INSERT ス テー ト メ ン ト は成功 し ますが、2 番 目の ス テー ト メ ン ト は失敗す る ので、 t1 には 1 レ コ ー ド のみが格納 さ れ る と い う 結果にな り ます。 同様に、 プ ロ シージ ャ p2 内の最初の INSERT ス テー ト メ ン ト は成功 し ますが、 2 番目の ス テー ト メ ン ト は失敗 し ます。 た だ し 、 プ ロ シージ ャ p2 には ATOMIC が あ る ため、 エ ラ ーが発生す る と 、 プ ロ シージ ャ p2 内で行われた作業はすべて ロ ール バ ッ ク さ れます。 3-57 SQL 構文 リ フ ァ レ ン ス 次の例では、 ス ト ア ド プ ロ シージ ャ を使用 し て 2 つのテーブルを作成 し 、 デ フ ォ ル ト 値を設定 し た 1 行を それぞれのテーブルに挿入 し ま す。 次に、 セキ ュ リ テ ィ を有効に し てユーザー user1 に権限を与え ます。 CREATE PROCEDURE p1 (); BEGIN CREATE TABLE t1 (c1 INT DEFAULT 10, c2 INT DEFAULT 100); CREATE TABLE t2 (c1 INT DEFAULT 1 , c2 INT DEFAULT 2); INSERT INTO t1 DEFAULT VALUES; INSERT INTO t2 DEFAULT VALUES; SET SECURITY = larry; END; CALL p1 SELECT * FROM t1 -- 10、 100 を返 し ます SELECT * FROM t2 -- 1、 2 を返 し ます 次の例では、 ス ト ア ド プ ロ シージ ャ を使用 し てユーザー user1 の権限を取 り 消 し 、前の例で作成 し た 2 つのテーブルを削除 し てデー タ ベース セキ ュ リ テ ィ を無効に し ます。 CREATE PROCEDURE p3 (); BEGIN REVOKE ALL ON t1 FROM user1; REVOKE ALL ON t2 FROM user1; DROP TABLE t1; DROP TABLE t2; SET SECURITY = NULL; END; CALL p3 SELECT * FROM t1 -- テーブルが見つか ら ない と い う エ ラ ーを返 し ます SELECT * FROM t2 -- テーブルが見つか ら ない と い う エ ラ ーを返 し ます 3-58 ス テー ト メ ン ト の文法 カー ソ ル ループの例 次の例は、 カー ソ ル内をループす る 方法を示 し ます。 CREATE TABLE INSERT INTO INSERT INTO INSERT INTO INSERT INTO INSERT INTO INSERT INTO atable atable atable atable atable atable atable (c1 INT, c2 INT) VALUES (1,1) VALUES (1.2) VALUES (2.2) VALUES (2.3) VALUES (3.3) VALUES (3.4) CREATE PROCEDURE pp (); BEGIN DECLARE :i INTEGER; DECLARE c1Bulk CURSOR FOR SELECT c1 FROM atable ORDER BY c1 FOR UPDATE; OPEN c1Bulk; BulkLinesLoop: LOOP FETCH NEXT FROM c1Bulk INTO :i; IF SQLSTATE = '02000' THEN LEAVE BulkLinesLoop; END IF; UPDATE SET c1 = 10 WHERE CURRENT OF c1Bulk; END LOOP; CLOSE c1Bulk; END CALL pp -- 正常終了 SELECT * FROM atable --6 行を返 し ます ス ト ア ド プ ロ シージ ャの使用 一例 と し て、 CALL foo(a, b, c) は、 パ ラ メ ー タ a、 b、 お よ び c で ス ト ア ド プ ロ シージ ャ を実行 し ます。 パ ラ メ ー タ はいずれ も 動的パ ラ メ ー タ ("?") にで き ます。 こ れは、 OUTPUT パ ラ メ ー タ お よ び INOUT パ ラ メ ー タ の値 を取 り 出す場合は必須です。た と えば、次の よ う にな り ます。 {CALL foo{(?, ?, 'TX')} ソ ース コ ー ド では、 中か っ こ は省略可能です。 以下は、現バージ ョ ンの Pervasive PSQL におけ る ス ト ア ド プ ロ シージ ャ の し く みです。 ト リ ガ (CREATE TRIGGER、 DROP TRIGGER) が、 ス ト ア ド プ ロ シージ ャ の形式 と し てサポー ト さ れ ま す。 こ のサポー ト には、 テーブ ル、 プ ロ シージ ャ 、 お よ びデー タ ベース に対す る ト リ ガの依存性の監視 が含まれます。 CREATE PROCEDURE お よ び CREATE TRIGGER は、 ス ト ア ド プ ロ シージ ャ ま たは ト リ ガの本体では使用で き ません。 3-59 SQL 構文 リ フ ァ レ ン ス CONTAINS、 NOT CONTAINS、 BEGINS WITH はサポー ト さ れてい ま せん。 LOOP : 事後条件ループはサポートされていません (REPEAT...UNTIL)。 ELSEIF : 条件形式には IF ...THEN ...ELSE が使用 さ れます。ELSEIF は サポー ト さ れてい ません。 全般的な ス ト ア ド プ ロ シージ ャ エ ン ジ ンの制約 ス ト ア ド プ ロ シージ ャ を使用す る 前に、次に挙げ る 制約を確認 し て く だ さ い。 修飾子は、 CREATE PROCEDURE で も CREATE TRIGGER で も サ ポー ト さ れてい ません。 ス ト ア ド プ ロ シージ ャ 変数名の最大長は半角 128 文字です。 ス ト ア ド プ ロ シージ ャ 名の最大長は半角 30 文字です。 CREATE PROCEDURE ま たは CREATE TRIGGER の と き 、 構文の検 証は部分的にのみ行われます。 列名は実行時ま で確認 さ れません。 現在は、式が使用 さ れてい る すべての場所でサブ ク エ リ を使用で き る わ けではあ り ません。た と えば、set :arg = SELECT MIN(sal) FROM emp は サ ポ ー ト さ れ て い ま せ ん。 し か し 、 こ の ク エ リ は SELECT min(sal) INTO :arg FROM emp の よ う に書 き 直す こ と がで き ます デフ ォ ル ト のエ ラ ー ハン ド ラ のみがサポー ト さ れてい ます。 SQL 変数 と パラ メ ー タ の制約 変数名は コ ロ ン (:) で始ま る 必要があ り ます。 こ れに よ っ て、 ス ト ア ド プ ロ シージ ャ のパーサが変数 と 列名を区別で き る よ う にな り ます。 変数名は、 大文字 と 小文字が区別 さ れません。 セ ッ シ ョ ン変数はサポー ト さ れてい ません。変数はプ ロ シージ ャ に対 し て ロ ーカルです。 カ ー ソ ルの制約 位置付け UPDATE はテーブル名を受け入れません。 グ ロ ーバル カー ソ ルはサポー ト さ れてい ません。 Long デー タ を使用する際の制約 3-60 Long デー タ を引数 と し て埋め込みプ ロ シージ ャ (別のプ ロ シージ ャ を 呼び出すプ ロ シージ ャ ) に渡す と 、 デー タ は切 り 捨て ら れて 65500 バ イ ト にな り ます。 プ ロ シージ ャ と の間でや り 取 り さ れ る Long デー タ の引数は、合計 2 MB に制限 さ れてい ます ス テー ト メ ン ト の文法 Long デー タ は、内部的にはデー タ 長の制限な し にカー ソ ル間で コ ピーで き ます。Long デー タ 列を ス テー ト メ ン ト か ら フ ェ ッ チ し て別の ス テー ト メ ン ト に挿入する 場合、 制約はあ り ません。 ただ し 、 1 つの Long デー タ 変数に 対 し て複数の宛先が要求 さ れ る 場合は、 最初の宛先テーブルのみが複数の PutData 呼び出 し を受け取 り ます。 残 り の列は切 り 捨て ら れ、 最初の 65500 バ イ ト にな り ます。 こ れは ODBC GetData の メ カ ニズ ムの制約です。 関連項目 「DROP PROCEDURE」 (3-97 ページ) 3-61 SQL 構文 リ フ ァ レ ン ス CREATE TABLE CREATE TABLE ス テー ト メ ン ト に よ り 、 デー タ ベース内に新 し いテーブ ルを作成 し ます。 CREATE TABLE には、最小ま たは コ ア SQL 準拠 よ り も 高度な機能が含ま れてい ま す。 CREATE TABLE では参照整合性機能がサポー ト さ れ ま す。 Pervasive PSQL は、 ColIDList サポー ト を除いて、 SQL 92 にほぼ準拠 し て い ます。 構文 CREATE TABLE テーブル名 [ オプシ ョ ン ] [IN DICTIONARY] [ USING ' パ ス名 '] [WITH REPLACE] ( テーブル要素 [, テーブル要素 ]... ) テーブル名 ::= ユーザー定義名 オプシ ョ ン ::= DCOMPRESS | PAGESIZE = サ イ ズ | LINKDUP = 個数 個数 ::= ユーザー定義値 ( リ ン ク 重複 イ ンデ ッ ク ス キーを追加す る ために予約 し てお く ポ イ ン タ の数を設定 し ます) テーブル要素 ::= 列定義 | テーブル制約定義 列定義 ::= 列名 デー タ 型 [DEFAULT デフ ォ ル ト 値の式 ] [ 列制約定義 [ 列制 約定義 ]...[CASE (文字列) | COLLATE コ レーシ ョ ン名 ] 列名 ::= ユーザー定義名 デー タ 型 ::= デー タ 型名 [( 桁数 [, 小数位 ])] 桁数 ::= 整数 小数位 ::= 整数 デフ ォ ル ト 値の式 ::= デフ ォ ル ト 値の式 + デフ ォ ル ト 値の式 | デフ ォ ル ト 値の式 - デフ ォ ル ト 値の式 | デフ ォ ル ト 値の式 * デフ ォ ル ト 値の式 | デフ ォ ル ト 値の式 / デフ ォ ル ト 値の式 | デフ ォ ル ト 値の式 & デフ ォ ル ト 値の式 | デフ ォ ル ト 値の式 | デフ ォ ル ト 値の式 | デフ ォ ル ト 値の式 ^ デフ ォ ル ト 値の式 | ( デフ ォ ル ト 値の式 ) | - デフ ォ ル ト 値の式 | + デフ ォ ル ト 値の式 | ~ デフ ォ ル ト 値の式 | ? | リ テラル 3-62 ス テー ト メ ン ト の文法 | ス カ ラ 関数 | {fn ス カ ラ 関数} | USER | NULL リ テ ラ ル ::= ' 文字列 ' | 数字 | {d ' 日付 リ テ ラ ル '} | {t ' 時刻 リ テ ラ ル '} | {ts ' タ イ ム ス タ ンプ リ テ ラ ル '} ス カ ラ 関数 ::= 「ス カ ラ 関数」 (5-1 ページ) を参照 列制約定義 ::= [CONSTRAINT 制約名 ] 列制約 制約名 ::= ユーザー定義名 列制約 ::= NOT NULL | UNIQUE | PRIMARY KEY | REFERENCES テーブル名 [( 列名 )] [ 参照ア ク シ ョ ン ] テーブル制約定義 ::= [CONSTRAINT 制約名 ] テーブル制約 テーブル制約 ::= UNIQUE ( 列名 [, 列名 ]... ) | PRIMARY KEY ( 列名 [, 列名 ]... ) | FOREIGN KEY ( 列名 [, 列名 ]) REFERENCES テーブル名 [ ( 列名 [, 列名 ]... ) ] [ 参照ア ク シ ョ ン ] 参照ア ク シ ョ ン ::= 参照更新ア ク シ ョ ン [ 参照削除ア ク シ ョ ン ] | 参照削除ア ク シ ョ ン [ 参照更新ア ク シ ョ ン ] 参照更新ア ク シ ョ ン ::= ON UPDATE RESTRICT 参照削除ア ク シ ョ ン ::= ON DELETE CASCADE | ON DELETE RESTRICT コ レーシ ョ ン名 ::= ' 文字列 ' | ユーザー定義名 備考 イ ンデ ッ ク ス は CREATE INDEX ス テー ト メ ン ト を使用 し て作成す る 必要 があ り ます。 3-63 SQL 構文 リ フ ァ レ ン ス 外部キー制約名は、 辞書内で固有の名前でなければな り ません。 その他の 制約名はすべて、 常駐す る テーブル内で固有の名前であ り 、 列 と は異な る 名前でなければな り ません。 主キー名が省略 さ れた場合は、 キー内の最初の列名に接頭辞 "PK_" を付け た名前が制約名 と し て使用 さ れます。 参照列が一覧にない場合は、 デフ ォ ル ト では参照 さ れ る テーブルの主キー が参照の対象にな り ます。 PK が使用で き ない場合は、 " キーがありません " と い う エ ラ ーが返 さ れます。 タ ーゲ ッ ト 列を列挙す る と 、 こ の よ う な状況 を回避で き ます。 外部キー名が省略 さ れた場合は、 キー内の最初の列名に接頭辞 "FK_" を付 け た 名前 が 制約名 と し て 使用 さ れ ま す。 こ の 動作は、 旧バー ジ ョ ン の Pervasive.SQL と は異な り ます。 UNIQUE キー制約名が省略 さ れた場合は、 制約内の最初の列名に接頭辞 "UK_" を付けた名前が制約名 と し て使用 さ れます。 NOT NULL キ ー名が省略 さ れ た 場合は、 キ ー内の最初の列名に接頭辞 "NN_" を付けた名前が制約名 と し て使用 さ れます。 制約名の最大長は半角 20 文字です。 Pervasive PSQL では、 名前の左か ら (接頭辞があ る 場合はその直後か ら ) 20 文字が使用 さ れます。 外部キーが同 じ テーブルの主キー を 参照す る 場合が あ り ま す (自己参照 キー と 呼ばれ る )。 CREATE TABLE が成功する と 、 作成 さ れたテーブルのデー タ フ ァ イ ル名 は xxx.mkd にな り ます。 こ こ で、 xxx は指定 し た テーブル名です。 テーブ ルが既に存在する 場合、 そのテーブルは置換 さ れず、 エ ラ ー - 1303 " テー ブルは既に存在 し ます " が通知 さ れます。 テーブルを置換す る 前に削除す る 必要があ り ます。 レ コ ー ド サイ ズの制限 デー タ レ コ ー ド の固定長部分の合計サ イ ズは、 65535 バ イ ト を超えてはい け ません。 デー タ レ コ ー ド の固定長部分は次の要素で構成 さ れます。 固定サイズのすべての列 (LONGVARCHAR 型お よ び LONGVARBINARY 型以外のすべての列) ヌ ル値を許可す る 各列について 1 バ イ ト 各可変長列 (LONGVARCHAR 型ま たは LONGVARBINARY 型の列) に ついて 8 バ イ ト こ の制限を超え る テーブルの作成を試み る か、 結果 と し てテーブルが制限 を超え る よ う な変更を試み る と 、Pervasive PSQL は ス テー タ ス コ ー ド -3016 " テーブルの最大固定長行サ イ ズ を超え てい ます " を返 し ます。 3-64 ス テー ト メ ン ト の文法 新 し いテーブルを作成す る 前に レ コ ー ド の固定長部分のバ イ ト 単位のサ イ ズ を調べ る には、 次の計算式を使用 し ます。 (固定長列サイズのバイト単位の合計) + (ヌ ル値を許可す る 列の数) + (8 * 可変長列の数) = バ イ ト 単位の レ コ ー ド サ イ ズ 既存デー タ フ ァ イ ルの レ コ ー ド の固定長部分のサ イ ズ を調べたい場合は、 BUTIL -STAT コ マ ン ド を使用すれば、 こ の情報を示すレ ポー ト を表示で き ます。 例 次の よ う な列が定義 さ れてい る テーブルがあ る と し ます。 デー タ 型 こ のデー タ 型の列数 ヌル値を許可 VARCHAR(216) 1 必要 VARCHAR(213) 5 すべての列 CHAR(42) 1494 すべての列 VARCHAR にはそれぞれ余分に 2 バ イ ト が予約 さ れます。先頭の ヌ ル イ ン ジ ケー タ 用の 1 バ イ ト と 末尾の 1 バ イ ト です。末尾のバ イ ト は、VARCHAR が ZSTRING と し て実装 さ れ る ためです。 CHAR にはそれぞれ先頭のバ イ ト が ヌ ル イ ン ジ ケー タ 用に予約 さ れます。 し たがっ て、レ コ ー ド サ イ ズは 1 x 218 + 5 x 215 + 1494 x 43 = 65535 バ イ ト にな り ます。 こ の例では、 別の列が ど の よ う な長 さ であ っ て も 、 固定長制限を超えない で追加す る こ と はで き ません。 削除規則 ON DELETE 句を含む こ と で、 外部キー値が参照す る 親テーブルの行を削 除 し よ う と す る 場合に Pervasive PSQL に よ り 適用 さ れ る 削除規則を定義す る こ と がで き ます。 選択可能な削除規則は次の と お り です。 CASCADE を指定 し た場合、 Pervasive PSQL はカ ス ケー ド 削除規則を使 用 し ます。 ユーザーが親テーブルの行を削除す る と 、デー タ ベース エン ジ ンに よ っ て従属テーブルの対応す る 行が削除 さ れます。 RESTRICT を指定 し た場合、 Pervasive PSQL は削除制限規則を使用 し ま す。 ユーザーは、 親テーブル内で、 外部キー値が参照す る 行を削除で き ません。 削除規則を指定 し ない場合、 Pervasive PSQL はデフ ォ ル ト で制限規則を適 用 し ます。 3-65 SQL 構文 リ フ ァ レ ン ス DELETE CASCADE は注意 し て使用 し て く だ さ い。 Pervasive PSQL では、 自己参照す る テーブルに対 し 、 循環す る カ ス ケー ド 削除を使用で き ま す。 『Advanced Operations Guide』 の 「削除カ ス ケー ド 」 (6-5 ページ) に記載 さ れてい る 例を参照 し て く だ さ い。 更新規則 Pervasive PSQL は更新制限規則を適用 し ます。 こ の規則は、 親テーブルが 外部キー値 と 合致す る 主キー値を持たない場合、 その外部キー値を含む行 が追加 さ れない よ う に し ます。 こ の規則が適用 さ れ る か ど う かは、 更新規 則を明示的に指定で き る オプシ ョ ンの ON UPDATE 句の使用に よ り ます。 IN DICTIONARY 「ALTER TABLE」 (3-8 ページ) の IN DICTIONARY の解説を参照 し て く だ さ い。 USING USING キ ー ワ ー ド を 使用す る と 、 特定 の デー タ フ ァ イ ル を CREATE TABLE ま たは ALTER TABLE ア ク シ ョ ン と 関連付け る こ と がで き ます。 Pervasive PSQL は接続に名前付 き デー タ ベース を必要 と す る ので、 指定す る パス名は常に単純な フ ァ イ ル名であ る か、 ま たは相対パ ス と フ ァ イ ル名 でなければな り ません。 パ スは常に、 接続す る 名前付 き デー タ ベース に指 定 さ れた最初のデー タ パ ス と の相対にな り ます。 渡 さ れたパス名お よ びフ ァ イ ル名は、 SQLPrepare が呼び出 さ れ る と き に部 分的に検証 さ れます。 パ ス名を指定す る と き は、 次の規則に従 う 必要があ り ます。 3-66 テ キ ス ト は、 文法定義で示 さ れてい る よ う に、 一重引用符で囲ま なけれ ばな り ません。 テ キ ス ト の長 さ は、指定 さ れたエン ト リ が X$File 内の Xf$Loc に収ま る よ う に、 1 か ら 64 文字ま ででなければな り ません。 エ ン ト リ は入力 し た ま ま正確に Xf$Loc に格納 さ れます (ただ し 、 後続の空白は切 り 捨て ら れ、 無視 さ れます)。 パ ス は、 単純 な 相対パ ス で な け れば な り ま せん。 サーバー ま た は ボ リ ュ ーム を参照す る パ スは許可 さ れません。 1 つの ピ リ オ ド ("." は現在のデ ィ レ ク ト リ )、 2 つの ピ リ オ ド (".." は親 デ ィ レ ク ト リ )、 円記号 "\"、 あ る いは こ れ ら 3 つのあ ら ゆ る 組み合わせ を含む相対パス を使用で き ます。 パス は、SQL テーブル名を表すフ ァ イ ル名を含んでい る 必要があ り ます (パ ス名は円記号 "\" ま たはデ ィ レ ク ト リ 名で終わっ てはいけ ません) 。 フ ァ イ ル名は、 相対パ ス付 き で指定 さ れた フ ァ イ ル名 も 含めてすべて、名前付 き デー タ ベース の設定で定義 さ れてい る 最初のデー タ パ ス と の相対にな り ます。 ス テー ト メ ン ト の文法 ルー ト ベース の相対パ ス も 使用で き ます。 た と えば、 最初のデー タ パ ス を D:\PVSW\DEMODATA と し た場合、 Pervasive PSQL は次の ス テー ト メ ン ト 内のパス名を D:\TEMP\TEST123.BTR と 解釈 し ます。 相対パス内の円記号 ("\") 文字は、 好みに応じて、 LINUX スタイル ("/") と 通常使われ る 円記号 ("\") の ど ち ら を指定 し て も か ま い ま せん。 必 要であれば、 2 種類の記号を混在 さ せて使用す る こ と も で き ます。 デ ィ レ ク ト リ 構造ス キーマは知っ てい る か も し れませんが、接続 さ れてい る サーバーの種類を知っ てい る (あ る いは管理 し てい る ) と は限 ら ないの で、こ れは便利な機能です。 パ ス は入力 し た と お り に X$File に格納 さ れ ます。 Pervasive PSQL エ ン ジ ンは、 パ ス を利用 し て フ ァ イ ルを開 く 際、 円記号文字 を 適切な プ ラ ッ ト フ ォ ー ム の タ イ プに変換 し ま す。 ま た、 デー タ フ ァ イ ルはサポー ト さ れ る すべてのプ ラ ッ ト フ ォ ーム間でバ イ ナ リ 互換性を共有す る ため、デ ィ レ ク ト リ 構造がプ ラ ッ ト フ ォーム間で 同一であ る (お よ び、 パ ス に基づ く フ ァ イ ル名が相対パ ス で指定 さ れて い る ) 限 り は、 デー タ ベース フ ァ イ ルお よ び DDF を こ れ ら に変更を加 え る こ と な く 、あ る プ ラ ッ ト フ ォームか ら 別のプ ラ ッ ト フ ォームへ移動 す る こ と がで き ます。 こ れは、 複数のプ ラ ッ ト フ ォーム に ま たが っ て、 標準化 さ れたデー タ ベー ス ス キーマ を よ り 簡単に配置す る のに役立ち ます。 相対パス を指定す る 場合、 まず USING 句のデ ィ レ ク ト リ 構造は存在 し てい る 必要があ り ます。Pervasive PSQL は、USING 句で指定 さ れたパ ス 条件を満たすデ ィ レ ク ト リ を作成 し ません。 CREATE TABLE t1 USING '\temp\test123.btr' (c1 int) USING 句を使用 し て、テーブル と 関連付け る デー タ フ ァ イ ルの物理 ロ ケー シ ョ ン を指定 し ます。 こ れは、 既存デー タ フ ァ イ ルのテーブル定義を作成 す る と き 、 ま たは新 し いデー タ フ ァ イ ルの名前や物理 ロ ケーシ ョ ン を明示 的に指定 し たい場合は必須です。 USING 句を使用 し ない と 、 Pervasive PSQL に よ り 固有の フ ァ イ ル名 (テー ブル名を基に拡張子 .MKD を付けて) が生成 さ れ、 デー タ ベース名 と 関連 付け ら れたデー タ フ ァ イ ル パ ス に指定 さ れてい る 最初のデ ィ レ ク ト リ に デー タ フ ァ イ ルが作成 さ れます。 USING 句が既存のデー タ フ ァ イ ルを示す場合は、 Pervasive PSQL に よ り DDF にテーブルが作成 さ れ、 SQL_SUCCESS_WITH_INFO が返 さ れ ま す。 返 さ れた情報 メ ッ セージは、辞書エントリが既存のデータ ファイルをポイントす るようになったことを示します。 CREATE TABLE で SQL_SUCCESS のみが返 さ れ る よ う に し たい場合は、 CREATE ス テー ト メ ン ト で IN DICTIONARY を指定 し ま す。 WITH REPLACE を指定す る (下記参照) と 、 同一名の既 存デー タ フ ァ イ ルはすべて破棄 さ れ、新規に作成 し た フ ァ イ ルで上書 き さ れます。 メ モ 既存のデー タ フ ァ イ ルを指定 し た場合、 Pervasive PSQL は成功 を表すス テー タ ス コ ー ド を返 し ます。 3-67 SQL 構文 リ フ ァ レ ン ス 既存のデー タ フ ァ イ ルに対 し て リ レーシ ョ ナル イ ンデ ッ ク ス 定義を作成 す る (た と えば、 IDENTITY 型の列定義を含む CREATE TABLE USING ス テー ト メ ン ト を使用す る ) たびに、 Pervasive PSQL はその フ ァ イ ルに定義 さ れてい る Btrieve イ ンデ ッ ク ス を自動的にチ ェ ッ ク し 、 既存の Btrieve イ ン デ ッ ク ス が リ レ ー シ ョ ナル イ ン デ ッ ク ス 定義に必要 な パ ラ メ ー タ の セ ッ ト を提供 し てい る か ど う か を判定 し ます。既存の Btrieve イ ンデ ッ ク ス と 作成す る 新 し い定義が一致す る 場合は、 リ レーシ ョ ナル イ ンデ ッ ク ス定 義 と 既存の Btrieve イ ンデ ッ ク ス の間に関連付けが作成 さ れ ま す。 一致す る イ ンデ ッ ク ス がない場合は、 Pervasive PSQL は新 し い イ ンデ ッ ク ス定義 を作成 し 、 IN DICTIONARY が指定 さ れていなければ、 デー タ フ ァ イ ルに 新 し い イ ンデ ッ ク ス を作成 し ます。 WITH REPLACE WITH REPLACE が USING キー ワ ー ド と 共に指定 さ れた と き はいつで も 、 Pervasive PSQL は自動的に既存の フ ァ イ ル名を指定 さ れた フ ァ イ ル名で上 書 き し ます。 オペレーテ ィ ン グ シ ス テ ムが フ ァ イ ルの上書 き を許 し てい る 限 り 、 既存フ ァ イ ルは常に上書 き さ れます。 WITH REPLACE はデー タ フ ァ イ ルにのみ作用 し 、DDF には作用 し ません。 WITH REPLACE を使用する 際には次の規則が適用 さ れます。 WITH REPLACE は USING と 併せてのみ使用で き ます。 IN DICTIONARY と 一緒に使用す る と 、 WITH REPLACE は無視 さ れま す。 IN DICTIONARY は DDF にのみ作用す る こ と を指定す る も のだか ら です。 CREATE TABLE ス テ ー ト メ ン ト で WITH REPLACE を 使用 し た 場合、 USING 句で指定 さ れた ロ ケーシ ョ ン に フ ァ イ ルが存在す る と 、 Pervasive PSQL は新規デー タ フ ァ イ ル を 作成 し て その既存 フ ァ イ ル と 置 き 換え ま す。Pervasive PSQL は、同 じ 名前を持つ元の フ ァ イ ルに格納 さ れてい る デー タ をすべて破棄 し ま す。 WITH REPLACE を使用 し ていない と き 、 指定 さ れた ロ ケーシ ョ ンに フ ァ イ ルが存在す る と 、 Pervasive PSQL は ス テー タ ス コ ー ド を返 し 、 新 し い フ ァ イ ルを作成 し ません。 WITH REPLACE はデー タ フ ァ イ ルにのみ作用 し 、 辞書内のテーブル定義 には作用 し ません。 メ モ ALTER TABLE で WITH REPLACE を使用 し て も 、 デー タ は消 失 し た り 破棄 さ れません。 新 し く 作成 さ れたデー タ フ ァ イ ルは、 既存 フ ァ イ ルを上書 き し た フ ァ イ ルであ っ て も 、 以前の フ ァ イ ルのデー タ をすべて含んでい ます。 ALTER TABLE コ マ ン ド を使用す る こ と で、 デー タ を失 う こ と はあ り ません。 3-68 ス テー ト メ ン ト の文法 DCOMPRESS DCOMPRESS オプシ ョ ン は、 デ ィ ス ク 上の フ ァ イ ル サ イ ズ を減 ら すため に、指定 し たテーブルのデー タ フ ァ イ ルがデー タ 圧縮を使用す る こ と を指 定 し ます。 次の例では、 フ ァ イ ル圧縮を行 う 、 ページ サ イ ズが 1024 バ イ ト のテーブ ルが作成 さ れます。 CREATE TABLE t1 DCOMPRESS PAGESIZE=1024 (c1 INT DEFAULT 10, c2 CHAR(10) DEFAULT 'abc') PAGESIZE PAGESIZE オプシ ョ ンは、 指定 し たテーブルのデー タ フ ァ イ ルが使用す る ページのサ イ ズ バ イ ト 数を指定 し ます。 サ イ ズの値には、512 か ら 4096 ま での 512 の倍数を指定で き ます。デフ ォ ル ト 値は 4096 バ イ ト です。一般的 に、 ほ と ん ど のアプ リ ケーシ ョ ンがデフ ォ ル ト のページ サ イ ズで最適に動 作 し ます。 次の例では、 フ ァ イ ル圧縮を行 う 、 ページ サ イ ズが 3584 バ イ ト のテーブ ルが作成 さ れ る と 共に、相対パ ス に よ っ て識別 さ れ る 特定のデー タ フ ァ イ ル、 ..\data1.mkd の作成が指定 さ れます。 CREATE TABLE t1 DCOMPRESS PAGESIZE=3584 USING '..\data1.mkd' (c1 INT DEFAULT 10, c2 CHAR(10) DEFAULT 'abc') LINKDUP 複数の レ コ ー ド が、 イ ンデ ッ ク ス キーに同一の重複 し た値を持つ こ と がで き ます。 重複キー値を持つレ コ ー ド を記憶 し てお く 2 つの方法は、 リ ン ク 重複 (linkdup) お よ び繰 り 返 し 重複 と 呼ばれます ( こ れ ら の方法の詳細な 説明につい て は、 『Advanced Operations Guide』 の 「重複キーの操作方法」 (13-12 ページ) を参照 し て く だ さ い)。 LINKDUP キーワ ー ド の使用には次の条件が適用 さ れます。 LINKDUP キーワー ド が指定 さ れていない場合、 CREATE INDEX ス テー ト メ ン ト は繰 り 返 し 重複方法を使用 し ます。 LINKDUP キーワ ー ド が指定 さ れてい る 場合は以下が適用 さ れます。 CREATE INDEX ス テー ト メ ン ト は、 ポ イ ン タ 数に指定 し た値に達 す る ま では リ ン ク 重複方法を使用 し ます。 ポ イ ン タ 数に指定 し た値に達 し た ら 、 CREATE INDEX ス テー ト メ ン ト は繰 り 返 し 重複方法を使用 し ます。 ポ イ ン タ 数に指定 し た値に達 し てい る と き 、 リ ン ク 重複 イ ンデ ッ ク ス を削除す る と 、 CREATE INDEX ス テー ト メ ン ト は次のキーに対 し て リ ン ク 重複方法を使用 し ます。 CREATE INDEX ス テー ト メ ン ト は、 リ ン ク 重複キー用のポ イ ン タ が予約 さ れていない場合には繰 り 返 し 重複キーを作成で き ません。 3-69 SQL 構文 リ フ ァ レ ン ス ALTER TABLE ス テー ト メ ン ト は LINKDUP オプシ ョ ン をサポー ト し てい ません。 例 次 の 例 で は、 指 定 さ れ た デ ー タ 型 を 使 用 し て、 Student_ID、 Transaction_Number、 Log、 Amount_Owed、 Amount_Paid、 Registrar_ID、 お よ び Comments の列か ら 成 る Billing と い う 名前のテーブルがデー タ ベース に 作成 さ れます。 CREATE TABLE Billing (Student_ID UBIGINT, Transaction_Number USMALLINT, Log TIMESTAMP, Amount_Owed DECIMAL(6,2), Amount_Paid DECIMAL(6,2), Registrar_ID DECIMAL(10,0), Comments LONGVARCHAR) 次 の 例 で は、 ID、 Dept_Name、 Designation、 Salary、 Building_Name、 Room_Number、 お よ び Rsch_Grant_Amount の列か ら 成 り 、 列 ID に基づ く 主キーを持つ Faculty と い う 名前のテーブルがデー タ ベー ス に作成 さ れ ま す。 CREATE TABLE Faculty (ID Dept_Name Designation Salary Building_Name Room_Number Rsch_Grant_Amount PRIMARY KEY(ID)) UBIGINT, CHAR(20) CASE, CHAR(10) CASE, CURRENCY, CHAR(25) CASE, UINTEGER, DOUBLE, 次の例は、主キーであ る ID 列が UNIQUE に指定 さ れてい る 点を除いては、 先に示 し た例に似てい ます。 CREATE TABLE organizations (ID UBIGINT UNIQUE, Name LONGVARCHAR, Advisor CHAR(30), Number_of_people INTEGER, Date_started DATE, Time_started TIME, Date_modified TIMESTAMP, Total_funds DOUBLE, Budget DECIMAL(2,2), 3-70 ス テー ト メ ン ト の文法 Avg_funds REAL, President VARCHAR(20) CASE, Number_of_executives SMALLINT, Number_of_meetings TINYINT, Office UTINYINT, Active BIT, PRIMARY KEY(ID)) 次の例では、 生徒の住所を保存す る ために StudentAddress と い う テーブル が必要であ る と し ます。 Student テーブルの id 列を主キーに変更 し てか ら 、 StudentAddress テーブルを作成 し なければな り ません (Student テーブルは DEMODATA サンプル デー タ ベース の一部です)。 StudentAddress テーブル の作成方法を 4 種類示 し ます。 まず最初に、 Student テーブルの id 列を主キーに し ます。 ALTER TABLE Student ADD PRIMARY KEY (id) 次の ス テー ト メ ン ト は、 DELETE CASCADE 規則を使っ て、 Student テーブ ルの id 列 を 参照す る 外部キーを 持つ StudentAddress テーブル を作成 し ま す。 こ れは、 Student テーブル ( こ の場合、 Student は親テーブルにな る ) か ら 行が削除 さ れ る と き はいつ も 、 StudentAddress テーブル内でその行 と 同 じ id を持つすべての行 も 削除 さ れ る こ と を示 し ます。 CREATE TABLE StudentAddress (id UBIGINT REFERENCES Student (id) ON DELETE CASCADE, addr CHAR(128)) 次の ス テー ト メ ン ト は、 DELETE RESTRICT 規則を使っ て、 Student テー ブルの id 列を参照す る 外部キーを持つ StudentAddress テーブルを作成 し ま す。 こ れは、 Student テーブルか ら 行が削除 さ れた と き 、 その行 と 同 じ id を 持つ行が StudentAddress テーブルに存在す る 場合は常に、 エ ラ ーが発生す る こ と を示 し ま す。 親テーブルであ る Student テーブルの行を削除す る に は、 事前に StudentAddress テーブルでその id を持つ行をすべて明示的に削 除す る 必要があ り ます。 CREATE TABLE StudentAddress (id UBIGINT REFERENCES Student (id) ON DELETE RESTRICT, addr CHAR(128)) 次の ス テー ト メ ン ト は、 UPDATE RESTRICT 規則を使っ て、 Student テーブ ルの id 列 を 参照す る 外部キーを 持つ StudentAddress テーブル を作成 し ま す。 こ れは、 Student テーブルに存在 し な い id を 持つ行が StudentAddress テーブルに追加 さ れた場合は、 エ ラ ーが発生す る こ と を示 し ます。 言い換 え る と 、 外部キーに親の行を参照 さ せ る には、 その前に親の行がなければ な ら ない と い う こ と です。こ れは Pervasive PSQL のデフ ォ ル ト の動作です。 なお、 Pervasive PSQL では、 こ れ以外の更新規則は一切サポートしていませ ん。 し たがっ て、 こ の規則は明示的に示 し て も 示 さ な く て も か ま い ません。 CREATE TABLE StudentAddress (id UBIGINT REFERENCES Student (id) ON UPDATE RESTRICT, addr CHAR(128)) 3-71 SQL 構文 リ フ ァ レ ン ス 次の ス テー ト メ ン ト は、 DELETE RESTRICT お よ び UPDATE RESTRICT 規 則 を 使 っ て、 Student テ ー ブ ル の id 列 を 参照す る 外部 キ ー を 持つ StudentAddress テーブルを作成 し ます。 Pervasive PSQL パーサは RI 規則を 使っ て こ の構文を受け入れ ま す。 ただ し 、 上述の と お り 、 Pervasive PSQL では、更新規則に関 し ては UPDATE RESTRICT 以外の規則が機能 し ないの で、 UPDATE RESTRICT 規則は余分です。 CREATE TABLE StudentAddress (id UBIGINT REFERENCES Student (id) ON DELETE RESTRICT, addr CHAR(128)) 次の例は、 テーブルの作成時にオル タ ネー ト コ レ ーテ ィ ン グ シーケ ン ス (ACS) を使用す る 方法を示 し ます。 使用す る ACS フ ァ イ ルは、 Pervasive PSQL で提供 さ れ る サンプル フ ァ イ ルです。 CREATE TABLE t5 (c1 CHAR(20) COLLATE 'c:\pvsw\samples\upper.alt') upper.alt は、 ソ ー ト す る 際に大文字 と 小文字を同等に扱い ます。 た と えば、 デー タ ベース に abc、 ABC、 DEF、 Def と い う 値が こ の順序で挿入 さ れてい る 場合、 upper.alt を使っ て ソ ー ト す る と 、 abc、 ABC、 DEF、 Def の よ う に 返 さ れます (値 abc と ABC、 DEF と Def は同 じ も の と 判断 さ れ、 こ れ ら は 挿入 さ れた順序で返 さ れます) 。 標準の ASCII ソ ー ト では、 大文字は小文 字の前に配列 さ れてお り 、 ソ ー ト 結果は ABC、 DEF、 Def、 abc の よ う にな り ます。 次の例は、 テーブル t1 を作成 し 、 リ ン ク 重複キー用に予約す る ポ イ ン タ の 数を 4 に設定 し ます。 CREATE INDEX ス テー ト メ ン ト に よ っ て、 テーブル に イ ンデ ッ ク ス キーを作成 し ます。 DROP table t1 CREATE TABLE t1 LINKDUP=4 (c1 int, c2 int, c3 int) CREATE CREATE CREATE CREATE CREATE CREATE INDEX link_1 INDEX link_2 UNIQUE INDEX INDEX link_4 INDEX link_5 INDEX link_6 on t1(c1,c2) on t1(c1,c3) link_3 on t1(c3) on t1(c1) on t1(c2) on t1(c2,c3) CREATE INDEX ス テー ト メ ン ト の結果は次の よ う にな り ます。 リ ン ク 重複キー : link_1、 link_2、 link_4、 link_5 繰 り 返 し 重複キー : link_6 ( リ ン ク 重複キーに使用 さ れ る ポ イ ン タ の数 が指定値の 4 に達 し たためです) DROP INDEX link_2 CREATE INDEX link_7 on t1(c3,c1) こ れ ら 2 つの ス テー ト メ ン ト を実行する と 、 次の よ う にな り ます。 3-72 ス テー ト メ ン ト の文法 リ ン ク 重複キー : link_1、 link_4、 link_5、 link_7 (DROP INDEX ス テー ト メ ン ト に よ っ て、 リ ン ク 重複キーに使用 さ れ る ポ イ ン タ の数が 3 に 減っ たので、 link_7 を リ ン ク 重複キーにす る こ と がで き ます 繰 り 返 し 重複キー : link_6 関連項目 「DROP TABLE」 (3-98 ページ) 3-73 SQL 構文 リ フ ァ レ ン ス CREATE TRIGGER CREATE TRIGGER ス テー ト メ ン ト に よ り 、デー タ ベース内に新 し い ト リ ガ を作成 し ます。 ト リ ガ と は、 INSERT、 UPDATE、 ま たは DELETE に よ っ て テーブル内のデー タ が変更 さ れ る と き に自動的に実行 さ れ る ス ト ア ド プ ロ シージ ャ の一種です。 通常の ス ト ア ド プ ロ シージ ャ と は違っ て、 ト リ ガは直接実行で き ず、 パ ラ メ ー タ を持つ こ と も で き ません。 ま た、 ト リ ガは結果セ ッ ト を返 さ ず、 ト リ ガ を ビ ュ ーに定義す る こ と も で き ません。 構文 CREATE TRIGGER ト リ ガ名 before/after 挿入 / 更新 / 削除 ON テーブル名 [ ORDER 番号 ] [ REFERENCING 参照エ イ リ ア ス ] FOR EACH ROW [ WHEN プ ロ シージ ャ 検索条件 ] プ ロ シージ ャ ス テー ト メ ン ト ト リ ガ名 ::= ユーザー定義名 before/after ::= BEFORE | AFTER 挿入 / 更新 / 削除 ::= INSERT | UPDATE | DELETE 参照エ イ リ ア ス ::= OLD [AS] 相関名 [NEW [AS] 相関名 ] | NEW [AS] 相関名 [OLD [AS] 相関名 ] 相関名 ::= ユーザー定義名 備考 こ の関数は、 『Microsoft ODBC Programmer’s Reference』 に説明 さ れてい る SQL 文法の拡張で あ り 、 SQL 3/PSM (Persistent Stored Modules) 仕様のサ ブセ ッ ト を実装す る も のです。 メ モ ト リ ガ内では、 変数名は コ ロ ン (:) で始ま る 必要があ り ます。 OLD (OLD 相関名) と NEW (NEW 相関名) は ト リ ガ内部で使用で き 、 通常の ス ト ア ド プ ロ シージ ャ では使用で き ません。 DELETE ま たは UPDATE ト リ ガでは、 "OLD" ま たは OLD 相関名 を列名の 前に付加 し て、 更新ま たは削除操作の前にデー タ 行内の列を参照す る 必要 があ り ます。 INSERT ま たは UPDATE ト リ ガでは、"NEW" ま たは NEW 相関名 を列名の 前に付加 し て、 挿入ま たは更新 し よ う と す る 行内の列を参照す る 必要があ り ます。 3-74 ス テー ト メ ン ト の文法 ト リ ガ名は辞書内で固有の名前でなければな り ません。 ト リ ガはその種類に よ っ て、 UPDATE、 INSERT、 ま たは DELETE ス テー ト メ ン ト の実行の前か後に実行 さ れます。 メ モ CREATE TRIGGER ス テー ト メ ン ト には、 CREATE PROCEDURE と 同様の長 さ やそれ以外の制約があ り ます。 詳細については、 「制限」 (3-53 ページ) お よ び 「デー タ 型の制限」 (3-53 ページ) を参照 し て く だ さ い。 例 次の例では、 Tuition テーブルに挿入 さ れた新規の値を TuitionIDTable に記 録す る ト リ ガが作成 さ れます。 CREATE TABLE Tuitionidtable (PRIMARY KEY(id), id UBIGINT) CREATE TRIGGER InsTrig BEFORE INSERT ON Tuition REFERENCING NEW AS Indata FOR EACH ROW INSERT INTO Tuitionidtable VALUES(Indata.ID); Tuition の INSERT に よ り ト リ ガが呼び出 さ れます。 次の例では、 ト リ ガ を使っ て A と B の 2 つのテーブルの同期を と る 方法を 示 し ます。 両方のテーブルは同 じ 構造体を持ち ます。 CREATE TABLE A (col1 INTEGER, col2 CHAR(10)) CREATE TABLE B (col1 INTEGER, col2 CHAR(10)) CREATE TRIGGER MyInsert AFTER INSERT ON A FOR EACH ROW INSERT INTO B VALUES (NEW.col1, NEW.col2); CREATE TRIGGER MyDelete AFTER DELETE ON A FOR EACH ROW DELETE FROM B WHERE B.col1 = OLD.col1 AND B.col2 = OLD.col2; CREATE TRIGGER MyUpdate AFTER UPDATE ON A FOR EACH ROW UPDATE B SET col1 = NEW.col1, col2 = NEW.col2 WHERE B.col1 = OLD.col1 AND B.col2 = OLD.col2; こ の例の OLD と NEW は、 テーブル A が位置付けでない SQL ス テー ト メ ン ト で変更 さ れた場合のみテーブルの同期を保つので注意 し て く だ さ い。 ODBC の SQLSetPos API ま たは位置付けの UPDATE か DELETE を使用 し た場合は、 テーブル A が重複す る レ コ ー ド を含ま ない場合のみテーブルの 同期が保たれます。 一方の レ コ ー ド は変更す る が、 も う 一方の重複す る レ コ ー ド は変更 し ない ま ま に し てお く SQL ステートメントは作成できません。 3-75 SQL 構文 リ フ ァ レ ン ス 関連項目 「DROP TRIGGER」 (3-99 ページ) 3-76 ス テー ト メ ン ト の文法 CREATE VIEW CREATE VIEW ス テー ト メ ン ト を使用 し て、 デー タ ベー ス 上の保存済み ビ ュ ーを定義 し ます。 構文 CREATE VIEW ビ ュ ー名 [( 列名 [, 列名 ]...)] AS ク エ リ スペ ッ ク ビ ュ ー名 ::= ユーザー定義名 備考 ビ ュ ーは一種のデー タ ベース オブジ ェ ク ト で、 ク エ リ を格納 し 、 テーブル の よ う に振る 舞い ます。 ビ ュ ーには行 と 列のセ ッ ト が含まれます。 ビ ュ ー を介 し て ア ク セ ス さ れ る デー タ は 1 つ以上のテーブルに格納 さ れてお り 、 テーブルは SELECT ス テー ト メ ン ト に よ り 参照 さ れ ま す。 ビ ュ ーが返す デー タ は、 そのビ ュ ーが参照 さ れ る 都度、 動的に作成 さ れます。 ビ ュ ー名の最大長は 20 バ イ ト です。 ビ ュ ー内の列の最大数は 256 です。 ビ ュ ー定義の制限は 64KB です。 Pervasive PSQL は グ ループ化 ビ ュ ー を サ ポー ト し て い ま す。 グ ループ化 ビ ュ ー と は、 SELECT リ ス ト に次の項目を含んでい る ビ ュ ーの こ と です。 DISTINCT GROUP BY ス カ ラ 関数 ス カ ラ サブ ク エ リ TOP UNION サブ ク エ リ が式であれば、 サブ ク エ リ 内でグループ化ビ ュ ーを使用で き ま す。 演算子 IN、 EXISTS、 ALL、 ま たは ANY と 関連付け ら れてい る サブ ク エ リ は式 と 見な さ れません。 ビ ュ ー定義にはプ ロ シージ ャ を含め る こ と も 、ORDER BY を含め る こ と も で き ません。 例 次のステートメントによって、 vw_Person と い う 名前の ビ ュ ーが作成 さ れ、 そ れに よ っ て大学内の登録 さ れて い る 全員の電話番号 リ ス ト が作成 さ れ ま す。 このビューには姓、 名および電話番号が表示され、 列ごとにヘッダが付き ます。 Person テーブルは DEMODATA サンプル データベースの一部です。 CREATE VIEW vw_Person (lastn,firstn,phone) AS SELECT Last_Name, First_Name,Phone FROM Person 3-77 SQL 構文 リ フ ァ レ ン ス ビ ュ ーについての こ れ以降の ク エ リ では、 次の例に示す よ う に、 SELECT ス テー ト メ ン ト 内の列見出 し を使用で き ます。 SELECT lastn, firstn FROM vw_Person 関連項目 「DROP VIEW」 (3-100 ページ) 3-78 ス テー ト メ ン ト の文法 DECLARE 備考 DECLARE ス テー ト メ ン ト を使用 し て、 SQL 変数を定義 し ます。 カー ソ ル と 変数は ス ト ア ド プ ロ シージ ャ と ト リ ガ内部でのみ許可 さ れ る ため、 こ の ス テー ト メ ン ト は ス ト ア ド プ ロ シージ ャ ま たは ト リ ガの内部で のみ使用で き ます。 変数名は コ ロ ン (:) で始ま る 必要があ り ます。 こ れは、 変数やパ ラ メ ー タ を定義す る と き と 使用す る と き の両方に当ては ま り ます。 SET VARIABLE を使っ て変数に値を設定す る には、 まず変数が宣言 さ れていなければな り ません。 各変数について、 別々の DECLARE ス テー ト メ ン ト を使用 し ます (単一の ス テ ー ト メ ン ト で複数の変数は宣言で き ま せん) 。 CHAR、 DECIMAL、 NUMERIC お よ び VARCHAR な ど、 サ イ ズや有効桁数、 小数部桁数が必要 なデー タ 型には、 それ ら の値を指定 し ます。 例 次の例は、 変数の宣言方法を、 サ イ ズ、 有効桁数、 ま たは小数部桁数が必 要な変数の宣言 も 含めて示 し てい ます。 DECLARE DECLARE DECLARE DECLARE DECLARE DECLARE DECLARE :SaleItem CHAR(15); :CruiseLine CHAR(25) DEFAULT 'Open Seas Tours' :UnitWeight DECIMAL(10,3); :Titration NUMERIC(12,3); :ReasonForReturn VARCHAR(200); :Counter INTEGER = 0; :CurrentCapacity INTEGER = 9; 関連項目 「CREATE PROCEDURE」 (3-50 ページ) 「CREATE TRIGGER」 (3-73 ページ) 「SET VARIABLE」 (3-188 ページ) 3-79 SQL 構文 リ フ ァ レ ン ス DECLARE CURSOR DECLARE CURSOR ス テー ト メ ン ト に よ り 、 SQL カー ソ ルを定義 し ます。 構文 DECLARE カー ソ ル名 CURSOR READ ONLY] FOR 選択ス テー ト メ ン ト [FOR UPDATE | FOR 備考 DECLARE では、 カー ソ ル と 変数は ス ト ア ド プ ロ シージ ャ と ト リ ガ内部で のみ許可 さ れ る ため、 こ の ス テー ト メ ン ト は ス ト ア ド プ ロ シージ ャ ま たは ト リ ガ内部でのみ使用で き ます。 カー ソ ルのデフ ォ ル ト 動作は読み取 り 専用です。 し たがっ て、 更新 (書 き 込み ま たは削除) を明示的に示すには FOR UPDATE を使用す る 必要があ り ます。 例 次の例では、 Tuition テーブルの Degree、 Residency、 お よ び Cost_Per_Credit 列か ら 値を選択 し 、 それ ら を ID 番号順に並べ る カー ソ ルが作成 さ れます。 DECLARE BTUCursor CURSOR FOR SELECT Degree, Residency, Cost_Per_Credit FROM Tuition ORDER BY ID; 次の例では、 削除を実行す る ために FOR UPDATE が使用 さ れてい ます。 CREATE PROCEDURE MyProc(IN :CourseName CHAR(7)) AS BEGIN DECLARE c1 CURSOR FOR SELECT name FROM course WHERE name = :CourseName FOR UPDATE; OPEN c1; FETCH NEXT FROM c1 INTO :CourseName; DELETE WHERE CURRENT OF c1; CLOSE c1; END; CALL MyProc('HIS 305') DECLARE cursor1 CURSOR FOR SELECT Degree, Residency, Cost_Per_Credit FROM Tuition ORDER BY ID FOR UPDATE; 3-80 ス テー ト メ ン ト の文法 関連項目 「CREATE PROCEDURE」 (3-50 ページ) 「カー ソ ル ループの例」 (3-59 ページ) 「CREATE TRIGGER」 (3-73 ページ) 3-81 SQL 構文 リ フ ァ レ ン ス DEFAULT DEFAULT キーワ ー ド は以下の コ ン テ キ ス ト で使用で き ます。 CREATE TABLE ス テー ト メ ン ト の列定義 ALTER TABLE ス テー ト メ ン ト の列定義 INSERT ス テー ト メ ン ト の VALUES 句 UPDATE ス テー ト メ ン ト の VALUES 句 CREATE TABLE ま たは ALTER TABLE ス テー ト メ ン ト に指定す る デフ ォ ル ト 値 ( リ テ ラ ルま たは式) は、 次の条件を満た し てい る 必要があ り ます。 列のデー タ 型 と 一致 し てい る 列に設定 さ れてい る 範囲や長 さ な ど の制約に従っ てい る INSERT お よ び UPDATE ス テー ト メ ン ト では、 DEFAULT 値が定義 さ れて い る 列に値 を 指定す る 必要は あ り ま せん。 こ の よ う な場合は、 Pervasive PSQL が DEFAULT 式を計算 し 、 その結果値を列の値 と し て使用 し ます。 構文 次の ス テー ト メ ン ト の構文を参照 し て く だ さ い。 3-82 「ALTER TABLE」 (3-8 ページ) 「CREATE TABLE」 (3-62 ページ) 「INSERT」 (3-120 ページ) 「UPDATE」 (3-197 ページ) ス テー ト メ ン ト の文法 備考 次の表に示 さ れてい る よ う に、 あ ら ゆ る デー タ 型の列に対 し 、 DEFAULT 値 と し て式を指定す る こ と がで き ます。 表 3-3 許可 さ れている DEFAULT 式のデー タ 型 リ レーシ ョ ナル デー タ 型 許可 さ れている DEFAULT 式の型 (ODBC デー タ 型) SMALLIDENTITY1 SQL_BIT IDENTITY1 SQL_TINYINT BFLOAT4、 BFLOAT8 SQL_SMALLINT CURRENCY SQL_INTEGER DECIMAL SQL_BIGINT REAL SQL_REAL DOUBLE SQL_FLOAT TINYINT、 UTINYINT SQL_DOUBLE SMALLINT、 USMALLINT SQL_DECIMAL INTEGER、 UINTEGER SQL_NUMERIC BIGINT、 UBIGINT SQL_CHAR NUMERIC SQL_VARCHAR NUMERICSA SQL_LONGVARCHAR NUMERICSTS BIT BINARY SQL_BIT LONGVARBINARY SQL_TINYINT SQL_SMALLINT SQL_INTEGER SQL_BIGINT SQL_CHAR SQL_VARCHAR SQL_LONGVARCHAR BINARY LONGVARBINARY 3-83 SQL 構文 リ フ ァ レ ン ス 表 3-3 許可 さ れてい る DEFAULT 式のデー タ 型 リ レーシ ョ ナル デー タ 型 許可 さ れている DEFAULT 式の型 (ODBC デー タ 型) CHAR SQL_BIT VARCHAR SQL_TINYINT LONGVARCHAR SQL_SMALLINT SQL_INTEGER SQL_BIGINT SQL_REAL SQL_FLOAT SQL_DOUBLE SQL_DECIMAL SQL_NUMERIC SQL_DATE SQL_TIME SQL_TIMESTAMP SQL_CHAR SQL_VARCHAR SQL_LONGVARCHAR DATE SQL_DATE SQL_TIMESTAMP SQL_CHAR SQL_VARCHAR SQL_LONGVARCHAR 式のデー タ 型が TIMESTAMP の場合 は、 日付部分のみが抽出 さ れて使われ ます。 TIME SQL_TIME SQL_TIMESTAMP SQL_CHAR SQL_VARCHAR SQL_LONGVARCHAR 式のデー タ 型が TIMESTAMP の場合 は、 時刻部分のみが抽出 さ れて使われ ます。 3-84 ス テー ト メ ン ト の文法 表 3-3 許可 さ れている DEFAULT 式のデー タ 型 リ レーシ ョ ナル デー タ 型 許可 さ れている DEFAULT 式の型 (ODBC デー タ 型) TIMESTAMP SQL_DATE SQL_TIMESTAMP SQL_CHAR SQL_VARCHAR SQL_LONGVARCHAR 式のデー タ 型が DATE の場合、 時刻部 分は '00:00:00' に設定 さ れます。 1 CREATE TABLE ス テー ト メ ン ト ま た は ALTER TABLE ス テー ト メ ン ト では、 IDENTITY ま たは SMALLIDENTITY デー タ 型にデフ ォ ル ト 値ゼ ロ (default 0 ま たは default '0') を設定で き ます。 それ以外のデフ ォ ル ト 値は許可 さ れません。 例 次の ス テー ト メ ン ト に よ っ て、 Tab1 と い う 名前のテーブルが作成 さ れ ま す。 列 col1 のデフ ォ ル ト 値は、 NOW () に よ っ て返 さ れ る タ イ ム ス タ ン プ の DATE 部分 と し ます。 CREATE TABLE Tab1 ( col1 DATE DEFAULT NOW() ) 次の ス テー ト メ ン ト に よ っ て、 Tab5 と い う 名前のテーブルが作成 さ れ ま す。 列 col5 のデフ ォ ル ト 値は 200 と し ます。 CREATE TABLE Tab5 ( col5 INT DEFAULT 200 ) 次の ス テー ト メ ン ト に よ っ て、 Tab8 と い う 名前のテーブルが作成 さ れ ま す。 列 col8 のデフ ォ ル ト 値は、 INSERT ま たは UPDATE ス テー ト メ ン ト 実 行時の タ イ ム ス タ ンプ と し ます。 CREATE TABLE Tab8 ( col8 TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) 3-85 SQL 構文 リ フ ァ レ ン ス 次の ス テー ト メ ン ト に よ っ て、 Tab6 と い う 名前のテーブルが作成 さ れ ま す。 列 col6 のデフ ォ ル ト 値は、 INSERT ま たは UPDATE ス テー ト メ ン ト 実 行後のユーザーの名前 と し ます。 デフ ォ ル ト ユーザー名を実際に利用で き る のは、 セキ ュ リ テ ィ が有効にな っ てい る 場合のみです。 有効にな っ てい ない場合、 USER は常に ヌ ルです。 CREATE TABLE Tab6 ( col6 VARCHAR(20) DEFAULT USER ) 次の ス テー ト メ ン ト は、 不正な例を示 し てい ます。 SQL_TIME は DATE 列 で許可 さ れてい る デー タ 型ではないため、 こ の ス テー ト メ ン ト は解析時エ ラ ーにな り ます。 CREATE TABLE Tab ( col DATE DEFAULT CURTIME() ) 次の ス テー ト メ ン ト は、 不正な例を示 し てい ます。 こ の ス テー ト メ ン ト は 解析時エ ラ ーにな り ます。 '3.1' は数値に変換で き ま すが、 それは有効な整 数ではあ り ません。 CREATE TABLE Tab ( col SMALLINT DEFAULT '3.1' ) 次の ス テー ト メ ン ト は、 不正な例を示 し てい ます。 CREATE TABLE ス テー ト メ ン ト は成功 し ますが、 -60000 は SMALLINT でサポー ト さ れ る 値の範 囲外であ る ため、 INSERT ス テー ト メ ン ト は失敗 し ます。 CREATE TABLE Tab ( col SMALLINT DEFAULT 3 * -20000 ) INSERT INTO Tab values(DEFAULT) 次の ス テー ト メ ン ト は、IDENTITY お よ び SMALLIDENTITY デー タ 型にデ フ ォ ル ト 値ゼ ロ を設定す る 正 し い例を示 し てい ます。 CREAT TABLE t1 ( c1 IDENTITY DEFAULT '0' ) ALTER TABLE t1 ALTER c1 SMALLIDENTITY DEFAULT 0 3-86 ス テー ト メ ン ト の文法 次の ス テー ト メ ン ト は、IDENTITY お よ び SMALLIDENTITY デー タ 型にデ フ ォ ル ト 値を設定す る 正 し い例を示 し てい ます。 CREATE TABLE t1 ( c1 IDENTITY DEFAULT 3 ) ALTER TABLE t1 ALTER c1 SMALLIDENTITY DEFAULT 1 日付列または時刻列のデ フ ォ ル ト 値 と し ての式 DEFAULT は、 行の挿入時に列の値が指定 さ れなか っ た場合、 その列で使 用す る 値を指定 し ます。 列のデフ ォ ル ト と し て式を割 り 当て る には、CREATE TABLE ス テー ト メ ン ト で DEFAULT キー ワ ー ド を使っ てデフ ォ ル ト 値を定義 し ます。 テーブル の作成方法の詳細については、 「CREATE TABLE」 (3-62 ページ) を参照 し て く だ さ い。 Pervasive PSQL では、 リ テ ラ ル値やヌ ル値のほかに、 日付お よ び時刻の ス カ ラ 関数や式 も 、 適合す る デー タ 型の列のデフ ォ ル ト 値 と し て指定す る こ と がで き ます。 CURRENT_USER() は、 CHAR お よ び VARCHAR 文字列型の列のデフ ォ ル ト 値 と し て使用で き ます。 次の表は、 適合す る デー タ 型列へデフ ォ ル ト 値を設定す る ために呼び出す こ と ので き る 、 固有の日付お よ び時刻ス カ ラ 関数の一覧を示 し てい ます。 表 3-4 デ フ ォル ト 値 と し ての日付および時刻ス カ ラ関数 関数 デ フ ォ ル ト の対象 CURRENT_DATE( ) 日付列のみ CURDATE( ) 日付列のみ CURRENT_TIME( ) 時刻列のみ CURTIME( ) 時刻列のみ CURRENT_TIMESTAMP( ) タ イ ム ス タ ンプ列ま たは日付時刻列 NOW( ) タ イ ム ス タ ンプ列ま たは日付時刻列 INSERT お よ び UPDATE ス テー ト メ ン ト で、 列のデフ ォ ル ト 値 と し て ス カ ラ 関数を指定す る と 、Pervasive PSQL は指定 さ れた ス カ ラ 関数を呼び出 し 、 その呼び出 し 結果を当該列の値に設定 し ます。 3-87 SQL 構文 リ フ ァ レ ン ス 関連項目 「ALTER TABLE」 (3-8 ページ) 「CREATE TABLE」 (3-62 ページ) 「INSERT」 (3-120 ページ) 「UPDATE」 (3-197 ページ) 3-88 ス テー ト メ ン ト の文法 DELETE (位置付け) DELETE (位置付け) ス テー ト メ ン ト を使用 し て、 SQL カー ソ ルに関連付 け ら れた ビ ュ ーの現在行を削除 し ます。 構文 DELETE WHERE CURRENT OF カー ソ ル名 備考 こ の ス テー ト メ ン ト は、 ス ト ア ド プ ロ シージ ャ 、 ト リ ガ、 お よ びセ ッ シ ョ ン レベルでのみ使用で き ます。 メ モ セ ッ シ ョ ン レ ベルでは位置付け DELETE ス テー ト メ ン ト は使 用で き ますが、DECLARE CURSOR ス テー ト メ ン ト は使用で き ません。 ア ク テ ィ ブ な 結 果 セ ッ ト の カ ー ソ ル 名 を 取 得 す る に は、 SQLGetCursorName() API を使用 し ます。 例 次の一連の ス テー ト メ ン ト は、 位置付け DELETE ス テー ト メ ン ト の設定 を示 し ま す。 位置付け DELETE ス テー ト メ ン ト に必要な ス テー ト メ ン ト は、 DECLARE CURSOR、 OPEN CURSOR、 お よ び FETCH FROM カ ー ソル名です。 現代 ヨ ー ロ ッ パ史の授業が時間割か ら 削除 さ れたので、 こ の例ではサンプ ル デー タ ベース の Course テーブルか ら Modern European History (HIS 305) の行が削除 さ れます。 CREATE PROCEDURE DropClass(); DECLARE :CourseName CHAR(7); DECLARE c1 CURSOR FOR SELECT name FROM COURSE WHERE name = :CourseName; BEGIN SET :CourseName = 'HIS 305'; OPEN c1; FETCH NEXT FROM c1 INTO :CourseName; DELETE WHERE CURRENT OF c1; END; 関連項目 「CREATE PROCEDURE」 (3-50 ページ) 「CREATE TRIGGER」 (3-73 ページ) 3-89 SQL 構文 リ フ ァ レ ン ス DELETE こ の ス テー ト メ ン ト に よ り 、デー タ ベース テーブルか ら 指定 さ れた行を削 除 し ます。 構文 DELETE [FROM] < テーブル名 | ビ ュ ー名 > [ エ イ リ ア ス名 ] [ FROM テーブル参照 [, テーブル参照 ]... [ WHERE 検索条件 ] テーブル名 ::= ユーザー定義名 ビ ュ ー名 ::= ユーザー定義名 エ イ リ ア ス名 ::= ユーザー定義名 (エ イ リ ア ス名は、 2 つ目の FROM 句が使用 さ れてい る 場合には使用で き ません。 「FROM 句」 (3-90 ページ) を参照 し て く だ さ い。) テーブル参照 ::= {OJ 外部結合の定義 } | [ デー タ ベース名 .] テーブル名 [[AS] エ イ リ ア ス名 ] | [ デー タ ベース名 .] ビ ュ ー名 [[AS] エ イ リ ア ス名 ] | 結合定義 | ( 結合定義 ) | ( テーブル サブ ク エ リ ) [AS] エ イ リ ア ス名 [( 列名 [, 列名 ]... ) ] 外部結合の定義 ::= テーブル参照 外部結合 タ イ プ JOIN テーブル参照 ON 検索 条件 外部結合 タ イ プ ::= LEFT [OUTER] | RIGHT [OUTER] | FULL [OUTER] 検索条件 ::= 検索条件 AND 検索条件 | 検索条件 OR 検索条件 | NOT 検索条件 | ( 検索条件 ) | 述部 デー タ ベース名 ::= ユーザー定義名 ビ ュ ー名 ::= ユーザー定義名 結合定義 ::= テーブル参照 [ 結合 タ イ プ ] JOIN テーブル参照 ON 検索条件 | テーブル参照 CROSS JOIN テーブル参照 | 外部結合の定義 結合 タ イ プ ::= INNER | LEFT [OUTER] | RIGHT [OUTER] | FULL [OUTER] テーブル サブ ク エ リ ::= ク エ リ スペ ッ ク [[UNION [ALL] ク エ リ スペ ッ ク ]... ] 3-90 ス テー ト メ ン ト の文法 備考 INSERT、 UPDATE、 お よ び DELETE ス テー ト メ ン ト はア ト ミ ッ ク な方法 で動作 し ます。 つま り 、 複数の行の挿入、 更新、 ま たは削除に失敗 し た場 合、 同 じ ス テー ト メ ン ト に よ っ て実行 さ れた前の行の挿入、 更新、 ま たは 削除がすべて ロ ール バ ッ ク さ れます。 FROM 句 オプシ ョ ンの第 2 FROM 句 と 、 行が削除 さ れ る テーブル (「削除テーブル」 と 呼びます)への参照に関 し て混乱が生 じ る 可能性があ り ます。 第 2 FROM 句に削除テーブルが現れ る 場合、 その出現の う ちの 1 つは、 行が削除 さ れ る テーブル と 同 じ イ ン ス タ ン ス にな り ます。 た と えば、 ス テー ト メ ン ト DELETE t1 FROM t1, t2 WHERE t1.c1 = t2.c1 の場合、 DELETE の直後の t1 と FROM の後の t1 は、 テーブル t1 の 同 じ イ ン ス タ ン ス です。 し たが っ て、 こ の ス テー ト メ ン ト は DELETE t1 FROM t2 WHERE t1.c1 = t2.c1 と 同 じ こ と にな り ます。 第 2 FROM 句に削除テーブルが複数回現れ る 場合、 その出現の う ちの 1 つ は削除テーブル と 同 じ イ ン ス タ ン ス で あ る と 識別 さ れ る 必要が あ り ま す。 第 2 FROM 句の参照の う ち、 削除テーブル と 同 じ イ ン ス タ ン ス であ る と 見 な さ れ る のは、 エ イ リ ア ス が指定 さ れていない参照です。 し たが っ て、 ス テー ト メ ン ト DELETE t1 FROM t1 a, t1 b WHERE a.c1 = b.c1 の場合、 第 2 FROM 句の t1 の イ ン ス タ ン スはど ち ら も エ イ リ ア ス を持っ てい る ため、 こ れは正 し く あ り ま せん。 DELETE t1 FROM t1, t1 b WHERE t1.c1 = b.c1 であれば有効です。 第 2 FROM 句には次の条件が適用 さ れます。 DELETE ス テー ト メ ン ト にオプシ ョ ンの第 2 FROM 句を含め る 場合、 FROM 句の前にあ る テーブル参照にエ イ リ ア ス を指定す る こ と はで き ません。 た と えば、 DELETE t1 a FROM t2 WHERE a.c1 = t2.c1 と す る と 、 次のエ ラ ーが返 さ れます。 SQL_ERROR (-1) SQLSTATE "37000" "[Pervasive][ODBC ク ラ イ ア ン ト イ ン タ ーフ ェ イ ス ][LNA][Pervasive] [ODBC エン ジ ン イ ン タ ーフ ェ イ ス ] オプシ ョ ンの FROM を伴 う UPDATE/DELETE ス テー ト メ ン ト では、テーブル エ イ リ ア ス は使用で き ません。 " ス テー ト メ ン ト の有効なバージ ョ ンは、DELETE t1 FROM t2 WHERE t1.c1 = t2.c1 ま たは DELETE t1 FROM t1 a, t2 WHERE a.c1 = t2.c1 です。 3-91 SQL 構文 リ フ ァ レ ン ス 第 2 FROM 句に削除テーブルへの参照を 2 つ以上含め る 場合、それ ら の 参 照 の う ち の 1 つ に だ け エ イ リ ア ス を 指 定 で き ま す。 た と え ば、 DELETE t1 FROM t1 a, t1 b WHERE a.c1 = b.c1 と す る と 、次 のエ ラ ーが返 さ れます。 SQL_ERROR (-1) SQLSTATE "37000" "[Pervasive][ODBC ク ラ イ ア ン ト イ ン タ ーフ ェ イ ス ][LNA][Pervasive] [ODBC エ ン ジ ン イ ン タ ーフ ェ イ ス ] テーブル t1 があい ま いです。 " 誤 り のあ る ス テー ト メ ン ト では、エ イ リ ア ス を "a" と す る テーブル "t1" が削除テーブル と 同 じ イ ン ス タ ン ス であ る と 仮定 し てい ます。 正 し い ス テー ト メ ン ト は、 DELETE t1 FROM t1, t1 b WHERE t1.c1 = b.c1 です。 DELETE ス テー ト メ ン ト におけ る 第 2 FROM 句はセ ッ シ ョ ン レベルで のみサポー ト さ れ ま す。 DELETE ス テー ト メ ン ト が ス ト ア ド プ ロ シー ジ ャ 内で発生す る 場合は、 第 2 FROM 句はサポー ト さ れません。 例 次の ス テー ト メ ン ト に よ っ て、サンプル デー タ ベース の person テーブルか ら 名前 Ellen の行が削除 さ れます。 DELETE FROM person WHERE First_Name = 'Ellen' 次の ス テー ト メ ン ト に よ っ て、サンプル デー タ ベース の course テーブルか ら Modern European History (HIS 305) の行が削除 さ れます。 DELETE FROM Course WHERE Name = 'HIS 305' 3-92 ス テー ト メ ン ト の文法 DISTINCT 備考 DISTINCT キー ワ ー ド は SELECT ス テー ト メ ン ト で使用 し て、 結果か ら 重複す る 値を削除す る よ う Pervasive PSQL に指示 し ます。 DISTINCT を使 用す る と 、 SELECT ス テー ト メ ン ト の条件を満たす一意の行をすべて検索 で き ます。 DISTINCT キーワー ド の使用には以下の規則が適用 さ れます。 DISTINCT は、 サブ ク エ リ を含む任意の ス テー ト メ ン ト で使用で き ます。 選択 リ ス ト に集計が含 ま れ る 場合、 DISTINCT キー ワ ー ド は無視 さ れ ま す。 集計に よ っ て、 行が重複 し ない こ と が保証 さ れます。 DISTINCT を次の よ う に使用す る こ と はで き ません。 SELECT DISTINCT column1, DISTINCT column2 例 次の ス テー ト メ ン ト は、 Beir 教授 (教職員 ID 111191115) が担当す る 固有 の講座をすべて検索 し ます。 SELECT DISTINCT c.Name FROM Course c, class cl WHERE c.name = cl.name AND cl.faculty_id = '111191115' 関連項目 「SELECT」 (3-153 ページ) 3-93 SQL 構文 リ フ ァ レ ン ス DROP FUNCTION DROP FUNCTION ス テー ト メ ン ト に よ り 、 デー タ ベー ス か ら ス カ ラ ユー ザー定義関数 (UDF) を削除 し ます。 メ モ 存在 し ない UDF を削除 し よ う と す る と 、エ ラ ー メ ッ セージが表 示 さ れます。 構文 DROP FUNCTION { 関数名 } 引数 関数名 削除す る ユーザー定義関数の名前。 例 次の ス テー ト メ ン ト に よ っ て、 ユーザー定義関数 fn_MyFunc がデー タ ベー ス か ら 削除 さ れます。 DROP FUNCTION fn_MyFunc 関連項目 「CREATE FUNCTION」 (3-39 ページ) 3-94 ス テー ト メ ン ト の文法 DROP GROUP こ の ス テー ト メ ン ト に よ り 、 セキ ュ リ テ ィ で保護 さ れてい る デー タ ベース 内の 1 つま たは複数のグループ を削除 し ます。 構文 DROP GROUP グループ名 [, グループ名 ]... 備考 複数のグループはカ ン マで区切 り ます。 例 次の例ではグループ Pervasive が削除 さ れます。 DROP GROUP pervasive 次の例では、 リ ス ト を使用 し て グループ を削除 し ます。 DROP GROUP pervasive_dev, pervasive_marketing 関連項目 「CREATE GROUP」 (3-45 ページ) 3-95 SQL 構文 リ フ ァ レ ン ス DROP INDEX こ の ス テー ト メ ン ト に よ り 、 指定 さ れたテーブルか ら 特定の イ ンデ ッ ク ス を削除 し ます。 構文 DROP INDEX [ テーブル名 .] イ ンデ ッ ク ス名 [IN DICTIONARY] 引数 テーブル名 イ ンデ ッ ク ス が存在す る テーブルの名前。 イ ンデ ッ ク ス名 イ ンデ ッ ク ス の名前。 IN DICTIONARY IN DICTIONARY キーワー ド を使用す る と 、 基 と な る デー タ フ ァ イ ルか ら は イ ンデ ッ ク ス を削除せずに、 DDF か ら イ ンデ ッ ク ス を削除で き ます。 備考 IN DICTIONARY は非常に強力で高度な機能です。 こ れは、 シ ス テ ム管理 者に よ っ てのみ、 も し く は絶対的に必要な場合にのみ使用 し て く だ さ い。 通常、 Pervasive PSQL は DDF と デー タ フ ァ イ ルの完全な同期を保ち ます が、 こ の機能に よ り ユーザーは、 同期 し ていないテーブルの辞書定義を既 存のデー タ フ ァ イ ルに合致 さ せ る こ と が柔軟に行え る よ う にな り ます。 こ れは、既存のデー タ フ ァ イ ル と 合致す る 定義を辞書内に作成 し たい場合に 有用です。 注意 DDF の変更を、基 と な る デー タ フ ァ イ ルへの変更 と 並行 し て行 わない と 、 重大な問題が生 じ る こ と があ り ます。 こ の機能の詳細については、 「IN DICTIONARY」 (3-10 ページ) の説明を 参照 し て く だ さ い。 例 次の ス テー ト メ ン ト に よ っ て、指定 さ れた名前付 き イ ンデ ッ ク ス が Faculty テーブルか ら 削除 さ れます。 DROP INDEX Faculty.Dept 3-96 ス テー ト メ ン ト の文法 次の例では、 デー タ フ ァ イ ル と 関連付け ら れない 「デ タ ッ チ さ れた」 テー ブルが作成 さ れ、 その後でテーブル定義への イ ンデ ッ ク ス の追加 と 削除が 行われます。 イ ンデ ッ ク スは、 関連付け ら れ る 基 と な る Btrieve イ ンデ ッ ク ス が存在 し ないため、 デ タ ッ チ さ れた イ ンデ ッ ク ス と な り ます。 CREATE TABLE t1 IN DICTIONARY (c1 int, c2 int) CREATE INDEX idx_1 IN DICTIONARY on t1(c1) DROP INDEX t1.idx_1 IN DICTIONARY 関連項目 「CREATE INDEX」 (3-46 ページ) 3-97 SQL 構文 リ フ ァ レ ン ス DROP PROCEDURE こ の ス テー ト メ ン ト に よ り 、 現行デー タ ベース か ら 1 つま たは複数の ス ト ア ド プ ロ シージ ャ を削除 し ます。 構文 DROP PROCEDURE プ ロ シージ ャ 名 例 次の ス テー ト メ ン ト に よ っ て、 ス ト ア ド プ ロ シージ ャ myproc が辞書か ら 削除 さ れます。 DROP PROCEDURE myproc 関連項目 「CREATE PROCEDURE」 (3-50 ページ) 3-98 ス テー ト メ ン ト の文法 DROP TABLE こ の ス テー ト メ ン ト に よ り 、 指定 さ れたデー タ ベース か ら テーブルを削除 し ます。 構文 DROP TABLE テーブル名 [IN DICTIONARY] 引数 テーブル名 削除す る テーブルの名前。 IN DICTIONARY 「ALTER TABLE」 (3-8 ページ) の IN DICTIONARY の解説を参照 し て く だ さ い。 備考 CASCADE お よ び RESTRICT はサポー ト さ れてい ません。 テーブルに依存 し てい る ト リ ガがあ る 場合、 テーブルは削除 さ れません。 ト ラ ンザ ク シ ョ ンが進行中で、 それがテーブルを参照 し てい る 場合は、 エ ラ ーが表示 さ れてテーブルは削除 さ れません。 削除す る テーブルにほかのテーブルが依存 し てい る 場合は、 テーブルの削 除に失敗 し ます。 主キーが存在す る 場合は削除 さ れます。 テーブルを削除す る 前にユーザー が主キーを削除す る 必要はあ り ません。 テーブルの主キーが別のテーブル に属す る 制約に よ っ て参照 さ れてい る 場合、テーブルは削除 さ れず、エ ラ ー が表示 さ れます。 テーブルに外部キーがあ る 場合、 外部キーは削除 さ れます。 テーブルに そ の他の制約 (た と えば、 NOT NULL、 CHECK、 UNIQUE、 NOT MODIFIABLE な ど) があ る 場合、 テーブルが削除 さ れ る と それ ら の 制約は削除 さ れます。 例 次のステートメントによって、 class テーブル定義が辞書か ら 削除 さ れます。 DROP TABLE Class 関連項目 「ALTER TABLE」 (3-8 ページ) 「CREATE TABLE」 (3-62 ページ) 3-99 SQL 構文 リ フ ァ レ ン ス DROP TRIGGER こ の ス テー ト メ ン ト に よ り 、 現行デー タ ベース か ら ト リ ガ を削除 し ます。 構文 DROP TRIGGER ト リ ガ名 例 次の例では、 InsTrig と い う 名前の ト リ ガが削除 さ れます。 DROP TRIGGER InsTrig 関連項目 「CREATE TRIGGER」 (3-73 ページ) 3-100 ス テー ト メ ン ト の文法 DROP VIEW こ の ス テー ト メ ン ト に よ り 、 デー タ ベース か ら 指定 さ れた ビ ュ ーを削除 し ます。 構文 DROP VIEW ビ ュ ー名 備考 [CASCADE | RESTRICT] はサポー ト さ れてい ません。 例 次の ス テー ト メ ン ト に よ っ て、 vw_person ビ ュ ー定義が辞書か ら 削除 さ れ ます。 DROP VIEW vw_person 関連項目 「CREATE VIEW」 (3-76 ページ) 3-101 SQL 構文 リ フ ァ レ ン ス END 備考 BEGIN [ATOMIC] (3-24 ページ) の解説を参照 し て く だ さ い。 3-102 ス テー ト メ ン ト の文法 EXECUTE EXECUTE ス テー ト メ ン ト には 2 と お り の使い方があ り ます。 ユーザー定義のプ ロ シージ ャ ま たはシ ス テ ム ス ト ア ド プ ロ シージ ャ を 呼び出す場合。 CALL ス テー ト メ ン ト の代わ り に EXECUTE ス テー ト メ ン ト を使用で き ます。 ス ト ア ド プ ロ シージ ャ 内で、 文字列ま たは、 文字列を返す式を実行す る 場合。 構文 ス ト ア ド プ ロ シージ ャ を呼び出す場合 : EXEC[UTE] ス ト ア ド プ ロ シージ ャ [([ プ ロ シージ ャ パ ラ メ ー タ [, プ ロ シー ジ ャ パ ラ メ ー タ ]... ] ) ] ス ト ア ド プ ロ シージ ャ ::= ス ト ア ド プ ロ シージ ャ の名前 プ ロ シージ ャ パ ラ メ ー タ ::= ス ト ア ド プ ロ シージ ャ が必要 と す る 入力パラメータ ユーザー定義の ス ト ア ド プ ロ シージ ャ 内の場合 : EXEC[UTE] ( 文字列 [+ 文字列 ]... ) 文字列 ::= 文字列、 文字列変数、 ま たは文字列を返す式 例 次の例では、 パ ラ メ ー タ のないプ ロ シージ ャ を実行 し ます。 EXEC NoParms() ま たは EXEC NoParms 次の例では、 パ ラ メ ー タ のあ る プ ロ シージ ャ を実行 し ます。 EXEC Parms(vParm1, vParm2) EXECUTE CheckMax(N.Class_ID) 次のプ ロ シージ ャ は、 Billing テーブルか ら Student_ID を取 り 出 し ます。 CREATE PROCEDURE tmpProc(IN :vTable CHAR(25)) RETURNS (sID INTEGER) AS BEGIN EXEC ('SELECT Student_ID FROM ' + :vtable); END; EXECUTE tmpProc('Billing') 関連項目 「CALL」 (3-25 ページ) 「CREATE PROCEDURE」 (3-50 ページ) 「シ ス テ ム ス ト ア ド プ ロ シージ ャ 」 (6-1 ページ) 3-103 SQL 構文 リ フ ァ レ ン ス EXISTS EXISTS キー ワ ー ド を使用 し て、 サブ ク エ リ の結果に行があ る か ど う か を 確認 し ます。 サブ ク エ リ に行が含まれていれば、 True が返 さ れます。 構文 EXISTS ( サブ ク エ リ ) 備考 外部 ク エ リ が評価す る 各行について、 Pervasive PSQL で、 サブ ク エ リ か ら の関連す る 行があ る か ど う かが確認 さ れ ます。 Pervasive PSQL は、 外部 ク エ リ の中でサブ ク エ リ か ら の関連す る 行に対応す る 各行を、 ス テー ト メ ン ト の結果テーブルに含め ます。 EXISTS は ス ト ア ド プ ロ シージ ャ 内のサブ ク エ リ に も 使用で き ます。 ただ し 、 ス ト ア ド プ ロ シ ー ジ ャ 内の サ ブ ク エ リ SELECT ス テ ー ト メ ン ト に COMPUTE 句ま たは INTO キーワー ド が含まれていてはいけ ません。 多 く の場合、 EXISTS を含むサブ ク エ リ は IN を使っ て書 き 直す こ と がで き ます。 ク エ リ が IN を使用 し てい る 場合、 Pervasive PSQL は よ り 効率的に ク エ リ を処理で き ます。 例 次のステートメントは、 成績評価点平均が 4.0 の人だけ を含むリストを返します。 SELECT * FROM Person p WHERE EXISTS (SELECT * FROM Enrolls e WHERE e.Student_ID = p.id AND Grade = 4.0) IN を使っ て、 こ の ス テー ト メ ン ト を書 き 直す こ と がで き ます。 SELECT * FROM Person p WHERE p.id IN (SELECT e.Student_ID FROM Enrolls WHERE Grade = 4.0) 次のプ ロ シージ ャ は、 入力パ ラ メ ー タ の値を使っ て、 Person テーブルか ら ID を選択 し ます。 プ ロ シージ ャ の最初の実行 (EXEC) では "Exists は true を返 し ま し た " が返 り 、 2 番目の EXEC では "Exists は false を返 し ま し た " が返 り ます。 CREATE PROCEDURE ex1(IN :vID INTEGER) AS BEGIN IF EXISTS ('SELECT id FROM person WHERE id < :vID) THEN PRINT 'Exists は true を返 し ま し た '; ELSE PRINT 'Exists は false を返 し ま し た '; ENDIF; END; EXEC ex1(222222222) EXEC ex1(1) 3-104 ス テー ト メ ン ト の文法 関連項目 「SELECT」 (3-153 ページ) 3-105 SQL 構文 リ フ ァ レ ン ス FETCH 備考 FETCH ス テー ト メ ン ト に よ り 、 指定 し た テーブル行に SQL カー ソ ルを位 置付け、 タ ーゲ ッ ト リ ス ト に値を入れ る 変数を配置 し て、 その行か ら 値を 取 り 出 し ます。 カー ソ ルか ら デー タ を フ ェ ッ チす る 場合は、 NEXT お よ び FROM キーワー ド の使用は選択で き ません。 メ モ Pervasive PSQL は前方ス ク ロ ール タ イ プのカー ソ ルのみサポー ト し ます。 そのため、 NEXT FROM を省略 し て も 、 カー ソ ル レ コ ー ド の流れを制御す る こ と はで き ません。 構文 FETCH [[NEXT] FROM] カー ソ ル名 INTO 変数名 例 こ の例の FETCH ス テー ト メ ン ト では、 カー ソ ル c1 か ら の値が OldName 変数に取 り 込まれます。 ま た、 位置付け UPDATE ス テー ト メ ン ト に よ り 、 同 じ DEMODATA サ ン プル デー タ ベー ス 内の Course テーブルの Modern European History (HIS 305) の行が更新 さ れます。 CREATE PROCEDURE UpdateClass(); BEGIN DECLARE :CourseName CHAR(7); DECLARE :OldName CHAR(7); DECLARE c1 CURSOR FOR SELECT name FROM course WHERE name = :CourseName; OPEN c1; SET :CourseName = 'HIS 305'; FETCH NEXT FROM c1 INTO :OldName; UPDATE SET name = 'HIS 306' WHERE CURRENT OF c1; END; CREATE PROCEDURE MyProc(IN :CourseName CHAR(7)) AS BEGIN DECLARE cursor1 CURSOR FOR SELECT Degree, Residency, Cost_Per_Credit FROM Tuition ORDER BY ID; ......... ......... FETCH cursor1 INTO :CourseName; 3-106 ス テー ト メ ン ト の文法 ......... ......... END 関連項目 「CREATE PROCEDURE」 (3-50 ページ) 3-107 SQL 構文 リ フ ァ レ ン ス FOREIGN KEY 備考 FOREIGN KEY キーワ ー ド は ADD 句で使用 し て、 テーブルの定義に外部 キーを追加 し ます。 メ モ 外部キーを追加 し た り 、 その他の参照整合性 (RI) 操作を行っ た り す る には、 その前にデー タ ベース名を使用 し てデー タ ベース に ロ グ イ ンす る 必要があ り ます。 ま た、 セキ ュ リ テ ィ が有効にな っ てい る 場合は、 外部キーの参照先テーブルの参照権がなければ、 キーを追加 で き ません。 従属テーブルに外部キーを定義す る には、 FOREIGN KEY 句を CREATE TABLE ス テー ト メ ン ト で使用 し ま す。 キーに列の リ ス ト を指定す る だけ でな く 、 キーの名前を定義で き ます。 外部キー列の列は、 ヌ ル値を許可で き ます。 ただ し 、 イ ンデ ッ ク ス に擬似 ヌ ルの列が含まれていない こ と を確認 し て く だ さ い。 擬似ヌ ルの値は イ ン デ ッ ク ス が作成 さ れません。 外部キー名は、 辞書内で固有の名前であ る 必要があ り ます。 外部キー名を 省略す る と 、 Pervasive PSQL はキーの最初の列の名前を外部キー名 と し て 使用 し ます。 その名前の外部キーが辞書に既に含まれ る 場合は、 外部キー 名の重複エ ラ ーが発生 し ます。 外部キーを指定す る と 、 Pervasive PSQL に よ っ て、 キーを構成す る 列の イ ンデ ッ ク ス が作成 さ れます。 こ の イ ンデ ッ ク スは、 対応す る 主キーの イ ン デ ッ ク ス と 同 じ 属性を持ち ますが、 値の重複が可能です。 イ ンデ ッ ク ス に ほかの属性を割 り 当て る には、 CREATE INDEX ス テー ト メ ン ト を使用 し て明示的に イ ンデ ッ ク ス を作成 し ます。 その後、 ALTER TABLE ス テー ト メ ン ト を使用 し て外部キーを定義 し ます。イ ンデ ッ ク ス を作成す る と き は、 ヌ ル値が許可 さ れず、大文字小文字の区別 と コ レーテ ィ ン グ シーケ ン ス の 属性が、 対応する 主キー列の イ ンデ ッ ク ス の属性 と 一致 し てい る よ う に し ます。 外部キーの列は、 主キーの参照先の列 と 、 デー タ 型、 長 さ 、 順序が同 じ で あ る 必要があ り ます。 唯一の例外は、 外部キーでは整数列を使用 し て、 主 キーの IDENTITY 列ま たは SMALLIDENTITY 列を参照で き る こ と です。こ の場合、 2 つの列は長 さ が同 じ であ る 必要があ り ます。 Pervasive PSQL は、 テーブルを作成す る 前に、 外部キーに例外がないか ど う か を調べます。 以前に定義 さ れた参照整合性 (RI) 制約に違反す る 状態 が見つか っ た場合は、 ス テー タ ス コ ー ド を生成 し 、 テーブルを作成 し ませ ん。 3-108 ス テー ト メ ン ト の文法 外部キーを定義す る と き に、 対応す る 主キーが含まれ る テーブルの名前を 指定す る REFERENCES 句を含め る 必要があ り ます。 親テーブルの主キー は事前に定義 さ れてい る 必要があ り ます。 ま た、 デー タ ベース のセキ ュ リ テ ィ が有効にな っ てい る 場合は、 主キーが含まれ る テーブルの参照権が必 要です。 CREATE TABLE ス テー ト メ ン ト を使用 し て、 自己参照を行 う 外部キーを 作成す る こ と はで き ません。 同 じ テーブルの主キーを参照す る 外部キーを 作成す る には、 ALTER TABLE ス テー ト メ ン ト を使用 し ます。 ま た、 1 つの ス テー ト メ ン ト で、 同 じ 列セ ッ ト に対す る 主キー と 外部キー は作成で き ません。 そのため、 作成 し てい る テーブルの主キーが別のテー ブルの外部キーで も あ る 場合は、 ALTER TABLE ス テー ト メ ン ト を使用 し て外部キーを作成す る 必要があ り ます。 例 次の ス テー ト メ ン ト は、 Class テーブルに新規の外部キー を 追加 し ま す。 (Faculty の ID 列は イ ンデ ッ ク ス と し て定義 さ れてお り 、 ヌ ル値は含まれま せん。) ALTER TABLE Class ADD CONSTRAINT Teacher FOREIGN KEY (Faculty_ID) REFERENCES Faculty (ID) ON DELETE RESTRICT こ の例では、削除制限規則に よ っ て、 あ る 教職員を削除 し よ う と す る と き 、 最初にその教職員の全講座を変更ま たは削除 し ない と その教職員をデー タ ベース か ら 削除で き ない よ う にな っ てい ます。 関連項目 「ALTER TABLE」 (3-8 ページ) 「CREATE TABLE」 (3-62 ページ) 3-109 SQL 構文 リ フ ァ レ ン ス GRANT GRANT ス テー ト メ ン ト に よ り 、 新規のユーザー ID を作成 し 、 セ キ ュ リ テ ィ で保護 さ れてい る デー タ ベース内の特定のユーザーに権限を付与 し ま す。 GRANT ス テ ー ト メ ン ト を 使 用 し て、 CREATE TABLE、 CREATE VIEW、お よ び CREATE PROCEDURE に権限を付与す る こ と がで き ます。 次の表は、 特定の操作に対す る 構文を示 し てい ます。 こ の操作に権限を付与する場合 GRANT で使用する構文 CREATE TABLE CREATETAB CREATE VIEW CREATEVIEW CREATE PROCEDURE CREATESP 構文 GRANT CREATETAB | CREATEVIEW | CREATESP TO public ま たはユーザー/ グ ループ名 [, ユーザー / グループ名 ]... GRANT LOGIN TO ユーザー パ ス ワー ド [, ユーザー パ ス ワ ー ド ]...[ IN GROUP グループ名 ] GRANT テーブル権限 ON < * | [TABLE] テーブル名 [ オーナー ネーム ]> TO ユーザー / グループ名 [, ユーザー / グループ名 ]... テーブル権限 ::= ALL | | ALTER [( 列名 [, 列名 ]... ) ] DELETE | INSERT [( 列名 [, 列名 ]... ) ] | REFERENCES [( 列名 [, 列名 ]... ) ] | SELECT [( 列名 [, 列名 ]... ) ] | UPDATE [( 列名 [, 列名 ]... ) ] テーブル名 ::= [ デー タ ベース名 .] ユーザー定義のテーブル名 デー タ ベース名 ::= テーブルが属 し てい る デー タ ベース の名前 ユーザー パ ス ワ ー ド ::= ユーザー名 [:] パ ス ワ ー ド public ま たはユーザー / グループ名 ::= PUBLIC | ユーザー / グループ名 ユーザー / グループ名 ::= ユーザー名 | グループ名 ユーザー名 ::= ユーザー定義名 オーナー ネーム ::= ユーザー定義名 3-110 ス テー ト メ ン ト の文法 備考 CREATETAB、 CREATESP、 CREATEVIEW、 お よ び LOGIN 引数は、 コ ア SQL 文法の拡張機能です。 メ モ ANSI SQL 3 では、INSERT、ALTER、REFERENCES、SELECT、 お よ び UPDATE の列 リ ス ト が許可 さ れてい ます。 ユーザー と グループ リ レーシ ョ ナル セキ ュ リ テ ィ は、 セキ ュ リ テ ィ をオンに し た と き に、 デー タ ベー ス ヘの フ ル ア ク セ ス 権 を 持つ "Master" と い う 名前のデ フ ォ ル ト ユーザーが存在す る か ど う かに基づ き ます。 最初、 Master ユーザーにパ ス ワー ド は必要あ り ません。 注意 セキ ュ リ テ ィ をオンに し た ら 、 パ ス ワー ド を有効な長 さ (最低 5 文字) で指定 し て く だ さ い。 パ ス ワー ド を空白の ま ま に し てお く と 、 デー タ ベース がセキ ュ リ テ ィ の危険に さ ら さ れます。 Master ユーザーは、 グループやほかのユーザーを作成 し た り 、 作成 し た グ ループやユーザーにデー タ ア ク セ ス権限を定義す る こ と がで き ます。 すべてのユーザーに同一の権限を付与 し たい場合は、 PUBLIC グループに 権限を付与 し ま す。 すべてのユーザーは、 PUBLIC グループに割 り 当て ら れてい る デフ ォ ル ト の権限を継承 し ます。 メ モ グループ を使用す る 場合は、 ユーザーを作成す る 前にグループ を設定す る 必要があ り ます。 既に作成済みのユーザーを グループに追 加す る こ と はで き ません。 ユーザー名 と パス ワー ド に空白ま たはその他の非英数字の文字が含まれ る 場合は、 ユーザー名 と パ ス ワー ド を二重引用符で囲む必要があ り ます。 ユーザー と グ ループ の詳細につい て は、 『Advanced Operations Guide』 の 「Master ユーザー」 (7-2 ページ)、 「ユーザー と グループ」 (7-3 ページ)、 お よ び 「権限の割 り 当て作業」 (7-23 ページ) をすべて参照 し て く だ さ い。 オーナー ネーム オーナー ネームは、 Btrieve フ ァ イ ルのア ク セ ス を得 る ために必要なパ ス ワー ド です。オーナー ネーム と シ ス テ ム ユーザー名あ る いはデー タ ベース ユーザー名 と の間に関連はあ り ません。 オーナー ネームは、 単な る フ ァ イ ル パ ス ワー ド と 考え て く だ さ い。 3-111 SQL 構文 リ フ ァ レ ン ス セ キ ュ リ テ ィ で保護 さ れてい る ODBC デー タ ベー ス 内のテーブルで あ る フ ァ イ ルに Btrieve オーナー ネー ム を 設定す る 場合、 その ODBC デー タ ベー ス の Master ユーザーはすべての GRANT ス テー ト メ ン ト でオーナー ネーム を使用 し て、指定 さ れた テーブルの権限を Master ユーザーを含む全 ユーザーに付与 し なければな り ません。 オーナー ネーム を含む GRANT ス テー ト メ ン ト が あ る 指定ユーザーに対 し 発行 さ れた ら 、 そのユーザーはア ク セ ス のたびにオーナー ネーム を指定 し な く て も 、 デー タ ベース に ロ グ イ ンす る こ と で指定 さ れたテーブルにア ク セ ス で き る よ う にな り ます。 ユーザーが Btrieve オーナー ネーム を持つテーブルに ODBC 経由でア ク セ ス し よ う と し た場合、 Master ユーザーが GRANT ス テー ト メ ン ト で正 し い オーナー ネーム を使っ て そのユーザーにテーブル権限を付与 し ていない 限 り 、 ア ク セ ス は許可 さ れません。 テーブルが読み取 り 専用属性のオーナー ネーム を持つ場合は、 オーナー ネーム を含む SELECT 権限 を Master ユーザーに明確に付与 し な く て も 、 Master ユーザーは自動的に こ のテーブルの SELECT 権限を持ち ます。 例 GRANT ALL ス テ ー ト メ ン ト は、 指定 し た ユ ーザー ま た は グ ループ に INSERT、 UPDATE、 ALTER、 SELECT、 DELETE、 お よ び REFERENCES の権限を付与 し ます。 ま た、辞書の CREATE TABLE 権限 も 付与 さ れます。 次の ス テー ト メ ン ト に よ っ て、 テーブル Class の dannyd に上記のすべての 権限が付与 さ れます。 GRANT ALL ON Class TO dannyd こ の ス テー ト メ ン ト に よ っ て、 ユーザー debieq に ALTER 権限が与え ら れ ます。 GRANT ALTER ON Class TO debieq こ の ス テー ト メ ン ト に よ っ て、テーブル Class の keithv と miked に INSERT 権限が与え ら れます。 GRANT INSERT ON Class TO keithv, miked 次の ス テー ト メ ン ト に よ っ て、 ユーザー keithv お よ び brendanb に person テーブル内の 2 つの列 First_name と Last_name の INSERT 権限が与え ら れ ます。 GRANT INSERT(First_name,last_name) ON Person to keithv,brendanb 次の ス テ ー ト メ ン ト に よ っ て、 ユーザー aideenw と punitas に CREATE TABLE 権限が与え ら れます。 GRANT CREATETAB TO aideenw, punitas 3-112 ス テー ト メ ン ト の文法 次の ス テー ト メ ン ト に よ っ て、 ravi と い う 名前のユーザーに ロ グ イ ン権限 が与え ら れ、 そのパ ス ワー ド が "password" と 指定 さ れます。 GRANT LOGIN TO ravi:password ユーザー名 と パス ワー ド は Pervasive PSQL デー タ ベース を参照す る も ので あ り 、こ れ ら はオペレーテ ィ ン グ シ ス テ ム レベルで設定 さ れたユーザー名 お よ びパス ワー ド と は関連付け ら れません。Pervasive PSQL のユーザー名、 グループ、 お よ びパ ス ワー ド は Pervasive PSQL Control Center (PCC) で設 定 さ れます。 『Advanced Operations Guide』 の 「ユーザー と グループの作業」 (7-23 ページ) を参照 し て く だ さ い。 次の例では、dannyd と travisk と い う 名前のユーザーに ロ グ イ ン権限が与え ら れ、 パス ワー ド がそれぞれ "password"、 1234567 と 指定 さ れます。 GRANT LOGIN TO dannyd:password,travisk:1234567 名前に空白が含まれ る 場合は、 次の よ う に二重引用符を使用で き ます。 こ の ス テー ト メ ン ト に よ っ て、Jerry Gentry と Punita と い う 名前のユーザーに ロ グ イ ン権限が与え ら れ、 パス ワー ド がそれぞれ sun、 moon と 指定 さ れま す。 GRANT LOGIN TO ''Jerry Gentry'' :sun, Punita:moon 次の例では、 パス ワー ド 123456 を持つ Jerry Gentry と い う 名前のユーザー と 、パ ス ワー ド abcdef を持つ travisk と い う 名前のユーザーに ロ グ イ ン権限 が与え ら れます。 ま た、 グループ pervasive_dev に こ れ ら のユーザーが追加 さ れます。 GRANT LOGIN TO ''Jerry Gentry'' :123456, travisk:abcdef IN GROUP pervasive_dev Btrieve オーナー ネーム を持つテーブルの権限を付与する には、Master ユー ザーは GRANT ス テー ト メ ン ト で正 し いオーナー ネーム を指定 し な けれ ばな り ません。 次の例では、 Master ユーザーに Btrieve オーナー ネーム "abcd" を持つテー ブル T1 の SELECT 権限が与え ら れます。 GRANT SELECT ON t1 'abcd' TO Master Master ユーザーは、オーナー ネーム を持たないテーブルのすべての権限を 持ち ま す。 テーブルのオーナー ネー ム は Maintenance ユーテ ィ リ テ ィ を 使っ て設定で き ます。 Btrieve オーナー ネームは大小文字が区別 さ れます。 3-113 SQL 構文 リ フ ァ レ ン ス Master ユーザーに よ る 次の SQL ス テー ト メ ン ト セ ッ ト の実行後、ユーザー "jsmith" は現在のデー タ ベー ス内のすべてのテーブルに対す る SELECT 権 を持ち ます。 ま た、 ユーザーは tab1 の DELETE 権お よ び tab2 の UPDATE 権 も 持ち ます。 GRANT DELETE ON tab1 TO jsmith GRANT SELECT ON * TO jsmith GRANT UPDATE ON tab2 TO jsmith その後、CREATE TABLE 権を持つユーザーに よ っ て次の ス テー ト メ ン ト が 実 行 さ れ た 場合、 ユ ー ザ ー "jsmith" は 新 し く 作 成 さ れ た テ ー ブ ル の SELECT 権を持ち ます。 CREATE TABLE tab3 (col1 INT) GRANT CREATETAB TO user1 GRANT CREATESP TO user1 関連項目 「REVOKE」 (3-145 ページ) 「SET SECURITY」 (3-179 ページ) 「CREATE GROUP」 (3-45 ページ) 「DROP GROUP」 (3-94 ページ) 3-114 ス テー ト メ ン ト の文法 GROUP BY 備考 SELECT ス テー ト メ ン ト 中の GROUP BY 構文に加え て、 Pervasive PSQL では、 ベン ダ文字列を含む こ と がで き る 拡張 さ れた GROUP BY 構文 も サ ポー ト し てい ます。 GROUP BY ク エ リ を行 う と 、見つか っ た グループご と に 1 行の選択 リ ス ト を含む結果セ ッ ト が返 さ れます (選択 リ ス ト の構文については、 『Microsoft ODBC Programmer’s Reference』 を参照)。 GROUP BY 句でエ イ リ ア ス を使用する こ と がで き ます。 ただ し 、 エ イ リ ア ス はテーブル内の ど の列名 と も 異な っ ていなければな り ません。 例 次の例では、course テーブルを使用 し て固有の学部の リ ス ト を作成 し ます。 SELECT Dept_Name FROM Course GROUP BY Dept_Name 上 と 同 じ 例でエ イ リ ア ス ( こ こ では "dn") を使用 し て、 同様の結果を得 ら れます。 SELECT Dept_Name dn FROM Course GROUP BY dn 次の例では、 結果 リ ス ト に固有の学部 と 各学部内の講座数の リ ス ト が含ま れます。 SELECT Dept_Name, COUNT(*) FROM Course GROUP BY Dept_Name COUNT( 式 ) に よ っ て、 述部にあ る 式の非ヌ ル値がすべて カ ウ ン ト さ れ る と い う こ と を覚え ておいて く だ さ い。 COUNT(*) では ヌ ル値を含むすべて の値がカ ウ ン ト さ れます。 セ ッ ト 関数に よ り 操作 さ れ る 行は、 WHERE 検索条件が適用 さ れた後に残 る 行です。 こ の例では、 faculty テーブル内で Salary > 80000 の行のみがカ ウ ン ト さ れます。 SELECT COUNT(*) FROM Faculty WHERE Salary > 80000 GROUP BY Dept_Name 次の例では、エ ス ケープ シーケ ン ス内にベン ダ文字列を含む、拡張 GROUP BY を示 し ます。 次の Microsoft Web サ イ ト で、 エ ス ケープ シーケ ン スお よ びベン ダ文字列についての詳細情報が提供 さ れてい ます。 http://msdn.microsoft.com/library/default.asp?url=/library/en-us/odbc/htm/ odbcescape_sequences_in_odbc.asp (英語) SELECT(--(*vendor(Microsoft), product(ODBC) fn left(at1.col2, 1) *)--) FROM at1 GROUP BY (--(*vendor(Microsoft), product(ODBC) fn left(at1.col2, 1) *)--) ORDER BY (-(*vendor(Microsoft), product(ODBC) fn left(at1.col2, 1) *)--) DESC 3-115 SQL 構文 リ フ ァ レ ン ス 関連項目 「SELECT」 (3-153 ページ) 3-116 ス テー ト メ ン ト の文法 HAVING 備考 HAVING 句は SELECT ス テー ト メ ン ト の中で GROUP BY 句 と 一緒に使 用 し て、 集計値が特定の基準を満た し てい る グループのみを表示 し ます。 HAVING 句内の式には、 定数、 セ ッ ト 関数、 ま たは GROUP BY 式 リ ス ト 内の式の複製を含め る こ と がで き ます。 Pervasive PSQL エン ジ ンでは、 GROUP BY のない HAVING はサポー ト さ れてい ません。 HAVING 句でエ イ リ ア ス を使用す る こ と がで き ます。 ただ し 、 エ イ リ ア ス はテーブル内の ど の列名 と も 異な っ ていなければな り ません。 例 次の例では、 講座名が 5 つを超え る 学部名が返 さ れます。 SELECT Dept_Name, COUNT(*) FROM Course GROUP BY Dept_Name HAVING COUNT(*) > 5 上 と 同 じ 例でエ イ リ ア ス ( こ こ では "dn" と "ct") を使用 し て、 同様の結果 を得 ら れます。 SELECT Dept_Name dn, COUNT(*) ct FROM Course GROUP BY dn HAVING ct > 5 COUNT( 式 ) に よ っ て、 述部にあ る 式の非ヌ ル値がすべて カ ウ ン ト さ れ る と い う こ と を覚え ておいて く だ さ い。 COUNT(*) では ヌ ル値を含むすべて の値がカ ウ ン ト さ れます。 次の例では、 講座数が 5 つを超え る Accounting と い う 名前の学部名が返 さ れます。 SELECT Dept_Name, COUNT(*) FROM Course GROUP BY Dept_Name HAVING COUNT(*) > 5 AND Dept_Name = 'Accounting' 関連項目 「SELECT」 (3-153 ページ) 3-117 SQL 構文 リ フ ァ レ ン ス IF 備考 IF ス テー ト メ ン ト に よ り 、 条件の値に基づ く 条件付 き 実行を提供 し ます。 IF ... THEN ... [ELSE ... END IF 構造は、2 つの ス テー ト メ ン ト ブ ロ ッ ク の ど ち ら に基づいて実行す る か を フ ロ ー制御 し ます。 IF ... ELSE 構文 も 使用 で き ます。 IF ス テー ト メ ン ト は、ス ト ア ド プ ロ シージ ャ と ト リ ガの本体で使用で き ま す。 IF ス テー ト メ ン ト を ネ ス ト で き る 数に制限はあ り ませんが、 ク エ リ は通常 どお り 、合計長の制限やその他のアプ リ ケーシ ョ ン制限の影響を受け ます。 メ モ Pervasive PSQL と T.SQL を含んでい る 混合構文は使用で き ませ ん。 IF...THEN...ELSE...END IF 構文ま たは IF...ELSE 構文のいずれか を 使用で き ます。 IF ま た は ELSE 条件 で 複数 の ス テ ー ト メ ン ト を 使用す る 場合 は、 BEGIN と END を使っ て ス テー ト メ ン ト ブ ロ ッ ク の始ま り と 終わ り を 示す必要があ り ます。 構文 IF ( ブール条件 ) BEGIN SQL ス テー ト メ ン ト END ELSE BEGIN SQL ス テー ト メ ン ト END 例 次の例では、IF ス テー ト メ ン ト を使用 し て、vInteger の値が正か負かに よ っ て変数 Negative を 1 ま たは 0 に設定 し ます。 IF (:vInteger < 0) THEN SET :Negative = '1'; ELSE SET :Negative = '0'; END IF; 3-118 ス テー ト メ ン ト の文法 次の例では、 IF ス テー ト メ ン ト を使用 し て、 定義 さ れた条件 (SQLSTATE = '02000') のループ を テ ス ト し ます。 こ の条件が満た さ れた場合、 WHILE ループが終了 し ます。 FETCH_LOOP: WHILE (:counter < :NumRooms) DO FETCH NEXT FROM cRooms INTO :CurrentCapacity; IF (SQLSTATE = '02000') THEN LEAVE FETCH_LOOP; END IF; SET :counter = :counter + 1; SET :TotalCapacity = :TotalCapacity + :CurrentCapacity; END WHILE; IF (:vInteger > 50) BEGIN set :vInteger = :vInteger + 1; INSERT INTO test VALUES('Test'); END; ELSE set :vInteger = :vInteger - 1; 関連項目 「CREATE PROCEDURE」 (3-50 ページ) 「CREATE TRIGGER」 (3-73 ページ) 3-119 SQL 構文 リ フ ァ レ ン ス IN 備考 IN 演算子を使用 し て、 外部 ク エ リ の結果が、 サブ ク エ リ の結果に含まれ る か ど う か を検査 し ます。 ス テー ト メ ン ト の結果テーブルには、 外部 ク エ リ が返す行で、 サブ ク エ リ 内に関連す る 行があ る も のだけが含まれます。 例 次の例は、 Chemistry 408 を受講 し た全学生の名前を リ ス ト し ます。 SELECT p.First_Name + ' ' + p.Last_Name FROM Person p, Enrolls e WHERE (p.id = e.student_id) AND (e.class_id IN (SELECT c.ID FROM Class c WHERE c.Name = 'CHE 408')) Pervasive PSQL で は、 ま ず サ ブ ク エ リ が 評価 さ れ、 Class テ ー ブ ル か ら Chemistry 408 の ID が取得 さ れます。 次に外部 ク エ リ が実行 さ れ、 結果は、 その講座の Enrolls テーブルにエン ト リ があ る 学生だけに制限 さ れます。 一般に、 IN ク エ リ は、 EXISTS キーワー ド ま たは制限句を持つ簡単な結合 条件を使用 し て、 よ り 効率的に行 う こ と がで き ます。 Pervasive PSQL では、 サブ ク エ リ よ り も 結合の方が効率的に最適化 さ れます。 そのため、 ク エ リ の目的がデー タ ベース のサブセ ッ ト での値の有無を判定す る こ と でない限 り 、 簡単な結合条件を使用す る 方が効率的です。 関連項目 「SELECT」 (3-153 ページ) 3-120 ス テー ト メ ン ト の文法 INSERT こ の ス テー ト メ ン ト に よ り 、 1 つのテーブルに列の値を挿入 し ます。 構文 INSERT INTO テーブル名 [ ( 列名 [, 列名 ]...) ] 挿入値 挿入値 ::= values 句 | ク エ リ スペ ッ ク values 句 ::= VALUES ( 式 [, 式 ]... ) | DEFAULT VALUES 備考 INSERT、 UPDATE、 お よ び DELETE ス テー ト メ ン ト はア ト ミ ッ ク な方法 で動作 し ます。 つま り 、 複数の行の挿入、 更新、 ま たは削除に失敗 し た場 合、 同 じ ス テー ト メ ン ト に よ っ て実行 さ れた前の行の挿入、 更新、 ま たは 削除がすべて ロ ール バ ッ ク さ れます。 Pervasive.SQL 2000 あ る いはそれ以前のバージ ョ ン で作成 さ れたデー タ (レ ガシー デー タ ) のデー タ 型はすべて、 ヌ ル値を許可す る と 報告 さ れ ます。 こ れは、 すべてのデー タ 型の レ ガシー列に、 擬似ヌ ル変換を行わないで ヌ ルを挿入で き る と い う こ と です。 次のデー タ 型は、 デフ ォ ル ト で擬似ヌ ル と し て扱われます。 Date Decimal Money NumericSA NumericSTS Timestamp Numeric 通常、 レ ガシー列を擬似ヌ ルに変換す る 場合、 列の内容が ヌ ルであ る か照 会で き る よ う に、 バ イ ナ リ 値の 1 つを取 り 上げて ヌ ル値 と し て使用す る た め、 バ イ ナ リ 値を 1 つ失い ます。 ただ し 、 上記のデー タ 型は設計の都合上、 通常のデー タ 範囲に加えて、ヌ ル用に異な る 固有の内部値を持っ てい ます。 こ れ ら のデー タ 型を使用す る と 、 バ イ ナ リ 値を ヌ ルに変換す る 場合に 1 つ も 値を失わないので、 それ ら をデフ ォ ル ト で擬似 ヌ ル と 判断 し て も 差 し 支 え あ り ません。 残 り のデー タ 型は 「レ ガシー ヌ ル許容」 と みな さ れます。 こ れは、 ヌ ルを 挿入で き る と い う こ と です。 し か し 、 値を照会す る と 、 非ヌ ルのバ イ ナ リ 同値が返 さ れます。 こ れ と 同 じ バ イ ナ リ 同値を WHERE 句で使用 し て、 特 定の値を取得す る 必要があ り ます。 バ イ ナ リ 同値は次の と お り です。 Binary 型の場合は 0 3-121 SQL 構文 リ フ ァ レ ン ス string お よ び BLOB 型(レ ガシー型の LVAR と NOTE)の場合は空文字列 CURTIME()、 CURDATE() および NOW() 変数 CURTIME()、 CURDATE()、 NOW() の各変数を INSERT ス テー ト メ ン ト で 使用 し て、 現在の現地日付、 時刻、 お よ び タ イ ム ス タ ンプの値を挿入で き ます。 CREATE TABLE table1 (col1 DATE) INSERT INTO table1 VALUES (CURDATE()) 現在の UTC 時刻、 日付、 ま たは タ イ ム ス タ ンプ を CURRENT_TIME() ま た は関連す る 関数を使っ て挿入す る には、次の よ う な SQL ス テー ト メ ン ト を 構成す る 必要があ り ます。 CREATE TABLE table1 (col1 DATE) INSERT INTO table1 SELECT CURRENT_DATE() デ フ ォ ル ト 値の使用 次の表は、 デフ ォ ル ト 値 と ヌ ル値を許可す る 列 と の相互作用を示 し てい ま す。 表 3-5 デ フ ォル ト 値 と ヌル値を許可する列 列の タ イ プ 列に リ テ ラルのデ フ ォル ト 値が 定義 さ れていない場合に使用す るデ フ ォ ル ト 値 : リ テ ラル値が定義 さ れている 場合のデ フ ォル ト 値 : ヌ ル値を許可 NULL 定義どお り NOT NULL エ ラ ー- " 列にデフ ォ ル ト 値が 割 り 当て ら れてい ません。 " 定義どお り v2000 以 前 の ヌ ル許容 列の疑似ヌ ル値 定義どお り ス テー ト メ ン ト で、デフ ォ ル ト 値が定義 さ れてい る NOT NULL 列に明示的 な ヌ ル値を挿入 し よ う と す る と 、 エ ラ ーが発生 し て失敗 し ます。 デフ ォ ル ト 値は、 ヌ ル挿入を試みたその場では使用 さ れません。 デフ ォ ル ト 値が定義 さ れてい る 列については、 INSERT ス テー ト メ ン ト の 中で、 挿入す る 列 リ ス ト か ら こ の列を省略す る か、 ま たは挿入値の指定場 所に DEFAULT キーワー ド を使用す る こ と で、 デフ ォ ル ト 値を呼び出す こ と がで き ます。 テーブル内の列がすべて、 ヌ ル値を許可す る かデフ ォ ル ト 値が定義 さ れて い る かのいずれかであ る 場合は、 values 句に DEFAULT VALUES を指定す る こ と で、 すべてのデフ ォ ル ト 値を含むレ コ ー ド を挿入で き ます。 一部の 列が ヌ ル値を許可 し ていないかデフォルト値が定義 さ れていない場合、 ま た は列リストを指定 し ない場合には、 DEFAULT VALUES 句は使用で き ません。 3-122 ス テー ト メ ン ト の文法 BLOB、 CLOB、 ま たは BINARY 型の列定義へのデフ ォ ル ト 値の設定は、 現 在の と こ ろサポー ト さ れてい ません。 Long デー タ Pervasive PSQL でサポー ト さ れ る リ テ ラ ル文字列の最大長は 15,000 バ イ ト です。 い く つかの異な る 方法を用いて、 こ れ よ り も 長いデー タ を挿入す る こ と がで き ます。 ODBC 呼び出しを使用している場合は、 SQLPutData を使用 す る か、'?' プレースホルダを使ってデータをバインドしてから SQLBindParameter を使用す る こ と がで き ます。直接の SQL ス テー ト メ ン ト のみを使用 し てい る 場合は、 挿入ま たは更新ス テー ト メ ン ト を複数の呼び出 し に分割で き ま す。 次の よ う な ス テー ト メ ン ト で開始 し ます。 update table1 set longfield = '15000 文字 ' where 制限 次に、 それ以上のデー タ を追加す る 次の ス テー ト メ ン ト を発行 し ます。 update table1 set longfield = notefield + '15000 以上の文字 ' where 制限 例 次の例は、 VALUES 句内で式を使っ てテーブルにデー タ を追加す る 方法を 示 し てい ます。 CREATE TABLE t1 (c1 INT, c2 CHAR(20)) INSERT INTO t1 VALUES ((78 + 12)/3, 'This is' + CHAR(32) + 'a string') SELECT * FROM t1 c1 c2 ---------- ----------------30 This is a string 次の ス テー ト メ ン ト では、3 つの VALUES 句内で値を直接指定 し て、Course テーブルにデー タ を追加 し てい ます。 INSERT INTO Course(Name, Description, Credit_Hours, Dept_Name) VALUES ('CHE 308', 'Organic Chemistry II', 4, 'Chemistry') INSERT INTO Course(Name, Description, Credit_Hours, Dept_Name) VALUES ('ENG 409', 'Creative Writing II', 3, 'English') INSERT INTO Course(Name, Description, Credit_Hours, Dept_Name) VALUES ('MAT 307', 'Probability II', 4, 'Mathematics') 以下の INSERT ス テー ト メ ン ト では、 SELECT 句を使用 し て、 授業を受け た学生の ID 番号が Student テーブルか ら 取 り 出 さ れます。 次に、 その ID 番号が Billing テーブルに挿入 さ れます。 3-123 SQL 構文 リ フ ァ レ ン ス INSERT INTO Billing (Student_ID) SELECT ID FROM Student WHERE Cumulative_Hours > 0 次の例は、 CURTIME()、 CURDATE()、 NOW() の各変数を使用 し て、 現在 の現地日付、 時刻、 タ イ ム ス タ ンプの値を INSERT ス テー ト メ ン ト に挿入 す る 方法を示 し ます。 CREATE TABLE Timetbl (c1 TIME, c2 DATE, c3 TIMESTAMP) INSERT INTO Timetbl(c1, c2, c3) VALUES(CURTIME(), CURDATE(), NOW()) 次の例は、 INSERT お よ び UPDATE ス テー ト メ ン ト でのデフ ォ ル ト 値の基 本的な使い方を示 し ます。 CREATE INSERT INSERT INSERT INSERT INSERT TABLE t1 (c1 INT DEFAULT 10, c2 CHAR(10) DEFAULT 'abc') INTO t1 DEFAULT VALUES INTO t1 (c2) VALUES (DEFAULT) INTO t1 VALUES (100, DEFAULT) INTO t1 VALUES (DEFAULT, 'bcd') INTO t1 VALUES (DEFAULT, DEFAULT) SELECT * FROM t1 c1 c2 ---------- ---------10 abc 10 abc 100 abc 10 bcd 10 abc UPDATE t1 SET c1 = DEFAULT WHERE c1 = 100 UPDATE t1 SET c2 = DEFAULT WHERE c2 = 'bcd' UPDATE t1 SET c1 = DEFAULT, c2 = DEFAULT SELECT * FROM t1 c1 c2 ---------- ---------10 abc 10 abc 10 abc 10 abc 10 abc 直前に記 し た CREATE TABLE ス テー ト メ ン ト を基に し た場合、 次の 2 つ の INSERT ス テー ト メ ン ト は全 く 同 じ です。 INSERT INTO t1 (c1,c2) VALUES (20,DEFAULT) INSERT INTO t1 (c1) VALUES (20) 3-124 ス テー ト メ ン ト の文法 次の SQL コ ー ド は、 複数の UPDATE 値での DEFAULT の使い方を示 し ま す。 CREATE TABLE t2 (c1 INT DEFAULT 10, c2 INT DEFAULT 20 NOT NULL, c3 INT DEFAULT 100 NOT NULL) INSERT INTO t2 VALUES (1, 1, 1) INSERT INTO t2 VALUES (2, 2, 2) SELECT * FROM t2 c1 c2 ---------- ---------1 1 2 2 c3 ---------1 2 UPDATE t2 SET c1 = DEFAULT, c2 = DEFAULT, c3 = DEFAULT WHERE c2 = 2 SELECT * FROM t2 c1 c2 ---------- ---------1 1 10 20 c3 ---------1 100 DEFAULT の不正な例 次の例は、 列が NOT NULL と し て定義 さ れてお り 、 デフ ォ ル ト 値が定義 さ れていない こ と に よ っ て起 こ り 得 る エ ラ ー状況を示 し ます。 CREATE TABLE t1 (c1 INT DEFAULT 10, c2 INT NOT NULL, c3 INT DEFAULT 100 NOT NULL) INSERT INTO t1 DEFAULT VALUES -- エ ラ ー : 列 <c2> にデフ ォ ル ト 値が割 り 当て ら れてい ません。 INSERT INTO t1 VALUES (DEFAULT, DEFAULT, 10) -- エ ラ ー : 列 <c2> にデフ ォ ル ト 値が割 り 当て ら れてい ません。 INSERT INTO t1 (c1,c2,c3) VALUES (1, DEFAULT, DEFAULT) -- エ ラ ー : 列 <c2> にデフ ォ ル ト 値が割 り 当て ら れてい ません。 INSERT INTO t1 (c1,c3) VALUES (1, 10) -- エ ラ ー : 列 <c2> は ヌ ル値を許可 し ません。 次の例は、 IDENTITY 列お よ びデフ ォ ル ト 値を持つ列に対 し INSERT を使 用 し た と き 、 ど の よ う にな る か を示 し ます。 CREATE INSERT INSERT INSERT INSERT TABLE t (id IDENTITY, c1 INTEGER DEFAULT 100) INTO t (id) VALUES (0) INTO t VALUES (0.1) INTO t VALUES (10.10) INTO t VALUES (0,2) 3-125 SQL 構文 リ フ ァ レ ン ス INSERT INTO t (c1) VALUES (3) SELECT * FROM t SELECT に よ っ て、 テーブルに次の行が含まれてい る こ と が示 さ れます。 1, 100 2, 1 10, 10 11, 2 12, 3 最初の行は、 IDENTITY 列に対 し て VALUES 句で "0" を指定す る と 、 テー ブルが空の場合に挿入 さ れ る 値は "1" であ る こ と を示 し ます。 こ の行は ま た、デフ ォ ル ト 値を持つ列に対 し て VALUES 句で値を指定 し な い と 、 指定 さ れてい る デフ ォ ル ト 値が挿入 さ れ る こ と も 示 し ます。 2 行目は、 IDENTITY 列に対 し て VALUES 句で "0" を指定す る と 、 挿入 さ れ る 値は、 IDENTITY 列中で最 も 大き な値 よ り 1 大 き い値にな る こ と を示 し ます。 ま た こ の行は、デフ ォ ル ト 値を持つ列に対 し て VALUES 句で値を指定す る と 、 指定 し た値に よ り デフ ォ ル ト 値が上書 き さ れ る こ と を示 し ます。 3 行目は、IDENTITY 列に対 し て VALUES 句で "0" 以外の値を指定す る と 、 指定 し た値が挿入 さ れ る こ と を示 し ます。 IDENTITY 列に対 し て指定 さ れ た値を含む行が既に存在す る 場合は、 " レ コ ー ド のキー フ ィ ール ド に重複 す る キー値が あ り ま す (Btrieve エ ラ ー 5) " と い う メ ッ セージが返 さ れ、 INSERT は失敗 し ます。 4 行目では再び、 IDENTITY 列に対 し て VALUES 句で "0" を指定す る と 、 IDENTITY 列中で最 も 大き な値 よ り 1 大 き い値が挿入 さ れ る こ と が示 さ れ てい ます。 こ れは、 値の間に 「ギ ャ ッ プ」 があ る 場合で も 当ては ま り ます (つま り 、IDENTITY 列が最 も 大 き な値 よ り も 小 さ い値の行が 1 行以上欠落 す る と い う こ と です)。 5 行目は、 IDENTITY 列に対 し て VALUES 句で値を指定 し ない と 、 挿入 さ れ る 値は、 IDENTITY 列中で最 も 大き な値 よ り 1 大 き い値にな る こ と を示 し ます。 関連項目 「CREATE TABLE」 (3-62 ページ) 「DEFAULT」 (3-81 ページ) 「SELECT」 (3-153 ページ) 「SET ANSI_PADDING」 (3-169 ページ) 3-126 ス テー ト メ ン ト の文法 JOIN 1 つのテーブルま たはビ ュ ーを指定す る こ と も 、 複数のテーブルを指定す る こ と も で き ます。 あ る いは、 1 つの ビ ュ ー と 複数のテーブルを指定す る こ と も で き ます。 複数のテーブルを指定す る 場合、 テーブルを結合す る と いい ます。 構文 結合定義 ::= テーブル参照 [ 結合 タ イ プ ] JOIN テーブル参照 ON 検索条件 | テーブル参照 CROSS JOIN テーブル参照 | 外部結合の定義 結合 タ イ プ ::= INNER | LEFT [OUTER] | RIGHT [OUTER] | FULL [OUTER] 外部結合の定義 ::= テーブル参照 外部結合 タ イ プ JOIN テーブル参照 ON 検索条件 外部結合 タ イ プ ::= LEFT [OUTER] | RIGHT [OUTER] | FULL [OUTER] 次の例は、 2 つのテーブルの外部結合を示 し てい ます。 SELECT * FROM Person LEFT OUTER JOIN Faculty ON Person.ID = Faculty.ID 次の例は、 ベン ダ文字列に埋め込まれた外部結合を示 し てい ます。 "OJ" は 大文字 と 小文字の ど ち ら で も か ま い ません。 SELECT t1.deptno, ename FROM {OJ emp t2 LEFT OUTER JOIN dept t1 ON t2.deptno=t1.deptno} Pervasive PSQL は、 『Microsoft ODBC Programmer’s Reference』 に明記 さ れ てい る 2 つのテーブルの外部結合をサポー ト し てい ます。 単純な 2 つのテーブルの外部結合のほかに も 、 Pervasive PSQL では n と お り のネ ス ト さ れた外部結合がサポー ト さ れてい ます。 外部結合は、ベン ダ文字列に埋め込んで も 埋め込ま な く て も か ま い ません。 ベン ダ文字列が使用 さ れた場合、Pervasive PSQL ではそれを ス ト リ ッ プ し 、 実際の外部結合テ キ ス ト を解析 し ます。 LEFT OUTER Pervasive PSQL エ ン ジ ン で は、 SQL92 (SQL2) を モ デ ル と し て LEFT OUTER JOIN を実装 し てい ます。 構文は、 ク ロ ス結合、 右外部結合、 完全 外部結合、 お よ び内部結合が組み込 ま れた全 SQL92 構文のサブセ ッ ト で す。 以下の TableRefList は、 SELECT ス テー ト メ ン ト 内の FROM キーワー ド と 、 後続の WHERE、 HAVING、 お よ びその他の句の間に置かれ ます。 TableRef と LeftOuterJoin の再帰的な性質に注意 し て く だ さ い。 TableRef が TableRef を含む左外部結合で、 その TableRef も 左外部結合で、 と い う よ う に続け る こ と がで き ます。 3-127 SQL 構文 リ フ ァ レ ン ス TableRefList : TableRef [, TableRefList] | TableRef | OuterJoinVendorString [, TableRefList] TableRef : TableName [CorrelationName] | LeftOuterJoin | (LeftOuterJoin ) LeftOuterJoin : TableRef LEFT OUTER JOIN TableRef ON SearchCond 検索条件 (SearchCond) には結合条件が含ま れ ます。 こ の条件の通常の形 式は、 LT.ColumnName = RT.ColumnName の よ う にな り ます。 こ こ で、 LT は 左テーブル、 RT は右テーブル、 ColumnName は指定 さ れた ド メ イ ン内の列 を表 し ます。 検索条件内の各述部には、 非 リ テ ラ ル式が含まれてい る 必要 があ り ます。 左外部結合の実装は、 『Microsoft ODBC Programmer’s Reference』 に示 さ れ てい る 構文の範囲を超えてい ます。 ベン ダ文字列 前のセ ク シ ョ ン の構文は、 『Microsoft ODBC Programmer’s Reference』 に記 載 さ れてい ますが、 詳 し い説明は含まれてい ません。 さ ら に、 左外部結合 の最初 と 最後のベン ダ文字列エ ス ケープ シーケ ン ス に よ っ て外部結合の コ ア構文は変わ り ません。 Pervasive PSQL エン ジ ンでは、 ベン ダ文字列を含ま ない外部結合構文を受 け入れます。 ただ し 、 複数デー タ ベース にわた る ODBC 準拠を必要 と す る ア プ リ ケーシ ョ ン では、 ベン ダの文字列構成を使用す る 必要があ り ま す。 ODBC のベン ダ文字列外部結合では 3 つ以上のテーブルはサポー ト さ れな いため、 以下の表 3-9 (3-128 ページ) に記載 さ れてい る 構文を使用 し なけ ればな ら ない場合があ り ます。 例 こ のセ ク シ ョ ンの例では、 次の 4 つのテーブルを使用 し ます。 表 3-6 Emp テーブル 3-128 FirstName LastName DeptID EmpID Franky Avalon D103 E1 Gordon Lightfoot D102 E2 ス テー ト メ ン ト の文法 表 3-6 Emp テーブル FirstName LastName DeptID EmpID Lawrence Welk D101 E3 Bruce Cockburn D102 E4 表 3-7 Dept テーブル DeptID LocID Name D101 L1 TV D102 L2 Folk 表 3-8 Addr テーブル EmpID Street E1 101 Mem Lane E2 14 Young St. 表 3-9 Loc テーブル LocID Name L1 PlanetX L2 PlanetY 以下の例は、 単純な 2 方向左外部結合を示 し てい ます。 SELECT * FROM Emp LEFT OUTER JOIN Dept ON Emp.DeptID = Dept.DeptID こ の単純な 2 方向外部結合では、 次の結果セ ッ ト が作成 さ れます。 3-129 SQL 構文 リ フ ァ レ ン ス 表 3-10 2 方向左外部結合 Emp Dept FirstName LastName DeptID EmpID DeptID LocID Name Franky Avalon D103 E1 NULL NULL NULL Gordon Lightfoot D102 E2 D102 L2 Folk Lawrence Welk D101 E3 D101 L1 TV Bruce Cockburn D102 E4 D102 L2 Folk テーブル内の Franky Avalon の NULL エン ト リ に注目 し て く だ さ い。 こ れ は、 D103 の DeptID が Dept テーブル内に見つか ら なか っ たためです。 標準 (INNER) 結合では、 Franky Avalon は ま と めて結合セ ッ ト か ら 削除 さ れて し ま う でし ょ う 。 アルゴ リ ズム 前の例で Pervasive PSQL エン ジ ンが使用 し てい る アルゴ リ ズ ムは、 次の よ う にな り ます。 左テーブルを取 り 出 し て、 右テーブルを走査 し ます。 現行の右テーブル行 で ON 条件が TRUE にな る 場合ご と に、現行の左テーブル行に追加 さ れ る 適合 し た右テーブル行か ら 成 る 結果セ ッ ト 行を返 し ます。 ON 条件が TRUE の右テーブル行がない (現行の左テーブル行に対 し 、 す べての右テーブル行で ON 条件が FALSE にな る ) 場合は、 すべての列の 値を NULL に し て右テーブルの行 イ ン ス タ ン ス を作成 し ます。 その結果セ ッ ト は、 行ご と に現行の左テーブル行 と 結合 さ れ、 返 さ れ る 結 果セ ッ ト 内で イ ンデ ッ ク ス付け さ れます。 左テーブル行ご と に こ のアルゴ リ ズ ムが繰 り 返 さ れて、 完全な結果セ ッ ト が構築 さ れます。 前述の単純な 2 方向左外部結合では、 Emp が左テーブルで Dept が右テーブルです。 メ モ アルゴ リ ズ ム と は関係あ り ま せんが、 左テーブルを右テーブル に追加す る 場合、 ク エ リ の選択 リ ス ト 内に指定 さ れた よ う に適切に射 影が行われ る こ と が前提 と な り ます。 こ の射影の範囲は、 すべての列 (た と えば、 SELECT * FROM ...) か ら 、 結果セ ッ ト 内の 1 つの列 (た と えば、 SELECT FirstName FROM ...) です。 3-130 ス テー ト メ ン ト の文法 放射状左外部結合では、 1 つの中央テーブルにほかのすべてのテーブルが 結合 さ れ ま す。 以下の 3 方向の放射状左外部結合の例では、 Emp が中央 テーブルで、 すべての結合はそのテーブルか ら 射影 し た も のです。 SELECT * FROM (Emp LEFT OUTER JOIN Dept ON Emp.DeptID = Dept.DeptID) LEFT OUTER JOIN Addr ON Emp.EmpID = Addr.EmpID 表 3-11 3 方向の放射状左外部結合 Emp Dept Addr First Name Last Name Dept ID Emp ID Dept ID Loc ID Name Emp ID Street Franky Avalon D103 E1 NULL NULL NULL E1 101 Mem Lane Gordon Lightfoot D102 E2 D102 L2 Folk E2 14 Young St Lawrence Welk D101 E3 D101 L1 TV NULL NULL Bruce Cockburn D102 E4 D101 L1 TV NULL NULL チ ェーン状の左外部結合では、1 つのテーブルが別のテーブルに結合 さ れ、 そ の テーブルが ま た別の テーブルに結合 さ れ ま す。 次の例は、 3 方向の チ ェーン状左外部結合を示 し てい ます。 SELECT * FROM (Emp LEFT OUTER JOIN Dept ON Emp.DeptID = Dept.DeptID) LEFT OUTER JOIN Loc ON Dept.LocID = Loc.LocID 表 3-12 3 方向のチ ェ ーン状左外部結合 Emp Dept Loc First Name Last Name Dept ID Emp ID Dept ID Loc ID Name Loc ID Name Franky Avalon D103 E1 NULL NULL NUL L NULL NULL Gordon Lightfoot D102 E2 D102 L2 Folk L2 PlanetY Lawrence Welk D101 E3 D101 L1 TV L1 PlanetX Bruce Cockburn D102 E4 D101 L1 TV L1 PlanetX 3-131 SQL 構文 リ フ ァ レ ン ス こ の結合は、 次の よ う に表す こ と も で き ます。 SELECT * FROM Emp LEFT OUTER JOIN (Dept LEFT OUTER JOIN Loc ON Dept.LocID = Loc.LocID) ON Emp.DeptID = Dept.DeptID 最初の構文は放射状結合 と チ ェーン状結合の両方に使用で き る ため、 最初 の構文をお勧め し ます。 ネ ス ト さ れた左外部結合 ON 条件はネ ス ト 外部の テーブル内の列を参照で き ないため、 こ の 2 番目の構文は放射状結合には 使用で き ません。つま り 、次の ク エ リ では Emp.EmpID への参照は不正です。 SELECT * FROM Emp LEFT OUTER JOIN (Dept LEFT OUTER JOIN Addr ON Emp.EmpID = Addr.EmpID) ON Emp.DeptID = Dept.DeptID 次の例は、 最適化が足 り ない 3 方向の放射状左外部結合を示 し てい ます。 SELECT * FROM Emp E1 LEFT OUTER JOIN Dept ON E1.DeptID = Dept.DeptID, Emp E2 LEFT OUTER JOIN Addr ON E2.EmpID = Addr.EmpID WHERE E1.EmpID = E2.EmpID 表 3-13 最適化が足 り ない 3 方向の放射状左外部結合 Emp Dept Addr First Name Last Name Dept ID Emp ID Dept ID Loc ID Name Emp ID Street Franky Avalon D103 E1 NULL NULL NULL E1 101 Mem Lane Gordon Lightfoot D102 E2 D102 L2 Folk E2 14 Young St Lawrence Welk D101 E3 D101 L1 TV NULL NULL Bruce Cockburn D102 E4 D101 L1 TV NULL NULL Emp 内の EmpID に NULL 値がな く 、EmpID が重複値のない列であ る 場合、 こ の ク エ リ では、 表 3-12 の結果 と 同 じ 結果が返 さ れます。 ただ し 、 こ の ク エ リ は表 3-12 で示 さ れ る 結果ほ ど最適化 さ れてお ら ず、は る かに遅 く な る 可能性があ り ます。 関連項目 「SELECT」 (3-153 ページ) 3-132 ス テー ト メ ン ト の文法 LEAVE 備考 LEAVE ス テー ト メ ン ト に よ り 、 ブ ロ ッ ク ま たはループ ス テー ト メ ン ト を 抜けて実行を継続 し ます。 LEAVE ス テー ト メ ン ト は、 ス ト ア ド プ ロ シー ジ ャ ま たは ト リ ガの本体で使用で き ます。 例 次の例 で は、 変数 vInteger が 1 ずつ増 え、 値が 11 に な る と 、 ループ が LEAVE ス テー ト メ ン ト で終了 し ます。 TestLoop: LOOP IF (:vInteger > 10) THEN LEAVE TestLoop; END IF; SET :vInteger = :vInteger + 1; END LOOP; 関連項目 「IF」 (3-117 ページ) 「LOOP」 (3-135 ページ) 3-133 SQL 構文 リ フ ァ レ ン ス LIKE LIKE を使用す る と 、 文字ベー ス の列デー タ 内でパ タ ーン検索が可能にな り ます。 構文 WHERE 式 [NOT] LIKE 値 備考 LIKE 式の右辺の値は、 単純な文字定数、 USER キーワー ド 、 ま たは (ス ト ア ド プ ロ シージ ャ 外では) 疑問符 "?" で示 さ れ る 、 実行時に供給 さ れ る 動 的パ ラ メ ー タ であ る 必要があ り ます。 動的パ ラ メ ー タ は、 SQL Editor 内で はサポー ト さ れません。 アプリケーション コードでのみサポー ト さ れます。 列の値内の 0 個以上の文字 と 一致 さ せ る には、 比較値の中で必要な回数だ けパーセ ン ト 記号 "%" を使用 し ます。 1 文字 と 一致 さ せ る には、 ア ン ダー ス コ ア "_" を使用 し ます。 こ れ ら の ワ イ ル ド カー ド 記号を リ テ ラ ル文字 と し て一致 さ せ る 必要があ る 場合は、 記号の前に円記号を使用 し て、 その記 号が リ テ ラ ル文字であ る こ と を示 し ます。 表 3-14 特殊文字 文字 用途 パーセント記号 "%" ワ イ ル ド カー ド : 0 個以上の文字 と 一致 し ます。 アンダースコア "_" ワ イ ル ド カー ド : 1 つの文字 と 一致 し ます。 円記号 "\" 後続の ワ イ ル ド カー ド 文字は リ テ ラ ル文字を表す も の と し 、 実際の ワ イ ル ド カー ド 文字その も の と 一致 さ せたい こ と を示 し ま す。 円記号 と 一致 さ せ る には、 円記号を 2 つ入力 し ます。 た と えば、"%" と 一致 さ せ る には、パ タ ー ンは "\%" と 指定す る 必要があ り ます。 2 つの一重引用符 "''" 間に空白の入 ら ない 2 つの一重引用符は、 結果文字列の 一部であ る 一重引用符 と の一致に使用す る 必要があ り ま す。 た と えば、 デー タ ベース の列に "Jim's house" と い う 値が含まれてい る 場合、 WHERE 句で LIKE 'Jim''s house' を指定す る と 、 こ のパ タ ーン と 一致 さ せ る こ と がで き ます。 二重引用符 (") はパ タ ーン文字列内では特 殊文字でないため、 すべての文字や数字 と 同様に使用で き ます。 例 次の例は、 5 文字長で、 かつ中央の 3 文字が abc であ る すべての列値 と 一 致 し ます。 SELECT Building_Name FROM Room WHERE Building_Name LIKE '_abc_' 3-134 ス テー ト メ ン ト の文法 次の例は、 円記号を含むすべての列値 と 一致 し ます。 SELECT Building_Name FROM Room where Building_Name LIKE '%\\%' 次の例は、パーセ ン ト 記号で始ま る 列値以外のすべての列値 と 一致 し ます。 SELECT Building_Name FROM Room where Building_Name NOT LIKE '\%%' 次の例は、1 つま たは複数の一重引用符を含むすべての列値 と 一致 し ます。 SELECT Building_Name FROM Room where Building_Name LIKE '%''%' 次の例は、 2 番目の文字が二重引用符であ る すべての列値 と 一致 し ます。 SELECT Building_Name FROM Room where Building_Name LIKE '_"%' 次の例では、 Building_Name 列が入力変数 :rname に格納 さ れた文字列 を含み、Type 列が入力変数 :rtype に格納 さ れた文字列を含む行を返す、 ス ト ア ド プ ロ シージ ャ が作成 さ れます。 CREATE PROCEDURE room_test(IN :rname CHAR(20), IN :rtype CHAR(20)) RETURNS(Building_Name CHAR(25), "Type" CHAR(20)); BEGIN DECLARE :like1 CHAR(25); DECLARE :like2 CHAR(25); SET :like1 = '%' + :rname + '%'; SET :like2 = '%' + :rtype + '%'; SELECT Building_Name, "Type" FROM Room WHERE Building_Name LIKE :like1 AND "Type" LIKE :like2; END; 次の ス テー ト メ ン ト を 上記の ス ト ア ド プ ロ シージ ャ 内に記述 し た場合、 LIKE 演算子の右辺の式が原因で、 構文エ ラ ーが発生 し ま す。 右辺は単純 な定数でなければな り ません。 不正な構文 SELECT Building_Name, "Type" from Room where Building_Name LIKE '%' + :rname + '%'; 3-135 SQL 構文 リ フ ァ レ ン ス LOOP 備考 LOOP ス テー ト メ ン ト に よ り 、 ス テー ト メ ン ト のブ ロ ッ ク の実行を繰 り 返 し ます。 こ の ス テー ト メ ン ト は、ストアド プロシージャ と ト リ ガでのみ使用で き ます。 Pervasive PSQL では、 事後条件ループ (REPEAT...UNTIL) はサポー ト さ れてい ません。 例 次の例では、 変数 vInteger の値が 11 にな っ てループが終了する ま で、 変数 の値が 1 ずつ増加 し ます。 TestLoop: LOOP IF (:vInteger > 10) THEN LEAVE TestLoop; END IF; SET :vInteger = :vInteger + 1; END LOOP; 関連項目 「CREATE PROCEDURE」 (3-50 ページ) 「CREATE TRIGGER」 (3-73 ページ) 「IF」 (3-117 ページ) 3-136 ス テー ト メ ン ト の文法 NOT 備考 NOT キー ワー ド と EXISTS キーワ ー ド を一緒に使用する と 、サブ ク エ リ の 結果に行が存在 し ない こ と を検査で き ます。 外部 ク エ リ が評価す る 各行に ついて、 Pervasive PSQL で、 サブ ク エ リ か ら の関連す る 行があ る か ど う か が確認 さ れます。 Pervasive PSQL は、 外部 ク エ リ の中でサブ ク エ リ か ら の 関連す る 行に対応す る 各行を、 ス テー ト メ ン ト の結果テーブルか ら 除外 し ます。 IN 演算子 と 一緒に NOT キー ワ ー ド を使用す る と 、 外部 ク エ リ の結果が、 サブ ク エ リ の結果に含まれないか ど う か を検査で き ます。 ス テー ト メ ン ト の結果テーブルには、 外部 ク エ リ が返す行で、 サブ ク エ リ 内に関連す る 行 が存在 し ない も のだけが含まれます。 例 次の ス テー ト メ ン ト は、 ど の講座に も 登録 さ れていない学生の リ ス ト を返 し ます。 SELECT * FROM Person p WHERE NOT EXISTS (SELECT * FROM Student s WHERE s.id = p.id AND Cumulative_Hours = 0) IN を含む よ う に、 こ の ス テー ト メ ン ト を書 き 直す こ と がで き ます。 SELECT * FROM Person p WHERE p.id NOT IN (SELECT s.id FROM Student s WHERE Cumulative_Hours = 0) 関連項目 「SELECT」 (3-153 ページ) 3-137 SQL 構文 リ フ ァ レ ン ス OPEN 備考 OPEN ス テー ト メ ン ト に よ り 、 カー ソ ルがオープ ン さ れます。 カー ソ ルを オープンす る には、 事前にカー ソ ルが定義 さ れていなければな り ません。 カー ソ ル と 変数は ス ト ア ド プ ロ シージ ャ と ト リ ガ内部でのみ許可 さ れ る ため、 こ の ス テー ト メ ン ト は ス ト ア ド プ ロ シージ ャ ま たは ト リ ガの内部で のみ使用で き ます。 構文 OPEN カー ソ ル名 例 次の例では、 宣言 さ れた カー ソ ル BTUCursor がオープ ン さ れます。 DECLARE BTUCursor CURSOR FOR SELECT Degree, Residency, Cost_Per_Credit FROM Tuition ORDER BY ID; OPEN BTUCursor; CREATE PROCEDURE MyProc(IN :CourseName CHAR(7)) AS BEGIN DECLARE cursor1 CURSOR FOR SELECT Degree, Residency, Cost_Per_Credit FROM Tuition ORDER BY ID; ......... OPEN cursor1; FETCH cursor1 INTO :CourseName; ......... CLOSE cursor1; ......... END 関連項目 「CREATE PROCEDURE」 (3-50 ページ) 「CREATE TRIGGER」 (3-73 ページ) 「DECLARE CURSOR」 (3-79 ページ) 3-138 ス テー ト メ ン ト の文法 PRIMARY KEY 備考 PRIMARY KEY は ADD 句で使用 し て、 テーブル定義に主キーを追加 し ま す。 主キーは、 ヌ ル値を含ま ない、 重複のない イ ンデ ッ ク ス です。 主キー を指定す る と 、 Pervasive PSQL に よ っ て、 定義 さ れた列のグループに対 し て、 指定 さ れた属性で重複のない イ ンデ ッ ク ス が作成 さ れます。 テーブルに複数の主キーがあ っ てはな ら ないので、 既に主キーが定義 さ れ てい る テーブルに主キーを追加す る こ と はで き ません。 テーブルの主キー を変更す る には、ALTER TABLE ス テー ト メ ン ト で DROP 句を使用 し て既 存のキーを削除 し 、 新 し い主キーを追加 し ます。 メ モ 主キーを追加 し た り 、 その他の参照整合性 (RI) 操作を行っ た り す る には、 その前にデー タ ベース名を使用 し てデー タ ベース に ロ グ イ ンする 必要があ り ます。 PRIMARY KEY は ALTER TABLE ス テー ト メ ン ト の ADD 句で使用 し て、 テーブル定義に主キーを追加 し ます。 主キーを追加す る 前に、主キー列 リ ス ト 内の列が NOT NULL と し て定義 さ れてい る こ と を確認す る 必要があ り ます。 主キーは重複のない イ ンデ ッ ク ス であ る ため、 ヌ ル値を許可 し ない列でのみ作成す る こ と がで き ます。 ヌ ル値を許可 し ない列に基づ く 重複のない イ ンデ ッ ク ス が既に存在す る 場 合、ADD PRIMARY KEY に よ っ て別の重複のない イ ンデ ッ ク スは作成 さ れ ま せん。 代わ り に、 既存の重複のない イ ンデ ッ ク ス が主キーにな り ま す。 た と えば、 次の ス テー ト メ ン ト では、 T1_C1C2 と い う 名前付 き イ ンデ ッ ク ス が主キーにな り ます。 CREATE TABLE t1 (c1 INT NOT NULL, c2 CHAR(10) NOT NULL) CREATE UNIQUE INDEX t1_c1c2 ON t1(c1,c2) ALTER TABLE t1 ADD PRIMARY KEY(c1, c2) こ の よ う な主キーを削除 し た場合、 その主キーは重複のない イ ンデ ッ ク ス に切 り 替わ り ます。 ALTER TABLE t1 DROP PRIMARY KEY ヌ ル値を許可 し ない列に基づ く 重複のない イ ンデ ッ ク ス がテーブル内に存 在 し ない場合は、 ADD PRIMARY KEY に よ っ て、 ヌ ル値を許可 し ない列に 基づいて重複のない イ ンデ ッ ク ス が作成 さ れ ます。 DROP PRIMARY KEY に よ っ て、 重複のない イ ンデ ッ ク スは完全に削除 さ れます。 PRIMARY KEY 句は CREATE TABLE ス テー ト メ ン ト で使用 し て、 テー ブル定義に主キーを追加 し ます。 3-139 SQL 構文 リ フ ァ レ ン ス デー タ ベース に参照制約を定義す る には、 PRIMARY KEY 句を使用 し て 親テーブルの主キーを指定す る 必要があ り ます。 主キーは、 1 つま たは複 数の列で構成する こ と がで き ますが、 ヌ ルではない列に対 し てのみ定義で き ます。 指定する 列は、 CREATE TABLE ス テー ト メ ン ト の列定義 リ ス ト に含まれ る 必要 も あ り ます。 主キーを指定す る と 、 Pervasive PSQL に よ っ て、 定義 さ れた列のグループ に 対 し て、 指定 さ れ た 属性 で イ ン デ ッ ク ス が 作成 さ れ ま す。 CREATE TABLE ス テー ト メ ン ト 内で、列が NOT NULL と し て明確に定義 さ れてい ない場合、 Pervasive PSQL はその列を強制的に ヌ ル値を許可 し ない列に し ます。 ま た、 Pervasive PSQL はその列に重複のない イ ンデ ッ ク ス を作成 し ます。 た と えば、 次の 2 つの ス テー ト メ ン ト は同 じ 結果にな り ます。 CREATE TABLE t1 (c1 INT, c2 CHAR(10), PRIMARY KEY(c1,c2)) CREATE TABLE t1 (c1 INT NOT NULL, c2 CHAR(10) NOT NULL, PRIMARY KEY(c1,c2)) 例 次の ス テー ト メ ン ト は、 Faculty と い う テーブルに主キーを定義 し ます (ID 列は重複のない イ ンデ ッ ク ス と し て定義 さ れてお り 、 ヌ ル値は含まれませ ん)。 ALTER TABLE Faculty ADD PRIMARY KEY (ID) 関連項目 「ALTER TABLE」 (3-8 ページ) 「CREATE TABLE」 (3-62 ページ) 3-140 ス テー ト メ ン ト の文法 PUBLIC 備考 PUBLIC キー ワー ド は FROM 句で使用 し て、 Create Table 権が明示的に割 り 当て ら れていない全ユーザーのア ク セ ス権を取 り 消 し ます。 FROM 句を使用 し て、ア ク セ ス権を取 り 消すグループ ま たはユーザーを指 定 し ます。 単一の名前ま たは名前の リ ス ト を指定す る か、 も し く は、 権限 が明示的に割 り 当て ら れていない全ユーザーのア ク セ ス権を取 り 消す場合 は PUBLIC キーワ ー ド を使用する こ と がで き ます。 例 辞書内 の全ユーザーに ア ク セ ス 権 を 割 り 当 て る に は、 次の例の よ う に PUBLIC キー ワ ー ド を使用 し て PUBLIC グループにア ク セ ス 権を付与 し ます。 GRANT SELECT ON Course TO PUBLIC こ の ス テー ト メ ン ト は、 辞書内で定義 さ れ て い る 全ユーザーに、 Course テーブルの Select 権を割 り 当て ます。 後で PUBLIC グループの Select 権を 取 り 消 し た場合、 Select 権が明示的に付与 さ れたユーザーだけがテーブル にア ク セ ス で き ます。 次の ス テー ト メ ン ト では、 PUBLIC キーワ ー ド を使用 し て、 辞書内で定義 さ れてい る 全ユーザーに Create Table 権を付与 し ます。 GRANT CREATETAB TO PUBLIC 関連項目 「GRANT」 (3-109 ページ) 「REVOKE」 (3-145 ページ) 3-141 SQL 構文 リ フ ァ レ ン ス PRINT 備考 PRINT を使用 し て、変数の値ま たは定数を印刷 し ます。PRINT ス テー ト メ ン ト は Windows ベース のプ ラ ッ ト フ ォームにのみ適用 さ れます。ほかのオ ペレーテ ィ ン グ シ ス テ ムのプ ラ ッ ト フ ォームでは無視 さ れます。 PRINT は ス ト ア ド プ ロ シージ ャ 内でのみ使用で き ます。 例 次の例では、 変数 :myvar の値が印刷 さ れます。 PRINT( :myvar ); PRINT 'MYVAR = ' + :myvar; 次の例では、 数値にな ら っ たテ キ ス ト 文字列が印刷 さ れます。 数値はテ キ ス ト 文字列に変換 し て印刷 し なければな り ません。 PRINT 'History 101 に登録 さ れてい る 生徒数 :' + convert(:int_val, SQL_CHAR); 関連項目 「CREATE PROCEDURE」 (3-50 ページ) 3-142 ス テー ト メ ン ト の文法 RELEASE SAVEPOINT RELEASE SAVEPOINT ス テー ト メ ン ト を使用 し て、セーブポ イ ン ト を削除 し ます。 構文 RELEASE SAVEPOINT セーブポ イ ン ト 名 セーブポ イ ン ト 名 ::= ユーザー定義名 備考 AUTOCOMMIT がオ フ の場合、 RELEASE、 ROLLBACK、 お よ び SAVEPOINT はセ ッ シ ョ ン レベル (ス ト ア ド プ ロ シージ ャ の外部) での みサポー ト さ れます。 そ う でない場合、 RELEASE、 ROLLBACK、 お よ び SAVEPOINT は ス ト ア ド プ ロ シージ ャ 内で使用 し なければな り ません。 ス ト ア ド プ ロ シージ ャ 内で コ ミ ッ ト さ れた ス テー ト メ ン ト は、呼び出 し 元 の ODBC ア プ リ ケーシ ョ ン の一番外側の ト ラ ン ザ ク シ ョ ン に よ っ て制御 さ れます。これはつまり、SQLSetConnectOption で指定 さ れた AUTOCOMMIT モー ド に従っ て、 ODBC アプ リ ケーシ ョ ンか ら 外部的に呼び出 し てい る ス ト ア ド プ ロ シージ ャ が、 2 種類あ る 動作の う ち 1 つを実行す る と い う こ と です。 自動的に コ ミ ッ ト す る (AUTOCOMMIT がオ ン、 デ フ ォ ル ト ) か、 SQLTransact が SQL_COMMIT ま たは SQL_ROLLBACK で呼び出 さ れ る の を待つ (AUTOCOMMIT がオ フ に設定 さ れてい る 場合) のいずれかです。 例 次の例では、 SAVEPOINT を設定 し 、 その後で条件を調べて SAVEPOINT を ROLLBACK す る か RELEASE す る かが判断 さ れます。 CREATE PROCEDURE Enroll_student( IN :student ubigint, IN :classnum INTEGER); BEGIN DECLARE :CurrentEnrollment INTEGER; DECLARE :MaxEnrollment INTEGER; SAVEPOINT SP1; INSERT INTO Enrolls VALUES (:student, :classnum, 0.0); SELECT COUNT(*) INTO :CurrentEnrollment FROM Enrolls WHERE class_id = :classnum; SELECT Max_size INTO :MaxEnrollment FROM Class WHERE ID = :classnum; IF :CurrentEnrollment >= :MaxEnrollment THEN ROLLBACK TO SAVEPOINT SP1; ELSE RELEASE SAVEPOINT SP1; 3-143 SQL 構文 リ フ ァ レ ン ス END IF; END; COUNT( 式 ) に よ っ て、 述部にあ る 式の非ヌ ル値がすべて カ ウ ン ト さ れ る と い う こ と を覚え ておいて く だ さ い。 COUNT(*) では ヌ ル値を含むすべて の値がカ ウ ン ト さ れます。 関連項目 「CREATE PROCEDURE」 (3-50 ページ) 「ROLLBACK」 (3-148 ページ) 「SAVEPOINT」 (3-150 ページ) 3-144 ス テー ト メ ン ト の文法 RESTRICT 備考 RESTRICT を指定 し た場合、 Pervasive PSQL は DELETE RESTRICT 規則 を使用 し ます。 ユーザーは、 親テーブル内で、 外部キー値が参照す る 行を 削除で き ません。 削除規則を指定 し ない場合、Pervasive PSQL はデフ ォ ル ト で RESTRICT 規 則を適用 し ます。 関連項目 「ALTER TABLE」 (3-8 ページ) 3-145 SQL 構文 リ フ ァ レ ン ス REVOKE REVOKE ス テー ト メ ン ト に よ り 、 ユーザー ID を削除 し 、 セキ ュ リ テ ィ で 保護 さ れて い る デー タ ベー ス 内の特定のユーザーへの権限 を 取 り 消 し ま す。 REVOKE ス テー ト メ ン ト を使っ て、 CREATE TABLE、 CREATE VIEW、 お よ び CREATE PROCEDURE の権限を取 り 消す こ と がで き ます。 構文 REVOKE CREATETAB | CREATEVIEW | CREATESP FROM public ま たはユーザー / グループ名 [, public ま たはユーザー / グループ名 ]... REVOKE LOGIN FROM ユーザー名 [, ユーザー名 ]... REVOKE テーブル権限 ON < * | テーブル名 [ オーナー ネーム ]> FROM ユーザー / グループ名 [, ユーザー / グループ名 ]... テーブル権限 ::= ALL | SELECT [( 列名 [, 列名 ]... ) ] | UPDATE [( 列名 [, 列名 ]... ) ] | | INSERT [( 列名 [, 列名 ]... ) ] DELETE | ALTER | REFERENCES テーブル名 ::= [ デー タ ベース名 .] ユーザー定義のテーブル名 デー タ ベース名 ::= テーブルが属 し てい る デー タ ベース の名前 public ま たはユーザー / グループ名 ::= PUBLIC | ユーザー / グループ名 ユーザー / グループ名 ::= ユーザー名 | グループ名 ユーザー名 ::= ユーザー定義名 グループ名 ::= ユーザー定義名 次の表は、 特定の操作に対す る 構文を示 し てい ます。 3-146 こ の操作の権限を取 り 消す場合 REVOKE で使用する構文 CREATE TABLE CREATETAB CREATE VIEW CREATEVIEW CREATE PROCEDURE CREATESP ス テー ト メ ン ト の文法 例 次の ス テー ト メ ン ト に よ っ て、 dannyd か ら テーブル Class のすべての権限 が取 り 消 さ れます。 REVOKE ALL ON Class FROM 'dannyd' 次の ス テー ト メ ン ト では、 dannyd と travisk か ら テーブル Class のすべての 権限が取 り 消 さ れます。 REVOKE ALL ON Class FROM dannyd, travisk 次 の ス テ ー ト メ ン ト に よ っ て、 dannyd と travisk か ら テ ー ブ ル Class の DELETE 権限が取 り 消 さ れます。 REVOKE DELETE ON Class FROM dannyd, travisk 次の例では、 keithv と miked か ら テーブル Class の INSERT 権限が取 り 消 さ れます。 REVOKE INSERT ON Class FROM keithv, miked 次の例では、 keithv と brendanb か ら 、 テーブル Person の列 First_name と Last_name の INSERT 権限が取 り 消 さ れます。 REVOKE INSERT(First_name,Last_name) ON Person FROM keithv, brendanb 次の ス テー ト メ ン ト に よ り 、 dannyd か ら テーブル Class の ALTER 権限が 取 り 消 さ れます。 REVOKE ALTER ON Class FROM dannyd 次の例では、 dannyd と travisk か ら テーブル Class の SELECT 権限が取 り 消 さ れます。 REVOKE SELECT ON Class FROM dannyd, travisk 次の ス テー ト メ ン ト に よ り 、 dannyd と travisk か ら 、 テーブル Person の列 First_name と Last_name の SELECT 権限が取 り 消 さ れます。 REVOKE SELECT(First_name, Last_name) ON Person FROM dannyd, travisk 次の例では、 dannyd と travisk か ら テーブル Person の UPDATE 権限が取 り 消 さ れます。 REVOKE UPDATE ON Person ON dannyd, travisk 次の例では、 user1 か ら CREATE VIEW 権限が取 り 消 さ れます。 REVOKE CREATEVIEW FROM user1; 3-147 SQL 構文 リ フ ァ レ ン ス 関連項目 「GRANT」 (3-109 ページ) 3-148 ス テー ト メ ン ト の文法 ROLLBACK ROLLBACK は、 デー タ ベース を現行 ト ラ ンザ ク シ ョ ンが開始 さ れ る 前の 状態に戻 し ます。 こ の ス テー ト メ ン ト に よ り 、 最後に行っ た SAVEPOINT ま たは START TRANSACTION 以降に取得 し た ロ ッ ク を解放 し ます。 ROLLBACK TO SAVEPOINT ス テー ト メ ン ト は、 指定 さ れたセーブポ イ ン ト ま で ト ラ ンザ ク シ ョ ン を ロ ールバ ッ ク し ます。 構文 ROLLBACK [WORK] [TO SAVEPOINT セーブポ イ ン ト 名 ] 備考 AUTOCOMMIT がオフの場合、 ROLLBACK、 SAVEPOINT、 お よ び RELEASE はセ ッ シ ョ ン レベル (ス ト ア ド プ ロ シージ ャ の外部) でのみサ ポー ト さ れ ま す。 そ う で な い場合、 ROLLBACK、 SAVEPOINT、 お よ び RELEASE は ス ト ア ド プ ロ シージ ャ 内で使用 し なければな り ません。 ス ト ア ド プ ロ シージ ャ 内で コ ミ ッ ト さ れた ス テー ト メ ン ト は、呼び出 し 元 の ODBC ア プ リ ケーシ ョ ン の一番外側の ト ラ ン ザ ク シ ョ ン に よ っ て制御 さ れます。これはつまり、SQLSetConnectOption で指定 さ れた AUTOCOMMIT モー ド に従っ て、 ODBC アプ リ ケーシ ョ ンか ら 外部的に呼び出 し てい る ス ト ア ド プ ロ シージ ャ が、 2 種類あ る 動作の う ち 1 つを実行す る と い う こ と です。 自動的に コ ミ ッ ト す る (AUTOCOMMIT がオ ン、 デ フ ォ ル ト ) か、 SQLTransact が SQL_COMMIT ま たは SQL_ROLLBACK で呼び出 さ れ る の を待つ (AUTOCOMMIT がオ フ に設定 さ れてい る 場合) のいずれかです。 ネ ス ト さ れた ト ラ ン ザ ク シ ョ ン の場合、 ROLLBACK は一番近い START TRANSACTION ま で ロ ール バ ッ ク し ます。 た と えば、 ト ラ ンザ ク シ ョ ン が 5 レベルま でネ ス ト さ れてい る 場合、 すべての ト ラ ンザ ク シ ョ ン を元に 戻すには 5 つの ROLLBACK ス テー ト メ ン ト が必要にな り ます。 ト ラ ンザ ク シ ョ ンは、 コ ミ ッ ト さ れ る か ロ ール バ ッ ク さ れ る かのいずれかで、 両方 は さ れません。 つま り 、 コ ミ ッ ト さ れた ト ラ ンザ ク シ ョ ン を ロ ール バ ッ ク す る こ と はで き ません。 例 次の ス テー ト メ ン ト に よ っ て、 ト ラ ンザ ク シ ョ ンが開始 さ れてか ら デー タ ベース に加え ら れた変更が元に戻 り ます。 ROLLBACK WORK; 次の ス テー ト メ ン ト に よ っ て、 Svpt1 と 名付け ら れた最後のセーブポ イ ン ト か ら デー タ ベース に加え ら れた変更が元に戻 り ます。 ROLLBACK TO SAVEPOINT Svpt1; 3-149 SQL 構文 リ フ ァ レ ン ス 関連項目 「COMMIT」 (3-37 ページ) 「RELEASE SAVEPOINT」 (3-142 ページ) 「SAVEPOINT」 (3-150 ページ) 3-150 ス テー ト メ ン ト の文法 SAVEPOINT SAVEPOINT は、 ロ ール バ ッ ク 可能な ト ラ ンザ ク シ ョ ン内のポ イ ン ト を定 義 し ます。 構文 SAVEPOINT セーブポ イ ン ト 名 セーブポ イ ン ト 名 ::= ユーザー定義名 備考 AUTOCOMMIT がオフの場合、 ROLLBACK、 SAVEPOINT、 お よ び RELEASE はセ ッ シ ョ ン レベル (ス ト ア ド プ ロ シージ ャ の外部) でのみサ ポー ト さ れ ま す。 そ う で な い場合、 ROLLBACK、 SAVEPOINT、 お よ び RELEASE は ス ト ア ド プ ロ シージ ャ 内で使用 し なければな り ません。 ス ト ア ド プ ロ シージ ャ 内で コ ミ ッ ト さ れた ス テー ト メ ン ト は、呼び出 し 元 の ODBC ア プ リ ケーシ ョ ン の一番外側の ト ラ ン ザ ク シ ョ ン に よ っ て制御 さ れます。これはつまり、SQLSetConnectOption で指定 さ れた AUTOCOMMIT モー ド に従っ て、 ODBC アプ リ ケーシ ョ ンか ら 外部的に呼び出 し てい る ス ト ア ド プ ロ シージ ャ が、 2 種類あ る 動作の う ち 1 つを実行す る と い う こ と です。 自動的に コ ミ ッ ト す る (AUTOCOMMIT がオ ン、 デ フ ォ ル ト ) か、 SQLTransact が SQL_COMMIT ま たは SQL_ROLLBACK で呼び出 さ れ る の を待つ (AUTOCOMMIT がオ フ に設定 さ れてい る 場合) のいずれかです。 SAVEPOINT は、それが定義 さ れてい る プ ロ シージ ャ にのみ適用 さ れます。 つま り 、 別のプ ロ シージ ャ 内に定義 さ れてい る SAVEPOINT は参照で き ま せん。 例 次の例では、 SAVEPOINT を設定 し 、 その後で条件を調べて SAVEPOINT を ROLLBACK す る か RELEASE す る かが判断 さ れます。 CREATE PROCEDURE Enroll_student(IN :student ubigint, IN :classnum INTEGER); BEGIN DECLARE :CurrentEnrollment INTEGER; DECLARE :MaxEnrollment INTEGER; SAVEPOINT SP1; INSERT INTO Enrolls VALUES (:student, :classnum, 0.0); SELECT COUNT(*) INTO :CurrentEnrollment FROM Enrolls WHERE class_id = :classnum; SELECT Max_size INTO :MaxEnrollment FROM Class WHERE ID = :classnum; IF :CurrentEnrollment >= :MaxEnrollment 3-151 SQL 構文 リ フ ァ レ ン ス THEN ROLLBACK TO SAVEPOINT SP1; ELSE RELEASE SAVEPOINT SP1; END IF; END; COUNT( 式 ) に よ っ て、 述部にあ る 式の非ヌ ル値がすべて カ ウ ン ト さ れ る と い う こ と を覚え ておいて く だ さ い。 COUNT(*) では ヌ ル値を含むすべて の値がカ ウ ン ト さ れます。 関連項目 「COMMIT」 (3-37 ページ) 「CREATE PROCEDURE」 (3-50 ページ) 「RELEASE SAVEPOINT」 (3-142 ページ) 「ROLLBACK」 (3-148 ページ) 3-152 ス テー ト メ ン ト の文法 SELECT (into 付き) SELECT (INTO 付 き ) ス テー ト メ ン ト を使用す る と 、 指定 し た テーブル か ら 列の値を選択 し て、 ス ト ア ド プ ロ シージ ャ 内の変数値に挿入す る こ と がで き ます。 構文 SELECT [ALL | DISTINCT] 選択 リ ス ト INTO 変数名 [, 変数名 ]... FROM テーブル参照 [, テーブル参照 ]...[ WHERE 検索条件 ] [ GROUP BY 式 [, 式 ]...[HAVING 検索条件 ]] 備考 INTO 句を使用 し た SELECT は、ス ト ア ド プ ロ シージ ャ 内部でのみ許可 さ れます。 例 次の例では、 名前が Bill の Person テーブルの first_name と last_name の値 を変数 :x、 :y に割 り 当て ます。 SELECT first_name, last_name INTO :x, :y FROM person WHERE first_name = 'Bill' 関連項目 「CREATE PROCEDURE」 (3-50 ページ) 3-153 SQL 構文 リ フ ァ レ ン ス SELECT 指定 さ れた情報をデー タ ベース か ら 取 り 出 し ます。 SELECT ス テー ト メ ン ト に よ り 、 テ ン ポ ラ リ ビ ュ ーを作成 し ます。 構文 ク エ リ スペ ッ ク [UNION [ALL] ク エ リ スペ ッ ク ]... [ ORDER BY order-by 式 [, order-by 式 ]... ] ク エ リ スペ ッ ク ::= ( ク エ リ スペ ッ ク ) | SELECT [ALL | DISTINCT] [top 句 ] 選択 リ ス ト FROM テーブル参照 [, テーブル参照 ]... [ WHERE 検索条件 ] [ GROUP BY 式 [, 式 ]... [ HAVING 検索条件 ]] order-by 式 ::= 式 [CASE (文字列) | COLLATE コ レーシ ョ ン名 ] [ASC | DESC] top 句 ::= TOP 個数 選択 リ ス ト ::= * | 選択項目 [, 選択項目 ]... 選択項目 ::= 式 [[AS] エ イ リ ア ス名 ] | テーブル名 . * テーブル参照 ::= {OJ 外部結合の定義 } | [ デー タ ベース名 .] テーブル名 [[AS] エ イ リ ア ス名 ] | [ デー タ ベース名 .] ビ ュ ー名 [[AS] エ イ リ ア ス名 ] | 結合定義 | ( 結合定義 ) | ( テーブル サブ ク エ リ ) [AS] エ イ リ ア ス名 [( 列名 [, 列名 ]... ) ] 結合定義 ::= テーブル参照 [ 結合 タ イ プ ] JOIN テーブル参照 ON 検索条件 | テーブル参照 CROSS JOIN テーブル参照 | 外部結合の定義 結合 タ イ プ ::= INNER | LEFT [OUTER ] | RIGHT [OUTER] | FULL [OUTER] 外部結合の定義 ::= テーブル参照 外部結合 タ イ プ JOIN テーブル参照 ON 検索条件 外部結合 タ イ プ ::= LEFT [OUTER ] | RIGHT [OUTER] | FULL [OUTER] テーブル サブ ク エ リ ::= ク エ リ スペ ッ ク [[UNION [ALL] ク エ リ スペ ッ ク ]... ] 検索条件 ::= 検索条件 AND 検索条件 | 検索条件 OR 検索条件 | NOT 検索条件 | ( 検索条件 ) 3-154 ス テー ト メ ン ト の文法 | 述部 述部 ::= 式 [NOT] BETWEEN 式 AND 式 | 式ま たはサブ ク エ リ 比較演算子 式ま たはサブ ク エ リ | 式 [NOT] IN ( ク エ リ スペ ッ ク ) | 式 [NOT] IN ( 値 [, 値 ]... ) | 式 [NOT] LIKE 値 | 式 IS [NOT] NULL | 式 比較演算子 ANY ( ク エ リ スペ ッ ク ) | 式 比較演算子 ALL ( ク エ リ スペ ッ ク ) | [ NOT] EXISTS ( ク エ リ スペ ッ ク ) 比較演算子 ::= < | > | <= | >= | = | <> | != 式ま たはサブ ク エ リ ::= 式 | ( ク エ リ スペ ッ ク ) 値 ::= リ テ ラ ル | USER | ? 式 ::= 式 - 式 | 式 + 式 | 式 * 式 | 式 / 式 | 式 & 式 | 式 | 式 | 式 ^ 式 | ( 式) | -式 | +式 | 列名 | ? | リ テラル | セ ッ ト 関数 | ス カ ラ 関数 | {fn ス カ ラ 関数} | CASE case 値式 WHEN when 式 THEN then 式 [...] [ELSE else 式 ] END | COALESCE ( 式 , 式 [,...]) | IF ( 検索条件 , 式 , 式 ) | SQLSTATE | サブ ク エ リ 式 | NULL | : ユーザー定義名 | USER | @:IDENTITY | @:ROWCOUNT | @@IDENTITY 3-155 SQL 構文 リ フ ァ レ ン ス | @@ROWCOUNT | @@SPID case 値式 when 式 , then 式 else 式 ::= 「CASE (式)」 (3-27 ページ) を参照 サブ ク エ リ 式 ::= ( ク エ リ スペ ッ ク ) セ ッ ト 関数 ::= COUNT (*) | COUNT ([DISTINCT | ALL] 式 ) | SUM ([DISTINCT | ALL] 式 ) | AVG ([DISTINCT | ALL] 式 ) | MIN ([DISTINCT | ALL] 式 ) | MAX ([DISTINCT | ALL] 式 ) ス カ ラ 関数 ::= 「ス カ ラ 関数」 (5-1 ページ) を参照 備考 Pervasive PSQL では、 列 リ ス ト の GROUP BY がサポー ト さ れてい る ほか、 式 リ ス ト やあ ら ゆ る 式の GROUP BY も サポー ト す る よ う に、 GROUP BY 式 リ ス ト の構文が拡張 さ れてい ます。 GROUP BY 拡張の詳細については、 「GROUP BY」 (3-114 ページ) を 参照 し て く だ さ い。 GROUP BY の な い HAVING はサポー ト さ れてい ません。 以下に示す特性の う ちい く つか を持つ SELECT ス テー ト メ ン ト の実行に よ っ て生成 さ れた結果セ ッ ト お よ びス ト ア ド ビ ュ ーは、読み取 り 専用にな り ます (更新で き ません) 。 つま り 、 結果セ ッ ト あ る いは ス ト ア ド ビ ュ ー で位置付け UPDATE、 位置付け DELETE、 お よ び SQLSetPos を呼び出 し て デー タ を追加、 変更、 削除す る こ と は許可 さ れません。 3-156 SQLSetStmtOption で SQL_CONCURRENCY タ イ プに SQL_CONCUR_READ_ONLY を指定 し た 選択 リ ス ト に集計を含んでい る SELECT SUM(c1) FROM t1 選択 リ ス ト に DISTINCT を指定 し てい る SELECT DISTINCT c1 FROM t1 ビ ュ ーに GROUP BY 句を含んでい る SELECT SUM(c1), c2 FROM t1 GROUP BY c2 ビ ュ ーは結合であ る (複数のテーブルを参照す る ) SELECT * FROM t1, t2 ビ ュ ーに UNION 演算子を使用 し てお り 、 UNION ALL が指定 さ れてい ないか、 も し く はすべての SELECT ス テー ト メ ン ト が同 じ テーブルを 参照 し ていない SELECT c1 FROM t1 UNION SELECT c1 FROM t1 SELECT c1 FROM t1 UNION ALL SELECT c1 FROM t2 ス テー ト メ ン ト の文法 ス ト ア ド ビ ュ ーでは UNION 演算子を使用で き ないので注意 し て く だ さ い。 ビ ュ ーに、外部 ク エ リ 内のテーブル以外のテーブルを参照す る サブ ク エ リ を含んでい る SELECT c1 FROM t1 WHERE c1 IN (SELECT c1 FROM t2) 動的パ ラ メ ー タ (?) は、 SELECT 項目 と し てはサポー ト さ れてい ません。 動的パ ラ メ ー タ が述部の一部であれば、 SELECT ス テー ト メ ン ト 内で使用 す る こ と がで き ます。た と えば、SELECT * FROM faculty WHERE id = ? は、 動的パ ラ メ ー タ が述部の一部なので有効です。 SQLExecDirect ス テー ト メ ン ト は動的パ ラ メ ー タ の使用を サポー ト し てい ないので注意 し て く だ さ い。 こ の こ と か ら 、 SQL Editor を使用 し て、 述部 に動的パ ラ メ ー タ を含む SQL ス テー ト メ ン ト の実行はで き ま せん (SQL Editor は SQLExecDirect を使用 し ます)。 変数は、ス ト ア ド プ ロ シージ ャ 内でのみ SELECT 項目 と し て使用す る こ と がで き ます。 「CREATE PROCEDURE」 (3-50 ページ) を参照 し て く だ さ い。 エ イ リ ア スの使用 WHERE、 HAVING、 ORDER BY、 ま たは GROUP BY 句にエ イ リ ア ス を含 め る こ と がで き ます。 エ イ リ ア ス名はテーブル内の ど の列名 と も 異な っ て いなければな り ません。 次の ス テー ト メ ン ト は、 WHERE 句 と GROUP BY 句でエ イ リ ア ス "a" お よ び "b" を使用する 例を示 し てい ます。 SELECT Student_ID a, Transaction_Number b, SUM (Amount_Owed) FROM Billing WHERE a < 120492810 GROUP BY a, b UNION SELECT Student_ID a, Transaction_Number b, SUM (Amount_Paid) FROM Billing WHERE a > 888888888 GROUP BY a, b SUM と DECIMAL の精度 SUM 集計関数を使っ て DECIMAL 型の フ ィ ール ド を集計す る 場合は、次の 規則が適用 さ れます。 結果の有効桁数は 74 ですが、 小数部桁数は列定義に依存 し ます。 74 を超え る 桁数の数値 (本当に、 非常に大 き な数値です) が計算 さ れた場 合、 結果でオーバーフ ロ ー エ ラ ーが発生する こ と があ り ます。 オーバーフ ロ ーが発生 し た場合、 値は返 ら ず、 SQLSTATE に数値が範囲外であ る こ と を示す 22003 が設定 さ れます。 サブ ク エ リ サブ ク エ リ は一種の SELECT ス テー ト メ ン ト で、 ス テー ト メ ン ト 内に 1 つ 以上の SELECT ス テー ト メ ン ト を含んでい ます。 サブ ク エ リ は、 ス テー ト 3-157 SQL 構文 リ フ ァ レ ン ス メ ン ト の処理を進め る ために値を生成 し ます。 一番上の SELECT ス テー ト メ ン ト でサブ ク エ リ を ネ ス ト で き る 最大数は 16 です。 サポー ト さ れ る サブ ク エ リ の タ イ プは次の と お り です。 comparison quantified in exists correlated expression ORDER BY 句は、 サブ ク エ リ 句の中では許可 さ れません。 HAVING 句の中では、 グループ化列への参照を含む相関サブ ク エ リ 述部は サポー ト さ れてい ません。 expression サブ ク エ リ は、 SELECT リ ス ト の中でサブ ク エ リ を使用で き ま す。 た と えば、 SELECT (SELECT SUM(c1) FROM t1 WHERE t1.c2 = t1.(c2) FROM t2 の よ う に記述で き ます。 サブ ク エ リ の SELECT リ ス ト に指定で き る 項目は 1 つのみです。 た と えば、 次の ス テー ト メ ン ト は、 サブ ク エ リ の SELECT リ ス ト に 2 つ以上の項目が含まれてい る ため、エ ラ ーが返 り ます。 SELECT p.id, (SELECT SUM(b.amount_owed), SUM(b.amount_paid) FROM billing b) FROM person p 式 と し てのサブ ク エ リ は相関で も 非相関で も か ま い ません。 相関サブ ク エ リ は、 一番上の ス テー ト メ ン ト に指定 さ れてい る テーブル内の 1 つ以上の 列を参照 し ます。 非相関サブ ク エ リ は、 一番上の ス テー ト メ ン ト に指定 さ れてい る テーブル内の列を参照 し ません。 演算子 IN、 EXISTS、 ALL、 ま た は ANY と 関連付け ら れてい る サブ ク エ リ は式 と 見な さ れません。 相関お よ び非相関のサブ ク エ リ は、 ど ち ら も 単一の値のみ返す こ と がで き ます。 こ のため、 相関サブ ク エ リ お よ び非相関サブ ク エ リ は ス カ ラ サブ ク エ リ と も 呼ばれます。 ス カ ラ サブ ク エ リ は、 DISTINCT、 GROUP BY、 お よ び ORDER BY 句に含 む こ と がで き ます。 サブ ク エ リ は式の左辺で使用す る こ と がで き ます。 式ま たはサブ ク エ リ 比較演算子 式ま たはサブ ク エ リ こ こ で、 式は 1 つの式、 比較演算子は次の う ちのいずれかです。 < 3-158 > (より大きい) <= (小さいかまた は等しい) >= (大きいかま たは等しい) = (より小さい) <> (等しくない) != (等しくない) LIKE IN NOT IN (等 し い) ス テー ト メ ン ト の文法 最適化 左辺のサブ ク エ リ の動作は、 サブ ク エ リ が相関サブ ク エ リ でな く 、 すべて の結合条件が 1 つの外部結合で あ る 場合の、 IN、 NOT IN、 お よ び =ANY について最適化 さ れてい ます。 それ以外の条件は最適化 さ れない こ と があ り ます。 次は、 こ れ ら の条件を満たす ク エ リ の例です。 SELECT count(*) FROM person WHERE id IN (SELECT faculty_id FROM class) Pervasive PSQL は イ ンデ ッ ク ス に基づいてサブ ク エ リ を最適化す る ため、 サブ ク エ リ で イ ンデ ッ ク ス を使用す る と パフ ォーマ ン ス が向上 し ます。 た と えば、 次の ス テー ト メ ン ト 内のサブ ク エ リ は、 student_id が Billing テー ブルの イ ンデ ッ ク ス であ る ため、 こ の列に よ っ て最適化 さ れます。 SELECT (SELECT SUM(b.amount_owed) FROM billing b WHERE b.student_id = p.id) FROM person p サブ ク エ リ 内の UNION 1 つのサブ ク エ リ の中で、複数の異な る UNION グループ をか っ こ で囲む こ と は許可 さ れてい ません。 か っ こ は各 SELECT ス テー ト メ ン ト の中で使用 で き ます。 た と えば、 次の ス テー ト メ ン ト で、 "IN" の後のか っ こ と 最後のか っ こ は許 可 さ れません。 SELECT c1 FROM t5 WHERE c1 IN ( (SELECT c1 FROM t1 UNION SELECT c1 FROM t2) UNION ALL (SELECT c1 FROM t3 UNION SELECT c1 from t4) ) テーブル サブ ク エ リ テーブル サブ ク エ リ を使用す る と 、複数の ク エ リ を組み合わせて 1 つの詳 細な ク エ リ にす る こ と がで き ます。 テーブル サブ ク エ リ は、 デー タ ベース に残 ら ない動的ビ ュ ーです。 一番上の SELECT ク エ リ が完了 し た ら 、 テー ブル サブ ク エ リ に関連付け ら れたすべての リ ソ ース が解放 さ れます。 3-159 SQL 構文 リ フ ァ レ ン ス 例 こ の単純な SELECT ス テー ト メ ン ト は、 Faculty テーブルの全デー タ を取 り 出 し ます。 SELECT * FROM Faculty こ の ス テー ト メ ン ト に よ っ て、 person お よ び faculty テーブルか ら 、 person テーブル内の id 列 と faculty テーブル内の id 列が同 じ デー タ が取 り 出 さ れ ます。 SELECT Person.id, Faculty.salary FROM Person, Faculty WHERE Person.id = Faculty.id 次 の 例 で は、 amount_paid の 総 額 が 100 以上 の 場合 に、 student_id と amount_paid の総額が billing テーブルか ら 取 り 出 さ れます。次に、student_id 別に レ コ ー ド が分類 さ れます。 SELECT Student_ID, SUM(Amount_Paid) FROM Billing GROUP BY Student_ID HAVING SUM(Amount_Paid) >=100.00 式が正の整数 リ テ ラ ルの場合、 その リ テ ラ ルが結果セ ッ ト 内の列の番号 と し て解釈 さ れ、 その列について順序付けが行われます。 セ ッ ト 関数ま たは セ ッ ト 関数を含む式については、 順序付けは許可 さ れません。 概算数値 リ テ ラル SELECT * FROM results WHERE quotient =-4.5E-2 INSERT INTO results (quotient) VALUES (+5E7) 述部間 式 1 BETWEEN 式 2 and 式 3 と い う 構文では、 式 1 >= 式 2 かつ、 式 1 <= 式 3 の場合に True が返 さ れます。 式 1 >= 式 3 ま たは式 1 <= 式 2 の場合は、 False が返 さ れます。 式 2 と 式 3 は動的パ ラ メ ー タ (た と えば、 SELECT * FROM emp WHERE emp_id BETWEEN ?AND ?) にす る こ と がで き ます。 次の例では、ID が 10000 と 20000 の間にあ る 名が person テーブルか ら 取 り 出 さ れます。 SELECT First_name FROM Person WHERE ID BETWEEN 10000 AND 20000 3-160 ス テー ト メ ン ト の文法 相関名 テーブル と 列の相関名はど ち ら も サポー ト さ れてい ます。 次の例では、person テーブル と faculty テーブルか ら デー タ が選択 さ れます。 2 つの テーブル を区別す る ためにエ イ リ ア ス の T1 と T2 を使用 し てい ま す。 SELECT * FROM Person t1, Faculty t2 WHERE t1.id = t2.id ま た、 テーブルの相関名は、 次の例の よ う に FROM 句を使っ て指定す る こ と も で き ます。 SELECT a.Name, b.Capacity FROM Class a, Room b WHERE a.Room_Number = b.Number 正確な数値 リ テ ラル SELECT car_num, price FROM cars WHERE car_num = 49042 AND price = 49999.99 in- 述部 こ れに よ り 、 名が Bill と Roosevelt の レ コ ー ド がテーブル Person か ら 選択 さ れます。 SELECT * FROM Person WHERE First_name IN ('Roosevelt', 'Bill') セ ッ ト 関数 次の例では、 Faculty テーブルか ら 最低給与が選択 さ れます。 SELECT MIN(salary) FROM Faculty MIN (式) 、 MAX (式) 、 SUM (式) 、 AVG (式) 、 COUNT (*) 、 お よ び COUNT (式) がサポー ト さ れてい ます。 COUNT (式) に よ っ て、 述部にあ る 式の非ヌ ル値すべてがカ ウ ン ト さ れま す。 COUNT(*) では ヌ ル値を含むすべての値がカ ウ ン ト さ れます。 次の例では、q 内で a+b が ヌ ルにな ら ないすべての行がカ ウ ン ト さ れます。 SELECT COUNT(a+b) FROM q 3-161 SQL 構文 リ フ ァ レ ン ス 日付 リ テ ラル 日付定数は、 SQL ス テー ト メ ン ト 内に文字列 と し て表記す る か、 ベン ダ文 字列に埋め込む こ と がで き ま す。 SQL_CHAR お よ びベン ダ文字列表記は、 SQL_DATE タ イ プの値 と し て扱われます。こ れは変換時に重要にな り ます。 Pervasive PSQL では、 こ の関数で概説 し てい る よ う に、 拡張 SQL 文法を一 部サポー ト し てい ます。 次の 2 つの ス テー ト メ ン ト に よ っ て、開始日が 1995 年 6 月 5 日 よ り 後のす べての授業が返 さ れます。 SELECT * FROM Class WHERE Start_Date > '1995-06-05' SELECT * FROM Class WHERE Start_Date > {d '1995-06-05'} Pervasive PSQL では、 'YYYY-MM-DD' と い う 日付 リ テ ラ ル書式をサポー ト し てい ます。 日付の年は 0 ~ 9999 の範囲が可能です。 時刻 リ テ ラル 次の 2 つの ス テー ト メ ン ト に よ っ て、 class テーブルか ら 、 授業の開始時刻 が 14:00:00 の レ コ ー ド が取 り 出 さ れます。 SELECT * FROM Class WHERE Start_time = '14:00:00' SELECT * FROM Class WHERE Start_time = {t '14:00:00'} Pervasive PSQL では、'HH:MM:SS' と い う 時刻 リ テ ラ ル書式をサポー ト し て い ます。 時刻定数は、 SQL ス テー ト メ ン ト 内に文字列 と し て表記す る か、 ベン ダ文 字列に埋め込む こ と がで き ます。文字列表記は SQL_CHAR タ イ プの文字列 と し て、 ベン ダ文字列表記は SQL_TIME タ イ プの値 と し て扱われます。 Pervasive PSQL では、 こ の関数で概説 し てい る よ う に、 拡張 SQL 文法を一 部サポー ト し てい ます。 3-162 ス テー ト メ ン ト の文法 タ イ ムス タ ン プ リ テ ラル タイムスタンプ定数は、 SQL ステートメント内に文字列として表記するか、 ベン ダ文字列に埋め込むことができます。 Pervasive PSQL では、 文字列表記は SQL_CHAR タ イ プの文字列 と し て、 ベン ダ文字列表記は SQL_TIMESTAMP タ イ プの値 と し て扱われます。 Pervasive PSQL では、 こ の関数で概説 し て い る よ う に、 拡張 SQL 文法を一部サポー ト し てい ます。 次の 2 つの ス テー ト メ ン ト に よ っ て、 Billing テーブルか ら 、 ロ グの開始日 時が 1996-03-28 の 17:40:49 の レ コ ー ド が取 り 出 さ れます。 SELECT * FROM Billing WHERE log = '1996-03-28 17:40:49.0000000' SELECT * FROM Billing WHERE log = {ts '1996-03-28 17:40:49.0000000'} Pervasive PSQL では、'YYYY-MM-DD HH:MM:SS.SSSSSSS' と い う 時刻 リ テ ラ ル書式を サポー ト し てい ます。 Pervasive PSQL では、 タ イ ム ス タ ン プ値 を処理す る と き に小数の秒は無視 さ れますが、 MKDE では無視 さ れない こ と に注意 し て く だ さ い。 文字列 リ テ ラル リ テ ラ ル文字列は、 一重引用符で囲んだ文字列で表 さ れます。 文字列自体 が一重引用符ま たはアポ ス ト ロ フ ィ を含んでい る 場合は、 その文字の前に も う 1 つ一重引用符を付け る 必要があ り ます。 SELECT * FROM t1 WHERE c1 = 'Roberta''s Restaurant' SELECT STREET FROM address WHERE city LIKE 'San%' 日付演算 SELECT * FROM person P, Class C WHERE p.Date_Of_Birth < ' 197309-05' AND c.Start_date > {d '1995-05-08'} + 30 Pervasive PSQL では、 加算ま たは減算す る 日数が整数で、 日付がベン ダ文 字列に埋め込まれてい る 場合、 その整数を日付に加算 し た り 日付か ら 減算 し た り で き ます ( こ れは、 日付について変換を実行す る の と 同 じ です)。 ま た、 あ る 日付を別の日付か ら 減算 し て日数を計算す る こ と も で き ます。 3-163 SQL 構文 リ フ ァ レ ン ス IF IF シ ス テ ム ス カ ラ 関数に よ っ て、条件の真の値に基づ く 条件付 き 実行が提 供 さ れます。 次の式は、 列ヘ ッ ダ "Prime1" を出力 し 、 amount_owed 列の値が 2000 の場 合は 2000 を、 2000 でない場合は 0 を出力 し ます。 SELECT Student_ID, Amount_Owed, IF (Amount_Owed = 2000, Amount_Owed, Convert(0, SQL_DECIMAL)) "Prime1" FROM Billing 次の例では、 Class テーブルか ら 、 Section 列が 001 の場合はその値を、 001 でない場合は "xxx" を、 列ヘ ッ ダ Prime1 の下に出力 し ます。 さ ら に、 列ヘ ッ ダ Prime2 の下に、 Section 列の値が 002 の場合はその値を、 002 でない場合は "yyy" を出力 し ます。 SELECT ID, Name, Section, IF (Section = '001', Section, 'xxx') "Prime1", IF (Section = '002', Section, 'yyy') "Prime2" FROM Class ネ ス ト し た IF 関数を使用 し て、 ヘ ッ ダ Prime1 と ヘ ッ ダ Prime2 を合体 さ せ る こ と がで き ます。 次の ク エ リ は、 列ヘ ッ ダ Prime の下に、 Section 列の値 が 001 か 002 の場合は Section 列の値を出力 し 、それ以外の場合は "xxx" を 出力 し ます。 SELECT ID, Name, Section, IF (Section = '001', Section, IF(Section = '002', Section, 'xxx')) Prime FROM Class マルチデー タ ベースの結合 必要であれば、デー タ ベース名を FROM 句内のエ イ リ ア ス付 き のテーブル 名の前に付加 し て、 結合で使用す る 2 つ以上の異な る デー タ ベース にあ る テーブルを区別す る こ と がで き ます。 指定 し たデー タ ベー ス はすべて同 じ デー タ ベー ス エ ン ジ ン で処理す る 必 要があ り ます。 こ れ ら のデー タ ベースは同 じ 物理ボ リ ュ ーム上にな く て も か ま い ません。 現行デー タ ベースはセキ ュ リ テ ィ で保護 さ れていて も いな く て も か ま い ませんが、 結合内のそれ以外のデー タ ベースはセキ ュ リ テ ィ で保護 さ れていない必要があ り ます。 参照整合性に関 し ては、 すべての RI キーが同一のデー タ ベース内に存在 し てい る 必要があ り ます。 3-164 ス テー ト メ ン ト の文法 リ テ ラ ル デー タ ベー ス 名は選択 リ ス ト ま たは WHERE 句内で使用す る こ と はで き ません。 選択 リ ス ト ま たは WHERE 句内で特定の列を参照す る 場 合は、 指定す る 各テーブルのエ イ リ ア ス を使用す る 必要があ り ます。 例を 参照 し て く だ さ い。 2 つの異な る デー タ ベース "accounting" と "customers" が同 じ サーバー上に 存在 し てい る と 仮定 し ま す。 次の例の よ う な テーブル エ イ リ ア ス と SQL 構文を使っ て 2 つのデー タ ベース にあ る テーブルを結合す る こ と がで き ま す。 SELECT ord.account, inf.account, ord.balance, inf.address FROM accounting.orders ord, customers.info inf WHERE ord.account = inf.account 次の例では、 2 つのデー タ ベース は "acctdb" と "loandb" です。 テーブル エ イ リ ア ス はそれぞれ "a" と "b" です。 SELECT a.loan_number_a, b.account_no, a.current_bal, b.balance FROM acctdb.ds500_acct_master b LEFT OUTER JOIN loandb.ml502_loan_master a ON (a.loan_number_a = b.loan_number) WHERE a.current_bal <> (b.balance * -1) ORDER BY a.loan_number_a 左外部結合 次の例は、 DEMODATA デー タ ベース の "Person" と "Student" テーブルにア ク セ ス し て、 学生の姓 と 、 名の頭文字、 お よ び GPA を取得す る 方法を示 し ます。 LEFT OUTER JOIN を使用す る と 、 "Person" テーブル内のすべての行 が フ ェ ッ チ さ れます (LEFT OUTER JOIN の左側にあ る テーブル)。 すべて の人が GPA を持っ てい る わけではないため、列に よ っ ては結果に ヌ ル値を 持ち ます。 以下は、 外部結合が ど の よ う に働 き 、 両方のテーブルか ら 一致 し ない行を返すか を示 し ます。 SELECT Last_Name, Left(First_Name,1) AS First_Initial, Cumulative_GPA AS GPA FROM "Person" LEFT OUTER JOIN "Student" ON Person.ID=Student.ID ORDER BY Cumulative_GPA DESC, Last_Name 完全に整数の GPA を持つ人全員がわか り 、彼 ら を その姓の長 さ に従っ て並 べたい と し ます。MOD ス テー ト メ ン ト と LENGTH ス カ ラ 関数を使用 し て、 ク エ リ に次の文を追加す る こ と に よ り 、 こ れを実現で き ます。 WHERE MOD(Cumulative_GPA,1)=0 ORDER BY LENGTH(Last_Name) 3-165 SQL 構文 リ フ ァ レ ン ス 右外部結合 LEFT OUTER JOIN と RIGHT OUTER JOIN と の違いは、 一致 し ないすべて の行を表示す る 対象が RIGHT OUTER JOIN の右側に定義 さ れた テーブル であ る 点です。 ク エ リ の LEFT OUTER JOIN の部分を RIGHT OUTER JOIN を使用す る よ う に変更 し ます。 GPA がない場合で も 、 右テーブル ( こ の場 合は "Student") か ら 不一致行がすべて表示 さ れ る 点が異な り ます。ただ し 、 "Student" テーブル内の行はすべて GPA を持つため、 すべての行が フ ェ ッ チ さ れます。 SELECT Last_Name, Left(First_Name,1) AS First_Initial, Cumulative_GPA AS GPA FROM "Person" RIGHT OUTER JOIN "Student" ON Person.ID=Student.ID ORDER BY Cumulative_GPA DESC, Last_Name カルテ シ ア ン結合 カルテシ ア ン結合は、 両方のテーブルの行を可能な限 り すべて組み合わせ た行列です。 カルテシ ア ン内の行数は、 1 番目のテーブル内の行数に 2 番 目のテーブル内の行数を掛けた値に等 し く な り ます。 デー タ ベース内に次の よ う なテーブルがあ る と し ます。 表 3-15 Addr テーブル EmpID Street E1 101 Mem Lane E2 14 Young St. 表 3-16 Loc テーブル LocID Name L1 PlanetX L2 PlanetY 次の ス テー ト メ ン ト に よ り 、 上記のテーブルのカルテシ ア ン結合を実行 し ます。 SELECT * FROM Addr,Loc 3-166 ス テー ト メ ン ト の文法 次の よ う な結果にな り ます。 表 3-17 カルテ シ ア ン結合を使っ た SELECT ス テー ト メ ン ト EmpID Street LocID Name E1 101 Mem Lane L1 PlanetX E1 101 Mem Lane L2 PlanetY E2 14 Young St L1 PlanetX E2 14 Young St L2 PlanetY DISTINCT DISTINCT を SUM、 AVG、 COUNT、 MIN、 お よ び MAX と 共に使用す る こ と がで き ます(ただ し 、MIN と MAX の結果は変わ り ません)。DISTINCT は、 総計、 平均、 件数を求め る 前に、 重複す る 値を取 り 除 き ます。 学部ご と の給与の最低額、 最高額、 平均額を知 り たい と 仮定 し ます。 こ の と き 、 同額の給与は除 く こ と に し ます。 次の ス テー ト メ ン ト は、 computer science 学部以外の学部に対 し て こ れを実行 し ます。 SELECT dept_name, MIN(salary), MAX(salary), AVG(DISTINCT salary) FROM faculty WHERE dept_name<>'computer science' GROUP BY dept_name 同額の給与 も 含む場合は、 次の よ う に し ます。 SELECT dept_name, MIN(salary), MAX(salary), AVG(salary) FROM faculty WHERE dept_name<>'computer science' GROUP BY dept_name TOP SELECT ス テー ト メ ン ト 内で TOP キーワー ド を使用 し 、返 さ れ る 最大行数 の値を指定す る こ と に よ っ て、 1 つの ス テー ト メ ン ト で返 さ れ る 行数を制 限す る こ と がで き ます。 指定 し た行数は正の リ テ ラ ル整数でなければな り ません。32 ビ ッ ト の符号 な し 整数 と し て定義 し ます。 SELECT ス テー ト メ ン ト に TOP と ORDER BY 句の両方が含 ま れ る 場合、 Pervasive PSQL はテ ン ポ ラ リ テーブルを生成 し 、 そ こ に ク エ リ の結果セ ッ ト 全体を置き ます。 テ ン ポ ラ リ テーブル内の行は ORDER BY 句で指定 し た順序で並べ ら れ、 その順序付け さ れた結果セ ッ ト か ら 最初の n 行が返 さ れます。 3-167 SQL 構文 リ フ ァ レ ン ス TOP 句を含むビ ュ ーは、 ほかのテーブルやビ ュ ー と 結合で き ない場合があ り ます。 TOP と SET ROWCOUNT の主な違いは、SET ROWCOUNT が現在のデー タ ベー ス セ ッ シ ョ ン中に発行 さ れ る 後続の ス テー ト メ ン ト すべてに作用す る のに対 し 、 TOP は現在の ス テー ト メ ン ト にのみ作用する 点です。 SET ROWCOUNT と TOP の両方を ク エ リ に適用 し た場合、 2 つの値の う ち 小 さ い方の値に等 し い行数を返 し ます。 カ ー ソ ルの タ イ プ と TOP TOP 句を用い る SELECT ク エ リ を カー ソ ル内で使用する と 、い く つかの状 況下で暗黙的にカー ソ ルの タ イ プが変更 さ れます。 下記の表を使用す る 場 合、 イ ン デ ッ ク ス 付け さ れ て い な い列に対 し て ORDER BY を 使用す る SELECT ク エ リ ではテ ン ポ ラ リ テーブルが必要にな る こ と を覚え ておい て く だ さ い。 イ ンデ ッ ク ス付け さ れた列に対 し て ORDER BY を使用す る 場合、 テ ン ポ ラ リ テーブルは必要あ り ません。 表 3-18 TOP 句がカ ー ソ ル タ イ プに与え る影響 元のカ ー ソル タ イプ SELECT ク エ リ で テ ンポ ラ リ テーブルが必要な場合に変換 さ れる タ イ プ SELECT ク エ リ で テ ンポ ラ リ テーブルが必要ない場合に変換 さ れる タ イ プ 動的 前方のみ 静的 静的 前方のみ 変更 し ません 前方のみ 変更 し ません 変更 し ません SELECT TOP 10 * FROM person -- 10 行を返 し ます SET ROWCOUNT = 5; SELECT TOP 10 * FROM person; -- 5 行を返 し ます SET ROWCOUNT = 12; SELECT TOP 10 * FROM person ORDER BY id; -- id 列で順序付け さ れた全 リ ス ト か ら 最初の 10 行を返 し ます 次の例では、 TOP が VIEW、 UNION ま たはサブ ク エ リ で使用 さ れた場合の さ ま ざ ま な動作を示 し ます。 CREATE VIEW v1 (c1) AS SELECT TOP 10 id FROM person; CREATE VIEW v2 (d1) AS SELECT TOP 5 c1 FROM v1; SELECT * FROM v2 -- 5 行を返 し ます SELECT TOP 10 * FROM v2 -5 行を返 し ます 3-168 ス テー ト メ ン ト の文法 SELECT TOP 0 * FROM v2 SELECT TOP 2 * FROM v2 -- 0 行を返 し ます -2 行を返 し ます SELECT TOP 10 id FROM person UNION SELECT TOP 13 faculty_id FROM class -- 14 行を返 し ます SELECT TOP 10 id FROM person UNION ALL SELECT TOP 13 faculty_id FROM class -- 23 行を返 し ます SELECT id FROM person WHERE id IN (SELECT TOP 10 faculty_id from class) -- 4 行を返 し ます SELECT id FROM person WHERE id >= any (SELECT TOP 10 faculty_id from class) -- 1493 行を返 し ます 不正な例 次の SELECT ス テー ト メ ン ト はエ ラ ー メ ッ セージ を生成 し ます。 こ れは、 定義 さ れた ビ ュ ーに TOP 句が含まれてい る ため、結合に参加で き ないか ら です。 CREATE VIEW v1 (c1) AS SELECT TOP 10 id FROM person SELECT * FROM v1 INNER JOIN person ON v1.c1 = person.id -- エ ラ ー メ ッ セージ を返 し ます SELECT * FROM person V v1 ON person.c1 = v1.id -- エ ラ ー メ ッ セージ を返 し ます SELECT * FROM person, v1 -- エ ラ ー メ ッ セージ を返 し ます テーブル サブ ク エ リ 次の例では、 ID が 714662900 よ り 大 き いすべての学生について、 その姓 と 支払 う 義務のあ る 金額を示 し ます。 SELECT p_last_name, b_owed FROM (SELECT id, last_name FROM person) p (p_id, p_last_name), (SELECT student_id, SUM (amount_owed) FROM billing GROUP BY student_id) b (b_id, b_owed) WHERE p.p_id = b.b_id AND p.p_id > 714662900 ORDER BY p_last_name ASC 関連項目 「グ ロ ーバル変数」 (3-216 ページ) 「JOIN」 (3-126 ページ) 「SET ROWCOUNT」 (3-178 ページ) 3-169 SQL 構文 リ フ ァ レ ン ス SET ANSI_PADDING SET ANSI_PADDING ス テー ト メ ン ト に よ り 、 NULL (バ イ ナ リ ゼ ロ ) で埋 め ら れた CHAR デー タ 型を リ レーシ ョ ナル イ ン タ ーフ ェ イ ス で処理で き る よ う にな り ます。 CHAR は固定長の文字デー タ 型 と し て定義 さ れます。 Pervasive PSQL は 2 つの イ ン タ ーフ ェ イ ス、 ト ラ ンザ ク シ ョ ナル と リ レー シ ョ ナルをサポー ト し てい ます。 ト ラ ンザ ク シ ョ ナル イ ン タ ーフ ェ イ ス で は、 CHAR を NULL で埋め る こ と がで き ます。 一方、 リ レーシ ョ ナル イ ン タ ーフ ェ イ ス は ANSI 標準の埋め込み方法に従っ てい る ため、 CHAR は空 白で埋め ら れます。 た と えば、 デフ ォ ル ト では、 CREATE TABLE ス テー ト メ ン ト で作成 し た CHAR 列は常に空白で埋め ら れます。 両方の イ ン タ ーフ ェ イ ス を使用 し てい る アプ リ ケーシ ョ ン の場合、 NULL で埋め ら れた文字列の処理が必要にな る 可能性があ り ます。 構文 SET ANSI_PADDING=<ON|OFF> 備考 デフ ォ ル ト 値は ON です。 こ れは、 空白で埋め ら れた文字列が CHAR に挿 入 さ れ る と い う こ と です。 論理式の比較で、 先頭の空白は意味のない も の と 見な さ れます。 先頭の NULL は意味のあ る も の と 見な さ れます。 こ の ス テー ト メ ン ト を OFF に設定す る と 、 NULL で埋め ら れた文字列が CHAR に挿入 さ れ る よ う にな り ます。 先頭の NULL と 空白はど ち ら も 論理 式の比較で意味のない も の と 判断 さ れます。 以下の文字列関数は NULL の埋め込みをサポー ト し てい ます。 CHAR_LENGTH CONCAT LCASE ま たは LOWER LEFT LENGTH LOCATE LTRIM POSITION REPLACE REPLICATE RIGHT RTRIM STUFF SUBSTRING UCASE ま たは UPPER 制限 SET ANSI_PADDING には次の制限が適用 さ れます。 3-170 こ の ス テー ト メ ン ト は固定長の文字デー タ 型 (CHAR) にのみ適用 さ れ、 VARCHAR お よ び LONGVARCHAR には適用 さ れません。 ス テー ト メ ン ト はセ ッ シ ョ ン レベルに適用 さ れます。 ス テー ト メ ン ト の文法 例 次の例は、 SET ANSI_PADDING を ON に し た状態 と OFF に し た状態で、 INSERT ス テー ト メ ン ト に よ る 文字列の埋め込みが ど の よ う な結果にな る か を示 し てい ます。 DROP TABLE t1 CREATE TABLE t1 (c1 CHAR(4)) SET ANSI_PADDING = ON INSERT INTO t1 VALUES ('a') -- 文字列 a = a\0x20\0x20\0x20 INSERT INTO t1 VALUES ('a' + CHAR(0) + CHAR(0) + CHAR(0)) -- 文 字列 a = a\0x00\0x00\0x00 DROP TABLE t1 CREATE TABLE t1 (c1 CHAR(4)) SET ANSI_PADDING = OFF INSERT INTO t1 VALUES ('a') -- 文字列 a = a\0x00\0x00\0x00 INSERT INTO t1 VALUES ('a' + CHAR(32) + CHAR(32) + CHAR(32)) -文字列 a = a\0x20\0x20\0x20 次の例は、 SET ANSI_PADDING を ON に し た状態 と OFF に し た状態で、 UPDATE ス テー ト メ ン ト に よ る 文字列の埋め込みが ど の よ う な結果に な る か を示 し てい ます。 DROP TABLE t1 CREATE TABLE t1 (c1 CHAR(4)) SET ANSI_PADDING = ON UPDATE t1 SET c1 = 'a' -- すべての行の c1 = a\0x20\0x20\0x20 UPDATE t1 SET c1 = 'a' + CHAR(0) + CHAR(0) + CHAR(0) -- すべての行の c1 = a\0x00\0x00\0x00 DROP TABLE t1 CREATE TABLE t1 (c1 CHAR(4)) SET ANSI_PADDING = OFF UPDATE t1 SET c1 = 'a' -- すべての行の c1 = a\0x00\0x00\0x00 UPDATE t1 SET c1 = 'a' + CHAR(32) + CHAR(32) + CHAR(32) -- すべて の行の c1 = a\0x20\0x20\0x20 次の例は、 文字型の列 c1 の内容をバ イ ナ リ 形式で表示で き る よ う 、 c1 を BINARY デー タ 型にキ ャ ス ト す る 方法を示 し ます。 テーブル t1 には次の 6 行のデー タ があ る と し ます。 a\x00\x00\x00\x00 a\x00\x00\x00\x00 a\x00\x20\x00\x00 a\x00\x20\x00\x00 a\x20\x20\x20\x20 a\x20\x20\x20\x20 3-171 SQL 構文 リ フ ァ レ ン ス 次の ス テー ト メ ン ト に よ り 、 c1 が BINARY デー タ 型にキ ャ ス ト さ れます。 SELECT CAST(c1 AS BINARY(4)) FROM t1 SELECT ス テー ト メ ン ト は以下の結果を返 し ます。 0x61000000 0x61000000 0x61002000 0x61002000 0x61202020 0x61202020 関連項目 「INSERT」 (3-120 ページ) 「UPDATE」 (3-197 ページ) 「文字列関数」 (5-2 ページ) 「変換関数」 (5-18 ページ) 3-172 ス テー ト メ ン ト の文法 SET DECIMALSEPARATORCOMMA ODBC デー タ ベー ス エ ン ジ ンは、 デフ ォ ル ト で ピ リ オ ド (.) を整数部 と 小数部の間の区切 り 文字 と し て使い、 小数値デー タ を表示 し ます (た と え ば、 100.95) 。 SET DECIMALSEPARATORCOMMA ス テー ト メ ン ト を使用 すれば、 整数部 と 小数部を カ ン マで区切っ て結果を表示す る よ う 指定す る こ と がで き ます (た と えば、 100,95)。 すべての SET ステートメントと同様に、 このステートメントの効果は現在のデータ ベース セッションの間中、または別の SET DECIMALSEPARATORCOMMA ス テー ト メ ン ト が発行 さ れ る ま で適用 さ れます。 構文 SET DECIMALSEPARATORCOMMA=<ON|OFF> 備考 デフ ォ ル ト 値は OFF です。 こ れは、 ピ リ オ ド をデフ ォ ル ト の小数点の記号 と し て使用 し ます。 カ ン マ を小数点の記号 と し て使用す る 地域では、 カ ン マ ま たはピ リ オ ド を 区切 り 文字 と し て使用 し て小数値デー タ を入力す る こ と がで き ます (カ ン マ を区切 り 文字 と し て使用 し た リ テ ラ ル値は、'123,43' な ど の よ う に一重引 用符で囲む必要があ り ます)。 ただ し 、 (SELECT ス テー ト メ ン ト の結果の よ う に) デー タ が返 さ れ る 場合、 SET DECIMALSEPARATORCOMMA=ON が指定 さ れていなければ、 デー タ は常に ピ リ オ ド を使っ て表示 さ れます。 ま た、 小数点の記号に ピ リ オ ド を使っ て入力 し たデー タ がデー タ ベース に 含まれ る 場合、 こ の ス テー ト メ ン ト を使用 し て出力 と 表示でカ ン マ を区切 り 文字にする よ う 指定す る こ と がで き ます。 こ のカ ン マは出力 と 表示にのみ影響 し ます。 挿入、 更新あ る いは比較で使 用す る 値には ま っ た く 影響 し ません。 例 次 の 例 で は、 ピ リ オ ド で 区 切 ら れ た デ ー タ の 挿 入 方 法 と 、 SET DECIMALSEPARATORCOMMA ス テー ト メ ン ト が SELECT の結果に ど の よ う に影響す る か を示 し ます。 CREATE TABLE t1 (c1 real, c2 real) INSERT INTO t1 VALUES (102.34, 95.234) SELECT * FROM t1 結果 : c1 c2 ------- ------102.34 95.234 SET DECIMALSEPARATORCOMMA=ON 3-173 SQL 構文 リ フ ァ レ ン ス SELECT * FROM t1 結果 : c1 c2 ------- ------102,34 95,234 次 の 例 で は、 カ ン マ で 区 切 ら れ た デ ー タ の 挿 入 方 法 と 、 SET DECIMALSEPARATORCOMMA ス テー ト メ ン ト が SELECT の結果に ど の よ う に影響す る か を示 し ます。 メ モ カ ン マ を区切 り 文字 と し て使用で き る のは、ク ラ イ ア ン ト と サー バーの両方 ま たは ど ち ら か一方のオペ レ ーテ ィ ン グ シ ス テ ム の地域 の設定がカ ン マ を区切 り 文字 と し て使用す る ロ ケールに設定 さ れてい る 場合のみです。 た と えば、 ク ラ イ ア ン ト と サーバーの両方で U.S. の ロ ケール設定を し ていた場合、 次の例を実行 し よ う と す る と エ ラ ーに な り ます。 CREATE TABLE t1 (c1 real, c2 real) INSERT INTO t1 VALUES ('102,34', '95,234') SELECT * FROM t1 結果 : c1 c2 ------- ------102.34 95.234 SET DECIMALSEPARATORCOMMA=ON SELECT * FROM t1 結果 : c1 c2 ------- ------102,34 95,234 関連項目 「小数点の記号のカ ン マ」 (3-224 ページ) 「OEM か ら ANSI への変換サポー ト 」 (3-227 ページ) 3-174 ス テー ト メ ン ト の文法 SET OWNER SET OWNER ス テー ト メ ン ト を使用す る と 、現在のデー タ ベース接続中に 使用す る Btrieve オーナー ネーム を 1 つま たは複数指定で き ます。 構文 SET OWNER = ['] オーナー ネーム ['] [, ['] オーナー ネーム [']]... 備考 SET OWNER ス テー ト メ ン ト を使用す る と 、 デー タ ベース エン ジ ン を介 し てオーナー ネームが割 り 当て ら れてい る デー タ フ ァ イ ルのオーナー ネー ム の リ ス ト を 指定で き ま す。 Pervasive PSQL はデー タ ベー ス エ ン ジ ン に オーナー ネーム を渡 し て、 デー タ フ ァ イ ルを開け る よ う に し ます。 SET OWNER ス テー ト メ ン ト ではオーナー ネーム をい く つで も 指定で き ま す。 オーナー ネームがアルフ ァ ベ ッ ト 以外の文字で始ま る 場合は、 名前を 一重引用符 (' ') で囲む必要があ り ます。 ス テー ト メ ン ト は現在の接続でのみ有効です。 SET OWNER コ マ ン ド の発 行後に現在のユーザーが ロ グ ア ウ ト す る 場合、 そのユーザーは、 次回 ロ グ イ ンす る 際に コ マ ン ド を再発行す る 必要があ り ます。 同一の接続中、 SET OWNER ス テー ト メ ン ト は発行 さ れ る ご と にオーナー リ ス ト を再設定 し ます。 つま り 、 一番最近 SET OWNER ス テー ト メ ン ト で 指定 し たオーナー ネームだけがデー タ ベース エン ジ ンに渡 さ れます。後続 の ス テー ト メ ン ト でオーナー リ ス ト にオーナー ネーム を追加す る こ と は で き ません。 セキ ュ リ テ ィ が無効にな っ てい る デー タ ベース では、 SET OWNER コ マ ン ド に よ っ て、 コ マ ン ド の リ ス ト で指定 し た 名前 と 同 じ Btrieve オーナー ネーム を持つすべてのデー タ フ ァ イ ル (テーブル) への フル ア ク セ ス が許 可 さ れ る よ う にな り ます。 セキ ュ リ テ ィ が有効にな っ てい る デー タ ベース では、 こ の コ マ ン ド はほ と ん ど のユーザーで何の影響 も あ り ません。 Master ユーザーに よ っ て発行 さ れた場合にのみ影響があ り ます。 Master ユーザーが自身に ま だ権限を付与 し ていない場合は、 こ の コ マ ン ド の発行に よ っ て、 指定 し た Btrieve オー ナー ネームのいずれか を持つデー タ フ ァ イ ルすべてへの フル ア ク セ ス が Master ユーザーに与え ら れます。 ま た、 Master ユーザーは自身への権限の 付与を選択 し た場合には、権限を付与する テーブルの正 し いオーナー ネー ム を使っ て SET OWNER ス テー ト メ ン ト が既に実行 し て あれば、 GRANT ス テー ト メ ン ト でオーナー ネーム を使 う 必要はあ り ません。 3-175 SQL 構文 リ フ ァ レ ン ス 例 次の例では、 1 つのオーナー ネーム を指定 し てい ます。 SET OWNER = '12jerry' 次の例では、 複数のオーナー ネーム を指定 し てい ます。 SET OWNER = jimbo, terry, maximus 次の例では、 同一の接続内におけ る 複数の SET OWNER ス テー ト メ ン ト の 影響を示 し ます。 SET OWNER = jimbo, terry, maximus -- オーナー リストの内容 : jimbo,terry,maximus. SET OWNER = fred, jennie, lucinda -- 現在のオーナー リストの内容 : fred,jennie,lucinda。 以前の内容は破棄されます。 次の例は、 Master ユーザーがセ キ ュ リ テ ィ で保護 さ れたデー タ ベー ス で SET OWNER を使用す る 方法を示 し ます。 セキ ュ リ テ ィ を有効に し たばか り で、 デ ー タ ベ ー ス の 権 限 は 何 も 付 与 さ れ て い な い と 仮 定 し ま す。 "inventory" デー タ フ ァ イ ルはオーナー ネーム "admin" を持ち ます。 自身に権限を付与す る 場合、 Master ユーザーには 2 つのオプシ ョ ンがあ り ます。 Master ユーザーは、 SET OWNER に続けて GRANT を発行す る 場合 は、 オーナー ネーム な し で発行で き ま す。 そ う で ない場合は、 オーナー ネーム を指定 し て GRANT を発行で き ます。 ど ち ら の方法 も 同 じ 結果にな り ます。 SET OWNER = admin GRANT ALL ON inventory TO MASTER ま たは GRANT ALL ON inventory admin TO MASTER 関連項目 「GRANT」 (3-109 ページ) 「REVOKE」 (3-145 ページ) 3-176 ス テー ト メ ン ト の文法 SET PASSWORD SET PASSWORD ス テー ト メ ン ト を使用す る と 、 Master ユーザーはセキ ュ リ テ ィ で保護 さ れたデー タ ベース のパ ス ワー ド を変更で き 、 一般ユーザー はデー タ ベース に対す る 自分の ロ グ イ ン パ ス ワー ド を変更で き ます。 構文 SET PASSWORD = パ ス ワー ド パ ス ワー ド ::= ユーザー定義名 備考 SET PASSWORD は、 Master ユーザーで も 一般ユーザーで も 、 いつで も 発 行で き ます (対照的に、 SET SECURITY は Master ユーザーに よ っ てのみ発 行で き 、 Master ユーザーのセ ッ シ ョ ンは現在の唯一のデー タ ベース接続で あ る 必要があ り ます)。 Master ユーザーに よ っ て発行 さ れた場合、 SET PASSWORD はデー タ ベー ス 全体 (すべての DDF フ ァ イ ル) のパ ス ワ ー ド を変更 し ま す。 一般ユー ザーに よ っ て発行 さ れた場合、 SET PASSWORD は user.ddf フ ァ イ ル内 の当該ユーザーの ロ グ イ ン パ ス ワー ド のみを変更 し ます。 Master ユーザー も 一般ユーザー も 、 SET PASSWORD を発行す る にはデー タ ベース に ロ グ イ ン し てい る 必要があ り ます。 "password" は予約キーワ ー ド でない こ と に注意 し て く だ さ い。 こ れは、 テーブルま たは列の名前 と し て使用す る こ と がで き ます。 パス ワー ド に指定で き る 最小の長 さ は 1 バ イ ト です。 最大 8 バ イ ト ま で指 定で き ま す。 パ ス ワ ー ド には、 セ ミ コ ロ ン (;) と 疑問符 (?) 以外のあ ら ゆ る 表示可能な文字を使用で き ます。 ユーザー定義のパス ワー ド は大文字 と 小文字が区別 さ れます。 パ ス ワー ド がアルフ ァ ベ ッ ト 以外の文字で始ま る 場合は、 パ ス ワー ド を一重引用符で 囲む必要があ り ます。 例 次の例では以下の こ と を示 し ます。Master ユーザーは、パ ス ワー ド "bigdog" を使っ てデー タ ベース のセキ ュ リ テ ィ を有効に し ます。 次に、 Master ユー ザーは "user45" と い う ユ ーザーに ロ グ イ ン 権限 を 与 え て パ ス ワ ー ド を "popcorn" と 指定 し 、 user45 にテーブル person の SELECT 権限を与え ます。 その後で、Master ユーザーはセキ ュ リ テ ィ パ ス ワー ド を "tinycat" に変更 し ます。 3-177 SQL 構文 リ フ ァ レ ン ス SET SECURITY = bigdog -- こ れは、 すべての DDF のパ ス ワー ド を変更 し ます GRANT LOGIN TO user45:popcorn GRANT SELECT ON person TO user45 SET PASSWORD = tinycat -- こ れは、 すべての DDF のパ ス ワー ド を変更 し ます 次の例では、user45 はパ ス ワー ド "popcorn" でデー タ ベース に ロ グ イ ン し て い る こ と を前提 と し ます。user45 は自分のパス ワ ー ド を "tomato" に変更 し 、 次に person テーブル内のすべての レ コ ー ド を選択 し ます。 SET PASSWORD = tomato -- こ れは、 user.ddf 内の user45 のパ ス ワー ド のみを変更 し ます SELECT * FROM person -- user45 は今ま で どお り 、 テーブル person の SELECT 権限を持ち ます 関連項目 「SET SECURITY」 (3-179 ページ) 3-178 ス テー ト メ ン ト の文法 SET ROWCOUNT SET ROWCOUNT キーワー ド を使用する こ と に よ っ て、 現在のセ ッ シ ョ ン 内に あ る 後続のすべて の SELECT ス テー ト メ ン ト か ら 返 さ れ る 行数を制 限す る こ と がで き ます。 SET ROWCOUNT と TOP の主な違いは、 TOP が現在の ス テー ト メ ン ト に のみ作用する のに対 し 、 SET ROWCOUNT は (次の SET ROWCOUNT ま た はセ ッ シ ョ ンが終了す る ま での) 現在のデー タ ベース セ ッ シ ョ ン中に発行 さ れ る 後続の ス テー ト メ ン ト すべてに作用す る 点です。 構文 SET ROWCOUNT = 行数 備考 SET ROWCOUNT を条件 と す る SELECT ス テー ト メ ン ト に ORDER BY 句 が含 ま れてお り 、 その ORDER BY 句での最適化に イ ンデ ッ ク ス を使用で き ない場合、 Pervasive PSQL はテ ン ポ ラ リ テーブルを生成 し ます。 テ ン ポ ラ リ テーブルには ク エ リ の結果セ ッ ト 全体が配置 さ れ ま す。 テ ン ポ ラ リ テーブル内の行は ORDER BY 句で指定 し た順序で並べ ら れ、 その順序付 け さ れた結果セ ッ ト か ら ROWCOUNT の n 行が返 さ れます。 ROWCOUNT にゼ ロ を設定 し て ROWCOUNT 機能を無効にす る こ と がで き ます。 SET ROWCOUNT = 0 SET ROWCOUNT は動的カー ソ ルを使用する と き には無視 さ れます。 SET ROWCOUNT と TOP の両方を ク エ リ に適用 し た場合、 2 つの値の う ち 小 さ い方の値に等 し い行数を返 し ます。 例 TOP (3-166 ページ) の例 も 参照 し て く だ さ い。 SET ROWCOUNT = 10; SELECT * FROM person; -- 10 行を返 し ます 関連項目 「TOP」 (3-166 ページ) 3-179 SQL 構文 リ フ ァ レ ン ス SET SECURITY SET SECURITY ス テー ト メ ン ト を使用す る と 、現在 ロ グ イ ン し てい る デー タ ベース のセキ ュ リ テ ィ を有効ま たは無効にで き ます。 構文 SET SECURITY = パ ス ワー ド SET SECURITY = NULL 例 次の例では、 パス ワー ド を 'mypasswd' と 設定 し てい ます。 SET SECURITY = mypasswd 次の例では、 パス ワー ド を 123456 と 設定 し てい ます。 SET SECURITY = '123456' 次の例ではセキ ュ リ テ ィ が無効にな り ます。 SET SECURITY = NULL 備考 セキ ュ リ テ ィ を設定す る には、 まず Master と し て ロ グ イ ンす る 必要があ り ま す。 その後、 SET SECURITY ス テー ト メ ン ト を使用 し てパ ス ワ ー ド を 割 り 当て る こ と がで き ます。 最初に Master と し て ロ グ イ ンす る 際には、 パ ス ワー ド は不要です。 SET SECURITY を使用す る 場合、 ユーザー名 と パ ス ワ ー ド の大小文字が 区別 さ れ ま す。 パ ス ワ ー ド がアルフ ァ ベ ッ ト 以外の文字で始 ま る 場合は、 パス ワー ド を一重引用符で囲む必要があ り ます。 デー タ ベースへの Master ユーザー接続だけが、セキ ュ リ テ ィ の設定を許可 さ れます。 セキ ュ リ テ ィ は Pervasive PSQL Control Center (PCC) か ら 設定 す る こ と も で き ます。 『Advanced Operations Guide』 の 「デー タ ベース プ ロ パテ ィ を使っ てセキ ュ リ テ ィ を オ ン にす る には」 (7-24 ページ) を参照 し て く だ さ い。 メ モ SQL Editor 内で SET SECURITY ス テー ト メ ン ト を実行す る こ と はで き ません。 実行 し よ う と す る と エ ラ ーにな り ます。 セキ ュ リ テ ィ な し のデー タ ベース の場合、SQL Editor は辞書フ ァ イ ルを ロ ッ ク し て、 パ ス ワ ー ド が設定 さ れない よ う に し ます。 セキ ュ リ テ ィ で保護 さ れた デー タ ベース の場合、 SQL Editor はデー タ ベース フ ァ イ ルへの 2 番目 の接続を開いて、 セキ ュ リ テ ィ が無効に さ れない よ う に し ます。 3-180 ス テー ト メ ン ト の文法 パス ワー ド の最小の長 さ は 1 バ イ ト です。 最大 8 バ イ ト ま で指定で き ます。 パ ス ワ ー ド には、 セ ミ コ ロ ン (;) と 疑問符 (?) 以外のあ ら ゆ る 表示可能 な文字を使用で き ます。 パス ワー ド は大文字小文字を区別 し ます。 パ ス ワー ド がアルフ ァ ベ ッ ト 以 外の文字で始ま る 場合は、パ ス ワー ド を一重引用符で囲む必要があ り ます。 関連項目 「GRANT」 (3-109 ページ) 「REVOKE」 (3-145 ページ) 「SET PASSWORD」 (3-176 ページ) 3-181 SQL 構文 リ フ ァ レ ン ス SET TIME ZONE SET TIME ZONE キ ー ワ ー ド を 使用す る と 、 ロ ケ ー ル の 世界協定時刻 (Coordinated Universal Time : UTC) を基に現在時刻のオ フ セ ッ ト を指定す る こ と がで き 、 こ れに よ っ て、 デー タ ベース エン ジ ンが配置 さ れてい る オ ペレーテ ィ ン グ シ ス テ ムの タ イ ム ゾーンの設定を無効にで き ます。 SET TIME ZONE ス テー ト メ ン ト の効果は現在のデー タ ベース セ ッ シ ョ ン の間中、 ま たは別の SET TIME ZONE ス テー ト メ ン ト が実行 さ れ る ま で適 用 さ れます。 注意 お使いのオペレーテ ィ ン グ シ ス テ ムの タ イ ム ゾーンの設定を特 に無効にする 必要がなければ、 常にデフ ォ ル ト の動作を使用 し て く だ さ い。 Pervasive レ プ リ ケーシ ョ ン を使用 し てい る 場合、 ま たはアプ リ ケーシ ョ ンに各レ コ ー ド が挿入 さ れ る 時刻順序 と の依存関係があ る 場 合は、 SET TIME ZONE を使っ て タ イ ム ゾーンのオ フ セ ッ ト を変更す る こ と はお勧め し ません。 構文 SET TIME ZONE < デ ィ ス プ レース メ ン ト | LOCAL > デ ィ ス プ レース メ ン ト ::= <+|->hh:mm hh の有効な範囲は 00 - 12 です。 mm の有効な範囲は 00 - 59 です。 プ ラ ス記号 (+) ま たはマ イ ナ ス記号 (-) は、 デ ィ ス プ レース メ ン ト 値の 一部 と し て必要です。 備考 デフ ォ ル ト の動作 - SET TIME ZONE LOCAL がデフ ォ ル ト の動作で、 こ れ は SET TIME ZONE コ マ ン ド を ま っ た く 使用 し ないの と 同 じ です。 デフ ォ ル ト の動作の場合、デー タ ベース エン ジ ンは実行 し てい る オペレーテ ィ ン グ シ ス テ ム に 基づ い て そ の タ イ ム ゾ ー ン を 設定 し ま す。 た と え ば、 SELECT CURTIME ( ) で は 現在 の 現地時刻 を 返 し ま す が、 SELECT CURRENT_TIME ( ) では、 オペレーテ ィ ン グ シ ス テ ムの地域のシ ス テ ム時 刻 と タ イ ム ゾーンの設定の両方に基づいて現在の世界協定時刻 (UTC) を 返 し ます。 LOCAL キーワ ー ド を使用する と 、 デ ィ ス プ レース メ ン ト を指定 し た後で、 デー タ ベース セ ッ シ ョ ン を終了お よ び再オープンす る こ と な く 、デフ ォ ル ト の動作に戻す こ と がで き ます。 3-182 ス テー ト メ ン ト の文法 デフ ォ ル ト の動作の場合、'1996-03-28' や '17:40:46' な ど の日付 / 時刻の リ テ ラ ル値は現在の現地日付 / 時刻 と し て解釈 さ れ ます。 ま た、 挿入中には、 TIMESTAMP リ テ ラ ル値は指定 し た現在の現地時刻 と し て解釈 さ れ ま す。 TIMESTAMP 値は常に UTC 時刻を使っ て調整 さ れてか ら 内部的に保存 さ れ、 取得時に現地時刻に変換 さ れます。 表 3-19 SET TIME ZONE を使用する日付 / 時刻関数 - デ フ ォル ト タ イ ム ゾーンが指定 さ れていない場合、 または TIME ZONE LOCAL が指定 さ れ ている場合 CURDATE()、 CURTIME()、 NOW() こ れ ら の関数はシ ス テ ム時計に基づいて 現在の現地時刻を返 し ます。 CURRENT_DATE()、 CURRENT_TIME()、 CURRENT_TIMESTAMP() こ れ ら の関数は、 常にシ ス テ ム時計 と オ ペ レ ーテ ィ ン グ シ ス テ ム の地域の設定 に基づいて現在の UTC 日付 / 時刻を返 し ます。 間隔を指定 し た場合の動作 ‐ 有効なデ ィ ス プ レー ス メ ン ト 値が指定 さ れ る と 、 NOW ( )、 CURTIME ( ) ま たは CURDATE ( ) 用に値を生成す る と き に、オペレーテ ィ ン グ シ ス テ ムの タ イ ム ゾーンのオ フ セ ッ ト ではな く その 値を使用 し ます。 た と えば、 デ ィ ス プ レース メ ン ト に -02:00 を指定 し た場 合、 CURDATE() の現地時刻の値はオペレーテ ィ ン グ シ ス テ ム か ら 返 さ れ る UTC 時刻に -02:00 が加算 さ れた値にな り ます。 こ の動作の場合、 日付 と 時刻の リ テ ラ ルは、 その ま ま の値で現地時刻 と し て解釈 さ れます。 TIMESTAMP リ テ ラ ルでは、 デ ィ ス プ レース メ ン ト を減 算 し た場合に結果が UTC と な る よ う な時刻を指定 し てい る も の と 解釈 さ れ ま す。 夏時刻はディス プレースメントで明示的に設定するので、 考慮しませ ん。 TIMESTAMP 値は常に UTC 時刻を使っ て内部的に保存 さ れます。 表 3-20 SET TIME ZONE を使用する日付 / 時刻関数 - 指定 有効なデ ィ ス プ レース メ ン ト 値が指定 さ れた場合 CURDATE()、 CURTIME()、 NOW() こ れ ら の関数は、 現在の UTC 日付 / 時刻 値にデ ィ ス プ レース メ ン ト を加算 し て現 在の現地日付 / 時刻値を返 し ます。 CURRENT_DATE()、 CURRENT_TIME()、 CURRENT_TIMESTAMP() こ れ ら の関数は、 常にシ ス テ ム時計 と オ ペ レ ーテ ィ ン グ シ ス テ ム の地域の設定 に基づいて現在の UTC 日付 / 時刻を返 し ます。 指定 し た現地時刻値を UTC に変換す る には、その現地時刻の値か ら タ イ ム ゾーンのデ ィ ス プ レース メ ン ト を減算す る 必要があ り ます。 つま り 次の よ う にな り ます。 UTC 時刻 = 現地時刻 - タ イ ム ゾーンのデ ィ ス プ レース メ ン ト 3-183 SQL 構文 リ フ ァ レ ン ス 変換の例については、 表 3-21 を参照 し て く だ さ い。 表 3-21 現地時刻から UTC への変換例 現地時刻 デ ィ ス プ レース メ ン ト UTC 10:10:15 オース チン、 テ キサ ス US 中部標準時 -06:00 10:10:15-(-06:00)=16:10:15 UTC 16:10:15 ロンドン グ リ ニ ッ ジ標準時 +00:00 16:10:15-(+00:00)=16:10:15 UTC 22:10:15 ダッカ +06:00 22:10:15-(+06:00)=16:10:15 UTC TIMESTAMP デー タ 型に関す る 注記 TIMESTAMP デー タ は常に UTC と し て保存 さ れ、 リ テ ラ ル タ イ ム ス タ ン プ値はデ ィ ス ク に保存 さ れてい る 値 も 含め、 取得す る と き に常に現地時刻 へ変換 さ れ る ため、 NOW ( ) 値 と CURRENT_TIMESTAMP( ) 値の動作は混 乱を招 く 可能性があ り ます。 た と えば、 次の表ではデー タ ベース エン ジ ン が U.S. 中部標準時に設定 さ れてい る と し ます。 表 3-22 Timestamp デー タ 型の例 ス テー ト メ ン ト 値 SELECT NOW() 2001-10-01 12:05:00.000000 が 表示 さ れます。 INSERT INTO t1 (c1) SELECT NOW() 2001-10-01 18:05:00.000000 が デ ィ ス ク に保存 さ れます。 SELECT * from t1 2001-10-01 12:05:00.000000 が 表示 さ れます。 SELECT CURRENT_TIMESTAMP() 2001-10-01 18:05:00.000000 が 表示 さ れます。 INSERT INTO t2 (c1) SELECT CURRENT_TIMESTAMP() 2001-10-01 18:05:00.000000 が デ ィ ス ク に保存 さ れます。 SELECT * from t2 2001-10-01 12:05:00.000000 が 表示 さ れます。 直接の SELECT NOW ( ) で表示 さ れ る 値は、INSERT SELECT NOW ( ) 構文 に よ っ てデ ィ ス ク に保存 さ れ る 値 と は異な る こ と に注意す る こ と が重要で す。 ま た、 SELECT CURRENT_TIMESTAMP( ) の表示値 も 、 CURRENT_TIMESTAMP() の値を INSERT し た後でそれを SELECT し た場 3-184 ス テー ト メ ン ト の文法 合 (INSERT SELECT CURRENT_TIMESTAMP() 構文) に表示 さ れ る 値 と は異な る こ と に注意 し て く だ さ い。 こ れは、 デー タ フ ァ イ ルに保存 し た リ テ ラ ル値を取得す る と き に値が調整 さ れ る か ら です。 例 次の例では、 SET TIME ZONE ステートメントがまだ発行されておらず、 データ ベース エンジンが起動しているコンピュータのシステム時計は January 9, 2002, 16:35:03 CST (U.S.) に設定 さ れてい ます。 CURRENT_TIMESTAMP() お よ びその他の CURRENT_ 関数では、 常にデー タ ベース エン ジ ンが起動 し て い る コ ン ピ ュ ー タ のシ ス テ ム時計 と 地域の設定に基づ く UTC 日付 / 時刻を 返す こ と を思い出 し て く だ さ い。 SELECT CURRENT_TIMESTAMP(), NOW(), CURRENT_TIME(), CURTIME(), CURRENT_DATE(), CURDATE() 結果 : 2002-01-09 22:35:03.0000000 2002-01-09 16:35:03.0000000 22:35:03 16:35:03 2002-01-09 2002-01-09 CST は UTC の 6 時間前であ る こ と に注意 し て く だ さ い。 SET TIME ZONE -10:00 こ れに よ っ て、 上記の同 じ SELECT ス テー ト メ ン ト では次の値を返 し ま す。 2002-01-09 22:35:03.0000000 2002-01-09 12:35:03.0000000 22:35:03 12:35:03 2002-01-09 2002-01-09 SET TIME ZONE ス テー ト メ ン ト を発行後 NOW() の値は変わ り ま し たが、 CURRENT_TIMESTAMP() の値は変わ ら な か っ た こ と に注目 し て く だ さ い。 次の例では、 UTC 値 と し て保存 さ れ取得時に現地時刻の値に変換 さ れ る TIMESTAMP 値 と 、 そ の ま ま の値で保存お よ び取得 さ れ る TIME ま た は DATE 値 と の 違 い を 示 し ま す。 現在、 シ ス テ ム 時計 は January 9, 2002, 16:35:03 CST (U.S.) を示 し てい る も の と し ます。 ま た、 SET TIME ZONE ス テー ト メ ン ト は ま だ発行 さ れていない こ と を前提 と し ます。 CREATE TABLE t1 (c1 TIMESTAMP, c2 TIMESTAMP, c3 TIME, c4 TIME, c5 DATE, c6 DATE) INSERT INTO t1 SELECT CURRENT_TIMESTAMP(), NOW(), CURRENT_TIME(), CURTIME(), CURRENT_DATE(), CURDATE() SELECT * FROM t1 3-185 SQL 構文 リ フ ァ レ ン ス 結果 : c1 c2 --------------------------- --------------------------2002-01-09 16:35:03.0000000 2002-01-09 16:35:03.0000000 c3 c4 c5 c6 -------- -------- ---------- ---------22:35:03 16:35:03 2002-01-09 2002-01-09 NOW() と CURRENT_TIMESTAMP() は、 SELECT NOW()、 CURRENT_TIMESTAMP() で画面に表示 さ れ る 場合には異な る 値にな り ま すが、 い っ たん リ テ ラ ル値をデ ィ ス ク に保存す る と 、 両方の値に UTC 時 刻が格納 さ れ る こ と に注意 し て く だ さ い。 取得時に、 両方の値が現地時刻 に変換 さ れます。 タ イ ム ゾーン間隔を ゼ ロ に設定す る と 、 取得時に +00:00 に よ っ て調整 さ れ る ので、 フ ァ イ ルに保存 さ れた実際のデー タ を見 る こ と がで き ます。 SET TIME ZONE +00:00 SELECT * FROM t1 結果 : c1 c2 --------------------------- --------------------------2002-01-09 22:35:03.0000000 2002-01-09 22:35:03.0000000 c3 c4 c5 c6 -------- -------- ---------- ---------22:35:03 16:35:03 2002-01-09 2002-01-09 次の例では、現地日付が UTC 日付 と 異な る 場合に予期 さ れ る 動作を示 し ま す (た と えば、 UTC は午前 0 時を過ぎ てい る が、 現地時刻では ま だ午前 0 時前の場合。 ま たはその逆の場合)。 現在、 シ ス テ ム時計は January 9, 2002, 16:35:03 CST (U.S.) を示 し てい る も の と し ます。 SET TIME ZONE +10:00 SELECT CURRENT_TIMESTAMP(), NOW(), CURRENT_TIME(), CURTIME(), CURRENT_DATE(), CURDATE() 結果 : 2002-01-09 22:35:03.0000000 2002-01-10 08:35:03.0000000 22:35:03 08:35:03 2002-01-09 2002-01-10 INSERT INTO t1 SELECT CURRENT_TIMESTAMP(), NOW(), CURRENT_TIME(), CURTIME(), CURRENT_DATE(), CURDATE() SELECT * FROM t1 3-186 ス テー ト メ ン ト の文法 結果 : c1 c2 --------------------------- --------------------------2002-01-10 08:35:03.0000000 2002-01-10 08:35:03.0000000 c3 c4 c5 c6 -------- -------- ---------- ---------22:59:55 08:59:55 2002-01-09 2002-01-10 ご覧の と お り 、 CURRENT_DATE() お よ び CURRENT_TIME() で返 さ れ る UTC 時刻 と 日付は リ テ ラ ル値 と し て保存 さ れます。 こ れ ら は TIMESTAMP 値ではないので、 デー タ ベース か ら 取得す る と き に調整が行われません。 関連項目 「TIMESTAMP」 デー タ 型 (A-28 ページ) 「時刻 と 日付の関数」 (5-9 ページ) 3-187 SQL 構文 リ フ ァ レ ン ス SET TRUENULLCREATE SET TRUENULLCREATE ス テー ト メ ン ト に よ り 、 新規テーブルの作成時 に真の ヌ ルのオン / オ フ を切 り 替え ます。 構文 SET TRUENULLCREATE = < ON | OFF > 備考 Pervasive PSQL v9 では、 ヌ ル サポー ト に関 し て、 テーブルの作成時にデ フ ォ ル ト の形式を設定す る こ と がで き ます。 通常、 製品は真の ヌ ル デー タ レ コ ー ド 形式を使っ て新規テーブルを作成 し ます。こ れは、すべての フ ィ ー ル ド の先頭に ヌ ル イ ン ジ ケー タ バ イ ト を追加 し ます。 SQL ス テー ト メ ン ト を使っ て こ のエン ジ ン設定をオ フ にす る こ と に よ り 、 Pervasive.SQL 7 で 用い ら れた レ ガシー ヌ ル デー タ レ コ ー ド 形式を使用す る テーブルを新規 に作成で き ます。 作成モー ド は、 ス テー ト メ ン ト を発行 し て変更 さ れ る か、 接続が切断 さ れ る ま では有効な ま ま です。 こ の設定は接続ご と に保持 さ れ る ため、 同一ア プ リ ケーシ ョ ン内であ っ て も 、 個々のデー タ ベース接続がそれぞれ異な る 作成モー ド を保持す る こ と がで き ます。 ど の接続 も 、 新規テーブルが真の ヌ ル サポー ト を使っ て作成 さ れ る デフ ォ ル ト モー ド の設定で開始 し ます。 こ の機能は、 既存のテーブルお よ び使用可能な列のデー タ 型には影響 し ま せん。すべてのテーブルは Pervasive PSQL デー タ 型を使っ て作成 さ れます。 た と えば、 NOTE や LVAR の よ う な旧デー タ 型は、 ど の タ イ プの ヌ ル サ ポー ト が選択 さ れてい る かに関係な く 使用で き ません。 「INSERT」 (3-120 ページ) に記述 さ れてい る 、 ヌ ル値を許可す る デー タ 型 についての解説 も 参照 し て く だ さ い。 こ の 設 定 は SQL で の み切 り 替 え る こ と が で き 、 Pervasive PSQL Control Center を使用 し て設定する こ と はで き ません。 例 設定を切 り 替えて、新規テーブルが レ ガシー ヌ ル サポー ト を使っ て作成 さ れ る よ う 指定する には、 次の SQL ス テー ト メ ン ト を使用 し ます。 SET TRUENULLCREATE=OFF 設定を切 り 替えて、真の ヌ ル サポー ト を使っ てテーブルを作成す る デフ ォ ル ト 設定にエン ジ ン を戻すには、 次の SQL ス テー ト メ ン ト を使用 し ます。 SET TRUENULLCREATE=ON 3-188 ス テー ト メ ン ト の文法 SET VARIABLE SET に よ り 、 宣言 さ れた変数に値を割 り 当て ます。 構文 SET 変数名 = プ ロ シージ ャ 式 備考 変数を設定す る には、事前に変数が宣言 さ れていなければな り ません。SET は、 ス ト ア ド プ ロ シージ ャ と ト リ ガでのみ使用で き ます。 例 次の例では、 var1 に値 10 を割 り 当て ます。 SET:var1 = 10; 関連項目 「CREATE PROCEDURE」 (3-50 ページ) 「DECLARE」 (3-78 ページ) 3-189 SQL 構文 リ フ ァ レ ン ス SIGNAL 備考 SIGNAL ス テー ト メ ン ト を使っ て、 例外ま たは正常終了以外の終了条件を 通知す る こ と がで き ます。 SQLSTATE 値を通知す る と 、 SQLSTATE が特定の値に設定 さ れ ます。 そ の 後、 こ の 値 は ユ ー ザ ー に 返 さ れ る か、 呼 び 出 し 元 プ ロ シ ー ジ ャ で SQLSTATE 値 を介 し て使用で き る よ う にな り ま す。 こ の値は、 プ ロ シー ジ ャ を呼び出 し てい る アプ リ ケーシ ョ ンで使用で き ます。 SQLSTATE 値 と 一緒にエ ラ ー メ ッ セージ を指定す る こ と も で き ます。 メ モ SIGNAL は ス ト ア ド プ ロ シージ ャ ま たはユーザー定義関数の内 部でのみ使用で き ます。 構文 SIGNAL SQLSTATE 値 [, エ ラ ー メ ッ セージ ] SQLSTATE 値 ::= ユーザー定義値 エ ラ ー メ ッ セージ ::= ユーザー定義 メ ッ セージ 例 次 の 例 で は、 SQLSTATE の 初期値 "00000" を 出力 し 、 通知 さ れ た 後 に "SQLSTATE 例外 を 受 け取 り ま し た " を 出力 し ま す。 最後に出力 さ れ る SQLSTATE は "W9001" にな り ます。 CREATE PROCEDURE GenerateSignal(); BEGIN SIGNAL 'W9001'; END; CREATE PROCEDURE TestSignal() WITH DEFAULT HANDLER; BEGIN PRINT SQLSTATE; CALL GenerateSignal(); IF SQLSTATE <> '00000' THEN PRINT 'SQLSTATE 例外を受け取 り ま し た '; END IF; PRINT SQLSTATE; END; CREATE PROCEDURE GenerateSignalWithErrorMsg(); 3-190 ス テー ト メ ン ト の文法 BEGIN SIGNAL 'W9001', ' 構文が不正です ; END; CALL GenerateSignalWithErrorMsg() 関連項目 「CREATE PROCEDURE」 (3-50 ページ) 3-191 SQL 構文 リ フ ァ レ ン ス SQLSTATE 備考 SQLSTATE 値は、 正常終了、 警告、 ま たは例外の状態を表 し ます。 ODBC が定義す る 全 SQLSTATE 値の リ ス ト は、 Microsoft ODBC SDK のマニ ュ ア ルに記載 さ れてい ます。 ハン ド ラ が実行 さ れ る と き 、 そのハン ド ラ 内の ス テー ト メ ン ト は、 複合ス テー ト メ ン ト の本体内の ス テー ト メ ン ト と 同 じ よ う に SQLSTATE 値に影 響 し ます。 ただ し 、 特定の状態に対 し て特定の動作を行 う ハン ド ラ は、 完 了時にその状態を再割 り 当て し て、 状態に影響を与えない よ う にす る こ と も で き ます。 こ の と き 、 ハン ド ラ は再呼び出 し さ れません。 再呼び出 し は ループの原因 と な り ます。 その代わ り に Pervasive PSQL では、 例外の状態 が未処理の例外 と し て扱われ、 実行が停止 し ます。 関連項目 「CREATE PROCEDURE」 (3-50 ページ) 「SELECT」 (3-153 ページ) 「SIGNAL」 (3-189 ページ) 3-192 ス テー ト メ ン ト の文法 START TRANSACTION START TRANSACTION は、 論理 ト ラ ンザ ク シ ョ ンの開始を知 ら せ る も の であ り 、 常に、 COMMIT ま たは ROLLBACK と 組み合わせて使用す る 必 要があ り ます。 構文 START TRANSACTION SQL ス テー ト メ ン ト COMMIT | ROLLBACK [WORK] 備考 START TRANSACTION は ス ト ア ド プ ロ シージ ャ 内でのみサポー ト さ れ ま す。 SQL Editor で は START TRANSACTION を 使用 で き ま せん (SQL Editor は AUTOCOMMIT をオンに設定 し ます)。 こ の ス テー ト メ ン ト は ス ト ア ド プ ロ シージ ャ 外ではサポー ト さ れません。 こ れは、 ODBC 標準が、 すべての ス テー ト メ ン ト はデフ ォ ル ト で ト ラ ンザ ク シ ョ ン内にあ る こ と を条件 と し てい る ためです。 ODBC 標準には ト ラ ン ザ ク シ ョ ン を開始す る API があ り ません。 ODBC は、 各 SQL ス テー ト メ ン ト を SQL 独自の ト ラ ンザ ク シ ョ ン内に置 く か、 それ と も アプ リ ケーシ ョ ンが各 ト ラ ンザ ク シ ョ ンの終了時を指定す る か ど う か を決定す る アプ リ ケーシ ョ ン を提供 し ます。 ODBC は、 ト ラ ン ザ ク シ ョ ン 内に な い ど の ス テー ト メ ン ト よ り 前に、 自動的に ト ラ ン ザ ク シ ョ ン を開 き ます。 し たがっ て、指定 さ れた接続の最初の ス テー ト メ ン ト 、 あ る いは COMMIT ま たは ROLLBACK 後の最初の ス テー ト メ ン ト に よ り 、 ODBC は自動的に新 し い ト ラ ンザ ク シ ョ ン を開始 し ます。 ODBC 標準内では、 SQLSetConnectOption を使っ て、 各 ス テー ト メ ン ト を 独自の ト ラ ンザ ク シ ョ ン内に置 く か、 ま たはアプ リ ケーシ ョ ンが複数の ス テー ト メ ン ト を 1 つの ト ラ ン ザ ク シ ョ ン に ま と め る か ど う か を 指定 し ま す。 SQLSetConnectOption にオプシ ョ ン SQL_AUTOCOMMIT、 値 SQL_AUTOCOMMIT_ON ( こ れがデフ ォ ル ト です) を指定 し て呼び出す と 、 各ス テー ト メ ン ト は独自の ト ラ ンザ ク シ ョ ン内に置かれます。 こ の よ う に使用する と 、 ト ラ ンザ ク シ ョ ンは ス テー ト メ ン ト の実行を開始す る と き に開始 さ れ、 ス テー ト メ ン ト の実行の完了時点でエ ラ ーが発生 し ていな い場合は自動的に コ ミ ッ ト さ れ、 エ ラ ーが発生 し た場合は ロ ール バ ッ ク さ れ る よ う にな り ます。 3-193 SQL 構文 リ フ ァ レ ン ス SQLSetConnectOption にオプシ ョ ン SQL_AUTOCOMMIT、 値 SQL_AUTOCOMMIT_OFF を指定 し て呼び出す と 、 アプ リ ケーシ ョ ンが ス テー ト メ ン ト を 1 つの ト ラ ンザ ク シ ョ ンに ま と め る こ と がで き ます。 こ の よ う に使用す る と 、 ト ラ ンザ ク シ ョ ンは実行 さ れ る 最初の ス テー ト メ ン ト を開始す る と き に開始 さ れます。 その後、 ト ラ ンザ ク シ ョ ン をいつ、 ど の よ う に終了す る かは、 アプ リ ケーシ ョ ンが SQLTransact を呼び出すか、 'COMMIT WORK' ま たは 'ROLLBACK WORK' ス テー ト メ ン ト を実行す る かに よ っ て決ま り ます。 アプ リ ケーシ ョ ンが 1 つの ト ラ ンザ ク シ ョ ン を終 了す る と 、 次の ス テー ト メ ン ト の実行時に別の ト ラ ンザ ク シ ョ ンが自動的 に開始 さ れます。 例 次 の 例 で は、 ス ト ア ド プ ロ シ ー ジ ャ の 中 で、 Billing テ ー ブ ル 内 の Amount_Owed 列を更新す る ト ラ ンザ ク シ ョ ンが開始 さ れます。こ の作業が コ ミ ッ ト さ れ る と 、 別の ト ラ ンザ ク シ ョ ンに よ っ て Amount_Paid 列が更新 さ れてゼ ロ に設定 さ れます。最後の COMMIT WORK ス テー ト メ ン ト に よ り 、 2 番目の ト ラ ンザ ク シ ョ ンが終了 し ます。 START TRANSACTION; UPDATE Billing B SET Amount_Owed = Amount_Owed - Amount_Paid WHERE Student_ID IN (SELECT DISTINCT E.Student_ID FROM Enrolls E, Billing B WHERE E.Student_ID = B.Student_ID); COMMIT WORK; START TRANSACTION; UPDATE Billing B SET Amount_Paid = 0 WHERE Student_ID IN (SELECT DISTINCT E.Student_ID FROM Enrolls E, Billing B WHERE E.Student_ID = B.Student_ID); COMMIT WORK; 関連項目 「COMMIT」 (3-37 ページ) 「CREATE PROCEDURE」 (3-50 ページ) 「ROLLBACK」 (3-148 ページ) 3-194 ス テー ト メ ン ト の文法 UNION 備考 UNION ま たは UNION ALL を使用す る SELECT ス テー ト メ ン ト を使っ て、 複数 の SELECT ク エ リ か ら 1 つ の 結果 テ ー ブ ル を 取得 で き ま す。 UNION ク エ リ は、 2 つ以上のデー タ ソ ース に含ま れ る 類似 し た情報を結 合 し て 1 つにする のに適 し てい ます。 UNION を使用す る と 、 重複行が削除 さ れ ま す。 UNION ALL を使用す る と 、 重複行が保持 さ れ ま す。 重複行を削除す る 必要があ る 場合を除いて、 UNION ALL オプシ ョ ンの使用をお勧め し ます。 UNION を使用する と 、Pervasive PSQL エン ジ ンは結果セ ッ ト 全体を整列 さ せ る ため、 テーブルが大 き い場合は、 処理に数分かか る こ と が あ り ま す。 UNION ALL を選択す る と 、 ソ ー ト は不要にな り ます。 Pervasive PSQL エン ジ ンは、 UNION ステートメントの LONGVARBINARY 列 をサポー ト し てい ません。UNION ス テー ト メ ン ト では、LONGVARCHAR は 65500 バ イ ト ま でに制限 さ れてい ます。 演算子 UNION は、 1 つ以上の ビ ュ ーを参照す る SQL ス テー ト メ ン ト に適用する こ と はで き ません。 UNION に含まれ る 2 つの ク エ リ スペ ッ ク は互換性がなければな り ません。 それぞれの ク エ リ は同数の列を持ち、 それ ら の列は互換性のあ る デー タ 型 であ る 必要があ り ます。 UNION キー ワ ー ド の後に く る SELECT ス テー ト メ ン ト の ORDER BY 句 で、 最初の SELECT リ ス ト にあ る 列名を使用で き ます (序数を使っ て目的 の列を示す こ と も で き ます)。 た と えば、 次の ス テー ト メ ン ト は有効です。 SELECT c1, c2, c3 FROM t1 UNION SELECT c4, c5, c6 FROM t2 ORDER BY t1.c1, t1.c2, t1.c3 SELECT c1, c2, c3 FROM t1 UNION SELECT c4, c5, c6 FROM t2 ORDER BY 1, 2, 3 ま た、 列名のエ イ リ ア ス も 使用で き ます。 SELECT c1 x, c2 y, c3 z FROM t1 UNION SELECT c1, c2, c3 FROM t2 ORDER BY x, y, z SELECT c1 x, c2 y, c3 z FROM t1 a UNION SELECT c1, c2, c3 FROM t1 b ORDER BY a.x, a.y, a.z エ イ リ ア ス は、 ク エ リ 内の ど のテーブル名、 列名 と も 異な っ てい る 必要が あ り ます。 例 次の例では、名字が "M" で始ま る か、成績評価点平均が 4.0 の生徒の ID 番 号の一覧が示 さ れます。 結果テーブルに重複す る 行は含まれません。 3-195 SQL 構文 リ フ ァ レ ン ス SELECT Person.ID FROM Person WHERE Last_name LIKE 'M%' UNION SELECT Student.ID FROM Student WHERE Cumulative_GPA = 4.0 次の例では、 重複行を含めた person テーブルお よ び faculty テーブルの列 ID が抽出 さ れます。 SELECT person.id FROM person UNION ALL SELECT faculty.id from faculty 次の例では、名字が "M" で始ま る か、成績評価点平均が 4.0 の生徒の ID 番 号の一覧が示 さ れます。 結果テーブルには重複行が含まれず、 最初の列に 従っ て結果セ ッ ト が並べ ら れます。 SELECT Person.ID FROM Person WHERE Last_name LIKE 'M%' UNION SELECT Student.ID FROM Student WHERE Cumulative_GPA = 4.0 ORDER BY 1 NULL ス カ ラ 関数を使用す る と 、 UNION 選択 リ ス ト と 親選択 リ ス ト のエ ン ト リ 数 が 異 な る よ う に 設 定 で き ま す。 こ の よ う に 設 定 す る に は、 CONVERT 関数を使用 し て NULL を強制的に正 し い型に変換す る 必要が あ り ます。 CREATE TABLE t1 (c1 INTEGER, c2 INTEGER) INSERT INTO t1 VALUES (1,1) CREATE TABLE t2 (c1 INTEGER) INSERT INTO t2 VALUES (2) SELECT c1, c2 FROM t1 UNION SELECT c1, CONVERT(NULL(),sql_integer) FROM t2 関連項目 「SELECT」 (3-153 ページ) 3-196 ス テー ト メ ン ト の文法 UNIQUE 備考 イ ン デ ッ ク ス に重複す る 値 を 許可 し な い こ と を 指定す る には、 UNIQUE キ ー ワ ー ド を 使用 し ま す。 UNIQUE キ ー ワ ー ド を 使 用 し て CREATE INDEX ス テー ト メ ン ト を実行 し た と き に イ ンデ ッ ク ス を構成す る 1 つま たは複数の列に重複す る 値があ っ た場合、 ス テー タ ス コ ー ド 5 が返 さ れ、 イ ンデ ッ ク ス は作成 さ れません。 メ モ UNIQUE キー ワー ド は、 イ ンデ ッ ク ス の属性 リ ス ト の中で、 指 定す る 列名の後に置か ないで く だ さ い。 推奨 さ れ る 構文は CREATE UNIQUE INDEX です。 関連項目 「ALTER TABLE」 (3-8 ページ) 「CREATE INDEX」 (3-46 ページ) 「CREATE TABLE」 (3-62 ページ) 3-197 SQL 構文 リ フ ァ レ ン ス UPDATE UPDATE ス テー ト メ ン ト を使っ て、デー タ ベース内の列の値を変更す る こ と がで き ます。 構文 UPDATE < テーブル名 | ビ ュ ー名 > [ エ イ リ ア ス名 ] SET 列名 = <NULL | DEFAULT | 式 | サブ ク エ リ 式 > [, 列名 = ... ] [ FROM テーブル参照 [, テーブル参照 ]... [ WHERE 検索条件 ] テーブル名 ::= ユーザー定義名 ビ ュ ー名 ::= ユーザー定義名 エ イ リ ア ス名 ::= ユーザー定義名 (エ イ リ ア ス名は、 FROM 句が使用 さ れてい る 場合には使用で き ません。 「FROM 句」 (3-199 ページ) を参照 し て く だ さ い。) テーブル参照 ::= {OJ 外部結合の定義 } | [ デー タ ベース名 .] テーブル名 [[AS] エ イ リ ア ス名 ] | [ デー タ ベース名 .] ビ ュ ー名 [[AS] エ イ リ ア ス名 ] | 結合定義 | ( 結合定義 ) | ( テーブル サブ ク エ リ ) [AS] エ イ リ ア ス名 [( 列名 [, 列名 ]... ) ] 外部結合の定義 ::= テーブル参照 外部結合 タ イ プ JOIN テーブル参照 ON 検索 条件 外部結合 タ イ プ ::= LEFT [OUTER] | RIGHT [OUTER] | FULL [OUTER] 検索条件 ::= 検索条件 AND 検索条件 | 検索条件 OR 検索条件 | NOT 検索条件 | ( 検索条件 ) | 述部 デー タ ベース名 ::= ユーザー定義名 ビ ュ ー名 ::= ユーザー定義名 結合定義 ::= テーブル参照 [ 結合 タ イ プ ] JOIN テーブル参照 ON 検索条件 | テーブル参照 CROSS JOIN テーブル参照 | 外部結合の定義 結合 タ イ プ ::= INNER | LEFT [OUTER] | RIGHT [OUTER] | FULL [OUTER] テーブル サブ ク エ リ ::= ク エ リ スペ ッ ク [[UNION [ALL] ク エ リ スペ ッ ク ]... ] サブ ク エ リ 式 ::= ( ク エ リ スペ ッ ク ) 3-198 ス テー ト メ ン ト の文法 備考 INSERT、 UPDATE、 お よ び DELETE ス テー ト メ ン ト はア ト ミ ッ ク な方法 で動作 し ます。 つま り 、 複数の行の挿入、 更新、 ま たは削除に失敗 し た場 合、 同 じ ス テー ト メ ン ト に よ っ て実行 さ れた前の行の挿入、 更新、 ま たは 削除がすべて ロ ール バ ッ ク さ れます。 UPDATE ス テー ト メ ン ト の SET 句にはサブ ク エ リ を指定で き ます。 こ の 機能を使用す る と 、 テーブル内の情報を、 別のテーブル内の情報ま たは同 じ テーブル内の別の部分を基に更新す る こ と がで き ます。 キーワー ド DEFAULT を指定する と 、 指定 し た列に定義 さ れてい る デフ ォ ル ト 値を値に設定す る こ と がで き ます。 デフ ォ ル ト 値が定義 さ れていない と き 、 Pervasive PSQL は、 その列が ヌ ル値を許可す る 場合は ヌ ルか疑似ヌ ル 値 を 使 用 し 、 ヌ ル 値 を 許可 し な い 場合 は エ ラ ー を 返 し ま す。 ま た、 「INSERT」 (3-120 ページ) に記述 さ れてい る DEFAULT の詳細 も 参照 し て く だ さ い。 UPDATE ス テー ト メ ン ト は一度に 1 つの テーブル し か更新で き ま せん。 UPDATE は、SET 句内のサブ ク エ リ を使っ てほかのテーブル と 関連付け る こ と がで き ます。 こ れは、 更新す る テーブルの内容の一部に依存す る 相関 サブ ク エ リ か、 ま たは別のテーブルにのみ依存す る非相関サブ ク エ リ にす る こ と がで き ます。 相関サブ ク エ リ UPDATE t1 SET t1.c2 = (SELECT t2.c2 FROM t2 WHERE t2.c1 = t1.c1) 非相関サブ ク エ リ UPDATE t1 SET t1.c2 = (SELECT SUM(t2.c2) FROM t2 WHERE t2.c1 = 10) 純粋な SELECT ス テー ト メ ン ト と サブ ク エ リ は同 じ ロ ジ ッ ク を使っ て処 理 さ れ る ため、サブ ク エ リ を有効な SELECT ス テー ト メ ン ト で構成す る こ と がで き ます。 サブ ク エ リ には特別な規則はあ り ません。 UPDATE 内の SELECT が行を返 さ ない場合、 UPDATE は ヌ ルを挿入 し ま す。 指定 し た列が ヌ ル値を 許可 し ない場合、 UPDATE は失敗 し ま す。 ま た、 SELECT が複数行を返 し た場合、 UPDATE は失敗 し ます。 UPDATE ス テー ト メ ン ト は、 ス テー ト メ ン ト 内でのテーブル結合の使用を 許可 し ません。 その代わ り に、 次の よ う に SET 句で相関サブ ク エ リ を使用 し ます。 UPDATE t1 SET t1.c2 = (SELECT t2.c2 FROM t2 WHERE t2.c1 = t1.c1) 3-199 SQL 構文 リ フ ァ レ ン ス Pervasive.SQL 2000 あ る いはそれ以前のバージ ョ ン で作成 さ れたデー タ (レ ガシー デー タ ) のデー タ 型はすべて、 ヌ ル値を許可す る と 報告 さ れ ます。 こ れは、 すべてのデー タ 型の レ ガシー列で、 擬似ヌ ル変換を行わないで ヌ ルを更新で き る と い う こ と です。 次のデー タ 型は、 デフ ォ ル ト で擬似ヌ ル と し て扱われます。 Date Decimal Money NumericSA NumericSTS Timestamp Numeric 通常、 レ ガシー列を擬似ヌ ルに変換す る 場合、 列の内容が ヌ ルであ る か照 会で き る よ う に、 バ イ ナ リ 値の 1 つを取 り 上げて ヌ ル値 と し て使用す る た め、 バ イ ナ リ 値を 1 つ失い ます。 ただ し 、 上記のデー タ 型は設計の都合上、 通常のデー タ 範囲に加えて、ヌ ル用に異な る 固有の内部値を持っ てい ます。 こ れ ら のデー タ 型を使用す る と 、 バ イ ナ リ 値を ヌ ルに変換す る 場合に 1 つ も 値を失わないので、 それ ら をデフ ォ ル ト で擬似 ヌ ル と 判断 し て も 差 し 支 え あ り ません。 残 り のデー タ 型は 「レ ガシー ヌ ル許容」 と みな さ れます。 こ れは、 ヌ ルを 更新で き る と い う こ と です。 し か し 、 値を照会す る と 、 非ヌ ルのバ イ ナ リ 同値が返 さ れます。 こ れ と 同 じ バ イ ナ リ 同値を WHERE 句で使用 し て、 特 定の値を取得する 必要があ り ます。 バ イ ナ リ 同値は次の と お り です。 Binary 型の場合は 0 string お よ び BLOB 型(レ ガシー型の LVAR と NOTE)の場合は空文字列 メ モ 単一の リ テ ラ ル文字列の最大長は 15000 バ イ ト です。 こ れ よ り も 長いデー タ を入力す る 必要があ る 場合は、「Long デー タ 」(3-122 ペー ジ) を参照す る と 役に立つ ヒ ン ト があ り ます。 FROM 句 オプシ ョ ンの FROM 句 と 、 更新 さ れ る テーブル (「更新テーブル」 と 呼び ます) への参照に関 し て混乱が生 じ る 可能性があ り ます。 FROM 句に更新 テーブルが現れ る 場合、 その出現の う ちの 1 つは更新 さ れ る テーブル と 同 じ イ ン ス タ ン ス にな り ます。 た と えば、 ス テー ト メ ン ト UPDATE t1 SET c1 = 1 FROM t1, t2 WHERE t1.c2 = t2.c2 の場合、UPDATE の直後の t1 と FROM の後の t1 は、 テーブル t1 の同 じ イ ン ス タ ン ス です。 し たがっ て、 こ の ス テー ト メ ン ト は UPDATE t1 SET c1 = 1 FROM t2 WHERE t1.c2 = t2.c2 と 同 じ こ と にな り ます。 3-200 ス テー ト メ ン ト の文法 FROM 句に更新テーブルが複数回現れ る 場合、 その出現の う ちの 1 つは更 新 テ ー ブ ル と 同 じ イ ン ス タ ン ス で あ る と 識別 さ れ る 必要 が あ り ま す。 FROM 句の参照の う ち、 更新テーブル と 同 じ イ ン ス タ ン ス であ る と 見な さ れ る のは、 エ イ リ ア ス が指定 さ れていない参照です。 し たがっ て、ス テー ト メ ン ト UPDATE t1 SET t1.c1 = 1 FROM t1 a, t1 b WHERE a.c2 = b.c2 の場合、 FROM 句の t1 の イ ン ス タ ン スはど ち ら も エ イ リ ア ス を持っ てい る ため、 こ れは正 し く あ り ません。 次のバー ジ ョ ンは有効です。UPDATE t1 SET t1.c1 = 1 FROM t1, t1 b WHERE t1.c2 = b.c2 FROM 句には次の条件が適用 さ れます。 UPDATE ス テー ト メ ン ト にオプシ ョ ンの FROM 句を含め る 場合、FROM 句の前にあ る テーブル参照にエ イ リ ア ス を指定す る こ と はで き ません。 た と えば、UPDATE t1 a SET a.c1 = 1 FROM t2 WHERE a.c2 = t2.c2 と す る と 、 次のエ ラ ーが返 さ れます。 SQL_ERROR (-1) SQLSTATE "37000" "[Pervasive][ODBC ク ラ イ ア ン ト イ ン タ ーフ ェ イ ス ][LNA][Pervasive] [ODBC エン ジ ン イ ン タ ーフ ェ イ ス ] オプシ ョ ンの FROM を伴 う UPDATE/DELETE ス テー ト メ ン ト では、テーブル エ イ リ ア ス は使用で き ません。 " ス テー ト メ ン ト の有効なバージ ョ ンは、 UPDATE t1 SET t1.c1 = 1 FROM t2 WHERE t1.c2 = t2.c2 ま たは UPDATE t1 SET t1.c1 = 1 FROM t1 a, t2 WHERE a.c2 = t2.c2 です。 FROM 句に更新テーブルへの参照を 2 つ以上含め る 場合、それ ら の参照 の う ちの 1 つにだけエ イ リ ア ス を指定で き ます。 た と えば、UPDATE t1 SET t1.c1 = 1 FROM t1 a, t1 b WHERE a.c2 = b.c2 と す る と 、 次のエ ラ ーが返 さ れます。 SQL_ERROR (-1) SQLSTATE "37000" "[Pervasive][ODBC ク ラ イ ア ン ト イ ン タ ーフ ェ イ ス ][LNA][Pervasive] [ODBC エ ン ジ ン イ ン タ ーフ ェ イ ス ] テーブル t1 があい ま いです。 " 誤 り の あ る ス テー ト メ ン ト では、 エ イ リ ア ス を "a" と す る テーブル "t1" が更新テーブル と 同 じ イ ン ス タ ン ス であ る と 仮定 し てい ま す。 正 し いバージ ョ ンの ス テー ト メ ン ト は、 UPDATE t1 SET t1.c1 = 1 FROM t1, t1 b WHERE t1.c2 = b.c2 です。 UPDATE ス テー ト メ ン ト におけ る FROM 句はセ ッ シ ョ ン レベルでのみ サポー ト さ れ ま す。 UPDATE ス テー ト メ ン ト が ス ト ア ド プ ロ シージ ャ 内で発生す る 場合は、 FROM 句はサポー ト さ れません。 3-201 SQL 構文 リ フ ァ レ ン ス 例 次の例では、 Faculty テーブルの ID 103657107 に給与 と し て 95000 を設定 し 、 レ コ ー ド を更新 し ます。 UPDATE Faculty SET salary = 95000.00 WHERE ID = 103657107 次の例では、 DEFAULT キー ワー ド の使い方を示 し ます。 UPDATE t1 SET c2 = DEFAULT WHERE c2 = 'bcd' UPDATE t1 SET c1 = DEFAULT, c2 = DEFAULT 次の例では、Course テーブルの ECO 305 の履修単位時間を 4 に変更 し ます。 UPDATE Course SET Credit_Hours = 4 WHERE Name = 'ECO 305' 次の例は、 Person テーブル中のあ る 人物の住所を変更 し ます。 UPDATE Person p SET p.Street = '123 Lamar', p.zip = '78758', p.phone = 5123334444 WHERE p.ID = 131542520 サブ ク エ リ 例 A 2 つのテーブルが作成 さ れ、 行が挿入 さ れます。 最初のテーブル t5 は、 列 c1 に値 2 を持つ各行が、2 番目のテーブル t6 の列の値で更新 さ れます。テー ブル t6 には列 c2 に値 3 を含む行が 2 行以上あ る ために、 サブ ク エ リ か ら 複数行が返 さ れ る こ と か ら 、 最初の UPDATE は失敗 し ます。 た と え結果値 が ど ち ら の場合 も 同 じ にな る と し て も 、 こ の よ う な結果にな り ます。 2 番 目の UPDATE で示 さ れ る よ う に、 サブ ク エ リ 内で DISTINCT キーワー ド を使用す る と 、重複す る 結果が取 り 除かれ、 ス テー ト メ ン ト は成功 し ます。 CREATE CREATE INSERT INSERT TABLE t5 (c1 INT, c2 INT) TABLE t6 (c1 INT, c2 INT) INTO t5(c1, c2) VALUES (1.3) INTO t5(c1, c2) VALUES (2,4) INSERT INSERT INSERT SELECT INTO t6(c1, c2) VALUES (2.3) INTO t6(c1, c2) VALUES (1.2) INTO t6(c1, c2) VALUES (3,3) * FROM t5 結果 : c1 ---------1 2 3-202 c2 ----3 4 ス テー ト メ ン ト の文法 UPDATE t5 SET t5.c1=(SELECT c2 FROM t6 WHERE c2=3) WHERE t5.c1=2 - 注意 : ク エ リ は失敗 し ます UPDATE t5 SET t5.c1=(SELECT DISTINCT c2 FROM t6 WHERE c2=3) WHERE t5.c1=2 - 注意 : ク エ リ は成功 し ます SELECT * FROM t5 結果 : c1 ---------1 3 c2 ----3 4 サブ ク エ リ 例 B 2 つのテーブルが作成 さ れ、 有効な構文の さ ま ざ ま な例が示 さ れ ます。 サ ブ ク エ リ が複数行を返す こ と に よ り UPDATE が失敗す る 事例に注目 し て く だ さ い。 ま た、 サブ ク エ リ が行を返 さ ない場合に (そ こ で ヌ ル値が許可 さ れ る 場合)、 ヌ ルが挿入 さ れて UPDATE は成功す る 点に も 注目 し て く だ さ い。 CREATE TABLE t1 (c1 INT, c2 INT) CREATE TABLE t2 (c1 INT, c2 INT) INSERT INSERT INSERT INSERT INSERT INTO INTO INTO INTO INTO t1 t1 t1 t2 t2 VALUES VALUES VALUES VALUES VALUES (1, (2, (3, (1, (2, 0) 0) 0) 100) 200) UPDATE t1 SET t1.c2 = (SELECT SUM(t2.c2) FROM t2) UPDATE t1 SET t1.c2 = 0 UPDATE t1 SET t1.c2 = (SELECT t2.c2 FROM t2 WHERE t2.c1 = t1.c1) UPDATE UPDATE UPDATE UPDATE t1 t1 t1 t1 SET SET SET SET t1.c2 t1.c2 t1.c2 t1.c2 = = = = @@IDENTITY @@ROWCOUNT (SELECT @@IDENTITY) (SELECT @@ROWCOUNT) UPDATE t1 SET t1.c2 = (SELECT t2.c2 FROM t2) - 更新は失敗 し ます INSERT INTO t2 VALUES (1, 150) INSERT INTO t2 VALUES (2, 250) UPDATE t1 SET t1.c2 = (SELECT t2.c2 FROM t2 WHERE t2.c1 = t1.c1) - 更新は失敗 し ます UPDATE t1 SET t1.c2 = (SELECT t2.c2 FROM t2 WHERE t2.c1 = 5) - 更新は成功 し 、 t1.c2 の全行に ヌ ルが挿入 さ れます UPDATE t1 SET t1.c2 = (SELECT SUM(t2.c2) FROM t2 WHERE t2.c1 = t1.c1) 3-203 SQL 構文 リ フ ァ レ ン ス 次の例では、 テーブル t1 と t2 を 作成 し 、 それ ら にデー タ を 設定 し ま す。 UPDATE ス テー ト メ ン ト で FROM 句を使用 し ます。 DROP table t1 CREATE table t1 (c1 integer, c2 integer) INSERT INTO t1 VALUES (0, 10) INSERT INTO t1 VALUES (0, 10) INSERT INTO t1 VALUES (2, 20) INSERT INTO t1 VALUES (2, 20) DROP table t2 CREATE table t2 (c1 integer, c2 integer) INSERT INTO t2 VALUES (2, 20) INSERT INTO t2 VALUES (2, 20) INSERT INTO t2 VALUES (3, 30) INSERT INTO t2 VALUES (3, 30) UPDATE t1 SET t1.c1 = 1 FROM t2 WHERE t1.c2 = t2.c2 SELECT * FROM t1 関連項目 「ALTER TABLE」 (3-8 ページ) 「CREATE PROCEDURE」 (3-50 ページ) 「CREATE TRIGGER」 (3-73 ページ) 「DEFAULT」 (3-81 ページ) 「GRANT」 (3-109 ページ) 「INSERT」 (3-120 ページ) 3-204 ス テー ト メ ン ト の文法 UPDATE (位置付け) UPDATE (位置付け) ス テー ト メ ン ト に よ り 、 SQL カー ソ ルに関連付け ら れた行セ ッ ト の現在の行を更新 し ます。 構文 UPDATE [ テーブル名 ] SET 列名 = プ ロ シージ ャ 式 [, 列名 = プ ロ シージ ャ 式 ]... WHERE CURRENT OF カー ソ ル名 備考 こ の ス テー ト メ ン ト は、 ス ト ア ド プ ロ シージ ャ 、 ト リ ガ、 お よ びセ ッ シ ョ ン レベルでのみ使用で き ます。 メ モ セ ッ シ ョ ン レ ベルでは位置付け UPDATE は使用で き ま すが、 DECLARE CURSOR ス テー ト メ ン ト は使用で き ません。 ア ク テ ィ ブな 結果セ ッ ト のカー ソ ル名を取得す る には、 SQLGetCursorName() API を 使用 し ます。 位置付け UPDATE ス テー ト メ ン ト を セ ッ シ ョ ン レベルで使用する 場 合のみ、 ス テー ト メ ン ト にテーブル名を指定で き ます。 テーブル名を ス ト ア ド プ ロ シージ ャ や ト リ ガ を使っ て指定す る こ と はで き ません。 例 次の一連の ス テー ト メ ン ト は、 位置付け UPDATE ス テー ト メ ン ト の設定 を示 し ま す。 位置付け UPDATE に必要な ス テー ト メ ン ト は、 DECLARE CURSOR、 OPEN CURSOR、 お よ び FETCH FROM カー ソ ル名です。 こ の例の位置付け UPDATE は、 HIS 305 と い う 講座名を HIS 306 に変更 し ます。 CREATE PROCEDURE UpdateClass(); BEGIN DECLARE :CourseName CHAR(7); DECLARE :OldName CHAR(7); DECLARE c1 CURSOR FOR SELECT name FROM course WHERE name = :CourseName FOR UPDATE; SET :CourseName = 'HIS 305'; OPEN c1; FETCH NEXT FROM c1 INTO :OldName; UPDATE SET name = 'HIS 306' WHERE CURRENT OF c1; END; 3-205 SQL 構文 リ フ ァ レ ン ス 関連項目 「CREATE PROCEDURE」 (3-50 ページ) 「CREATE TRIGGER」 (3-73 ページ) 3-206 ス テー ト メ ン ト の文法 USER 備考 USER キー ワ ー ド は、 SELECT 制限に よ っ て返 さ れ る 各行の現在のユー ザー名 (Master な ど) を返 し ます。 例 次の例では、 course テーブルか ら ユーザー名が返 さ れます。 SELECT USER FROM course -- Master の イ ン ス タ ン ス を 145 返 し ます (テーブルには 145 行含 まれます) SELECT DISTINCT USER FROM course -- Master の イ ン ス タ ン ス を 1 つ返 し ます 関連項目 「SELECT」 (3-153 ページ) 「SET SECURITY」 (3-179 ページ) 3-207 SQL 構文 リ フ ァ レ ン ス WHILE WHILE ス テー ト メ ン ト を使用 し て、 フ ロ ーを制御 し ます。 こ れに よ っ て、 WHILE 条件が真で あ る 限 り 繰 り 返 し コ ー ド を 実行す る こ と がで き ま す。 オプシ ョ ンで、 DO お よ び END WHILE を付けて WHILE ス テー ト メ ン ト を使用す る こ と がで き ます。 メ モ WHILE ス テー ト メ ン ト の構文を混合 し て使用す る こ と はで き ま せん。 DO お よ び END WHILE 付き の WHILE 構文ま たは WHILE の みの構文のいずれか を使用で き ます。 WHILE 条件で複数の ス テー ト メ ン ト を 使用す る 場合は、 BEGIN と END を使っ て ス テー ト メ ン ト ブ ロ ッ ク の始ま り と 終わ り を示す必要 があ り ます。 構文 [ ラ ベル名 : ] WHILE プ ロ シージ ャ 検索条件 [DO] [ プ ロ シージ ャ ス テー ト メ ン ト [; プ ロ シージ ャ ス テー ト メ ン ト ]]... [ END WHILE] [ ラ ベル名 ] 備考 WHILE ス テー ト メ ン ト は開始 ラ ベルを持つ こ と がで き ます ( こ の ス テー ト メ ン ト は ラ ベル付 き WHILE ス テー ト メ ン ト と 呼ばれます)。 例 次の例では、 変数 vInteger の値が 10 にな っ てループが終了す る ま で、 変数 の値が 1 ずつ増加 し ます。 WHILE (:vInteger < 10) DO SET :vInteger = vInteger + 1; END WHILE 関連項目 「CREATE PROCEDURE」 (3-50 ページ) 「CREATE TRIGGER」 (3-73 ページ) 3-208 ス テー ト メ ン ト の文法 文法要素の定義 次は、 文法構文のセ ク シ ョ ンで使用す る 要素の定義を ま と めた も のです。 変更オプシ ョ ン リ ス ト ::= 変更オプシ ョ ン |( 変更オプシ ョ ン [, 変更オプシ ョ ン ]...) 変更オプシ ョ ン ::= ADD [COLUMN] 列定義 | ADD テーブル制約定義 | DROP [COLUMN] 列名 | DROP CONSTRAINT 制約名 | DROP PRIMARY KEY as ま たはセ ミ コ ロ ン ::= AS | ; before/after ::= BEFORE | AFTER 呼び出 し 引数 ::= 位置引数 [, 位置引数 ]... 列制約 ::= NOT NULL | UNIQUE | PRIMARY KEY | REFERENCES テーブル名 [( 列名 )] [ 参照ア ク シ ョ ン ] コ レーシ ョ ン名 ::= ' 文字列 ' | ユーザー定義名 列制約定義 ::= [CONSTRAINT 制約名 ] 列制約 列定義 ::= 列名 デー タ 型 [DEFAULT 式 ] [ 列制約定義 [ 列制約定義 ]...[CASE | COLLATE コ レーシ ョ ン名 ] 列名 ::= ユーザー定義名 コ ミ ッ ト ス テー ト メ ン ト ::= COMMIT ス テー ト メ ン ト 参照 比較演算子 ::= < | > | <= | >= | = | <> | != 制約名 ::= ユーザー定義名 相関名 ::= ユーザー定義名 カー ソ ル名 ::= ユーザー定義名 デー タ 型 ::= デー タ 型名 [( 桁数 [, 小数位 ])] デー タ 型名 ::= Pervasive PSQL がサポー ト す る デー タ 型 (A-2 ページ) を参 照 デー タ ベース名 ::= ユーザー定義名 式 ::= | 式 + | 式 * | 式 / 式 - 式 式 式 式 3-209 SQL 構文 リ フ ァ レ ン ス | | | | | | | | | | | | 式 & 式 式 | 式 式 ^ 式 (式) -式 +式 ~式 ? リ テラル ス カ ラ 関数 {fn ス カ ラ 関数} USER リ テ ラ ル ::= ' 文字列 ' | 数字 | {d ' 日付 リ テ ラ ル '} | {t ' 時刻 リ テ ラ ル '} | {ts ' タ イ ム ス タ ンプ リ テ ラ ル '} ス カ ラ 関数 :: = ス カ ラ 関数 (5-1 ページ) を参照 式ま たはサブ ク エ リ ::= 式 | ( ク エ リ スペ ッ ク ) フ ェ ッ チ方向 ::= | NEXT グループ名 ::= ユーザー定義名 イ ンデ ッ ク ス定義 ::= ( イ ンデ ッ ク ス セグ メ ン ト の定義 [, イ ンデ ッ ク ス セグ メ ン ト の定義 ]... ) イ ンデ ッ ク ス セグ メ ン ト の定義 ::= 列名 [ASC | DESC] イ ンデ ッ ク ス名 ::= ユーザー定義名 挿入 / 更新 / 削除 ::= INSERT | UPDATE | DELETE 挿入値 ::= values 句 | ク エ リ スペ ッ ク 結合定義 ::= テーブル参照 [INNER] JOIN テーブル参照 ON 検索条件 | テーブル参照 CROSS JOIN テーブル参照 | 外部結合の定義 ラ ベル名 ::= ユーザー定義名 リ テ ラ ル ::= ' 文字列 ' | 数字 | {d ' 日付 リ テ ラ ル '} | {t ' 時刻 リ テ ラ ル '} | {ts ' タ イ ム ス タ ンプ リ テ ラ ル '} order-by 式 ::= 式 [CASE | COLLATE コ レーシ ョ ン名 ] [ASC | DESC] 3-210 ス テー ト メ ン ト の文法 外部結合の定義 ::= テーブル参照 外部結合 タ イ プ JOIN テーブル参照 ON 検索条件 外部結合 タ イ プ ::= LEFT [OUTER] | RIGHT [OUTER] | FULL [OUTER] パ ラ メ ー タ ::= パ ラ メ ー タ タ イ プ名 デー タ 型 [ DEFAULT プ ロ シージ ャ 式 | = プ ロ シージ ャ 式 ] | SQLSTATE パ ラ メ ー タ タ イ プ名 ::= パ ラ メ ー タ 名 | パラ メ ータ タ イプ パラ メ ータ名 | パラ メ ータ名 パラ メ ータ タ イプ パ ラ メ ー タ タ イ プ ::= IN | OUT | INOUT | IN_OUT パ ラ メ ー タ 名 ::= [:] ユーザー定義名 パ ス ワー ド ::= ユーザー定義名 | ' 文字列 ' 位置引数 ::= 式 桁数 ::= 整数 述部 ::= 式 [NOT] BETWEEN 式 AND 式 | 式 比較演算子 式ま たはサブ ク エ リ | 式 [NOT] IN ( ク エ リ スペ ッ ク ) | 式 [NOT] IN ( 値 [, 値 ]... ) | 式 [NOT] LIKE 値 | 式 IS [NOT] NULL | 式 比較演算子 ANY ( ク エ リ スペ ッ ク ) | 式 比較演算子 ALL ( ク エ リ スペ ッ ク ) | EXISTS ( ク エ リ スペ ッ ク ) プ ロ シージ ャ 式 ::= 通常の式 と 同様、 ただ し 、 IF 式 と ODBC 式 の ス カ ラ 関数は使用で き ない プ ロ シージ ャ 検索条件 ::= 通常の検索条件 と 同様、 ただ し 、 サブ ク エ リ を含む式は使用で き ない プ ロ シージ ャ ス テー ト メ ン ト ::= [ ラ ベル名 :] BEGIN [ATOMIC] [ プ ロ シージ ャ ス テー ト メ ン ト [; プ ロ シージ ャ ス テー ト メ ン ト ]...] END [ ラ ベル名 ] | CALL プ ロ シージ ャ 名 ( プ ロ シージ ャ 式 [, プ ロ シージ ャ 式 ]... ) | CLOSE カー ソ ル名 | DECLARE カー ソ ル名 CURSOR FOR 選択ス テー ト メ ン ト [FOR UPDATE | FOR READ ONLY] | DECLARE 変数名 デー タ 型 [DEFAULT プ ロ シージ ャ 式 | = プ ロ シー ジ ャ式 ] | DELETE WHERE CURRENT OF カー ソ ル名 | 削除ス テー ト メ ン ト 3-211 SQL 構文 リ フ ァ レ ン ス | FETCH [ フ ェ ッ チ方向 [FROM]] カー ソ ル名 [INTO 変数名 [, 変数 名 ]] | IF プ ロ シージ ャ 検索条件 THEN プ ロ シージ ャ ス テー ト メ ン ト [; プ ロ シージ ャ ス テー ト メ ン ト ]...[ ELSE プ ロ シージ ャ ス テー ト メ ン ト [; プ ロ シージ ャ ス テー ト メ ン ト ]...] END IF | IF プ ロ シージ ャ 検索条件 プ ロ シージ ャ ス テー ト メ ン ト [ELSE プ ロ シー ジ ャ ス テー ト メ ン ト ] | 挿入ス テー ト メ ン ト | LEAVE ラ ベル名 | [ ラ ベル名 :] LOOP プ ロ シージ ャ ス テー ト メ ン ト [; プ ロ シージ ャ ス テー ト メ ン ト ]...END LOOP [ ラ ベル名 ] | OPEN カー ソ ル名 | PRINT プ ロ シージ ャ 式 [, ' 文字列 '] | RETURN [ プ ロ シージ ャ 式 ] | ト ラ ンザ ク シ ョ ン ス テー ト メ ン ト | into 付 き 選択ス テー ト メ ン ト | 選択ス テー ト メ ン ト | SET 変数名 = プ ロ シージ ャ 式 | SIGNAL [ABORT] sqlstate 値 | START TRANSACTION [ ト ラ ンザ ク シ ョ ン名 ] | 更新ス テー ト メ ン ト | UPDATE SET 列名 = プ ロ シージ ャ 式 [, 列名 = プ ロ シージ ャ 式 ]...WHERE CURRENT OF カー ソ ル名 | [ ラ ベル名 :] WHILE プ ロ シージ ャ 検索条件 DO [ プ ロ シージ ャ ス テー ト メ ン ト [; プ ロ シージ ャ ス テー ト メ ン ト ]]...END WHILE [ ラ ベ ル名 ] | [ ラ ベル名 : ] WHILE プ ロ シージ ャ 検索条件 プ ロ シージ ャ ス テー ト メ ン ト | テーブル変更ス テー ト メ ン ト | イ ンデ ッ ク ス作成ス テー ト メ ン ト | テーブル作成ス テー ト メ ン ト | ビ ュ ー作成ス テー ト メ ン ト | イ ンデ ッ ク ス削除ス テー ト メ ン ト | テーブル削除ス テー ト メ ン ト | ビ ュ ー削除ス テー ト メ ン ト | 権限付与ス テー ト メ ン ト | 権限取消ス テー ト メ ン ト | 設定ス テー ト メ ン ト プ ロ シージ ャ 名 ::= ユーザー定義名 public ま たはユーザー / グループ名 ::= PUBLIC | ユーザー / グループ名 ク エ リ スペ ッ ク [UNION [ALL] ク エ リ スペ ッ ク ]... [ ORDER BY order-by 式 [, order-by 式 ]... ] ク エ リ スペ ッ ク ::= ( ク エ リ スペ ッ ク ) 3-212 ス テー ト メ ン ト の文法 | SELECT [ALL | DISTINCT] 選択 リ ス ト [ テーブル式 ] 参照エ イ リ ア ス ::= OLD [AS] 相関名 [NEW [AS] 相関名 ] | NEW [AS] 相関名 [OLD [AS] 相関名 ] 参照ア ク シ ョ ン ::= 参照更新ア ク シ ョ ン [ 参照削除ア ク シ ョ ン ] | 参照削除ア ク シ ョ ン [ 参照更新ア ク シ ョ ン ] 参照更新ア ク シ ョ ン ::= ON UPDATE RESTRICT 参照削除ア ク シ ョ ン ::= ON DELETE CASCADE | ON DELETE RESTRICT リ リ ース ス テー ト メ ン ト ::= RELEASE ス テー ト メ ン ト 参照 結果 ::= ユーザー定義名 デー タ 型 ロ ールバ ッ ク ス テー ト メ ン ト ::= ROLLBACK WORK ス テー ト メ ン ト 参照 セーブポ イ ン ト 名 ::= ユーザー定義名 ス カ ラ 関数 ::= ス カ ラ 関数 リ ス ト 参照 小数位 ::= 整数 検索条件 ::= 検索条件 AND 検索条件 | 検索条件 OR 検索条件 | NOT 検索条件 | ( 検索条件 ) | 述部 選択項目 ::= 式 [[AS] エ イ リ ア ス名 ] | テーブル名 . * 選択 リ ス ト ::= * | 選択項目 [, 選択項目 ]... セ ッ ト 関数 ::= COUNT (*) | COUNT ([DISTINCT | ALL] 式 ) | SUM ([DISTINCT | ALL] 式 ) | AVG ([DISTINCT | ALL] 式 ) | MIN ([DISTINCT | ALL] 式 ) | MAX ([DISTINCT | ALL] 式 ) sqlstate 値 ::= ' 文字列 ' テーブル制約定義 ::= [CONSTRAINT 制約名 ] テーブル制約 テーブル制約 ::= UNIQUE ( 列名 [, 列名 ]... ) | PRIMARY KEY ( 列名 [, 列名 ]... ) | FOREIGN KEY ( 列名 [, 列名 ]) REFERENCES テーブル名 [ ( 列名 [, 列名 ]... ) ] [ 参照ア ク シ ョ ン ] 3-213 SQL 構文 リ フ ァ レ ン ス テーブル要素 ::= 列定義 | テーブル制約定義 テーブル式 ::= FROM テーブル参照 [, テーブル参照 ]... [ WHERE 検索条件 ] [ GROUP BY 式 [, 式 ]... [ HAVING 検索条件 ] テーブル名 ::= ユーザー定義名 テーブル権限 ::= ALL | SELECT [( 列名 [, 列名 ]... ) ] | UPDATE [( 列名 [, 列名 ]... ) ] | | INSERT [( 列名 [, 列名 ]... ) ] DELETE | ALTER | REFERENCES テーブル参照 ::= {OJ 外部結合の定義 } | [ デー タ ベース名 .] テーブル名 [[AS] エ イ リ ア ス名 ] | 結合定義 | ( 結合定義 ) ト ラ ンザ ク シ ョ ン ス テー ト メ ン ト ::= コ ミ ッ ト ス テー ト メ ン ト | ロ ールバ ッ ク ス テー ト メ ン ト | リ リ ース ス テー ト メ ン ト ト リ ガ名 ::= ユーザー定義名 ユーザー パ ス ワ ー ド ::= ユーザー名 [:] パ ス ワ ー ド ユーザー / グループ名 ::= ユーザー名 | グループ名 ユーザー名 ::= ユーザー定義名 値 ::= リ テ ラ ル | USER | ? 値 リ ス ト ::= ( 値 [, 値 ]... ) values 句 ::= DEFAULT VALUES | VALUES ( 式 [, 式 ]... ) 変数名 ::= ユーザー定義名 ビ ュ ー名 ::= ユーザー定義名 SQL ス テー ト メ ン ト リ ス ト SqlStatementList は次の よ う に定義 さ れます。 SqlStatementList ス テー ト メ ン ト ';' | SqlStatementList ';' ス テー ト メ ン ト ::= StatementLabel ':' ス テー ト メ ン ト |BEGIN ...END ブ ロ ッ ク 3-214 ス テー ト メ ン ト の文法 |CALL ス テー ト メ ン ト |CLOSE CURSOR ス テー ト メ ン ト |COMMIT ス テー ト メ ン ト |DECLARE CURSOR ス テー ト メ ン ト |DECLARE 変数ス テー ト メ ン ト |DELETE ス テー ト メ ン ト |FETCH ス テー ト メ ン ト |IF ス テー ト メ ン ト |INSERT ス テー ト メ ン ト |LEAVE ス テー ト メ ン ト |LOOP ス テー ト メ ン ト |OPEN ス テー ト メ ン ト |PRINT ス テー ト メ ン ト |RELEASE SAVEPOINT ス テー ト メ ン ト |RETURN ス テー ト メ ン ト |ROLLBACK ス テー ト メ ン ト |SAVEPOINT ス テー ト メ ン ト |SELECT ス テー ト メ ン ト |SET ス テー ト メ ン ト |SIGNAL ス テー ト メ ン ト |START TRANSACTION ス テー ト メ ン ト |UPDATE ス テー ト メ ン ト |WHILE ス テー ト メ ン ト 述部 述部は次の よ う に定義 さ れます。 式 CompareOperator 式 | 式 [NOT] BETWEEN 式 AND 式 | 式 [NOT] LIKE StringLiteral | 式 IS [NOT] NULL |NOT 述部 | 述部 AND 述部 | 述部 OR 述部 |'(' 述部 ')'CompareOperator ::= '=' | '>=' | '>' | '<=' | '<' | '<>' | '!=' |[ NOT] IN 値 リ ス ト 式 式は次の よ う に定義 さ れます。 Number |StringLiteral |ColumnName |VariableName |NULL |CONVERT '(' 式 ',' DataType ')' |'-' 式 | 式 '+' 式 | 式 '-' 式 | 式 '*' 式 | 式 '/' 式 | 式 '&' 式 3-215 SQL 構文 リ フ ァ レ ン ス |'~' 式 | 式 '|' 式 | 式 '^' 式 |FunctionName '(' [ExpressionList] ')' |'(' 式 ')' |'{' D StringLiteral '}' |'{' T StringLiteral '}' |'{' TS StringLiteral '}' |@:IDENTITY |@:ROWCOUNT |@@IDENTITY |@@ROWCOUNT 式 リ ス ト は次の よ う に定義 さ れます。 ExpressionList ::= 式 [, 式 ... ] 3-216 グローバル変数 グローバル変数 Pervasive PSQL は次のグ ロ ーバル変数をサポー ト し てい ます。 @@IDENTITY @@ROWCOUNT @@SPID グ ロ ーバル変数は 2 つの @ マー ク (@@) で始ま り ます。 すべてのグ ロ ー バル変数は、 接続ご と の変数です。 デー タ ベース接続ご と にそれぞれ固有 の @@IDENTITY、 @@ROWCOUNT、 お よ び @@SPID 値を持ち ます。 @@IDENTITY こ の変数は、 一番最後に挿入 さ れた IDENTITY 列値 (IDENTITY ま た は SMALLIDENTITY) の値を返 し ます。 値は符号付 き 整数値にな り ます。 初 期値は ヌ ルです。 こ の変数は単一列のみ参照す る こ と がで き ます。 タ ーゲ ッ ト テーブルに 2 つ以上の IDENTITY 列が含まれてい る 場合、 こ の変数の値は、 テーブルの 主キー と な る IDENTITY 列を参照 し ます。 こ の よ う な列が存在 し ない場合 には、 こ の変数の値はテーブル内の最初の IDENTITY 列を参照 し ます。 一番最後の挿入が IDENTITY 列 を含 ま な い テーブルに対 し て行われた も のであ っ た場合、 @@IDENTITY の値は ヌ ルに設定 さ れます。 例 SELECT @@IDENTITY 現在の接続で レ コ ー ド が挿入 さ れていない場合は ヌ ルを返 し 、 そ う でない 場合は、 一番最後に挿入 さ れた行の IDENTITY 列の値を返 し ます。 SELECT * FROM t1 WHERE @@IDENTITY = 12 一番最後に挿入 さ れた行の IDENTITY 列の値が 12 の場合はその行を返 し 、 そ う でない場合は行を返 し ません。 INSERT INTO t1(c2) VALUES (@@IDENTITY) 最後に挿入 さ れた行の IDENTITY 値を新 し い行の C2 列に挿入 し ます。 UPDATE t1 SET t1.c1 = (SELECT @@IDENTITY) WHERE t1.c1 = @@IDENTITY + 10 C1 列の値が最後に挿入 さ れた行の IDENTITY 列の値 よ り 10 大 き い場合 は、 C1 列を こ の IDENTITY 値で更新 し ます。 UPDATE t1 SET t1.c1 = (SELECT NULL FROM t2 WHERE t2.c1 = @@IDENTITY) 3-217 SQL 構文 リ フ ァ レ ン ス C1 列の値が最後に挿入 さ れた行の IDENTITY 列の値 と 等 し い場合は、 C1 列を ヌ ル値で更新 し ます。 以下の例では、 ス ト ア ド プ ロ シージ ャ を作成 し 、 それを呼び出 し ます。 プ ロ シージ ャ は、 最後に更新 さ れた行の IDENTITY 列の値 と 入力値の合計を 変数 V1 に設定 し ます。プ ロ シージ ャ は次に、C1 列が V1 と 等 し い行を テー ブルか ら 削除 し 、 その後で何行削除 さ れたか を示す メ ッ セージ を出力 し ま す。 CREATE PROCEDURE TEST (IN :P1 INTEGER); BEGIN DECLARE :V1 INTERGER; SET :V1 = :P1 + @@IDENTITY; DELETE FROM t1 WHERE t1.c1 = :V1; IF (@@ROWCOUNT = 0) THEN PRINT ' 行は削除 さ れませんで し た '; ELSE PRINT CONVERT(@@ROWCOUNT, SQL_CHAR) + ' 行は削除 さ れま し た '; END IF; END; CALL TEST (@@IDENTITY) @@ROWCOUNT こ の変数は、 現在の接続で一番最後に行っ た操作に よ り 影響を受けた行の 数を返 し ます。 値は符号な し 整数にな り ます。 初期値はゼ ロ です。 例 SELECT @@ROWCOUNT 現在の接続で直前に行っ た操作に よ り 影響を受けた レ コ ー ド がない場合は ゼ ロ を返 し 、 そ う でない場合は、 直前の操作に よ り 影響を受けた行数を返 し ます。 CREATE TABLE t1 (c1 INTEGER, c2 INTEGER) INSERT INTO t1 (c1, c2) VALUES (100,200) INSERT INTO t1(c2) VALUES (100, @@ROWCOUNT) SELECT * FROM t1 SELECT @@ROWCOUNT FROM t1 結果 : 2 3-218 グローバル変数 最初の SELECT では 2 つの行が生成 さ れ、行の挿入に @@ROWCOUNT の 値 が 使用 さ れ た と き 、 そ の 値 が 1 で あ っ た こ と を 示 し ま す。 2 番目 の SELECT、つま り 、最初の SELECT が 2 行返 し た後では、@@ROWCOUNT の値 と し て 2 が返 さ れます。 @@IDENTITY の例 も 参照 し て く だ さ い。 @@SPID こ の変数 (サーバー プ ロ セ ス ID) は、 Pervasive PSQL 接続のシ ス テ ム ス レ ッ ド の ID を示す整数値を返 し ます。 デー タ ベース エン ジ ンへの接続が失われた場合、 SPID は ID を返す こ と が で き ません。 代わ り に、 ODBC が SqlState 08S01 を返 し ます。 例 SELECT @@SPID こ の例は、 402 な ど の整数の ID を返 し ます。 3-219 SQL 構文 リ フ ァ レ ン ス ほかの特性 こ のセ ク シ ョ ンでは、 SQL 文法のその他の特性について説明 し ます。 こ の 章は、 以下のセ ク シ ョ ンに分かれてい ます。 「テ ン ポ ラ リ フ ァ イ ル」 (3-219 ページ) 「 リ テ ラ ル値を使っ た作業」 (3-220 ページ) 「NULL 値を使っ た作業」 (3-220 ページ) 「バ イ ナ リ デー タ を使っ た作業」 (3-222 ページ) 「 イ ンデ ッ ク ス の作成」 (3-223 ページ) 「開いたテーブルを閉 じ る 」 (3-223 ページ) 「並行性」 (3-224 ページ) 「小数点の記号のカ ン マ」 (3-224 ページ) 「OEM か ら ANSI への変換サポー ト 」 (3-227 ページ) テ ンポ ラ リ フ ァ イル Pervasive PSQL は、 指定 さ れた ク エ リ を処理する ためにテ ン ポ ラ リ テーブ ルを生成す る 必要があ る 場合は、 次の規則に よ っ て決定 さ れ る ロ ケーシ ョ ンにその フ ァ イ ルを作成 し ます。 まず最初に、 Pervasive PSQL はレ ジ ス ト リ キーの文字列値 HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\PervasiveEngine Options\TempFileDirectory に指定 さ れてい る パス を使用 し ます。 レ ジ ス ト リ エ ン ト リ が定義 さ れていない場合、 Pervasive PSQL は TMP 環 境変数に指定 さ れてい る パ ス を使用 し ます。 TMP 環境変数が定義 さ れていない場合、Pervasive PSQL は TEMP 環境変数 に指定 さ れてい る パス を使用 し ます。 TEMP 環境変数が定義 さ れていない場合、 Pervasive PSQL は、 Windows 32 ビ ッ ト プ ラ ッ ト フ ォ ーム の場合は Windows デ ィ レ ク ト リ を使用 し ま す。 Windows 32 ビ ッ ト 以外のプ ラ ッ ト フ ォ ーム の場合は現在のデ ィ レ ク ト リ を使用 し ます。 Pervasive PSQL は ク エ リ の処理を完了す る と 、 その ク エ リ の処理で必要 と な っ たすべてのテ ン ポ ラ リ フ ァ イ ルを削除 し ま す。 ク エ リ が SELECT ス テー ト メ ン ト の場合には、 テ ン ポ ラ リ フ ァ イ ルは結果セ ッ ト がア ク テ ィ ブ であ る 間、 つま り 、 結果セ ッ ト が呼び出 し 元のアプ リ ケーシ ョ ンに よ っ て 解放 さ れ る ま では存在 し ます。 3-220 ほかの特性 テ ンポ ラ リ フ ァ イルはどのよ う な場合に作成 さ れるか テ ン ポ ラ リ フ ァ イ ルは以下に示す状況下で作成 さ れます。 前方のみ、 動的ま たは静的カー ソ ル ORDER BY、 GROUP BY、 DISTINCT を含む SELECT ス テー ト メ ン ト で、 イ ンデ ッ ク ス を使用 し ていない。 UNION を含む SELECT ス テー ト メ ン ト で、 メ モ リ 内にテ ン ポ ラ リ テーブ ルを生成する 、ま たはテ ン ポ ラ リ テーブルのサ イ ズが 256K を超え る 場合、 デ ィ ス ク 上に OptTech Sort テ ン ポ ラ リ テーブルを生成す る 。 さ ら に、 静的カー ソ ルでは、 結合内に複数のベース テーブルがあ る 場合、 デー タ ベース エ ン ジ ンに よ っ て結合内の各フ ァ イ ルについて Btrieve テ ン ポ ラ リ フ ァ イ ルが生成 さ れ、 ク エ リ 内で ORDER BY 句を使用 し てい る 場 合には別のテ ン ポ ラ リ フ ァ イ ルが生成 さ れ る 。 リ テ ラル値を使っ た作業 Pervasive PSQL は、 標準 ODBC の リ テ ラ ル書式をすべてサポー ト し てい ま す。 こ のセ ク シ ョ ンでは、 最 も 一般的な リ テ ラ ル書式の例をい く つか示 し ます。 「日付値」 (3-220 ページ) 「時刻値」 (3-221 ページ) 「 タ イ ム ス タ ンプ値」 (3-222 ページ) 「日付演算」 (3-222 ページ) 文字列値 文字列定数は、 指定する 文字列を一重引用符で囲む こ と に よ っ て、 SQL ス テー ト メ ン ト 内に表記で き ま す。 文字列自体に含 ま れ る 一重引用符には、 その文字の前にエ ス ケープ文字 と し て一重引用符 を 付け る 必要が あ り ま す。 例 最初の例では、 文字列内に含 ま れ る ア ポ ス ト ロ フ ィ ま たは一重引用符は、 も う 1 つの一重引用符に よ っ てエ ス ケープする 必要があ り ます。 SELECT * FROM t1 WHERE c1 = 'Roberta''s Restaurant' SELECT STREET FROM address WHERE city LIKE 'san' 3-221 SQL 構文 リ フ ァ レ ン ス 日付値 日付定数は、 SQL ス テー ト メ ン ト 内に文字列 と し て表記す る か、 ベン ダ文 字列に埋め込む こ と がで き ます。最初のケース は SQL_CHAR タ イ プの文字 列 と し て、 ベン ダ文字列表記は SQL_DATE 型の値 と し て扱われます。 こ れ は変換時に重要にな り ます。 Pervasive PSQL では、 こ の関数で概説 し てい る よ う に、 拡張 SQL 文法を一 部サポー ト し てい ます。 Pervasive PSQL では、 'YYYY-MM-DD' と い う 日付 リ テ ラ ル書式をサポー ト し てい ます。 日付の年は 0 ~ 9999 の範囲が可能です。 例 次の 2 つの ス テー ト メ ン ト に よ っ て、開始日が 1995 年 6 月 5 日 よ り 後のす べての授業が返 さ れます。 SELECT * FROM Class WHERE Start_Date > '1995-06-05' SELECT * FROM Class WHERE Start_Date > {d '1995-06-05'} 時刻値 Pervasive PSQL では、'HH:MM:SS' と い う 時刻 リ テ ラ ル書式をサポー ト し て い ます。 時刻定数は、 SQL ス テー ト メ ン ト 内に文字列 と し て表記す る か、 ベン ダ文 字列に埋め込む こ と がで き ます。文字列表記は SQL_CHAR タ イ プの文字列 と し て、 ベン ダ文字列表記は SQL_TIME タ イ プの値 と し て扱われます。 Pervasive PSQL では、 こ の関数で概説 し てい る よ う に、 拡張 SQL 文法を一 部サポー ト し てい ます。 例 次の 2 つの ス テー ト メ ン ト に よ っ て、 class テーブルか ら 、 授業の開始時刻 が 14:00:00 の レ コ ー ド が取 り 出 さ れます。 SELECT * FROM Class WHERE Start_time = '14:00:00' SELECT * FROM Class WHERE Start_time = {t '14:00:00'} 3-222 ほかの特性 タ イ ムス タ ン プ値 タ イ ム ス タ ン プ定数は、 SQL ス テー ト メ ン ト 内に文字列 と し て表記す る か、 ベン ダ文字列に埋め込む こ と がで き ます。 Pervasive PSQL では、 文字 列 表 記 は SQL_CHAR タ イ プ の 文字列 と し て、 ベ ン ダ 文字列表記 は SQL_TIMESTAMP タ イ プの値 と し て扱われます。 Pervasive PSQL では、 こ の関数で概説 し てい る よ う に、 ODBC SQL 文法を 一部サポー ト し てい ます。 Pervasive PSQL では、'YYYY-MM-DD HH:MM:SS' と い う タ イ ム ス タ ンプ リ テ ラ ル書式をサポー ト し てい ます。 例 次の 2 つの ス テー ト メ ン ト に よ っ て、 Billing テーブルか ら 、 ロ グの開始日 時が 1996-03-28 の 17:40:49 の レ コ ー ド が取 り 出 さ れます。 SELECT * FROM Billing WHERE log = '1996-03-28 17:40:49' SELECT * FROM Billing WHERE log = {ts '1996-03-28 17:40:49'} 日付演算 Pervasive PSQL では、 加算ま たは減算す る 日数が整数で、 日付がベン ダ文 字列に埋め込まれてい る 場合、 その整数を日付に加算 し た り 日付か ら 減算 し た り で き ます ( こ れは、 日付について変換を実行す る の と 同 じ です)。 ま た、 Pervasive PSQL では、 あ る 日付を別の日付か ら 減算 し て日数を計算 す る こ と も で き ます。 例 SELECT * FROM person P, Class C WHERE p.Date_Of_Birth < ' 197309-05' AND c.Start_date > {d '1995-05-08'} + 30 NULL 値を使 っ た作業 Pervasive PSQL は NULL を未知の値 と し て解釈 し ます。 し たがっ て、 2 つ の NULL 値を比較す る と 、 等価 と は見な さ れません。 WHERE NULL=NULL と い う 評価式は False を返 し ます。 バイ ナ リ デー タ を使っ た作業 以下のシナ リ オについて見てみま し ょ う 。t1 テーブルで c1 と い う 名前が付 け ら れた BINARY (4) 列に リ テ ラ ル値 '1' を挿入 し ます。 次に、 SELECT * FROM t1 WHERE c1='1' と い う ス テー ト メ ン ト を入力 し ます。 3-223 SQL 構文 リ フ ァ レ ン ス デー タ ベース エン ジ ンは、デー タ 入力に使用 し た も の と 同 じ バ イ ナ リ 形式 を用いてデー タ を取得で き ます。 つま り 、 上記の SELECT の例は、 リ テ ラ ルの一致がな く て も 正 し く 動作 し 、 値 0x01000000 を返 し ます。 メ モ デー タ ベース エン ジ ンは、 挿入す る バ イ ナ リ 値の奇数桁の前に 必ずゼ ロ ('0') を追加 し ます。 た と えば、 値 '010' を挿入す る 場合、 値 '0x00100000' がデー タ フ ァ イ ルに保存 さ れます。 現在、Pervasive PSQL はバ イ ナ リ 定数を示す接尾辞 0x をサポー ト し て い ません。バ イ ナ リ 定数は、一重引用符で囲んだ 16 進数の文字列にな り ます。 こ の動作は、 SQL Server の動作 と 同 じ です。 イ ンデ ッ ク スの作成 VARCHAR 型の列の最大サ イ ズは、 ヌ ル値が許可 さ れない列では 254 バ イ ト 、 ヌ ル値が許可 さ れ る 列では 253 バ イ ト です。 CHAR 型の列の最大サ イ ズは、 ヌ ル値が許可 さ れない列では 255 バ イ ト 、 ヌ ル値が許可 さ れ る 列では 254 バ イ ト です。 Btrieve の最大キー サ イ ズは 255 です。 列で ヌ ル値が許可 さ れ、 イ ンデ ッ ク ス が作成 さ れてい る と き 、 ヌ ル イ ン ジ ケー タ の 1 バ イ ト と 、 イ ンデ ッ ク ス 列の最大 254 バ イ ト か ら 、 セグ メ ン ト キーが作成 さ れます。 VARCHAR 型 の列は、長 さ バ イ ト (Btrieve lstring) ま たはゼ ロ 終端バ イ ト (Btrieve zstring) が予約 さ れ、有効な記憶デー タ が 1 バ イ ト 少ない点が CHAR 型の列 と 異な り ます。 開いたテーブルを閉 じ る SQLFreeStmt に SQL_CLOSE オプションを指定して呼び出すと、 SQLSTATE は変更 さ れ ま すが、 hStmt が使用 し て い る 開い た テーブルは閉 じ ま せん。 hStmt が現在使用しているテーブルを閉じるには、 SQLFreeStmt に SQL_DROP オプシ ョ ン を指定 し て呼び出す必要があ り ます。 次の例では、 Emp と Dept のテーブルは開いた ま ま にな り ます。 SQLPrepare(hStmt, "SELECT * FROM Emp, Dept", SQL_NTS) SQLExecute(hStmt) SQLFetch until SQL_No_Data_Found SQLFreeStmt(hStmt, SQL_CLOSE) 3-224 ほかの特性 SQLPrepare が後続の hStmt で呼び出 さ れた場合、 前の ス テー ト メ ン ト で使 用 さ れた テーブルが閉 じ ま す。 た と えば、 次の呼び出 し が実行 さ れ る と 、 Emp と Dept の両方のテーブルは Pervasive PSQL に よ っ て閉 じ ら れます。 SQLPrepare(hStmt, "SELECT * FROM Customer",SQL_NTS) その後、 次の呼び出 し に よ っ て Customer テーブルを閉 じ ます。 SQLFreeStmt(hStmt, SQL_DROP) 並行性 デー タ の適時性、 つま り 動的であ る か スナ ッ プシ ョ ッ ト であ る かは、 ク エ リ を 実行 し た結果 と し て並べ替え が行われ る か ど う かに よ っ て決 ま り ま す。 DISTINCT、 GROUP BY、 ま たは ORDER BY を使用す る ク エ リ では、 目的の順序を満たす イ ンデ ッ ク ス があ る 場合を除 き 、 一時的な並べ替えが 行われます。 一時的な並べ替え が行われな い ク エ リ の場合、 フ ェ ッ チ さ れ る デー タ は デー タ フ ァ イ ルのデー タ です。 一時的な並べ替え が行われ る ク エ リ の場 合、 フ ェ ッ チ さ れ る デー タ はテ ン ポ ラ リ テーブルのデー タ です。 テ ン ポ ラ リ テーブルは、 元のデー タ フ ァ イ ルにあ る 必要なデー タ か ら SQLExecute の実行時に作成 さ れます。 メ モ 一部の並べ替え 操作 (選択 リ ス ト に長いデー タ 列が含 ま れ る SELECT ス テー ト メ ン ト や、GROUP BY が指定 さ れてい る SELECT ス テー ト メ ン ト な ど) で、 Pervasive PSQL はブ ッ ク マー ク を使用す る 場 合があ り ます。 こ の場合、 ブ ッ ク マー ク は SELECT ス テー ト メ ン ト 内 で永続的であ る と 想定 し てい ます。 ブ ッ ク マー ク で参照 し てい る 行が 別のアプ リ ケーシ ョ ンに よ っ て更新 さ れた り 削除 さ れ る 場合があ り ま す。 こ の よ う な 状 況 を 回 避 す る た め に、 ア プ リ ケ ー シ ョ ン で は SQLSetStmtOption を fOption = 1153 と vParam = 1 で呼び出 し て、 並べ 替え る テーブルに排他 ロ ッ ク を設定で き ます。 小数点の記号のカ ン マ 多 く の地域では、 浮動小数点数フ ィ ール ド 内で整数部 と 小数部を区切 る の にカ ン マ を使用 し ます。 た と えば、 こ れ ら の地域は、 1 と 2 分の 1 を数字 で表すのに 1.5 ではな く 1,5 を使用 し ます。 Pervasive PSQL v9 を起動 し てい る 場合、Pervasive PSQL はピ リ オ ド "." と カ ン マ "," の 両方 を 小数点 の 記号 と し て サ ポ ー ト す る こ と が で き ま す。 Pervasive PSQL はオペレーテ ィ ン グ シ ス テ ムの地域の設定に基づいて、 ピ リ オ ド ま たはカ ン マ を使用す る 入力値を受け入れ ま す。 デ フ ォ ル ト では、 デー タ ベース エン ジ ンはピ リ オ ド を使っ て値を表示 し ます。 3-225 SQL 構文 リ フ ァ レ ン ス メ モ 小数点の記号が ピ リ オ ド でない場合、 SQL ス テー ト メ ン ト に指 定す る 数値は引用符で囲む必要があ り ます。 出力 と 表示のみについては、 セ ッ シ ョ ン レベルの コ マ ン ド SET DECIMALSEPARATORCOMMA (3-172 ページ) を使用すれば、 出力 (た と えば、 SELECT の結果) でカ ン マ を区切 り 文字 と し て使用する よ う に指定で き ます。 こ の コ マ ン ド は、 デー タ の入力や保存には影響 し ませ ん。 ク ラ イ ア ン ト / サーバーの考慮 小数点の記号 と し て カ ン マ をサポー ト す る かは、 オペレーテ ィ ン グ シ ス テ ム の地域の設定に よ り ます。 ク ラ イ ア ン ト オペレ ーテ ィ ン グ シ ス テ ム と サーバー オペレーテ ィ ン グ シ ス テ ムの ど ち ら に も 地域の設定があ り ます。 期待 さ れ る 動作は両方の設定に応 じ て変わ り ます。 サーバー と ク ラ イ ア ン ト ど ち ら か一方の地域設定で小数点の記号に カ ン マが使用 さ れてい る 場合、 Pervasive PSQL はピ リ オ ド 区切 り の値 と 引 用符で囲まれた カ ン マ区切 り の値の両方を受け入れます。 サーバー と ク ラ イ ア ン ト ど ち ら の地域設定で も 小数点の記号に カ ン マ が使用 さ れていない場合、 Pervasive PSQL はカ ン マ区切 り の値を受け入 れません。 地域の設定の変更 小数点の記号の情報は、Windows オペレーシ ョ ン シ ス テ ムが動作 し てい る マシ ンでのみ取得ま たは変更で き ます。 Linux の場合、小数点の記号はピ リ オ ド に設定 さ れてお り 、設定を修正す る こ と はで き ません。 Linux サーバー エン ジ ン をお持ちで、 小数点の記号にカ ン マ を使用 し たい場合は、 必ずす べての ク ラ イ ア ン ト コ ン ピ ュ ー タ が小数点に カ ン マ を使用す る 地域に設 定 さ れていなければな り ません。 ¾ 地域の設定を表示または変更するには 3-226 1 [ス タ ー ト ] メ ニ ュ ーか ら [設定| コ ン ト ロ ール パネル] を選択 し ます。 2 [ コ ン ト ロ ール パネル] ウ ィ ン ド ウ で、 [地域のオプシ ョ ン] を ダブル ク リ ッ ク し ます。 3 [全般] タ ブで、 希望す る 国を選択 し ます。 4 Pervasive PSQL サービ ス を停止 し て、 再度開始する 必要があ り ます。 ほかの特性 例 例 A - サーバーの地域が小数点の記号に カ ン マ を使用する ク ラ イ ア ン ト の地域が小数点の記号にカ ン マ "," を使用する 場合 : CREATE TABLE t1 (c1 DECIMAL(10,3), c2 DOUBLE) INSERT INTO t1 VALUES (10.123, 1.232) INSERT INTO t1 VALUES ('10,123', '1.232') SELECT * FROM t1 WHERE c1 = 10.123 SELECT * FROM t1 FROM c1 = '10,123' 上記の 2 つの SELECT ス テー ト メ ン ト が ク ラ イ ア ン ト か ら 実行 さ れた 場合、 次の値が返 さ れます。 10.123, 1.232 10.123, 1.232 SET DECIMALSEPARATORCOMMA=ON SELECT * FROM t1 FROM c1 = '10,123' 上記の SELECT ス テー ト メ ン ト が、 表示用の小数点の記号を設定 し た 後で ク ラ イ ア ン ト か ら 実行 さ れた場合は、 次の値が返 さ れます。 10,123, 1,232 クライアントの地域が小数点の記号に "." を使用しており、 次のステートメントが 新しい接続から発行される場合 (SET DECIMALSEPARATORCOMMA のデ フ ォ ル ト の動作) : CREATE TABLE t1 (c1 DECIMAL(10,3), c2 DOUBLE) INSERT INTO t1 VALUES (10.123, 1.232) INSERT INTO t1 VALUES ('10,123', '1.232') SELECT * FROM t1 WHERE c1 = 10.123 SELECT * FROM t1 WHERE c1 = '10,123' 上記の 2 つの SELECT ス テー ト メ ン ト が ク ラ イ ア ン ト か ら 実行 さ れた 場合、 次の値が返 さ れます。 10.123, 1.232 10.123, 1.232 例 B - サーバーの地域が小数点の記号に ピ リ オ ド を使用する ク ラ イ ア ン ト の地域が小数点の記号にカ ン マ "," を使用する 場合 : 例 A の ク ラ イ ア ン ト がカ ン マ "," を使用する 場合 と 同様です。 ク ラ イ ア ン ト の地域が小数点の記号に ピ リ オ ド "." を使用する 場合 : CREATE TABLE t1 (c1 DECIMAL(10,3), c2 DOUBLE) INSERT INTO t1 VALUES (10.123, 1.232) 3-227 SQL 構文 リ フ ァ レ ン ス INSERT INTO t1 VALUES ('10,123', '1,232') -- 割 り 当てエ ラ ー SELECT * FROM t1 WHERE c1 = 10.123 SELECT * FROM t1 WHERE c1 = '10,123' -- 割 り 当てエ ラ ー 上記の最初の SELECT ス テー ト メ ン ト が ク ラ イ ア ン ト か ら 実行 さ れ た場合、 次の値が返 さ れます。 10.123, 1.232 SET DECIMALSEPARATORCOMMA=ON SELECT * FROM t1 FROM c1 = 10.123 上記の SELECT ス テー ト メ ン ト が、 表示用の小数点の記号を設定 し た 後で実行 さ れた場合は、 次の値が返 さ れます。 10,123, 1,232 OEM から ANSI への変換サポー ト アプ リ ケーシ ョ ンは Pervasive PSQL を使用 し て、 文字デー タ を OEM 文字 セ ッ ト で保存 ま た は取得で き る と 同時に、 デー タ を ANSI Windows 文字 セ ッ ト を使っ て操作お よ び表示で き る よ う にな り ま し た。 Pervasive ODBC ド ラ イ バ ト ラ ン ス レー タ DLL が、2 つの文字セ ッ ト 間で必要な変換をすべ て行い ます。 こ の機能は、 DSN ご と にオン / オ フ を切 り 替え る こ と がで き ます。 ス イ ッ チを利用す る には、 [Pervasive ODBC DSN セ ッ ト ア ッ プ] ダ イ ア ロ グ ボ ッ ク ス で [オプシ ョ ン ...] を ク リ ッ ク し ます。 列名 ま た は テーブル名に拡張 ASCII 文字 を 使用 し て い る 場合、 Pervasive PSQL Control Center お よ び SQL Editor は OEM 文字を完全に認識 し ま す。 デー タ ベース と や り 取 り す る 文字デー タ は、OEM 文字セ ッ ト と ANSI 文字 セ ッ ト 間で正 し く 変換 さ れます。 アプ リ ケーシ ョ ン で SQLDriverConnect を使用 し てデー タ ソ ース に接続す る 場合は、接続文字列オプシ ョ ン TRANSLATIONDLL=path_and_DLL_name を使っ て、 ト ラ ン ス レー タ DLL を指定す る こ と も で き ます。 Pervasive の ト ラ ン ス レー タ DLL の名前は、 W32BTXLT.DLL です。 メ モ : [OEM/ANSI 変換] オプシ ョ ンは、 ク ラ イ ア ン ト DSN ま たは ロ ーカ ル エン ジ ン DSN にのみ使用で き ます。 3-228 ビ ッ ト 演算子 4 Pervasive PSQL ビ ッ ト 演算子の リ フ ァ レ ン ス こ の章では、 以下の項目について説明 し ます。 「概要」 (4-2 ページ) 「ビ ッ ト 演算 AND (&)」 (4-3 ページ) 「ビ ッ ト 演算 NOT (~)」 (4-5 ページ) 「ビ ッ ト 演算 OR (|)」 (4-6 ページ) 「ビ ッ ト 演算 排他的 OR (^)」 (4-8 ページ) 「真理値表」 (4-9 ページ) 4-1 ビ ッ ト 演算子 概要 ビ ッ ト 演算子を使用す る と 、 1 つま たは複数のオペ ラ ン ド の ビ ッ ト を操作 す る こ と がで き ます。 ビ ッ ト 演算子には次の種類があ り ます。 演算子 説明 & ビ ッ ト 演算 AND ~ ビ ッ ト 演算 NOT | ビ ッ ト 演算 OR ^ ビ ッ ト 演算 排他的 OR 式の記憶域の長 さ は、 ビ ッ ト 演算を実行す る と き に考慮すべ き 重要な要因 です。 デー タ 型に よ っ てそれぞれ異な る バ イ ト 数でデー タ が格納 さ れ る た め、 値を格納す る と き に同 じ バ イ ト 数を使用す る 必要があ り ます。 た と え ば、 tinyint は 1 バ イ ト 、 smallint は 2 バ イ ト 、 そ し て int は 4 バ イ ト を使用 し ます。 ビ ッ ト 演算でサポー ト さ れ る デー タ 型は次の と お り です。 4-2 BIT TINYINT SMALLINT INTEGER BIGINT UTINYINT USMALLINT UINTEGER UBIGINT ビ ッ ト 演算 AND (&) ビ ッ ト 演算 AND (&) ビ ッ ト 演算子 AND は、2 つのオペ ラ ン ド 間で ビ ッ ト ご と に論理積演算を実 行 し ます。 ビ ッ ト 演算 AND は、 2 つのビ ッ ト を比較 し 、 両方のビ ッ ト の値が 1 の場合 にのみ、 値 1 を結果に代入 し ます。 そ う でない場合は、 結果のビ ッ ト に 0 を セ ッ ト し ます。 AND 演算子は、 その他すべてのビ ッ ト 演算子 と 同様、 オ ペ ラ ン ド と し て数値のみを取 り ます。 構文 式 & 式 式は INTEGER デー タ 型を含んでい る 任意の有効な式です。 ビ ッ ト 演算の ためにバ イ ナ リ 数値へ変換 さ れます。 戻り値 異な る INTEGER デー タ 型のオペ ラ ン ド を伴 う ビ ッ ト 演算 AND では、 2 つ のオペ ラ ン ド の う ち、 サ イ ズの小 さ なデー タ 型の引数が大 き なデー タ 型へ 変換 さ れ る か、 ま たは大 き い方の次に大 き なデー タ 型へ変換 さ れ ます。 た と えば、 smallint と integer の間で AND 演算を実行する 場合、 smallint 式は integer へ変換 さ れます。 ビ ッ ト 演算 AND にかかわ る オペ ラ ン ド が符号付 き の場合、 結果の値 も 符 号付 き にな り ます。 例 & 演算子を IF 関数 と 組み合わせて使用 し 、 テーブルがシ ス テ ム テーブル かユーザー定義のテーブルか を調べ る こ と がで き ます。 SELECT Xf$Name, IF(Xf$Flags & 16 = 16, 'System table', 'User table') FROM X$File こ の ス テー ト メ ン ト を Demodata サンプル デー タ ベース に対 し て実行す る と 、 次の結果が返 さ れます。 X$File System table X$Field System table X$Index System table Billing User table Class User table Room User table 4-3 ビ ッ ト 演算子 4-4 Student User table Tuition User table Course User table Department User table Enrolls User table Faculty User table Person User table X$Proc System table ビ ッ ト 演算 NOT (~) ビ ッ ト 演算 NOT (~) ビ ッ ト 演算子 NOT は、 あ ら ゆ る 変数の ビ ッ ト 値を反転 し 、 その値を対応 する 結果のビ ッ ト にセ ッ ト し ます。 構文 ~ 式 式は INTEGER デー タ 型を含んでい る 任意の有効な式です。 ビ ッ ト 演算の ためにバ イ ナ リ 数値へ変換 さ れます。 戻り値 ビ ッ ト 演算子 NOT は、 INTEGER デー タ 型の単一オペ ラ ン ド の反転を返 し ます。 すべての 1 は 0 に変換 さ れ、すべての 0 は 1 に変換 さ れます。 ビ ッ ト 演算子 NOT は、 オペ ラ ン ド と し て 1 つの数値のみを取 り ます。 例 次の ク エ リ は、 数値 リ テ ラ ルに対 し て補数演算を実行 し ます。 SELECT ~12 結果は -13 です。 補数演算は符合ビ ッ ト も 補完す る ため、結果は負数にな り ます。 こ のため、 Pervasive PSQL は結果を負数 と し て扱い ます。 12 のバイ ナ リ 表現 (shortint) 12 の補数 0000 0000 0000 1100 1111 1111 1111 0011 結果数値の 2 の補数は 13 です。 し たがっ て、 結果は -13 にな り ます。 メ モ チルダ (~) をユーザー定義名の一部 と し て使用 し てはいけ ませ ん。 4-5 ビ ッ ト 演算子 ビ ッ ト 演算 OR (|) ビ ッ ト 演算子 OR は、 2 つのオペ ラ ン ド 間で ビ ッ ト ご と の論理和演算を実 行 し ます。 ビ ッ ト 演算 OR は、 2 つの ビ ッ ト を比較 し 、 一方ま たは両方の ビ ッ ト の値 が 1 の場合は、 値 1 を結果に代入 し ます。 入力式の ど ち ら のビ ッ ト の値 も 1 でない場合は、 結果のビ ッ ト に 0 を セ ッ ト し ます。 OR 演算子は、 オペ ラ ン ド と し て数値のみを取 り ます。 構文 式 | 式 式は INTEGER デー タ 型を含んでい る 任意の有効な式です。 ビ ッ ト 演算の ためにバ イ ナ リ 数値へ変換 さ れます。 戻り値 異な る INTEGER デー タ 型のオペ ラ ン ド を伴 う ビ ッ ト 演算 OR では、2 つの オペ ラ ン ド の う ち、 サ イ ズの小 さ なデー タ 型の引数が大 き なデー タ 型へ変 換 さ れ る か、 ま たは大 き い方の次に大 き なデー タ 型へ変換 さ れ ます。 た と えば、smallint と integer の間で OR 演算を実行す る 場合、smallint 式は integer へ変換 さ れます。 ビ ッ ト 演算 OR にかかわ る オペ ラ ン ド が符号付 き の場合、 結果の値 も 符号 付 き にな り ます。 例 こ の例では、最初に X$Index テーブルに外部キー エン ト リ と 主キー エン ト リ を作成す る 方法を示 し 、 次に外部キー と 主キーの制約の一覧を取得す る 方法を示 し ます。 次の ス テー ト メ ン ト を実行す る と 、 X$Index テーブルに 2 つのエン ト リ が 作成 さ れます (1 つは外部キー用で、 1 つは主キー用です)。 CREATE TABLE Employee ( empid IDENTITY NOT NULL PRIMARY KEY, -- Employee ID empname VARCHAR(50) NOT NULL, -- employee の名前 supid INTEGER NULL -- supervisor の ID ) ALTER TABLE Employee ADD CONSTRAINT SupIdMustBeValid FOREIGN KEY (supid) REFERENCES Employee(empid) ON DELETE CASCADE 4-6 ビ ッ ト 演算 OR (|) 次の ス テー ト メ ン ト を実行す る と 、 デー タ ベース内の全テーブルに関す る すべての外部キーお よ び主キーの一覧が取得 さ れます。 SELECT B.Xf$Name "Table name", C.Xe$Name "Column name", IF (Xi$Flags & 8192 = 0, 'Primary key', 'Foreign key') "Key type" from X$Index A, X$File B, X$Field C WHERE (A.Xi$Flags & (16384 | 8192)) > 0 AND A.Xi$File = B.Xf$Id AND A.Xi$Field = C.Xe$Id ス テー ト メ ン ト を実行す る と 、 次の よ う にな り ます。 Employee Employee empid supid Primary key Foreign key 4-7 ビ ッ ト 演算子 ビ ッ ト 演算 排他的 OR (^) ビ ッ ト 演算子の排他的 OR は、 2 つのオペ ラ ン ド 間で ビ ッ ト ご と の排他的 論理和演算を実行 し ます。 ビ ッ ト 演算排他的 OR は、 2 つの ビ ッ ト を比較 し 、 両方の ビ ッ ト の値が 0 ま たは 1 の場合は、 値 0 を結果に代入 し ます。 そ う でない場合は、 対応す る 結果のビ ッ ト に 1 を セ ッ ト し ます。 排他的 OR 演算子は、 オペ ラ ン ド と し て数値のみを取 り ます。 構文 式 ^ 式 式は INTEGER デー タ 型を含んでい る 任意の有効な式です。 ビ ッ ト 演算の ためにバ イ ナ リ 数値へ変換 さ れます。 戻り値 異な る INTEGER デー タ 型のオペ ラ ン ド を伴 う ビ ッ ト 演算排他的 OR では、 2 つのオペ ラ ン ド の う ち、 サ イ ズの小 さ なデー タ 型の引数が大 き なデー タ 型へ変換 さ れ る か、ま たは大 き い方の次に大 き なデー タ 型へ変換 さ れます。 た と えば、smallint と integer の間で排他的 OR 演算を実行する 場合、smallint 式は integer へ変換 さ れます。 ビ ッ ト 演算排他的 OR にかかわ る オペ ラ ン ド が符号付 き の場合、 結果の値 も 符号付 き にな り ます。 例 次の SQL ク エ リ は、 2 つの数値 リ テ ラ ルで排他的 OR を実行 し ます。 SELECT 12 ^ 8 結果は 4 です。 12 (shortint と し ます) のバ イ ナ リ 表現は 0000 0000 0000 1100 で、 8 のバ イ ナ リ 表現は 0000 0000 0000 1000 です。 こ れ ら の数値で排他的 OR 演算を実 行す る と 、 値 4 にな り ます。 0000 0000 0000 1100 ^ 0000 0000 0000 1000 = 0000 0000 0000 0100 (4) メ モ 曲折ア ク セ ン ト 記号 (^) をユーザー定義名の一部 と し て使用 し てはいけ ません。 4-8 真理値表 真理値表 次の表は、 ビ ッ ト 演算の真理値表です。 表 4-1 ビ ッ ト 演算の真理値表 A B A&B A|B A^B ~A 0 0 0 0 0 1 0 1 0 1 1 1 1 0 0 1 1 0 1 1 1 1 0 0 4-9 ビ ッ ト 演算子 4-10 5 ス カ ラ関数 Pervasive PSQL ス カ ラ 関数の リ フ ァ レ ン ス こ の章では、 以下の項目について説明 し ます。 「文字列関数」 (5-2 ページ) 「数値関数」 (5-6 ページ) 「時刻 と 日付の関数」 (5-9 ページ) 「シ ス テ ム関数」 (5-14 ページ) 「論理関数」 (5-15 ページ) 「変換関数」 (5-18 ページ) Pervasive PSQL は ODBC ス カ ラ 関数をサポー ト し てお り 、 こ の よ う な ス カ ラ 関数を SQL ス テー ト メ ン ト に一次式 と し て含む こ と がで き ます。 5-1 ス カ ラ関数 文字列関数 文字列関数は、 CHAR ま たは LONGVARCHAR デー タ 型の よ う なテ キ ス ト 情報か ら 成 る 列の処理お よ び操作に使用 さ れます。 string と 示 さ れ る 引数には、 列の名前、 文字列 リ テ ラ ル、 ま たは別の ス カ ラ 関数の結果を指定で き ます。 表 5-1 文字列関数 5-2 関数 説明 ASCII (string) string の一番左の文字の ASCII コ ー ド を整 数で返 し ます。 BIT_LENGTH (string) string の長 さ を ビ ッ ト 数で返 し ます。 CHAR (code) code で 指 定 さ れ た ASCII コ ー ド を 持つ ASCII 文字を返 し ま す。 引数は整数値で な ければな り ません。 CHAR_LENGTH (string) string 内の文字数 を 返 し ま す。 ヌ ルは意味 を持ち ます。 CHARACTER_LENGTH (string) CHAR_LENGTH と 同 じ です。 CONCAT (string1, string2) string2 を string1 に連結 し た結果の文字列 を返 し ます。 LCASE ま たは LOWER (string) string の大文字がすべて小文字に変換 さ れ た文字列を返 し ます。 LEFT (string, count) string の左端か ら count 分の文字 を 返 し ま す。 count の値は整数です。 LENGTH (string) string 内の文字数を返 し ま す。 後続の空白、 後続の ヌ ル、 お よ び文字列の終端文字は除 外 さ れます。 LOCATE (string1, string2 [, start ]) string2 の中で string1 が最初に現れ る 位置 を返 し ます。 string2 内での検索は、 開始位 置 (start) が指定 さ れて い な ければ、 先頭 の文字位置か ら 始め ま す。 検索は指定 さ れ た開始位置か ら 始ま り ます。 string2 の先頭 文字位置は 1 です。 string1 が見つか ら ない 場合は値 0 が返 さ れます。 LTRIM (string) string か ら 先頭の空白 を 除い た文字 を 返 し ます。 OCTET_LENGTH (string) string の長 さ をバ イ ト 数で返 し ます。 文字列関数 表 5-1 文字列関数 関数 説明 POSITION (string1, string2) string2 の中に あ る string1 の位置 を 返 し ま す。 string1 が string2 内に存在 し な い場合 は、 ゼ ロ が返 さ れます。 REPLACE (string1, string2, string3) string1 を 検索 し て string2 が現れ る 箇所 を 探 し 、 そ れ を すべ て string3 に置 き 換 え ま す。 その結果が返 さ れ ま す。 文字列が現れ なかっ た場合は、 string1 が返 さ れます。 REPLICATE (string, count) string を count の回数だけ繰 り 返 し て構成 し た文字列 を 返 し ま す。 count の値は整数で す。 RIGHT (string, count) string の右端か ら count 分の文字 を 返 し ま す。 count の値は整数です。 RTRIM (string) string か ら 後続の空白 を 除い た文字列 を 返 し ます。 SPACE (count) count で示 さ れた数の空白か ら 成 る 文字列 を返 し ます。 STUFF (string1, string2) start, length, string1 の start 位置か ら length で示 さ れた数 だ け の文字 を string2 で置 き 換 え た 結果得 ら れ る 文字列を返 し ます。 start と length は 整数です。 SUBSTRING (string1, start, length) string1 の中の start で指定 さ れ た文字位置 か ら 、 length で指定 さ れた文字数 を取 り 出 し 、 その文字列を返 し ます。 UCASE ま たは UPPER (string) string の小文字すべて大文字に変換 さ れた 文字列を返 し ます。 ス カ ラ 関数の RTRIM ま たは LEFT を使用す る WHERE 句を含む ク エ リ は、 最適化す る こ と がで き ます。 た と えば、次の よ う な ク エ リ があ る と し ます。 SELECT * FROM T1, T2 WHERE T1.C1 = LEFT(T2.C1, 2) こ の場合、 T1.C1 と T2.C2 が イ ンデ ッ ク ス列な ら ば、 述部の両側が最適化 さ れ ま す。 述部は、 WHERE キー ワ ー ド の後に続 く 完全な検索条件です。 結合に含まれ る テーブルのサ イ ズに従っ て、 オプテ ィ マ イ ザは最初に処理 す る 適切なテーブルを選択 し ます。 一方の述部で、 RTRIM お よ び LEFT が複雑な式中に含まれてい る 場合、 こ れ ら を最適化す る こ と はで き ません。 5-3 ス カ ラ関数 例 次の例では、 整数の列 と 文字の列を持つ新 し いテーブルを作成 し ます。 文 字の列だけに値を持つ行を 4 行挿入 し 、 その後で、 それ ら の行の整数列を 各行に含まれ る 文字の ASCII 文字 コ ー ド で更新 し ます。 CREATE TABLE numchars(num INTEGER,chr CHAR(1) CASE) INSERT INTO numchars (chr) VALUES('a') INSERT INTO numchars (chr) VALUES('b') INSERT INTO numchars (chr) VALUES('A') INSERT INTO numchars (chr) VALUES('B') UPDATE numchars SET num=ASCII(chr) SELECT * FROM numchars SELECT の結果 : num ---------97 98 65 66 chr --a b A B SELECT num FROM numchars WHERE num=ASCII('a') SELECT の結果 : num -----97 次の例では、 Person テーブルの名前 と 姓を連結 し てお り 、 "RooseveltBora" と い う 結果が出ます。 SELECT CONCAT(First_name, Last_name) FROM Person WHERE First_name = 'Roosevelt' 次 の 例 で は、 名 前 を 小 文 字 に 変 換 し て か ら 大 文 字 に 変 換 し て お り 、 "roosevelt"、 "ROOSEVELT" と い う 結果が出ます。 SELECT LCASE(First_name),UCASE(First_name) FROM Person WHERE First_name = 'Roosevelt' 5-4 文字列関数 次の例では、 左端か ら 3 文字に切 り 詰め ら れた名前、 長 さ 9、 LOCATE の 結果 0、 と い う 結果が出ます。 こ の ク エ リ の結果は "Roo"、 9、 0 です。 SELECT LEFT(First_name, 3),LENGTH(First_name), LOCATE(First_name, 'a') FROM Person WHERE First_name = 'Roosevelt' 次 は、 文 字列 で LTRIM お よ び RTRIM 関数 を 使用 し た 例 で、 結果 は "Roosevelt"、 "Roosevelt"、 "elt" にな り ます。 SELECT LTRIM(First_name),RTRIM(First_name), RIGHT(First_name,3) FROM Person WHERE First_name = 'Roosevelt' 次の SUBSTRING は、 名前の 2 番目の文字か ら 最高 3 文字ま でを リ ス ト し てお り 、 "oos" と い う 結果が出ます。 SELECT SUBSTRING(First_name,2, 3) FROM Person WHERE First_name = 'Roosevelt' SELECT ID,first_name FROM Person WHERE LCASE(First_name) = 'bruce' 5-5 ス カ ラ関数 数値関数 数値関数は、 decimal 値や integer 値の よ う な数値情報だけか ら 成 る 列の処 理お よ び操作に使用 さ れます。 表 5-2 数値関数 5-6 関数 説明 ABS (numeric_exp) numeric_exp の絶対値を返 し ます。 ACOS (float_exp) ラ ジ ア ン で 示 さ れ た 角 度 と し て、 float_exp のアー ク コ サ イ ン を返 し ま す。 ASIN (float_exp) ラ ジ ア ン で 示 さ れ た 角 度 と し て、 float_exp の ア ー ク サ イ ン を 返 し ま す。 ATAN (float_exp) ラ ジ ア ン で 示 さ れ た 角 度 と し て、 float_exp のアー ク タ ン ジ ェ ン ト を返 し ます。 ATAN2 (float_exp1, float_exp2) ラ ジ ア ン で示 さ れ た角度 と し て、 x (float_exp1) 座標 と y (float_exp2) 座 標の アー ク タ ン ジ ェ ン ト を 返 し ま す。 CEILING (numeric_exp) numeric_exp で示 さ れ た 値以上の最 小の整数を返 し ます。 COS (float_exp) float_exp が ラ ジ ア ンで示 さ れた角度 であ る 場合、 float_exp の コ サ イ ン を 返 し ます。 COT (float_exp) float_exp が ラ ジ ア ンで示 さ れた角度 であ る 場合、 float_exp の コ タ ン ジ ェ ン ト を返 し ます。 DEGREES (numeric_exp) numeric_exp の ラ ジ ア ン か ら 変換 さ れた度数を返 し ます。 EXP (float_exp) float_exp の指数値を返 し ます。 FLOOR (numeric_exp) numeric_exp で示 さ れ た 値以下の最 大の整数を返 し ます。 LOG (float_exp) float_exp の自然対数を返 し ます。 LOG10 (float_exp) float_exp の 10 を 底 と す る 対数 を 返 し ます。 数値関数 表 5-2 数値関数 関数 説明 MOD (integer_exp1, integer_exp2) integer_exp1 を integer_exp2 で割っ た 余 り (絶対値) を返 し ます。 PI ( ) π の定数値を浮動小数点値で返 し ま す。 POWER (numeric_exp, integer_exp) numeric_exp に integer_exp で示 さ れ たべ き 乗を行っ た値を返 し ます。 RADIANS (numeric_exp) numeric_exp の度数か ら 変換 さ れ た ラ ジ ア ン値を返 し ます。 RAND (integer_exp) integer_exp を オプシ ョ ンのシー ド 値 と し て使用す る 、 ラ ン ダ ム な浮動小 数点値を返 し ます。 ROUND (numeric_exp, integer_exp) 小数点 の 右側 の integer_exp で 示 さ れ る 位置で丸め ら れ た numeric_exp を返 し ます。 integer_exp が負数の場 合、 numeric_exp は、 小数点の左側の |integer_exp|(integer_exp の絶対値)で 示 さ れ る 位置で丸め ら れます。 SIGN (numeric_exp) numeric_exp の符号 を 示す値 を 返 し ます。numeric_exp が 0 よ り 小 さ い場 合は -1 が返 さ れ ま す。 numeric_exp が 0 の 場合 は 0 が 返 さ れ ま す。 numeric_exp が 0 よ り 大 き い場合は 1 が返 さ れます。 SIN (float_exp) float_exp が ラ ジ ア ンで示 さ れた角度 であ る 場合、 float_exp のサ イ ン を返 し ます。 SQRT (float_exp) float_exp の平方根を返 し ます。 TAN (float_exp) float_exp が ラ ジ ア ンで示 さ れた角度 であ る 場合、 float_exp の タ ン ジ ェ ン ト を返 し ます。 TRUNCATE (numeric_exp, integer_exp) 小数点の右側の integer_exp で示され る位置で切り捨てられた numeric_exp を返 し ます。 integer_exp が負数の場 合、 numeric_exp は、 小数点の左側の |integer_exp| (絶対値) で示 さ れ る 位 置で切 り 捨て ら れます。 5-7 ス カ ラ関数 例 次の例では、 Room テーブルの部屋番号の列 と 収容人数の列の MOD を一 覧表示 し ます。 SELECT MOD(Number, Capacity) FROM Room 次の例では、Faculty テーブルか ら 100 で割 り 切れ る 給与すべて を選択 し ま す。 SELECT Salary FROM Faculty WHERE MOD(Salary, 100) = 0 5-8 時刻 と 日付の関数 時刻 と 日付の関数 日付お よ び時刻関数は、 DATE や TIME の よ う な日付ま たは時刻のデー タ 型か ら 成 る デー タ の処理お よ び操作に使用 さ れます。 時刻 と 日付関数の値の挿入 関数の値を テーブルに挿入す る 場合、 すべての日付 / 時刻関数でサポー ト さ れて い る 1 つの方法は、 次に示す よ う な INSERT ス テー ト メ ン ト 内で SELECT サブ ク エ リ を使用する 方法です。 INSERT INTO t1 (c1, c2) SELECT CURRENT_DATE(), CURRENT_TIME() CURDATE()、 CURTIME()、 NOW() な ど のい く つかの関数では、 次に示す よ う な直接の INSERT も サポー ト さ れます。 INSERT INTO t1 (c1) VALUES (CURDATE()) 表 5-3 時刻 と 日付の関数 関数 説明 CURDATE ( ) 現在の現地日付を 'yyyy-mm-dd' 形式で返 し ま す。 デ フ ォ ル ト で、 ロ ー カ ル時計の 時刻を使用 し ます。 「SET TIME ZONE」 を 呼び出 し た場合、 CURDATE() の値は、 シ ス テ ム時計 と オペレーテ ィ ン グ シ ス テ ム の地域の設定を基に UTC 日付 / 時刻を計 算 し 、 SET TIME ZONE で指定 さ れたデ ィ ス プ レ ー ス メ ン ト 値 を 加算す る こ と に よ っ て決定 さ れます。 CURRENT_DATE ( ) 現在の UTC 日付を 'yyyy-mm-dd' 形式で返 し ます。 CURTIME ( ) 現在の現地時刻 を 'hh:mm:ss' 形式で返 し ま す。 デ フ ォ ル ト で、 ロ ー カ ル時計の時 刻を使用 し ます。 「SET TIME ZONE」 を呼 び出 し た場合、 CURTIME() の値は、 シ ス テ ム時計 と オペレ ーテ ィ ン グ シ ス テ ムの 地域の設定を基に UTC 日付 / 時刻を計算 し 、 SET TIME ZONE で指定 さ れたデ ィ ス プ レ ー ス メ ン ト 値 を加算す る こ と に よ っ て決定 さ れます。 CURRENT_TIME ( ) 現在の UTC 時刻を 'hh:mm:ss' 形式で返 し ます。 5-9 ス カ ラ関数 表 5-3 時刻 と 日付の関数 関数 説明 CURRENT_TIMESTAMP( ) 現在の UTC 日付 と 時刻を タ イ ム ス タ ンプ 値 と し て次の形式で返 し ます。 'yyyy-mm-dd hh:mm:ss.sssssss' DAYNAME (date_exp) date_exp の 曜 日部 分 に 対 し て、 デー タ ソ ース固有の曜日の文字列 (た と えば、英 語 を 使用す る デー タ ソ ー ス で は Sunday か ら Saturday、ま たは Sun. か ら Sat. で、 ド イ ツ 語 を 使 用す る デー タ ソ ー ス で は Sonntag か ら Samstag) を返 し ます。 DAYOFMONTH (date_exp) date_exp の月の何日目か を 1 ~ 31 の範囲 の整数値で返 し ます。 DAYOFYEAR (date_exp) date_exp の年の何日目か を 1 ~ 366 の範 囲の整数値で返 し ます。 EXTRACT (extract_field, extract_source) extract_source の extract_field 部分 を 返 し ます。 引数 extract_source は、 日付、 時刻、 ま たは間隔を表す式です。 extract_field に指定で き る キー ワ ー ド は次 の と お り です。 YEAR MONTH DAY HOUR MINUTE SECOND こ れ ら の値は、 タ ーゲ ッ ト 式か ら 返 さ れ ます。 5-10 HOUR (time_exp) 時刻 を 0 ~ 23 の範囲の整数値で返 し ま す。 MINUTE (time_exp) 分を 0 ~ 59 の範囲の整数値で返 し ます。 MONTH (date_exp) 月を 1 ~ 12 の範囲の整数値で返 し ます。 MONTHNAME (date_exp) date_exp の 月 の 部 分 に 対 し て、 デー タ ソ ース固有の月名の文字列 (た と えば、英 語 を 使用す る デー タ ソ ー ス で は January か ら December、 ま たは Jan. か ら Dec. で、 イ タ リ ア語を使用す る デー タ ソ ー ス では Gennaio か ら Dicembre) を返 し ます。 時刻 と 日付の関数 表 5-3 時刻 と 日付の関数 関数 説明 NOW ( ) 現在の現地日付 と 時刻 を タ イ ム ス タ ン プ 値 と し て次の形式で返 し ます。 'yyyy-mm-dd hh:mm:ss.sssssss' デ フ ォ ル ト で、 ロ ーカ ル時計の時刻 を 使 用 し ます。 「SET TIME ZONE」 を呼び出 し た場合、 NOW() の値は、 シ ス テ ム時計 と オペレーテ ィ ン グ シ ス テ ム の地域の設定 を 基 に UTC 日付 / 時刻 を 計算 し 、 SET TIME ZONE で指定 さ れ た デ ィ ス プ レ ー ス メ ン ト 値 を加算す る こ と に よ っ て決定 さ れます。 QUARTER (date_exp) date_exp の四半期 を 1 ~ 4 の範囲の整数 値で返 し ます。 1 は 1 月 1 日~ 3 月 31 日 を表 し ます。 SECOND (time_exp) 秒を 0 ~ 59 の範囲の整数値で返 し ます。 TIMESTAMPADD (interval, integer_exp, timestamp_exp) interval タ イ プの integer_exp で示 さ れた間 隔を timestamp_exp に加算 し た タ イ ム ス タ ンプ を返 し ます。 interval に指定で き る キー ワー ド は次の と お り です。 SQL_TSI_YEAR SQL_TSI_QUARTER SQL_TSI_MONTH SQL_TSI_WEEK SQL_TSI_DAY SQL_TSI_HOUR SQL_TSI_MINUTE SQL_TSI_SECOND TIMESTAMPDIFF (interval, timestamp_exp1, timestamp_exp2) timestamp_exp2 が timestamp_exp1 よ り 大 き い場合に、 その差であ る interval の整数 値を返 し ます。 interval に指定で き る 値は、 TIMESTAMPADD と 同 じ です。 WEEK (date_exp) date_exp が 1 年の第何週目か を 1 ~ 53 の 範囲の整数値で返 し ます。 YEAR (date_exp) 年数 を 整数値で返 し ま す。 範囲はデー タ ソ ース に依存 し ます。 5-11 ス カ ラ関数 例 次の例は、日付 / 時刻関数を基に値を挿入する 方法を示 し ます。CURDATE() な ど のい く つかの関数は、 INSERT ス テー ト メ ン ト の中で直接使 う こ と が で き ます。 し か し 、 それ以外の関数では、 こ の よ う な方法はサポー ト さ れ てい ません。 広範囲にわた っ てサポー ト さ れてい る 方法は、 SELECT を含 む INSERT を使用す る も のです。 以下の例では、 CURRENT_TIME() に よ っ て返 さ れ る UTC 時刻値がテーブル T1 に挿入 さ れます。 INSERT INTO T1 (C1) SELECT CURRENT_TIME() 次は HOUR の使用例です。 SELECT c.Name,c.Credit_Hours FROM Course c WHERE c.Name = ANY (SELECT cl.Name FROM Class cl WHERE c.Name = cl.Name AND c.Credit_Hours >(HOUR (Finish_Time Start_Time) + 1)) こ れは MINUTE の使用例です。 SELECT MINUTE(log) FROM billing 次は SECOND の使用例です。 SELECT SECOND(log) FROM billing SELECT log FROM billing WHERE SECOND(log) = 31 次は NOW() の使用例です。 SELECT NOW() - log FROM billing 次は、MONTH、DAY、YEAR、HOUR、MINUTE を複合的に使用 し た例です。 SELECT Name, Section, MONTH(Start_Date), DAY(Start_Date), YEAR(Start_Date), HOUR(Start_Time), MINUTE(Start_Time) FROM Class 次は CURDATE() の使用例です。 SELECT ID, Name, Section FROM Class WHERE (Start_Date CURDATE()) <= 2 AND (Start_Date - CURDATE()) >= 0 5-12 時刻 と 日付の関数 次の例では、 Class テーブルにあ る ク ラ ス の開始日を基に、 月の何日目か と その曜日を求め ます。 SELECT DAYOFMONTH(Start_date), DAYOFWEEK(Start_date) FROM Class SELECT * FROM person WHERE YEAR(Date_Of_Birth) < 1970 5-13 ス カ ラ関数 シ ス テム関数 シ ス テ ム関数は、 シ ス テ ム レベルの情報を提供 し ます。 表 5-4 シ ス テム関数 関数 説明 DATABASE ( ) 現在のデー タ ベース名を返 し ます。 USER ( ) 現在のユーザーの ロ グ イ ン名を返 し ます。 例 次の例は、 現在のユーザーお よ びデー タ ベース の名前を取得す る 方法を示 し ます。 SELECT USER( ) SELECT DATABASE( ) テーブル内の レ コ ー ド ご と に こ の情報を取得す る 場合は、 次の方法を用い ます (例では、 DEMODATA の Person テーブルを使用 し ます)。 SELECT USER( ) FROM person SELECT DATABASE( ) FROM person SELECT USER( ), DATABASE( ) FROM person 5-14 論理関数 論理関数 論理関数は、 一定の条件に基づいたデー タ の操作に使用 さ れます。 表 5-5 論理関数 関数 説明 COALESCE (expression1, expression2 [, ... ]) 式 リ ス ト を 左か ら 調べて、 最初の 非ヌ ル引数を返 し ます。 詳細については、「COALESCE」 (334 ページ) も 参照 し て く だ さ い。 IF (predicate, expression1, expression2) 述部が真の場合は expression1 を返 し 、 そ う で な い場合は expression2 を返 し ます。 NULL ( ) 列を ヌ ル値 と し て設定 し ます。 IFNULL (exp, value) exp が ヌ ルの場合は value が返 さ れ ま す。 exp が ヌ ルでない場合は exp が 返 さ れ ま す。 value に 指定 す る デー タ 型 ま た は タ イ プ は、 exp の デー タ 型 と 互換性が な ければな り ません。 ISNULL (exp, value) ヌ ル を value で示 さ れ た 値に置 き 換え ます。 exp は ヌ ルをチ ェ ッ ク す る 式です。 value は exp が ヌ ルの場 合に返 さ れ る 値です。 ヌ ルで な い 場合は exp が返 さ れ ま す。 value に 指定す る デー タ 型は、 exp のデー タ 型 と 互換性が な け れば な り ま せ ん。 NULLIF (exp1, exp2) 2 つの式が等 し く ない場合は、 exp1 を 返 し ま す。 式 が 等 し い 場 合、 NULLIF は ヌ ル値を返 し ます。 例 COALESCE ス カ ラ 関数は 2 つ以上の引数を取 り 、その式 リ ス ト を左か ら 調 べて最初の非ヌ ル引数を返 し ます。 select COALESCE(10, 'abc' + 'def') 10 は SMALLINT と し て扱われ、 ResultType (SQL_SMALLINT, SQL_VARCHAR) は SQL_SMALLINT にな り ます。 し たが っ て、 結果の型 は SQL_SMALLINT にな り ます。 最初のパ ラ メ ー タ は 10 で、こ の値は結果の型の SQL_SMALLINT へ変換で き ます。 そのため、 こ の例の戻 り 値は 10 にな り ます。 5-15 ス カ ラ関数 シ ス テ ム ス カ ラ 関数の IF と NULL は、 SQL の拡張機能です。 IF を使用す る と 、 条件が真か偽かに よ っ て異な る 値を入力で き ます。 た と えば、 論理値を含む列をバ イ ナ リ 表記ではな く "True" ま たは "False" で表 示す る には、 次の SQL ス テー ト メ ン ト を使用 し ます。 SELECT IF(logicalcol=1, 'True', 'False') シ ス テ ム ス カ ラ 関数の NULL を使用する と 、列を ヌ ル値 と し て設定で き ま す。 構文は次の と お り です。 NULL() た と えば、 次の SQL ス テー ト メ ン ト は ヌ ル値を取得 し ます。 SELECT NULL() FROM person 次の例は、 ISNULL の値の返 し 方を示 し ます。 CREATE TABLE t8 (c1 INT, c2 CHAR(10)) INSERT INTO t8 VALUES (100, 'string1') SELECT c1, c2, ISNULL(c1, 1000), ISNULL(C2, 'a string') from t8 SELECT は 100 と 'string1' を返 し ます。 こ れは、 c1 と c2 の ど ち ら に も 値が入っ てお り 、 ヌ ルではないか ら です。 INSERT INTO t8 VALUES (NULL, NULL) SELECT c1, c2, ISNULL(c1, 1000), ISNULL(C2, 'a string') from t8 SELECT は 1000 と 'a string' を返 し ます。 こ れは、 c1 と c2 の ど ち ら に も ヌ ルが入っ てい る か ら です。 次の ス テー ト メ ン ト は、 IFNULL お よ び NULLIF ス カ ラ 関数の使い方を示 し ます。 こ れ ら の関数はそれぞれ、 ヌ ルが存在す る か し ないか、 等 し いか ど う かに従っ て値の代入を行 う 場合に使用 し ます。 CREATE TABLE Demo (col1 CHAR(3)) INSERT INTO Demo VALUES ('abc') INSERT INTO Demo VALUES (NULL) INSERT INTO Demo VALUES ('xyz') 2 番目の行が ヌ ル値を含んでい る ので、 その場所に 'foo' が代入 さ れます。 SELECT IFNULL(col1, 'foo') FROM Demo 5-16 論理関数 こ の結果、 1 つの列か ら 3 行が フ ェ ッ チ さ れます。 "abc" "foo" "xyz" 1 列か ら 3 行フ ェ ッ チ さ れま し た。 最初の行に "abc" が含ま れてお り 、 こ れは、 次の NULLIF 呼び出 し の第 2 引数 と 合致 し ます。 SELECT NULLIF(col1, 'abc') FROM Demo その場所に ヌ ルが返 さ れます。 <Null> <Null> "xyz" 1 列か ら 3 行フ ェ ッ チ さ れま し た。 5-17 ス カ ラ関数 変換関数 変換関数は、式をデー タ 型に変換 し ます。CONVERT 関数はデー タ を ODBC デー タ 型へのみ変換で き ま す。 複数の Pervasive PSQL デー タ 型が 1 つの ODBC デー タ 型にマ ッ プ さ れてい る こ と があ る ので注意 し て く だ さ い。 た と えば、 DECIMAL、 CURRENCY、 お よ び BIGINT はすべて ODBC デー タ 型の SQL_DECIMAL にマ ッ プ さ れてい ます。 CAST 関数は式を Pervasive PSQL リ レ ーシ ョ ナル デー タ 型へ変換 し ま す (式を当該のデー タ 型へ変換で き る場合) 。 CAST 関数は文字列内のバ イ ナ リ ゼ ロ を変換で き ます。 た と えば、 CAST(c1 AS BINARY(10)) と な り ます。 こ こ で、 c1 はバ イ ナ リ ゼ ロ (NULL) を含んでい る 文字型の列です。 ユーザー定義デー タ 型は CAST も CONVERT も で き ません。 入力 と 出力が共に文字列の場合、 CAST ま たは CONVERT の出力は入力文 字列 と 同 じ コ レーシ ョ ンにな り ます。 5-18 変換関数 表 5-6 変換関数 関数 説明 CAST (exp AS type) 指定 さ れた type に変換 さ れた exp の値を返 し ます。 type は、 表 「Pervasive PSQL デー タ 型 と 対 応す る ODBC デー タ 型」 (A-2 ページ) に示 さ れてい る Pervasive PSQL リ レーシ ョ ナル デー タ 型のいずれかにな り ます。 CONVERT (exp, type) 指定 さ れた type に変換 さ れた exp の値を返 し ます。 types は、 次のキーワ ー ド のいずれ かにな り ます。 SQL_BIGINT SQL_BINARY SQL_BIT SQL_CHAR SQL_DATE SQL_DECIMAL SQL_DOUBLE SQL_FLOAT SQL_INTEGER SQL_LONGVARCHAR SQL_NUMERIC SQL_REAL SQL_SMALLINT SQL_TIME SQL_TIMESTAMP SQL_TINYINT SQL_VARBINARY SQL_VARCHAR SQL_LONGVARBINARY 例 次の例では、 DATE を CHAR にキ ャ ス ト し てい ます。 CREATE TABLE u1(cdata DATE) INSERT INTO u1 VALUES(curdate()) SELECT CAST(cdate as CHAR20) FROM u1 現在の日付が 2004 年 1 月 1 日の場合、 SELECT は 2004-01-01 を返 し ます。 次の例は、 それぞれ UBIGINT を SQL_CHAR へ、 文字列デー タ を SQL_DATE、 SQL_TIME、 SQL_TIMESTAMP へ変換 し ます。 SELECT CONVERT(id , SQL_CHAR), CONVERT( '1995-06-05', SQL_DATE), CONVERT('10:10:10', SQL_TIME), CONVERT('1990-10-10 10:10:10', SQL_TIMESTAMP) FROM Faculty 5-19 ス カ ラ関数 次の例は、 文字列を SQL_DATE へ変換 し た後、 SQL_DATE に 31 を加算 し ます。 SELECT Name FROM Class WHERE Start_date > CONVERT ('199505-07', SQL_DATE) + 31 5-20 シ ス テム ス ト ア ド プ ロ シー ジャ 6 Pervasive PSQL シ ス テ ム ス ト ア ド プ ロ シージ ャ の リ フ ァ レ ン ス 以下の項目について説明 し ます。 「Pervasive PSQL シ ス テ ム ス ト ア ド プ ロ シージ ャ 」 (6-2 ページ) 6-1 シス テム ス ト ア ド プ ロ シージ ャ Pervasive PSQL シ ス テム ス ト ア ド プ ロ シージ ャ シ ス テ ム ス ト ア ド プ ロ シージ ャ は、 デー タ 定義言語 (DDL) では取 り 扱 われない管理 タ ス ク や情報 タ ス ク の遂行に利用で き ます。 シ ス テ ム ス ト ア ド プ ロ シージ ャ には psp_ プ レ フ ィ ッ ク ス が付 き ます。 メ モ psp_ プ レ フ ィ ッ ク スはシ ス テ ム ス ト ア ド プ ロ シージ ャ の名前に 使用 さ れ る ので、psp_ プ レ フ ィ ッ ク ス を付けた ス ト ア ド プ ロ シージ ャ は作成 し ないで く だ さ い。 シ ス テ ム ス ト ア ド プ ロ シージ ャ と 同 じ 名 前を持つユーザー作成の ス ト ア ド プ ロ シージ ャ は決 し て実行 さ れ ま せん。 次の表は、現在サポー ト さ れてい る シ ス テ ム ス ト ア ド プ ロ シージ ャ の一覧 を示 し ます。 表 6-1 Pervasive PSQL シス テム ス ト ア ド プ ロ シージ ャ 「psp_columns」 「psp_column_attributes」 「psp_column_rights」 「psp_fkeys」 「psp_groups」 「psp_help_sp」 「psp_help_trigger」 「psp_help_udf」 「psp_help_view」 「psp_indexes」 「psp_pkeys」 「psp_rename」 「psp_stored_procedures」 「psp_tables」 「psp_table_rights」 「psp_triggers」 「psp_udfs」 「psp_users」 「psp_views」 特段の記述が な い限 り 、 シ ス テ ム ス ト ア ド プ ロ シージ ャ の コ ー ド 例は、 Pervasive PSQL で 提供 さ れ る Demodata サ ン プ ル デー タ ベー ス ま た は Pervasive PSQL シ ス テ ム テーブルを参照 し てい ます。 シ ス テ ム ス ト ア ド プ ロ シージ ャ をデー タ ベース (A と し ます) の コ ン テ キ ス ト で実行 し 、 セキ ュ リ テ ィ で保護 さ れたデー タ ベース (B と し ます) か ら 情報を取得 し よ う と す る と 、 エ ラ ー メ ッ セージが表示 さ れます。 セキ ュ リ テ ィ で保護 さ れたデー タ ベース の情報をほかのデー タ ベース か ら 取得す る こ と はで き ません。 6-2 Pervasive PSQL シ ス テム ス ト ア ド プ ロ シージ ャ psp_columns 現在のデー タ ベース ま たは指定 さ れたデー タ ベース か ら 、 特定テーブルの 列の一覧 と それに関連す る 情報を返 し ます。 構文 call psp_columns(['database_qualifier'], 'table_name', ['column_ name']) 引数 表 6-2 psp_columns の引数 パラ メ ー タ デー タ 型 デ フ ォル ト 値 説明 database_ qualifier VARCHAR(20) 現在のデー タ ベース 詳細 を 取得す る デー タ ベース の名前 table_name VARCHAR(255) column_name VARCHAR(255) 列情報 を 要求す る テ ー ブルの名前 指定 し た テ ー ブルのすべて の列 指定したテーブルの列名 返 さ れる結果セ ッ ト 表 6-3 psp_columns で返 さ れる結果セ ッ ト 列名 デー タ 型 説明 TABLE_QUALIFIER VARCHAR(20) デー タ ベース の名前 TABLE_OWNER VARCHAR(20) テーブル所有者の名前 TABLE_NAME VARCHAR(255) テーブルの名前 COLUMN_NAME VARCHAR(255) テーブルの列名 DATA_TYPE SMALLINT 列のデー タ 型 (デー タ ベース での格 納状態) TYPE_NAME VARCHAR(32) 列のデー タ 型の、 DATA_TYPE 値に 対応す る 名前 6-3 シス テム ス ト ア ド プ ロ シージ ャ 表 6-3 psp_columns で返 さ れる結果セ ッ ト 列名 デー タ 型 説明 PRECISION INTEGER 列の精度(列のデー タ 型が Decimal、 Dec な ど であ る 場合) LENGTH INTEGER 列 の 長 さ (列 の デー タ 型 が Char、 Character な ど であ る 場合) SCALE SMALLINT 列の小数点以下の桁数(列のデー タ 型が Decimal、Dec な ど であ る 場合) RADIX SMALLINT 数値デー タ 型の基数 NULLABLE SMALLINT ヌ ル値の許可を示 し ます。 1 - ヌル 0 - 非ヌル REMARKS VARCHAR(255) 備考フ ィ ール ド 例 create table tx (c_binary BINARY(10), c_char CHAR(10), c_tinyint TINYINT, c_smallint SMALLINT, c_int INT, c_bigint BIGINT, c_utinyint UTINYINT) call psp_columns(, 'tx',) 6-4 Pervasive PSQL シ ス テム ス ト ア ド プ ロ シージ ャ 結果セ ッ ト Table_ qualifier Table_ owner Table_ name Column_ name Data_ type Type_ name P L S R N R 'demodata' Null tx C_binary -2 Binary 10 10 Null Null 1 Null 'demodata' Null tx C_char -1 Char 10 10 Null Null 1 Null 'demodata' Null tx C_tinyint -6 Tinyint 3 1 0 10 1 Null ..... 凡例 : P = Precision; L = Length; S = Scale; R = Radix; N = Nullable; R = Remarks call psp_columns('wsrde, 'tx', ) 結果セ ッ ト Table_ qualifier Table_ owner Table_ name Column_ name Data_ type Type_ name P L S R N R 'wsrde' Null tx C_binary -2 Binary 10 10 Null Null 1 Null 'wsrde' Null tx C_char -1 Char 10 10 Null Null 1 Null 'wsrde' Null tx C_tinyint -6 Tinyint 3 1 0 10 1 Null ..... 凡例 : P = Precision; L = Length; S = Scale; R = Radix; N = Nullable; R = Remarks call psp_columns('wsrde, 'tx', 'c_binary') 結果セ ッ ト Table_ qualifier Table_ owner Table_ name Column_ name Data_ type Type_ name P L S R N R 'wsrde' Null tx C_binary -2 Binary 10 10 Null Null 1 Null 凡例 : P = Precision; L = Length; S = Scale; R = Radix; N = Nullable; R = Remarks 6-5 シス テム ス ト ア ド プ ロ シージ ャ エ ラ ー状況 database_qualifier が空文字列の場合は、次のエ ラ ー メ ッ セージが表示 さ れます。 有効なデー タ ベース名を入力 し て く だ さ い。 デー タ ベース名は空文字 列にで き ません。 table_name が ヌ ルの場合は、 次のエ ラ ー メ ッ セージが表示 さ れます。 テーブル名は ヌ ルにで き ません。 table_name が空文字列の場合は、 次のエ ラ ー メ ッ セージが表示 さ れま す。 テーブル名は空文字列にで き ません。 column_name が空文字列の場合は、次のエ ラ ー メ ッ セージが表示 さ れま す。 列名は空文字列にで き ません。 psp_column_attributes 現在のデー タ ベース ま たは指定 さ れたデー タ ベース か ら 、 列属性の一覧 と それに関連す る 情報を返 し ます。 構文 call psp_column_attributes(['database_qualifier'], ['table_ name'], ['column_name']) 引数 表 6-4 psp_column_attributes の引数 6-6 パラ メ ー タ デー タ 型 デフ ォル ト 値 説明 database_ qualifier VARCHAR(20) 現在のデー タ ベース 詳細 を 取得す る デー タ ベース の名前 table_name VARCHAR(255) すべ て の テ ー ブル 列情報 を 要求す る テ ー ブルの名前 column_name VARCHAR(255) 指定 し た テ ー ブ ル のすべ て の列 指定したテーブルの列名 Pervasive PSQL シ ス テム ス ト ア ド プ ロ シージ ャ 返 さ れる結果セ ッ ト 表 6-5 psp_column_attributes で返 さ れる結果セ ッ ト 列名 デー タ 型 説明 TABLE_QUALIFIER VARCHAR(20) デー タ ベース の名前 TABLE_OWNER VARCHAR(20) テーブル所有者の名前 TABLE_NAME VARCHAR(255) テーブルの名前 COLUMN_NAME VARCHAR(255) テーブルの列名 ATTRIB_TYPE CHAR(10) 列にデ フ ォ ル ト 値が割 り 当て ら れ てい る 場合は "Default" ATTRIB_SIZE USMALLINT 列属性のサ イ ズ ATTRIB_VALUE LONGVARCHAR 列属性の値 例 create table tx (c_binary binary (10) default 01, c_char char (11) default 'thisisatest', c_tinyint TINYINT, c_SMALLINT SMALLINT, c_int INT, c_bigint BIGINT, c_utinyint uTINYINT) call psp_column_attributes(, , ) 6-7 シス テム ス ト ア ド プ ロ シージ ャ 結果セ ッ ト Table_ qualifier Table_ owner Table_ name Column_ name Attrib_ Type 'demodata' Null tx C_binary Default 'demodata' Null tx C_char Default Attrib_ Size Attrib_Value 01 11 'Thisisatest' ..... call psp_column_attributes('wsrde', , ) 結果セ ッ ト Table_ qualifier Table_ owner Table_ name Column_ name Attrib_ Type 'wsrde' Null Test C_binary Default 'wsrde' Null Test C_char Default Attrib_ Size Attrib_Value 01 11 'Thisisatest' ..... call psp_column_attributes(, 'tx', 'c_binary') 結果セ ッ ト Table_ qualifier Table_ owner Table_ name Column_ name Attrib_ Type 'demodata' Null tx C_binary Default Attrib_ Size Attrib_Value 01 エ ラ ー状況 database_qualifier が空文字列の場合は、次のエ ラ ー メ ッ セージが表示 さ れます。 有効なデー タ ベース名を入力 し て く だ さ い。 デー タ ベース名は空文字 列にで き ません。 table_name が空文字列の場合は、 次のエラー メッセージが表示 さ れます。 テーブル名は空文字列にで き ません。 6-8 Pervasive PSQL シ ス テム ス ト ア ド プ ロ シージ ャ column_name が空文字列の場合は、次のエ ラ ー メ ッ セージが表示 さ れま す。 列名は空文字列にで き ません。 psp_column_rights 現在のデー タ ベース ま たは指定 さ れたデー タ ベース か ら 、 特定テーブルの 列のア ク セ ス権の一覧 と それに関連す る 情報を返 し ます。 メ モ こ のシ ス テ ム ス ト ア ド プ ロ シージ ャ は、 GRANT 構文に よ っ て 明示的に指定 さ れて い る 列の ア ク セ ス 権につい て のみ一覧 を 返 し ま す。 構文 call psp_column_rights(['database_qualifier'], 'table_name', ['column_name'], ['user_name']) 引数 表 6-6 psp_column_rights の引数 パラ メ ー タ デー タ 型 デ フ ォル ト 値 説明 database_ qualifier VARCHAR(20) 現在のデー タ ベース 詳細 を 取得す る デー タ ベース の名前 table_name VARCHAR(255) column_name VARCHAR(255) 指定 し た テ ー ブルのすべて の列 ア ク セ ス 権 を 取得す る 列の名前 user_name VARCHAR(255) すべて の ユー ザー 列の ア ク セ ス 権の一覧 を 取得す る 必要の あ る ユーザーの名前 ア ク セ ス 権が指定 さ れ てい る テーブルの名前 6-9 シス テム ス ト ア ド プ ロ シージ ャ 返 さ れる結果セ ッ ト 表 6-7 psp_column_rights で返 さ れる結果セ ッ ト 列名 デー タ 型 説明 TABLE_QUALIFIER VARCHAR(20) デー タ ベース の名前 TABLE_OWNER VARCHAR(20) テーブルの所有者の名前 USER_NAME (GRANTEE) VARCHAR(255) ユーザーの名前 TABLE_NAME VARCHAR(255) テーブルの名前 COLUMN_NAME VARCHAR(255) 異な る ア ク セ ス 権が付与 さ れ て い る 列の名前 RIGHTS VARCHAR(12) 次のいずれかの値です。 SELECT UPDATE INSERT 例 GRANT SELECT(Name, Building_Name) ON Department TO John; GRANT UPDATE(Name) ON Department TO Mary; GRANT INSERT(Building_Name) ON Department TO John; Call psp_column_rights(,'Department', ,) 6-10 Pervasive PSQL シ ス テム ス ト ア ド プ ロ シージ ャ 結果セ ッ ト Table_qualifier Table_ owner User_ name Table_name Column_ name Rights Demodata Null John Department Name SELECT Demodata Null John Department Building _name SELECT Demodata Null John Department Building _name INSERT Demodata Null Mary Department Name UPDATE ..... call psp_column_rights ('demodata', 'department', 'name',) 結果セ ッ ト Table_qualifier Table_ owner User_ name Table_name Column_ name Rights Demodata Null John Department Name SELECT Demodata Null Mary Department Name UPDATE call psp_column_rights('demodata', 'department', , 'mary') 結果セ ッ ト Table_qualifier Table_ owner User_ name Table_name Column_ name Rights Demodata Null Mary Department Name UPDATE 6-11 シス テム ス ト ア ド プ ロ シージ ャ エ ラ ー状況 database_qualifier が空文字列の場合は、次のエ ラ ー メ ッ セージが表示 さ れます。 有効なデー タ ベース名を入力 し て く だ さ い。 デー タ ベース名は空文字 列にで き ません。 column_name が空文字列の場合は、次のエ ラ ー メ ッ セージが表示 さ れま す。 列名は空文字列にで き ません。 user_name が空文字列の場合は、 次のエ ラ ー メ ッ セージが表示 さ れま す。 ユーザー名は空文字列にで き ません。 psp_fkeys 現在のデー タ ベース ま たは指定 さ れたデー タ ベース か ら 、 特定テーブルの 外部キー情報を返 し ます。 構文 call psp_fkeys(['table_qualifier'], 'pkey_table_name', ['fkey_table_ name']) 引数 表 6-8 psp_fkeys の引数 6-12 パラ メ ー タ デー タ 型 デフ ォル ト 値 説明 table_qualifier VARCHAR(20) 現在のデー タ ベース 詳細 を 取得す る デー タ ベース の名前 pkey_table_name VARCHAR(255) すべ て の テ ー ブル 主キー列に外部キー が関連付け ら れて い る テーブルの名前 fkey_table_name VARCHAR(255) すべ て の テ ー ブル 外部キー情報 を 取得 す る 必要の あ る テー ブルの名前 Pervasive PSQL シ ス テム ス ト ア ド プ ロ シージ ャ 返 さ れる結果セ ッ ト 表 6-9 psp_fkeys で返 さ れる結果セ ッ ト 列名 デー タ 型 説明 PKTABLE_QUALIFIER VARCHAR(20) 主キー テーブルのデータベース名 PKTABLE_OWNER VARCHAR(20) 主キー テーブルの所有者の名前 PKTABLE_NAME VARCHAR(255) 主キー テーブルの名前 PKCOLUMN_NAME VARCHAR(255) 主キー列の列名 KEY_SEQ USMALLINT キーの順序 FKTABLE_QUALIFIER VARCHAR(20) 外部キー テーブルのデー タ ベー ス名 FKTABLE_OWNER VARCHAR(20) 外部キー テーブルの所有者の名 前 FKTABLE_NAME VARCHAR(255) 外部キー テーブルの名前 FKCOLUMN_NAME VARCHAR(255) 外部キー列の列名 UPDATE_RULE Utinyint 更新規則 DELETE_RULE Utinyint 削除規則 PK_NAME VARCHAR(255) 主キーの名前 FK_NAME VARCHAR(255) 外部キーの名前 例 CREATE TABLE Employee ( Id INTEGER NOT NULL, Name VARCHAR(50) NOT NULL, SupId INTEGER NOT NULL ) ALTER TABLE Employee ADD CONSTRAINT EmpPkey PRIMARY KEY(Id) ALTER TABLE Employee ADD CONSTRAINT ForgnKey FOREIGN KEY(SupId) REFERENCES 6-13 シス テム ス ト ア ド プ ロ シージ ャ Employee(Id) ON DELETE CASCADE ... call psp_fkeys(,'Employee',) 結果セ ッ ト PkQ PkO PkT PkCol Seq FkQ FkO FkT FkCol UR DR PK FK Demo data Null Empl oyee Id 0 Demo data Null Emplo yee Supid 1 2 Emp Pkey Forgn Key 凡例 : PkQ = Pkey_table_qualifier; PkO = Pkey_table_owner; PkT = Pktable_name; PkCol = Pk_column_name; Seq = Key_seq; FkQ = Fktable_qualifier; FkO = Fktable_owner; FkT = Fktable_name; FkCol = Fkcolumn_name; UR = Update_rule; DR = Delete_rule; Pk = Pk_name; FK = Fk_name call psp_fkeys('wsrde', 'Employee','Employee') 結果セ ッ ト PkQ PkO PkT PkCol Seq FkQ FkO FkT FkCol UR DR PK FK wsrde Null Empl oyee Id 0 wsrde Null Emplo yee Supid 1 2 Emp Pkey Forgn Key 凡例 : PkQ = Pkey_table_qualifier; PkO = Pkey_table_owner; PkT = Pktable_name; PkCol = Pk_column_name; Seq = Key_seq; FkQ = Fktable_qualifier; FkO = Fktable_owner; FkT = Fktable_name; FkCol = Fkcolumn_name; UR = Update_rule; DR = Delete_rule; Pk = Pk_name; FK = Fk_name エ ラ ー状況 table_qualifier が空文字列の場合は、 次のエ ラ ー メ ッ セージが表示 さ れ ます。 有効なデー タ ベース名を入力 し て く だ さ い。 デー タ ベース名は空文字 列にで き ません。 pKey_table_name が空文字列の場合は、 次のエ ラ ー メ ッ セージが表示 さ れます。 主キー テーブル名は空文字列にで き ません。 pKey_table_name が ヌ ルの場合は、 次のエ ラ ー メ ッ セージが表示 さ れま す。 主キー テーブル名は ヌ ルにで き ません。 6-14 Pervasive PSQL シ ス テム ス ト ア ド プ ロ シージ ャ fKey_table_name が空文字列の場合は、 次のエ ラ ー メ ッ セージが表示 さ れます。 外部キー テーブル名は空文字列にで き ません。 psp_groups 現在のデー タ ベース ま たは指定 さ れたデー タ ベース か ら 、 グループの一覧 と それに関連す る 情報を返 し ます。 構文 call psp_groups(['database_qualifier'], ['group_name']) 引数 表 6-10 psp_groups の引数 パラ メ ー タ デー タ 型 デ フ ォル ト 値 説明 database_ qualifier VARCHAR(20) 現在のデー タ ベース 詳細 を 取得す る デー タ ベース の名前 group_name VARCHAR(255) すべてのグループ グ ループ情報の取得に 使用す る グ ループの名 前。 パ タ ー ン 検索が サ ポー ト さ れます。 返 さ れる結果セ ッ ト 表 6-11 psp_groups で返 さ れる結果セ ッ ト 列名 デー タ 型 説明 DATABASE_QUALIFIER VARCHAR(20) デー タ ベース の名前 GROUP_ID USMALLINT グループ ID GROUP_NAME VARCHAR(255) グループの名前 例 call psp_groups(,) 6-15 シス テム ス ト ア ド プ ロ シージ ャ 結果セ ッ ト Database_qualifier Group_Id Group_Name Demodata 1 DevGrp Demodata 2 DevGrp1 Demodata 1 DevGrp ..... call psp_groups('Demodata', 'DevGrp1) 結果セ ッ ト Database_qualifier Group_Id Group_Name Demodata 2 DevGrp1 エ ラ ー状況 database_qualifier が空文字列の場合は、次のエ ラ ー メ ッ セージが表示 さ れます。 有効なデー タ ベース名を入力 し て く だ さ い。 デー タ ベース名は空文字 列にで き ません。 group_name が空文字列の場合は、 次のエ ラ ー メ ッ セージが表示 さ れま す。 グループ名は空文字列にで き ません。 psp_help_sp 現在のデー タ ベース ま たは指定 さ れたデー タ ベース か ら 、 特定の ス ト ア ド プ ロ シージ ャ の定義テ キ ス ト を返 し ます。 構文 call psp_help_sp('[database_qualifier'], 'procedure_name') 6-16 Pervasive PSQL シ ス テム ス ト ア ド プ ロ シージ ャ 引数 表 6-12 psp_help_sp の引数 パラ メ ー タ デー タ 型 デフ ォル ト 値 説明 database_qualifier VARCHAR(20) 現在のデー タ ベース 詳細 を 取得す る デー タ ベース の名前 procedure_name CHAR(255) 定義テ キ ス ト を 要求 す る プ ロ シージ ャ の 名前。 パ タ ー ン 検索 はサ ポー ト さ れ ま せ ん。 返 さ れる結果セ ッ ト 表 6-13 psp_help_sp で返 さ れる結果セ ッ ト 列名 デー タ 型 説明 DATABASE_QUALIFIER VARCHAR(20) デー タ ベース の名前 SP_TEXT LONGVARCHAR ス ト ア ド プ ロ シ ージ ャ の定義 テキス ト 例 call psp_help_sp(, 'Myproc') 結果セ ッ ト Database_Qualifier SP_TEXT Demodata Create procedure Myproc(:a integer, OUT :b integer) as Begin Set :a = :a + 10; Set :b = :a; End 6-17 シス テム ス ト ア ド プ ロ シージ ャ call psp_help_sp('wsrde', 'Myproc1') 結果セ ッ ト Database_Qualifier SP_TEXT wsrde Create procedure Myproc1(:a integer) returns (name char(20)) as Begin Select name from employee where Id =:a; End エ ラ ー状況 database_qualifier が空文字列の場合は、次のエ ラ ー メ ッ セージが表示 さ れます。 有効なデー タ ベース名を入力 し て く だ さ い。 デー タ ベース名は空文字 列にで き ません。 procedure_name が空文字列の場合は、 次のエ ラ ー メ ッ セージが表示 さ れます。 プ ロ シージ ャ 名は空文字列にで き ません。 procedure_name が ヌ ルの場合は、 次のエ ラ ー メ ッ セージが表示 さ れま す。 プ ロ シージ ャ 名は ヌ ルにで き ません。 psp_help_trigger 現在のデー タ ベース ま たは指定 さ れたデー タ ベース か ら 、 ト リ ガの定義テ キ ス ト を返 し ます。 構文 call psp_help_trigger (['database_qualifier'], 'trigger_name') 6-18 Pervasive PSQL シ ス テム ス ト ア ド プ ロ シージ ャ 引数 表 6-14 psp_help_trigger の引数 パラ メ ー タ デー タ 型 デフ ォル ト 値 説明 database_ qualifier VARCHAR(20) 現在のデー タ ベース 詳細 を 取得す る デー タ ベース の名前 trigger_name VARCHAR(255) 定義 テ キ ス ト を 取得す る ト リ ガの名前 返 さ れる結果セ ッ ト 表 6-15 psp_help_trigger で返 さ れる結果セ ッ ト 列名 デー タ 型 説明 DATABASE_QUALIFIER VARCHAR(20) デー タ ベース の名前 TRIGGER_TEXT LONGVARCHAR ト リ ガの定義テ キ ス ト 例 次の ス テー ト メ ン ト に よ り 、 'MyInsert' ト リ ガの定義が出力 さ れます。 CREATE TABLE A ( col1 INTEGER, col2 CHAR(255) ) ; CREATE TABLE B ( col1 INTEGER, col2 CHAR(255) ) ; CREATE TRIGGER MyInsert AFTER INSERT ON A FOR EACH ROW INSERT INTO B VALUES (NEW.col1, NEW.col2); ... call psp_help_trigger(,'MyInsert') 6-19 シス テム ス ト ア ド プ ロ シージ ャ 結果セ ッ ト Database_Qualifier TRIGGER_TEXT Demodata CREATE TRIGGER MyInsert AFTER INSERT ON A FOR EACH ROW INSERT INTO B VALUES (NEW.col1, NEW.col2); call psp_help_trigger('wsrde', 'Myinsert') 結果セ ッ ト Database_Qualifier TRIGGER_TEXT wsrde CREATE TRIGGER MyInsert AFTER INSERT ON A FOR EACH ROW INSERT INTO B VALUES (NEW.col1, NEW.col2); エ ラ ー状況 database_qualifier が空文字列の場合は、次のエ ラ ー メ ッ セージが表示 さ れます。 有効なデー タ ベース名を入力 し て く だ さ い。 デー タ ベース名は空文字 列にで き ません。 trigger_name が ヌ ルの場合は、 次のエ ラ ー メ ッ セージが表示 さ れます。 ト リ ガ名は ヌ ルにで き ません。 trigger_name が空文字列の場合は、次のエ ラ ー メ ッ セージが表示 さ れま す。 ト リ ガ名は空文字列にで き ません。 6-20 Pervasive PSQL シ ス テム ス ト ア ド プ ロ シージ ャ psp_help_udf 現在のデー タ ベース ま たは指定 さ れたデー タ ベース か ら 、 特定のユーザー 定義関数 (UDF) のテ キ ス ト を返 し ます。 構文 call psp_help_udf (['database_qualifier'], 'udf_name') 引数 表 6-16 psp_help_udf の引数 パラ メ ー タ デー タ 型 デフ ォル ト 値 説明 database_ qualifier VARCHAR(20) 現在のデー タ ベース 詳細 を 取得す る デー タ ベース の名前 udf_name VARCHAR(255) 関数 テ キ ス ト を 要求す る ユーザー定義関数の 名前 返 さ れる結果セ ッ ト 表 6-17 psp_help_udf で返 さ れる結果セ ッ ト 列名 デー タ 型 説明 DATABASE_QUALIFIER VARCHAR(20) デー タ ベース の名前 UDF_TEXT LONGVARCHAR ユーザー定義関数のテキスト 例 call psp_help_udf(, 'Myfunction') 6-21 シス テム ス ト ア ド プ ロ シージ ャ 結果セ ッ ト Database_Qualifier UDF_TEXT Demodata Create function Myfunction(:a integer) Returns integer as Begin Return :a * :a; End call psp_help_udf('wsrde', 'Getsmallest') 結果セ ッ ト Database_Qualifier UDF_TEXT wsrde CREATE FUNCTION GetSmallest(:A integer, :B Integer) RETURNS Integer AS BEGIN DECLARE :smallest INTEGER IF (:A < :B ) THEN SET :smallest = :A; ELSE SET :smallest = :B; END IF; RETURN :smallest; END; エ ラ ー状況 database_qualifier が空文字列の場合は、次のエ ラ ー メ ッ セージが表示 さ れます。 有効なデー タ ベース名を入力 し て く だ さ い。 デー タ ベース名は空文字 列にで き ません。 udf_name が空文字列の場合は、次のエ ラ ー メ ッ セージが表示 さ れます。 ユーザー定義関数名は空文字列にで き ません。 6-22 Pervasive PSQL シ ス テム ス ト ア ド プ ロ シージ ャ psp_help_view 現在のデー タ ベース ま たは指定 さ れたデー タ ベース か ら 、 ビ ュ ーの定義テ キ ス ト を返 し ます。 構文 call psp_help_view(['database_qualifier'], 'view_name') 引数 表 6-18 psp_help_view の引数 パラ メ ー タ デー タ 型 デフ ォル ト 値 説明 database_ qualifier VARCHAR(20) 現在のデー タ ベース 詳細 を 取得す る デー タ ベース の名前 view_name VARCHAR(255) 定義 テ キ ス ト を 要求す る ビ ュ ーの名前 返 さ れる結果セ ッ ト 表 6-19 psp_help_view で返 さ れる結果セ ッ ト 列名 デー タ 型 説明 DATABASE_QUALIFIER VARCHAR(20) デー タ ベース の名前 VIEW_TEXT LONGVARCHAR ビ ュ ーの定義テ キ ス ト 権限 以下は、 権限がなければ実行で き ません。 シ ス テ ム ス ト ア ド プ ロ シージ ャ の実行 X$View テーブルでの SELECT の実行 例 CREATE VIEW vw_Person (lastn,firstn,phone) AS SELECT Last_Name, First_Name,Phone FROM Person ... call psp_help_view(,'vw_Person') 6-23 シス テム ス ト ア ド プ ロ シージ ャ 結果セ ッ ト Database_Qualifier VIEW_TEXT Demodata SELECT "T1" ."Last_Name" ,"T1" ."First_Name" ,"T1" ."Phone" FROM "Person" "T1" call psp_help_view('wsrde', 'vw_Person') 結果セ ッ ト Database_Qualifier VIEW_TEXT wsrde SELECT "T1" ."Last_Name" ,"T1" ."First_Name" ,"T1" ."Phone" FROM "Person" "T1" エ ラ ー状況 database_qualifier が空文字列の場合は、次のエ ラ ー メ ッ セージが表示 さ れます。 有効なデー タ ベース名を入力 し て く だ さ い。 デー タ ベース名は空文字 列にで き ません。 view_name が ヌ ルの場合は、 次のエ ラ ー メ ッ セージが表示 さ れます。 ビ ュ ー名は ヌ ルにで き ません。 view_name が空文字列の場合は、 次のエ ラ ー メ ッ セージが表示 さ れま す。 ビ ュ ー名は空文字列にで き ません。 psp_indexes 指定 し た テーブルに定義 さ れて い る イ ン デ ッ ク ス の一覧 を 返 し ま す。 ま た、 各 イ ンデ ッ ク ス について、 X$Index テーブルに保存 さ れてい る と お り に イ ンデ ッ ク ス プ ロ パテ ィ を列挙 し ます。 構文 call psp_indexes(['table_qualifier'], ['table_name']) 6-24 Pervasive PSQL シ ス テム ス ト ア ド プ ロ シージ ャ 引数 表 6-20 psp_indexes の引数 パラ メ ー タ デー タ 型 デフ ォル ト 値 説明 table_qualifier VARCHAR(20) 現在のデー タ ベース 詳細 を 取得す る デー タ ベース の名前 table_name VARCHAR(255) すべ て の テ ー ブル イ ン デ ッ ク ス を 取得す る テーブルの名前 返 さ れる結果セ ッ ト 表 6-21 psp_indexes で返 さ れる結果セ ッ ト 列名 デー タ 型 説明 TABLE_QUALIFIER VARCHAR(20) デー タ ベース の名前 TABLE_OWNER VARCHAR(20) 主 キ ー テ ーブルの所有者の 名前 TABLE_NAME VARCHAR(255) 主キー テーブルの名前 INDEX_NAME VARCHAR(255) イ ンデ ッ ク ス の名前 INDEX_TYPE VARCHAR(20) イ ンデ ッ ク ス の種類 Primary (主) ま たは Foreign (外部) COLUMN_NAME VARCHAR(255) イ ン デ ッ ク ス が 定義 さ れ て い る 列の名前 ORDINAL_POSITION USMALLINT イ ン デ ッ ク ス の 位置 を 表す 序数 DUPLICATES_ALLOWED CHAR(3) Yes - 重複インデックスの場合 No - 重複 イ ン デ ッ ク ス で な い場合 UPDATABLE CHAR(3) Yes - イ ン デ ッ ク ス が更新可 能な場合 No - イ ン デ ッ ク ス が更新可 能でない場合 6-25 シス テム ス ト ア ド プ ロ シージ ャ 表 6-21 psp_indexes で返 さ れる結果セ ッ ト 列名 デー タ 型 説明 CASE_SENSITIVE CHAR(3) Yes - イ ン デ ッ ク ス が大文字 小文字を区別す る 場合 No - イ ン デ ッ ク ス が大文字 小文字を区別 し ない場合 ASC_DESC CHAR(1) D - 降順 A - 昇順 NAMED_INDEX CHAR(3) Yes - 名前付 き イ ン デ ッ ク ス の場合 No - 名前付 き イ ン デ ッ ク ス でない場合 例 call psp_indexes(,) 結果セ ッ ト Qual TO TN IN IT CN Opos Dup Up Case A/D NI Demo data Null Depart ment Dept_name Null Name 0 No No No A N o Demo data Null Depart ment Bldg_name Null Building _Name 0 Yes Yes No A N o Demo data Null Depart ment Dept_head Null Head_ of_dept 0 No No No D N o ..... 凡 例 : Qual = Table_qualifier; TO = Table_owner; TN = Table_name; IN = Index_name; IT = Index_type; CN = Column_name; Opos = Ordinal_position; Dup = Duplicates_allowed; UP = Updatable; Case = Case_sensitive; A/D = Asc_desc; NI = Named_index 6-26 Pervasive PSQL シ ス テム ス ト ア ド プ ロ シージ ャ call psp_indexes('demodata', 'department') 結果セ ッ ト Qual TO TN IN IT CN Opos Dup Up Case A/D NI Demo data Null Depart ment Dept_name Null Name 0 No No No A N o Demo data Null Depart ment Bldg_name Null Building _Name 0 Yes Yes No A N o Demo data Null Depart ment Dept_head Null Head_ of_dept 0 No No No D N o ..... 凡 例 : Qual = Table_qualifier; TO = Table_owner; TN = Table_name; IN = Index_name; IT = Index_type; CN = Column_name; Opos = Ordinal_position; Dup = Duplicates_allowed; UP = Updatable; Case = Case_sensitive; A/D = Asc_desc; NI = Named_index エ ラ ー状況 database_qualifier が空文字列の場合は、次のエ ラ ー メ ッ セージが表示 さ れます。 有効なデー タ ベース名を入力 し て く だ さ い。 デー タ ベース名は空文字 列にで き ません。 table_name が空文字列の場合は、 次のエ ラ ー メ ッ セージが表示 さ れま す。 テーブル名は空文字列にで き ません。 psp_pkeys 現在のデー タ ベース ま たは指定 さ れたデー タ ベース か ら 、 特定テーブルの 主キー情報を返 し ます。 構文 call psp_pkeys(['pkey_table_qualifier']['table_name']) 6-27 シス テム ス ト ア ド プ ロ シージ ャ 引数 表 6-22 psp_pkeys の引数 パラ メ ー タ デー タ 型 デフ ォル ト 値 説明 pkey_table_qualifier VARCHAR(20) 現在のデー タ ベース 詳細 を 取得す る デー タ ベース の名前 table_name VARCHAR(255) すべてのテー ブル 主キー情報 を 要求す る テーブルの名前 返 さ れる結果セ ッ ト 表 6-23 psp_pkeys で返 さ れる結果セ ッ ト 列名 デー タ 型 説明 TABLE_QUALIFIER VARCHAR(20) デー タ ベース の名前 TABLE_OWNER VARCHAR(20) 主キーの所有者の名前 TABLE_NAME VARCHAR(255) 主キー テーブルの名前 COLUMN_NAME VARCHAR(255) 主キー列の名前 COLUMN_SEQ USMALLINT 列の順序 PK_NAME VARCHAR(255) 主キーの名前 例 次の ス テー ト メ ン ト は、'pkeytest1' テーブルに定義 さ れてい る 主キーに関す る 情報を返 し ます。 CREATE TABLE pkeytest1 ( col1 int NOT NULL, col2 int NOT NULL, col3 VARCHAR(20) NOT NULL, PRIMARY KEY(col1, col2), UNIQUE(col3) ) ... call psp_pkeys(,'pkeytest1') 6-28 Pervasive PSQL シ ス テム ス ト ア ド プ ロ シージ ャ 結果セ ッ ト Table_ qualifier Table_ owner Table_name Column_ name Column_ Seq PK_name 'demodata' Null Pkeytest1 Col1 0 PK_col1 'demodata' Null Pkeytest1 Col2 1 PK_col1 call psp_pkeys('wsrde', 'pkeytest2') 結果セ ッ ト Table_ qualifier Table_ owner Table_name Column_ name Column_ Seq PK_name 'wsrde' Null Pkeytest1 Col1 0 PK_col1 'wsrde' Null Pkeytest1 Col2 1 PK_col1 エ ラ ー状況 pkey_table_qualifier が空文字列の場合は、 次のエ ラ ー メ ッ セージが表示 さ れます。 有効なデー タ ベース名を入力 し て く だ さ い。 デー タ ベース名は空文字 列にで き ません。 table_name が ヌ ルの場合は、 次のエ ラ ー メ ッ セージが表示 さ れます。 テーブル名は ヌ ルにで き ません。 psp_rename お使いのマシ ンが現在接続 さ れてい る デー タ ベース内の列、イ ンデ ッ ク ス、 関数、プ ロ シージ ャ 、テーブル、 ト リ ガ、ま たはビ ュ ーの名前を変更 し ます。 構文 call psp_rename('object_name','new_name','object_type') 6-29 シス テム ス ト ア ド プ ロ シージ ャ 引数 表 6-24 psp_rename の引数 パラ メ ー タ デー タ 型 説明 object_name VARCHAR(776) 列、 イ ンデ ッ ク ス、 ユーザー定義関数、 ス ト ア ド プ ロ シージ ャ 、 テーブル、 ト リ ガ、 ま たはビ ュ ーの現在の名前 object_name は、 オブ ジ ェ ク ト の種類に 応 じ て特有の形式で指定す る 必要が あ り ます。 列 : テーブル名 . 列名 イ ンデ ッ ク ス : テーブル名 . イ ンデ ッ ク ス名 関数 : 関数名 プ ロ シージ ャ : プ ロ シージ ャ 名 テーブル : テーブル名 ト リ ガ : テーブル名 . ト リ ガ名 ビ ュ ー : ビ ュ ー名 new_name VARCHAR(776) オ ブ ジ ェ ク ト の ユーザー定義名。 名前 は、 オブジ ェ ク ト の種類に合っ た名前付 け 規則 に 従 っ て い る 必要 が あ り ま す。 『Pervasive PSQL Programmer’s Guide』 の 「名前付け規則」 セ ク シ ョ ン を参照 し て く だ さ い。 こ のマニ ュ アルは、 Pervasive PSQL Software Developer Kit (SDK) に含 ま れてい ます。 object_type VARCHAR(13) 名前を変更す る オブジ ェ ク ト の種類。 bject_type は COLUMN、 INDEX、 FUNCTION、 PROCEDURE、 TABLE、 TRIGGER、 ま たは VIEW のいずれかで なければな り ません。 例 次の ス テー ト メ ン ト は、 現在のデー タ ベー ス 内の ス ト ア ド プ ロ シージ ャ "checkstatus" の名前を "eligibility" に変更 し ます。 call psp_rename('checkstatus', 'eligibility', 'PROCEDURE') 6-30 Pervasive PSQL シ ス テム ス ト ア ド プ ロ シージ ャ エ ラ ー状況 psp_rename か ら 返 さ れ る すべてのエ ラ ーは ス テー タ ス コ ー ド -5099 を使用 し ます。 『Status Codes and Messages』 の 「-5099 : psp_rename に関連す る エ ラ ー状態」 (1-47 ページ) を参照 し て く だ さ い。 psp_stored_procedures 現在のデー タ ベー ス ま たは指定 さ れたデー タ ベー ス か ら 、 ス ト ア ド プ ロ シージ ャ の一覧 と それに関連す る 情報を返 し ます。 構文 call psp_stored_procedures(['database_qualifier'], ['procedure_ name'], ['procedure_type']) 引数 表 6-25 psp_stored_procedures の引数 パラ メ ー タ デー タ 型 デフ ォル ト 値 説明 database_qualifier VARCHAR(20) 現在のデー タ ベース 詳細を取得す る デー タ ベース の名前 procedure_name VARCHAR(255) すべてのプ ロ シージ ャ 情報を要求す る ス ト ア ド プ ロ シージ ャ の名前 procedure_type VARCHAR(5) すべての種類 のプ ロ シー ジャ SP - ス ト ア ド プ ロ シー ジ ャ を返 し ます SSP - シ ス テ ム ス ト ア ド プ ロ シージ ャ を返 し ます 返 さ れる結果セ ッ ト 表 6-26 psp_stored_procedures で返 さ れる結果セ ッ ト 列名 デー タ 型 説明 PROCEDURE_QUALIFIER VARCHAR(20) デー タ ベース の名前 PROCEDURE_OWNER VARCHAR(20) プロシージャの所有者の名前 6-31 シス テム ス ト ア ド プ ロ シージ ャ 表 6-26 psp_stored_procedures で返 さ れる結果セ ッ ト 列名 デー タ 型 説明 PROCEDURE_NAME VARCHAR(255) プ ロ シージ ャ の名前 PROCEDURE_TYPE VARCHAR(25) プ ロ シージ ャ の種類。 異な る 種類のプ ロ シージ ャ は、 "STORED PROCEDURE" と "SYSTEM STORED PROCEDURE" です。 NUM_INPUT_PARAMS INT ヌ ル を 返 し ま す。 こ れ は、 Pervasive PSQL DSN に対 し て SQLPROCEDURES を 実 行 し た場合には ヌ ルが返 さ れ る か ら です。 NUM_OUTPUT_PARAMS INT ヌ ル を 返 し ま す。 こ れ は、 Pervasive PSQL DSN に対 し て SQLPROCEDURES を 実 行 し た場合には ヌ ルが返 さ れ る か ら です。 NUM_RESULT_SETS INT ヌ ル を 返 し ま す。 こ れ は、 Pervasive PSQL DSN に対 し て SQLPROCEDURES を 実 行 し た場合には ヌ ルが返 さ れ る か ら です。 REMARKS VARCHAR(255) 備考 例 次の ス テー ト メ ン ト は、 現在のデー タ ベー ス 内のすべての ス ト ア ド プ ロ シージ ャ に関する 情報を一覧表示 し ます。 Call psp_stored_procedures(,) 結果セ ッ ト Procedure_ qualifier Procedure_ owner Procedure_ name Procedure _type Num_ input_ params Num_ output_ params Num_ result_ sets Remarks Demodata Null Myproc1 Stored Procedure Null Null Null Null Demodata Null Myproc2 Stored Procedure Null Null Null Null ..... 6-32 Pervasive PSQL シ ス テム ス ト ア ド プ ロ シージ ャ call psp_stored_procedures('wsrde', , 'SP') 結果セ ッ ト Procedure_ qualifier Procedure_ owner Procedure_ name Procedure _type Num_ input_ params Num_ output_ params Num_ result_ sets Remarks wsrde Null Mytestproc1 Stored Procedure Null Null Null Null wsrde Null Mytestproc2 Stored Procedure Null Null Null Null ..... エ ラ ー状況 database_qualifier が空文字列の場合は、次のエ ラ ー メ ッ セージが表示 さ れます。 有効なデー タ ベース名を入力 し て く だ さ い。 デー タ ベース名は空文字 列にで き ません。 procedure_name が空文字列の場合は、 次のエ ラ ー メ ッ セージが表示 さ れます。 プ ロ シージ ャ 名は空文字列にで き ません。 procedure_name が ヌ ルの場合は、 次のエ ラ ー メ ッ セージが表示 さ れま す。 プ ロ シージ ャ 名は ヌ ルにで き ません。 procedure_type が空文字列の場合は、 次のエ ラ ー メ ッ セージが表示 さ れ ます。 プ ロ シージ ャ の種類は空文字列にで き ません。 procedure_type の値が SP ま たは SSP でない場合は、 次のエ ラ ー メ ッ セージが表示 さ れます。 プ ロ シージ ャ の種類は SP ま たは SSP のいずれかです。 6-33 シス テム ス ト ア ド プ ロ シージ ャ psp_tables 現在のデー タ ベース ま たは指定 さ れたデー タ ベース か ら 、 テーブルの一覧 と それに関連する 情報を返 し ます。 構文 call psp_tables(['database_qualifier'], ['table_name'], ['table_ type']) 引数 表 6-27 psp_tables の引数 パラ メ ー タ デー タ 型 デフ ォル ト 値 説明 database_ qualifier VARCHAR(20) 現在のデー タ ベース 詳細 を 取得す る デー タ ベース の名前 table_name VARCHAR(255) すべ て の テ ー ブル 情報 を 取得す る 必要の あ る テーブルの名前 table_type VARCHAR(20) すべ て の種類 のテーブル 次の いずれか で な け れ ばな り ません。 User table - ユ ー ザ ー テーブルのみ返 し ます System table - シ ス テ ム テーブルのみ返 し ます 返 さ れる結果セ ッ ト 表 6-28 psp_tables で返 さ れる結果セ ッ ト 6-34 列名 デー タ 型 説明 TABLE_QUALIFIER VARCHAR(20) デー タ ベース の名前 TABLE_OWNER VARCHAR(20) テーブル所有者の名前 TABLE_NAME VARCHAR(255) テーブルの名前 Pervasive PSQL シ ス テム ス ト ア ド プ ロ シージ ャ 表 6-28 psp_tables で返 さ れる結果セ ッ ト 列名 デー タ 型 説明 TABLE_TYPE VARCHAR(15) System table - テ ーブルが シ ス テ ム テーブルの場合 User table - 任 意 の ユ ー ザーに よ っ て 作成 さ れ た テーブルの場合 REMARKS VARCHAR(255) 備考 FILE_LOCATION VARCHAR(255) フ ァ イ ル が 保存 さ れ て い る 場所 例 call psp_tables(,,) 結果セ ッ ト Table_qualifier Table_ owner Table_name Table_ Type Remarks File_location Demodata Null X$file System table Null File.ddf Demodata Null X$field System table Null Field.ddf Demodata Null X$Attrib System table Null Attrib.ddf Demodata Null Billing User table Null Billing.mkd ..... 6-35 シス テム ス ト ア ド プ ロ シージ ャ call psp_tables(, , 'User table') 結果セ ッ ト Table_qualifier Table_ owner Table_name Table_ Type Remarks File_location Demodata Null Class User table Null class.mkd Demodata Null Billing User table Null Billing.mkd ..... call psp_tables(, , 'System table') 結果セ ッ ト Table_qualifier Table_ owner Table_name Table_ Type Remarks File_location Demodata Null X$file System table Null File.ddf Demodata Null X$field System table Null Field.ddf Demodata Null X$Attrib System table Null Attrib.ddf ..... 6-36 Pervasive PSQL シ ス テム ス ト ア ド プ ロ シージ ャ call psp_tables('wsrde', 'X$file',) 結果セ ッ ト Table_qualifier Table_ owner Table_name Table_ Type Remarks File_location wsrde Null X$file System table Null File.ddf エ ラ ー状況 database_qualifier が空文字列の場合は、次のエ ラ ー メ ッ セージが表示 さ れます。 有効なデー タ ベース名を入力 し て く だ さ い。 デー タ ベース名は空文字 列にで き ません。 table_name が空文字列の場合は、 次のエ ラ ー メ ッ セージが表示 さ れま す。 テーブル名は空文字列にで き ません。 table_type が空文字列の場合は、次のエ ラ ー メ ッ セージが表示 さ れます。 テーブルの種類は空文字列にで き ません。 table_type に User table ま たは System table 以外の値を指定 し た場合は、 次のエ ラ ー メ ッ セージが表示 さ れます。 テーブルの種類は user table ま たは system table のいずれかです。 psp_table_rights 現在のデー タ ベース ま たは指定 さ れたデー タ ベース か ら 、 特定テーブルの テーブルのア ク セ ス権の一覧 と それに関連す る 情報を返 し ます。 構文 call psp_table_rights(['database_qualifier'], ['table_name'], ['user_name']) 6-37 シス テム ス ト ア ド プ ロ シージ ャ 引数 表 6-29 psp_table_rights の引数 パラ メ ー タ デー タ 型 デ フ ォル ト 値 説明 database_ qualifier VARCHAR(20) 現在のデー タ ベース 詳細 を 取得す る デー タ ベース の名前 table_name VARCHAR(255) すべてのテーブル ア ク セ ス 権が指定 さ れ てい る テーブルの名前 user_name VARCHAR(255) すべてのユーザー テ ーブル の ア ク セ ス 権 の一覧 を 取得す る 必要 のあ る ユーザーの名前 返 さ れる結果セ ッ ト 表 6-30 psp_table_rights で返 さ れる結果セ ッ ト 列名 デー タ 型 説明 TABLE_QUALIFIER VARCHAR(20) デー タ ベース の名前 TABLE_OWNER VARCHAR(20) テーブルの所有者の名前 USER_NAME (GRANTEE) VARCHAR(255) ユーザーの名前 TABLE_NAME VARCHAR(255) テーブルの名前 RIGHTS VARCHAR(12) 次のいずれかの値です。 SELECT UPDATE INSERT ALTER REFERENCES DELETE 例 次の ス テー ト メ ン ト は、 ユーザー 'John' が 'Department' テーブルに対 し て 持っ てい る テーブルのア ク セ ス権を出力 し ます。 GRANT SELECT ON Department TO John; GRANT ALTER ON Department TO John; 6-38 Pervasive PSQL シ ス テム ス ト ア ド プ ロ シージ ャ GRANT DELETE ON Department TO John; GRANT SELECT ON class TO Mary; GRANT ALTER ON class TO Mary; call psp_table_rights(,'Department', 'John') 結果セ ッ ト Table_qualifier Table_owner User_name Table_name Rights Demodata Null John Department SELECT Demodata Null John Department ALTER Demodata Null John Department DELETE Demodata Null Mary Class SELECT Demodata Null Mary Class ALTER ..... call psp_table_rights('demodata', 'department', ) 結果セ ッ ト Table_qualifier Table_owner User_name Table_name Rights Demodata Null John Department SELECT Demodata Null John Department ALTER Demodata Null John Department DELETE ..... 6-39 シス テム ス ト ア ド プ ロ シージ ャ call psp_table_rights('demodata', 'class, 'Mary') 結果セ ッ ト Table_qualifier Table_owner User_name Table_name Rights Demodata Null Mary Class SELECT Demodata Null Mary Class ALTER ..... エ ラ ー状況 database_qualifier が空文字列の場合は、次のエ ラ ー メ ッ セージが表示 さ れます。 有効なデー タ ベース名を入力 し て く だ さ い。 デー タ ベース名は空文字 列にで き ません。 table_name が空文字列の場合は、 次のエ ラ ー メ ッ セージが表示 さ れま す。 テーブル名は空文字列にで き ません。 user_name が空文字列の場合は、 次のエ ラ ー メ ッ セージが表示 さ れま す。 ユーザー名は空文字列にで き ません。 psp_triggers 現在のデー タ ベース ま たは指定 さ れたデー タ ベース か ら 、 ト リ ガの一覧 と それに関連す る 情報を返 し ます。 構文 call psp_triggers(['database_qualifier'], ['table_name']) 6-40 Pervasive PSQL シ ス テム ス ト ア ド プ ロ シージ ャ 引数 表 6-31 psp_triggers の引数 パラ メ ー タ デー タ 型 デフ ォル ト 値 説明 database_ qualifier VARCHAR(20) 現在のデー タ ベース 詳細 を 取得す る デー タ ベース の名前 table_name VARCHAR(255) すべ て の テ ー ブル ト リ ガ が定義 さ れ て い る テ ー ブ ル の 名前。 パ タ ー ン 検索が サ ポ ー ト さ れます。 返 さ れる結果セ ッ ト 表 6-32 psp_triggers で返 さ れる結果セ ッ ト 列名 デー タ 型 説明 TRIGGER_QUALIFIER VARCHAR(20) デー タ ベース の名前 TRIGGER_OWNER VARCHAR(20) ト リ ガの所有者の名前 TABLE_NAME VARCHAR(255) ト リ ガ が定義 さ れ て い る テ ーブ ルの名前。 TRIGGER_NAME VARCHAR(255) ト リ ガの名前 ISUPDATE UTINYINT UPDATE ト リ ガ で あ る 場合に設 定 さ れます ISDELETE UTINYINT DELETE ト リ ガ で あ る 場合に設 定 さ れます ISINSERT UTINYINT INSERT ト リ ガであ る 場合に設定 さ れます ISAFTER UTINYINT ト リ ガの動作時間が "AFTER" で あ る 場合に設定 さ れます ISBEFORE UTINYINT ト リ ガ の 動作時間 が "BEFORE" であ る 場合に設定 さ れます REMARKS VARCHAR(255) 備考 6-41 シス テム ス ト ア ド プ ロ シージ ャ 例 次の ス テー ト メ ン ト は、'A' テーブルに定義 さ れてい る ト リ ガの一覧を返 し ます。 CREATE TABLE A ( col1 INTEGER, col2 CHAR(255) ) ; CREATE TABLE B ( col1 INTEGER, col2 CHAR(255) ) ; CREATE TRIGGER MyInsert AFTER INSERT ON A FOR EACH ROW INSERT INTO B VALUES (NEW.col1, NEW.col2); ... call psp_triggers(,) 結果セ ッ ト Trigger_ qualifier Trigger _owner Table_ name Trigger_ name isupdate isdelete isinsert isafter isbefore Remarks demodata Null A MyInsert 0 0 1 0 0 Null ..... call psp_triggers('demodata', ) 結果セ ッ ト Trigger_ qualifier Trigger _owner Table_ name Trigger_ name isupdate isdelete isinsert isafter isbefore Remarks demodata Null A MyInsert 0 0 1 0 0 Null ..... 6-42 Pervasive PSQL シ ス テム ス ト ア ド プ ロ シージ ャ エ ラ ー状況 database_qualifier が空文字列の場合は、次のエ ラ ー メ ッ セージが表示 さ れます。 有効なデー タ ベース名を入力 し て く だ さ い。 デー タ ベース名は空文字 列にで き ません。 table_name が空文字列の場合は、 次のエ ラ ー メ ッ セージが表示 さ れま す。 テーブル名は空文字列にで き ません。 psp_udfs 現在のデー タ ベース ま たは指定 さ れたデー タ ベース か ら 、 ユーザー定義関 数 (UDF) の一覧 と それに関連する 情報を返 し ます。 構文 call psp_udfs(['database_qualifier'], ['udf_name']) 引数 表 6-33 psp_udfs の引数 パラ メ ー タ デー タ 型 デフ ォル ト 値 説明 database_ qualifier VARCHAR(20) 現在のデー タ ベース 詳細 を 取得す る デー タ ベース の名前 udf_name VARCHAR(255) すべての UDF 詳細を要求す る UDF の 名前 返 さ れる結果セ ッ ト 表 6-34 psp_udfs で返 さ れる結果セ ッ ト 列名 デー タ 型 説明 UDF_QUALIFIER VARCHAR(20) デー タ ベース の名前 UDF_OWNER VARCHAR(20) UDF の所有者の名前 UDF_NAME VARCHAR(255) UDF の名前 6-43 シス テム ス ト ア ド プ ロ シージ ャ 表 6-34 psp_udfs で返 さ れる結果セ ッ ト 列名 デー タ 型 説明 UDF_TYPE VARCHAR(25) UDF の種類 現在、Pervasive PSQL は特別 な種類の UDF をサポー ト し てい ません。 NUM_INPUT_PARAMS INT ヌ ル を 返 し ま す。 こ れ は、 Pervasive PSQL DSN に対 し て SQLPROCEDURES を 実 行 し た場合には ヌ ルが返 さ れ る か ら です。 NUM_OUTPUT_PARAMS INT 1 を 返 し ま す。 UDF は ス カ ラ 値のみを返 し ます。 NUM_RESULT_SETS INT 0 を 返 し ま す。 UDF は結果 セ ッ ト を返 し ません。 REMARKS VARCHAR(255) 備考 例 call psp_udfs(, ) 結果セ ッ ト UDF_ qualifier UDF_ owner UDF_name Udf_type Num_input_ params Num_output_ params Num_ result _sets Remarks Demodata Null CalcInterest User-defined function Null 1 0 Null Demodata Null Factorial User-defined function Null 1 0 Null ..... 6-44 Pervasive PSQL シ ス テム ス ト ア ド プ ロ シージ ャ call psp_udfs('wsrde', ) 結果セ ッ ト UDF_ qualifier UDF_ owner UDF_name Udf_type Num_input_ params Num_output_ params Num_ result _sets Remarks wsrde Null CalcInterest User-defined function Null 1 0 Null wsrde Null Factorial User-defined function Null 1 0 Null ..... エ ラ ー状況 database_qualifier が空文字列の場合は、次のエ ラ ー メ ッ セージが表示 さ れます。 有効なデー タ ベース名を入力 し て く だ さ い。 デー タ ベース名は空文字 列にで き ません。 udf_name が空文字列の場合は、次のエ ラ ー メ ッ セージが表示 さ れます。 ユーザー定義関数名は空文字列にで き ません。 psp_users 現在のデー タ ベース ま たは指定 さ れたデー タ ベース か ら 、 ユーザーの一覧 と それに関連す る 情報を返 し ます。 構文 call psp_users(['database_qualifier'], ['group_name'], ['user_ name']) 6-45 シス テム ス ト ア ド プ ロ シージ ャ 引数 表 6-35 psp_users の引数 パラ メ ー タ デー タ 型 デ フ ォル ト 値 説明 database_ qualifier VARCHAR(20) 現在のデー タ ベース 詳細を取得す る デー タ ベース の名前 group_name VARCHAR(255) すべてのグループ ユーザー情報の取得に 使用す る グループの名 前。 パ タ ー ン 検索がサ ポ ー ト さ れ ま す。 グ ループ名が指定 さ れて い る (つ ま り 、 ヌ ルで な い) 場合は、 そ の同 じ グループに属 し てい る ユーザーのみが返 さ れます。 user_name VARCHAR(255) すべてのユーザー ユ ー ザ ー の 名 前。 パ タ ーン検索がサポー ト さ れます。 返 さ れる結果セ ッ ト 表 6-36 psp_users で返 さ れる結果セ ッ ト 6-46 列名 デー タ 型 説明 DATABASE_ QUALIFIER VARCHAR(20) デー タ ベース の名前 GROUP_ID USMALLINT ユーザーが属 し て い る グ ループの グループ ID GROUP_NAME VARCHAR(255) ユーザーが属 し て い る グ ループの 名前 USER_ID USMALLINT ユーザーの ID USER_NAME VARCHAR(255) ユーザーの名前 Pervasive PSQL シ ス テム ス ト ア ド プ ロ シージ ャ 例 call psp_users(, , ) 結果セ ッ ト Database_qualifier Group_Id Group_Name User_Id User_Name Demodata 1 DevGrp 3 John Demodata 2 DevGrp1 1 Mary Demodata 1 DevGrp 4 Michael call psp_users(, 'Devgrp', ) 結果セ ッ ト Database_qualifier Group_Id Group_Name User_Id User_Name Demodata 1 DevGrp 3 John Demodata 2 DevGrp 4 Michael call psp_users('wsrde', 'Devgrp', 'John') 結果セ ッ ト Database_qualifier Group_Id Group_Name User_Id User_Name wsrde 1 DevGrp 3 John エ ラ ー状況 database_qualifier が空文字列の場合は、次のエ ラ ー メ ッ セージが表示 さ れます。 有効なデー タ ベース名を入力 し て く だ さ い。 デー タ ベース名は空文字 列にで き ません。 6-47 シス テム ス ト ア ド プ ロ シージ ャ user_name が ヌ ルの場合は、 次のエ ラ ー メ ッ セージが表示 さ れます。 ユーザー名は ヌ ルにで き ません。 group_name が空文字列の場合は、 次のエ ラ ー メ ッ セージが表示 さ れま す。 グループ名は空文字列にで き ません。 psp_views 現在のデー タ ベース ま たは指定 さ れたデー タ ベース か ら 、 ビ ュ ーの一覧 と それに関連す る 情報を返 し ます。 構文 call psp_views(['database_qualifier'], ['view_name']) 引数 表 6-37 psp_views の引数 パラ メ ー タ デー タ 型 デ フ ォル ト 値 説明 Database_ qualifier VARCHAR(20) 現在のデータ ベース 詳細を取得す る デー タ ベー ス の名前 view_name VARCHAR(255) すべてのビュー 情報を要求す る ビ ュ ーの名 前。 パ タ ー ン 検索がサポー ト さ れます。 返 さ れる結果セ ッ ト 表 6-38 psp_views で返 さ れる結果セ ッ ト 6-48 列名 デー タ 型 説明 VIEW_QUALIFIER VARCHAR(20) デー タ ベース の名前 VIEW_OWNER VARCHAR(20) ビ ュ ーの所有者の名前 VIEW_NAME VARCHAR(255) ビ ュ ーの名前 REMARKS VARCHAR(255) 備考 VERSION_ID UTINYINT ビ ュ ーのバージ ョ ン ID Pervasive PSQL シ ス テム ス ト ア ド プ ロ シージ ャ 例 CREATE VIEW vw_Person (lastn,firstn,phone) AS SELECT Last_Name, First_Name,Phone FROM Person; ... call psp_views( ) 結果セ ッ ト View_Qualifier View_Owner View_Name View_Name Demodata Null Vw_Person Null ..... call psp_views('demodata', 'vw_Person') 結果セ ッ ト View_Qualifier View_Owner View_Name View_Name Demodata Null Vw_Person Null ..... エ ラ ー状況 database_qualifier が空文字列の場合は、次のエ ラ ー メ ッ セージが表示 さ れます。 有効なデー タ ベース名を入力 し て く だ さ い。 デー タ ベース名は空文字 列にで き ません。 view_name が空文字列の場合は、 次のエ ラ ー メ ッ セージが表示 さ れま す。 ビ ュ ー名は空文字列にで き ません。 6-49 シス テム ス ト ア ド プ ロ シージ ャ 6-50 パフ ォ ーマ ン ス リ フ ァ レ ン ス 7 デー タ ベース エ ン ジ ンのパフ ォ ーマ ン ス機能についての検討 こ こ では、 デー タ ベー ス エ ン ジ ン で使用 さ れ る 最適化の詳細 と 、 SQL ス テー ト メ ン ト で こ れを最大限利用す る 方法について説明 し ます。 こ こ では、 複雑な技術的題材を取 り 上げてお り 、 その内容は熟練 SQL ユー ザー向けです。 こ こ で使用 さ れてい る 用語の定義については、 「用語」 (717 ページ) を参照 し て く だ さ い。 「制限の分析」 (7-2 ページ) 「制限の最適化」 (7-4 ページ) 「プ ッ シ ュ ダ ウ ン フ ィ ル タ 」 (7-10 ページ) 「 イ ンデ ッ ク ス の有効な使用法」 (7-11 ページ) 「テ ン ポ ラ リ テーブルのパフ ォーマ ン ス」 (7-14 ページ) 「行の事前取得」 (7-15 ページ) 「用語」 (7-17 ページ) 7-1 パフ ォ ーマ ン ス リ フ ァ レ ン ス 制限の分析 こ こ では、 デー タ ベース エン ジ ンが 「制限」 で分析 と 最適化に使用す る 方 法の 1 つを説明 し ます。 こ こ で使用 さ れてい る 用語の定義については、「用 語」 (7-17 ページ) を参照 し て く だ さ い。 変形 CNF 変換 SQL ス テー ト メ ン ト の実行中に、 デー タ ベース エン ジ ンは制限を 「変形論 理積標準形 (変形 CNF) 」 に変換 し よ う と し ます。 変形 CNF への変換は、 論理式を同一構造に置いて、 ク エ リ 処理の最適化のための制限の分析を容 易に し ます。 制限を変形 CNF に変換で き る 場合、デー タ ベース エン ジ ンは ク エ リ を順序立てて完全に分析 し 、 利用可能な 「 イ ンデ ッ ク ス」 を有効に 利用で き る よ う に最適化 し ま す。 デー タ ベー ス エ ン ジ ン が制限 を 変形 CNF に変換で き ない場合で も 、 制限を分析 し てで き る 限 り の最適化を行い ます。 ただ し 、 こ の場合デー タ ベース エン ジ ンは、 既に変形 CNF にあ る 制 限や内部的に変形 CNF に変換す る こ と がで き る 制限の よ う には、利用可能 な イ ンデ ッ ク ス を有効利用で き ない こ と が し ば し ばあ り ます。 変換で き ない制限 制限の内容に よ っ ては、 デー タ ベース エ ン ジ ンが変形 CNF に変換で き な い制限があ り ます。 次の項目のいずれかが真にな る 場合、 制限は変形 CNF に変換 さ れません。 制限にサブ ク エ リ が含まれてい る 。 制限に NOT 演算子が含まれてい る 。 制限に動的パ ラ メ ー タ が含まれてい る (動的パ ラ メ ー タ は SQL ス テー ト メ ン ト 内の疑問符 ("?") で、 ス テー ト メ ン ト が実行 さ れ る と き に入 力を要求 さ れ る )。 変換が行われない条件 デー タ ベー ス エン ジ ンが制限を変形 CNF に変換で き る のにそ う し ない場 合がい く つか あ り ま す。 変形 CNF 変換後に最適化を適用す る よ り も 元の 形式に適用 し た方が最適化に よ る 利益を よ り 多 く 受け ら れ る と 判断 し た場 合、 デー タ ベース エ ン ジ ンは制限を変形 CNF に変換 し ない と い う 選択を し ます。 次の項目のいずれかが真にな る 場合、 制限は変形 CNF に変換 さ れません。 7-2 制限が 「論理和標準形 (DNF) 」 にな っ てお り 、 すべての 「述部」 は、 等号 (=)、 LIKE ま たは IN 比較演算子のみを含む。 制限の分析 た と えば、 デー タ ベース エン ジ ンは次の制限を変形 CNF に変換 し ま せん。 (c1 = 1 AND c2 = 1) OR (c1 = 1 AND c2 = 2) OR (c1 = 2) 制限が次のすべての条件に合致す る 。 「論理和標準形 (DNF) 」 の式を含み、 制限の残 り の部分 と AND で 結合 さ れてい る 。 指定 し た DNF 式は、 「述部」 のみで、 等号 (=)、 LIKE ま たは IN 比 較演算子を含む。 DNF 式内の各「論理積」で同 じ 位置にあ る 述部が同一列を参照する 。 た と えば、 次の 「式」 を含む 「制限」 は変形 CNF に変換 さ れません。 (c1 = 1 AND c2 = 1) OR (c1 = 1 AND c2 = 2) 7-3 パフ ォ ーマ ン ス リ フ ァ レ ン ス 制限の最適化 こ こ では、制限内の式を利用す る ためにデー タ ベース エン ジ ンが使用す る 基本技術を詳細に説明 し ます。 デー タ ベース エン ジ ンが実行す る 最適化の タ イ プ を単純な も のか ら 複雑な も のの順に下に示 し ます。 デー タ ベー ス エ ン ジ ン が使用す る 最適化技術 を 完全に理解す る こ と は、 デー タ ベー ス エ ン ジ ン での最適なパ フ ォ ーマ ン ス を実現す る ク エ リ を構 築す る のに役立ち ます。 さ ら に、 デー タ ベース エン ジ ンが ク エ リ を最適化 す る ために イ ンデ ッ ク ス を ど の よ う に使用す る か を理解す る こ と に よ り 、 一般的な使用で最高のパフ ォーマ ン ス を提供す る イ ンデ ッ ク ス の構築方法 を決定す る こ と がで き ます。 単純化のために、 下の説明では まず 1 つのテーブルの列を参照す る 式につ いて述べます。 述部で 2 つの異な る テーブルの列を比較す る 結合条件を使 用す る 最適化は単一テーブルの最適化の次に説明 し ます。 こ こ で使用 さ れてい る 用語の定義については、 「用語」 (7-17 ページ) を参 照 し て く だ さ い。 単一述部の最適化 「制限」 の最適化の最 も 単純な形式は単一の 「述部」 を使用 し ま す。 述部 は、 次の条件をすべて満たす場合、 最適化に使用 さ れます。 述部は AND 演算子で制限の残 り の部分 と 結合 さ れてい る 。 述部の 1 つのオペ ラ ン ド は先頭セグ メ ン ト であ る 列の参照で構成 さ れ、 も う 1 つのオペ ラ ン ド は列の参照を含ま ない式で構成 さ れてい る (つま り リ テ ラ ル値ま たは直接パ ラ メ ー タ し か含ま ない)。 比較演算子は <、 <=、 =、 >=、 >、 LIKE ま たは IN のいずれかです。 た と えば、 最初のセグ メ ン ト が列 c1 であ る イ ンデ ッ ク ス があ る と し ます。 次の述部は最適化に使用 さ れます。 c1 = 1 c1 IN (1,2) c1 > 1 閉 じ た範囲の最適化 「閉 じ た範囲」 は、 「単一述部の最適化」 の条件をすべて満たす場合、 最適 化に使用 さ れます。 た と えば、 最初のセグ メ ン ト が列 c1 であ る イ ンデ ッ ク ス があ る と し ます。 次の閉 じ た範囲は最適化に使用 さ れます。 c1 >= 1 AND c1 < 10 7-4 制限の最適化 変形論理和の最適化 「変形論理和」 は、次の条件にすべて合致す る 場合、最適化に使用 さ れます。 「制限」 の残 り の部分 と AND 演算子で結合 さ れてい る 。 論理和内のそれぞれの 「述部」 お よ び 「閉 じ た範囲」 は 「単一述部の最 適化」 お よ び 「閉 じ た範囲の最適化」 の要件を満た し てい る 。 それぞれの述部ま たは閉 じ た範囲はその他 と 同 じ 列を参照す る 。 た と えば、 最初のセグ メ ン ト が列 c1 であ る イ ンデ ッ ク ス があ る と し ます。 次の変形論理和は最適化に使用 さ れます。 c1 = 1 OR (c1 > 5 AND c1 < 10) OR c1 > 20 次の変形論理和は、 すべての述部 と 閉 じ た範囲内で同一列が参照 さ れてい ないため、 こ の タ イ プの最適化には使用 さ れません。 c1 = 1 OR (c1 > 5 AND c1 < 10) OR c2 = 1 論理積の最適化 「論理積」 は、 次の条件にすべて合致す る 場合、 最適化に使用 さ れます。 制限の残 り の部分 と AND 演算子で結合 さ れてい る 。 論理積内のそれぞれの 「述部」 は、 「単一述部の最適化」 の要件を満た し てい る 。 それぞれの述部は、 先頭セグ メ ン ト ご と に 1 つの述部のみを使用 し て、 イ ンデ ッ ク ス の先頭セグ メ ン ト で最適化を行 う (つま り 、 同 じ 先頭セグ メ ン ト のセ ッ ト を使用す る 2 つの異な る 述部はない)。 すべての述部は、 最後のセグ メ ン ト を参照す る 述部を除 き 、 最適化に使 用 さ れ、 等号 (=) 比較演算子を使用す る 。 た と えば、 最初の 3 つのセグ メ ン ト に c1、 c2、 c3 の 3 つの列を こ の順序で 持つ イ ンデ ッ ク ス があ る と し ます。 次の論理積の配置は最適化に使用 さ れ ます。 c1 = 1 AND c2 = 1 AND c3 = 1 c1 = 1 AND c2 = 1 AND c3 >= 1 c1 = 1 AND c2 > 1 述部の順序は関係あ り ません。 た と えば、 次の論理積は最適化に使用 さ れ ます。 c2 = 1 AND c3 = 1 AND c1 = 1 次の論理積は、 イ ンデ ッ ク ス の 2 番目のセグ メ ン ト が飛ば さ れてい る ため (列 c2 への参照がない)、 最適化には使用 さ れません。 c1 = 1 AND c3 = 1 こ の場合、 単一の述部 c1 = 1 は最適化に使用 さ れます。 7-5 パフ ォ ーマ ン ス リ フ ァ レ ン ス 論理和標準形の最適化 「論理和標準形 (DNF)」 の式は、 次の条件をすべて満たす場合、 最適化に 使用 さ れます。 制限の残 り の部分 と AND 演算子で結合 さ れてい る 。 式のそれぞれの論理積は、 「論理積の最適化」 の要件を満た し 、 さ ら に すべての述部が等号 (=) 比較演算子を含む必要があ る 。 すべての論理積は、 最適化に、 同 じ イ ンデ ッ ク ス と 同 じ 数のセグ メ ン ト を使用す る 必要があ る 。 デー タ ベース エン ジ ンは、 元か ら DNF にあ っ た制限を変形 CNF に変換 し ません。 こ れは DNF 上で最適化 さ れ る ためです。 た と えば、 最初の 3 つのセグ メ ン ト に c1、 c2、 c3 の 3 つの列を こ の順序で 持つ イ ンデ ッ ク ス が あ る と し ま す。 DNF の次の式は最適化に使用 さ れ ま す。 (c1 = 1 AND c2 = 1 AND c3 = 1) OR (c1 = 1 AND c2 = 1 AND c3 = 2) OR (c1 = 2 AND c2 = 2 AND c3 = 2) DNF の次の式は、 両方の論理積が同数のセ グ メ ン ト を参照 し ていないた め、 最適化に使用 さ れません。 (c1 = 1 AND c2 = 1 AND c3 = 1) OR (c1 = 1 AND c2 = 2) 変形論理積標準形の最適化 「変形論理積標準形 (変形 CNF) 」 の式は、 次の条件をすべて満たす場合、 最適化に使用 さ れます。 制限の残 り の部分 と AND 演算子で結合 さ れてい る 。 それぞれの 「変形論理和」 は 「変形論理和の最適化」 の要件を満たす。 ただ し 、 それぞれの変形論理和は、 「先頭セグ メ ン ト 」 を構成す る 異な る イ ンデ ッ ク ス セ グ メ ン ト を参照す る 必要があ る (つ ま り 、 すべての 論理和を集め る と ど のセグ メ ン ト も 抜けていない)。 すべての変形論理和は、 最後のセグ メ ン ト を参照す る も のを除 き 、 等号 (=) 比較演算子を使用す る 述部を少な く と も 1 つ含む。 変形 CNF 最適化は DNF 最適化 と 似てい ますが、 DNF 最適化ではサポー ト さ れない、 異な る 比較演算子を含む述部の組み合わせを使用す る こ と がで き ます。 た と えば、 最初の 3 つのセグ メ ン ト に c1、 c2、 c3 の 3 つの列を こ の順序で 持つ イ ンデ ッ ク ス があ る と し ます。変形 CNF の次の式は最適化に使用 さ れ ます。 (c1 = 1 OR c1 = 2) AND (c2 = 1 OR (c2 > 2 AND c2 < 5)) AND (c3 > 1) 7-6 制限の最適化 変形 DNF 内の等号式に注目す る と 、 デー タ ベース エン ジ ンが こ の式を最 適化に使用す る 方法を簡単に理解で き ます。 (c1 = 1 AND c2 = 1 AND c3 > 1) OR (c1 = 1 AND (c2 > 2 AND c2 < 5) AND c3 > 1) OR (c1 = 2 AND c2 = 1 AND c3 > 1) OR (c1 = 2 AND (c2 > 2 AND c2 < 5) AND c3 > 1) 変形 CNF 最適化で開いた範囲を閉 じ る 2 つの 「変形論理和」 は、 次の条件を満たす場合、 結合 さ れて 1 つま たは 複数の 「閉 じ た範囲」 を形成 し ます。 変形論理和は 「変形論理和の最適化」 の要件を満たす。 変形論理和は両方 と も 同一 イ ンデ ッ ク ス の同一セグ メ ン ト を使用す る 。 変形論理和は両方 と も 開いた範囲を含み、結合 さ れて 1 つま たは複数の 閉 じ た範囲を形成す る 。 た と えば、 最初のセグ メ ン ト が列 c1 であ る イ ンデ ッ ク ス があ る と し ます。 変形 CNF の次の式は最適化に使用 さ れます。 (c1 = 1 OR c1 > 2) AND (c1 < 5 OR c1 = 10) 単純な変形論理和であ る 等号式に注目す る と 、デー タ ベース エン ジ ンが こ の式を最適化に使用す る 方法が簡単に理解で き ます。 c1 = 1 OR (c1 > 2 AND c1 < 5) OR c1 = 10 単一結合条件の最適化 2 つのテーブルを含む最 も 単純な最適化の形式は、 単一の 「結合条件」 を 使用 し ます。 単一の結合条件の最適化は 「単一述部の最適化」 に似てい ま す。 結合条件は、 単一述部の最適化の条件をすべて満たす場合、 最適化に 使用 さ れます。 結合条件を使用 し て最適化 さ れ る テーブルは、 結合条件内 で参照 さ れ る ほかのテーブルの後で処理 さ れます。 結合条件を使用 し て最 適化 さ れ る テーブルは、 結合条件内で参照 さ れ る ほかのテーブルの行か ら 取得 し た最適化値を使用 し ます。 た と えば、 最初のセグ メ ン ト が列 c1 であ る テーブル t1 の イ ンデ ッ ク ス が あ る と し ます。 次の結合条件は最適化に使用 さ れます。 t1.c1 = t2.c1 t1.c1 > t2.c2 最適化の間、 行はテーブル t2 か ら 取得 さ れます。 こ の行か ら 、 列 c2 の値 を使用 し て、 結合条件に従っ てテーブル t1 を最適化 し ます。 t1.c1 の イ ン デ ッ ク ス の代わ り に t2.c1 と い う イ ン デ ッ ク ス が あ る 場合、 t1.c1=t2.c1 を使用 し てテーブル t2 を最適化で き ます。 こ の場合、 テー ブル t1 が最初に処理 さ れ、 t1.c1 の値が結合条件に従っ てテーブル t2 の最 適化に使用 さ れます。 7-7 パフ ォ ーマ ン ス リ フ ァ レ ン ス t1.c1 の イ ン デ ッ ク ス だ け で な く t2.c1 の イ ン デ ッ ク ス も 存在す る 場合に は、デー タ ベース エン ジ ンの ク エ リ オプテ ィ マ イ ザは両方のテーブルのサ イ ズに加え、 2 つの イ ンデ ッ ク ス の特性 も 調べて、 全体で最高の ク エ リ パ フ ォーマ ン ス を提供す る テーブルを選択 し ます。 結合条件を持つ論理積の最適化 結合条件の混成であ る 「論理積」 と ほかの 「述部」 は、 次の条件をすべて 満たす場合、 最適化に使用 さ れます。 すべての結合条件が同 じ 2 つのテーブルの列を比較する 。 論理積は、 2 つのテーブルのいずれかの通常の 「論理積の最適化」 の要 件を満た し てい る 。 論理積を使用 し て最適化 さ れ る テーブルは、 結合条件内で参照 さ れ る ほか のテーブルの後で処理 さ れます。 た と えば、 最初の 3 つのセグ メ ン ト に、 c1、 c2、 c3 の 3 つの列を こ の順序 で持つ イ ンデ ッ ク ス がテーブル t1 にあ る と し ます。次の論理積は最適化に 使用 さ れます。 t1.c1 t1.c1 t1.c1 t1.c1 = = = = t2.c1 t2.c1 t2.c1 1 AND AND t1.c2 = t2.c2 AND t1.c3 = t2.c3 AND t1.c2 > t2.c2 AND t1.c2 = 1 t1.c2 = t2.c2 結合条件を持つ変形論理積標準形の最適化 結合条件を含む 「変形論理積標準形 (変形 CNF) 」 の 「式」 は、 次の条件 をすべて満たす場合、 最適化に使用 さ れます。 「変形論理積標準形の最適化」 の条件を満たす。 さ ら に、先頭セグ メ ン ト の最後の部分で最適化 さ れた論理和以外で使用 さ れてい る すべての論理和は、単一の結合条件ま たは単一の述部のみを 含み、 少な く と も その中の 1 つは単一結合条件であ る 必要があ る 。 た と えば、 最初の 3 つのセグ メ ン ト に、 c1、 c2、 c3 の 3 つの列を こ の順序 で持つ イ ンデ ッ ク ス がテーブル t1 にあ る と し ます。 変形 CNF の次の式は 最適化に使用 さ れます。 (t1.c1 = t2.c1) AND (t1.c2 = t2.c2 OR (t1.c2 > 2 AND t1.c2 < 5)) (t1.c1 = 1) AND (t1.c2 = t2.c2) AND (t1.c3 > 2 AND t1.c3 < 5) 7-8 制限の最適化 変形 CNF 最適化で結合条件の開いた範囲を閉 じ る こ の タ イ プの最適化は、 閉 じ ら れ る 範囲が 「結合条件」 であ る こ と を除け ば、 ま さ に 「変形 CNF 最適化で開いた範囲を閉 じ る 」 と よ く 似てい ます。 た と えば、 最初の 2 つのセグ メ ン ト に、 c1、 c2 の 2 つの列を こ の順序で持 つ イ ンデ ッ ク ス がテーブル t1 にあ る と し ます。 変形 CNF の次の式は最適 化に使用 さ れます。 (t1.c1 > t2.c1) AND (t1.c1 < t2.c2 OR t1.c1 = 10) (t1.c1 = t2.c1) AND (t1.c2 > t2.c2) AND (t1.c2 < 10 OR t1.c2 = 100) 複数イ ンデ ッ ク スの変形論理和の最適化 「変形論理和」 は、 次の条件にすべて合致す る 場合、 複数の イ ンデ ッ ク ス を 使用 し て最適化に使用 さ れます。 制限の残 り の部分 と AND 演算子で結合 さ れてい る 。 論理和内のそれぞれの 「述部」 お よ び 「閉 じ た範囲」 は 「単一述部の最 適化」 ま たは 「閉 じ た範囲の最適化」 の要件を それぞれ満た し てい る 。 それぞれの述部ま たは閉 じ た範囲は、イ ンデ ッ ク ス の最初のセグ メ ン ト であ る 列を参照す る 。すべての述部 と 閉 じ た範囲が同一列を参照す る 場 合、 こ のシナ リ オは、 単に前に説明 し た 「変形論理和の最適化」 の と お り と な り ます。 た と えば、 最初のセグ メ ン ト が列 c1 であ る イ ンデ ッ ク ス と 、 最初のセグ メ ン ト が列 c2 であ る も う 1 つの イ ンデ ッ ク ス があ る と し ます。次の変形論理 和は最適化に使用 さ れます。 c1 = 1 OR (c1 > 5 AND c1 < 10) OR c2 = 1 7-9 パフ ォ ーマ ン ス リ フ ァ レ ン ス プ ッ シ ュ ダウ ン フ ィ ル タ プ ッ シ ュ ダ ウ ン フ ィ ル タ は厳密には内部的な最適化技術です。 高速な フ ィ ル タ 処理能力を利用す る こ と に よ り 、 デー タ ベース エン ジ ンは、 制限の内 容に よ っ て結果セ ッ ト か ら 拒否す る 特定の行を効率的に識別す る こ と がで き ます。 結果セ ッ ト か ら 行を排斥 し てか ら 結果セ ッ ト を返すため、 デー タ ベース エン ジ ンが分析す る 必要のあ る 行数が減 り 、プ ッ シ ュ ダ ウ ン フ ィ ル タ を使用 し ない場合 よ り も 速 く 処理を完了 し ます。 デー タ ベース エン ジ ンは、 次の条件が満た さ れ る 場合、 式ま たは式の組み 合わせをプ ッ シ ュ ダ ウ ン フ ィ ル タ と し て使用で き ます。 「制限」 の残 り の部分 と AND 演算子で結合 さ れてい る 場合、 プ ッ シ ュ ダ ウ ン フ ィ ル タ で 「述部」 が使用で き る 。 1 つのオペ ラ ン ド が列参照か ら 成 り 、 ほかのオペ ラ ン ド が リ テ ラ ル値ま た は動的パ ラ メ ー タ ("?") か ら 成 る 場合、 「述部」 がプ ッ シ ュ ダ ウ ン フ ィ ル タ で使用で き る 。 ま た、 参照 さ れ る 列のデー タ 型は、 bit、 float、 double、 real、 longvarchar、 longvarbinary ま たは binary のいずれで も ない 必要があ る 。 比較演算子が <、 <=、 =、 >=、 > ま たは <> のいずれかの場合、 プ ッ シ ュ ダ ウ ン フ ィ ル タ で 「述部」 が使用で き る 。 「論理和」 は、 制限の残 り の部分 と AND 演算子で結合 さ れ、 論理和内 のすべての述部がプ ッ シ ュ ダ ウ ン フ ィ ル タ で使用 さ れ る 述部の要件を 満たす場合、 プ ッ シ ュ ダ ウ ン フ ィ ル タ で使用で き る 。 ただ し 、 述部が 制限の残 り の部分 と AND 演算子で結合 さ れてい る 必要があ る 要件は除 く 。 プ ッ シ ュ ダ ウ ン フ ィ ル タ には論理和が 1 つだけ含まれ る 。 プ ッ シ ュ ダ ウ ン フ ィ ル タ は単一の論理和お よ びプ ッ シ ュ ダ ウ ン フ ィ ル タ で使用 さ れ る 述部の要件を満たす述部を組み合わせ る こ と がで き る 。 こ こ で使用 さ れてい る 用語の定義については、 「用語」 (7-17 ページ) を参 照 し て く だ さ い。 7-10 イ ンデ ッ ク スの有効な使用法 イ ンデ ッ ク スの有効な使用法 こ の リ リ ース では、 「制限」 以外の DISTINCT や ORDER BY 句な ど の ク エ リ の特性で最適化を行 う ために、 イ ンデ ッ ク ス の使用に関す る い く つかの 改善が行われま し た。 場合に よ っ ては、 イ ンデ ッ ク スは最適化目的で既に 使用 さ れてい ますが、こ の リ リ ース では さ ら に効率的に使用 さ れてい ます。 こ こ で使用 さ れてい る 用語の定義については、 「用語」 (7-17 ページ) を参 照 し て く だ さ い。 集計関数の DISTINCT イ ンデ ッ ク ス は、 DISTINCT キーワ ー ド を含む 「集計関数」 か ら 成 る 選択 リ ス ト を使用す る ク エ リ で取得す る 行数を減 ら すために使用す る こ と がで き ます。 こ の タ イ プの最適化に適す る よ う に、 DISTINCT キーワ ー ド が動 作す る 式は単一の列参照か ら 構成 さ れ る 必要があ り ます。 さ ら に、 その列 は イ ンデ ッ ク ス の先頭セグ メ ン ト であ る 必要があ り ます。 た と えば、 最初のセグ メ ン ト が列 c1 であ る テーブル t1 の イ ンデ ッ ク ス が あ る と し ます。 イ ンデ ッ ク ス は、 列 c1 の重複値を持つ行の取得を避け る た めに使用する こ と がで き ます。 SELECT COUNT(DISTINCT c1) FROM t1 WHERE c2 = 1 選択 リ ス ト に先立つ DISTINCT イ ンデ ッ ク ス は、 選択 リ ス ト に先立つ DISTINCT キーワー ド を持つ ク エ リ で取得す る 行数を減 ら すために使用す る こ と がで き ます。 こ の タ イ プの最 適化に適する よ う に、選択 リ ス ト は列参照のみか ら 成 り (算術式やス カ ラ ー 関数の よ う な複合式を含ま ない)、参照列は単一 イ ンデ ッ ク ス の先頭セグ メ ン ト であ る 必要があ り ます。 た と えば、 最初の 3 つのセグ メ ン ト に、 c1、 c2、 c3 の 3 つの列を任意の順 序で持つ イ ンデ ッ ク ス がテーブル t1 にあ る と し ます。 イ ンデ ッ ク ス は、 選 択 リ ス ト の項目の重複値を持つ行の取得を避け る ために使用す る こ と がで き ます。 SELECT DISTINCT c1, c2, c3 FROM t1 WHERE c2 = 1 イ ンデ ッ ク スのセグ メ ン ト 順序 ORDER BY 句で最適化のために イ ンデ ッ ク ス が使用 さ れ る か ど う かは、 イ ン デ ッ ク ス のセ グ メ ン ト と し て列が ど の よ う な順序で現れ る かに よ り ま す。 具体的には、 こ の タ イ プの最適化に適す る よ う に、 ORDER BY 句内の 列は イ ンデ ッ ク ス の先頭セグ メ ン ト であ る 必要があ り 、 イ ンデ ッ ク ス内で セ グ メ ン ト と し て現れ る 順序 と 同 じ 順序で ORDER BY 句に現れ る 必要が あ り ます。 7-11 パフ ォ ーマ ン ス リ フ ァ レ ン ス こ れ と は対照的に、 イ ンデ ッ ク ス は、 選択 リ ス ト ま たは GROUP BY 句が イ ンデ ッ ク ス の先頭セグ メ ン ト で構成 さ れてい る 限 り 、 選択 リ ス ト の前に あ る DISTINCT ま たは GROUP BY 句を最適化す る のに使用 さ れ ます。 こ の ス テー ト メ ン ト は、 イ ンデ ッ ク ス内のセグ メ ン ト と し て列が現れ る 順序 にかかわ ら ず真です。 た と えば、 最初の 3 つのセグ メ ン ト に、 c1、 c2、 c3 の 3 つの列を任意の順 序で持つ イ ンデ ッ ク ス がテーブル t1 にあ る と し ます。 イ ンデ ッ ク ス は、 次 の ク エ リ の DISTINCT で最適化を行 う ために使用す る こ と がで き ます。 SELECT DISTINCT c1, c2, c3 FROM t1 SELECT DISTINCT c2, c3, c1 FROM t1 WHERE c3 > 1 イ ンデ ッ ク ス は、 次の ク エ リ の GROUP BY で最適化を行 う ために使用す る こ と がで き ます。 SELECT c1, c2, c3, count(*) FROM t1 GROUP BY c2, c1, c3 SELECT c2, c3, c1, count(*) FROM t1 GROUP BY c3, c2, c1 ただ し 、 ORDER BY での最適化に使用 さ れ る イ ンデ ッ ク ス は、 c2、 c1、 c3 の順序であ る 必要があ り ます。 SELECT c1, c2, c3 FROM t1 ORDER BY c2, c1, c3 セグ メ ン ト の昇順属性 ORDER BY 句で最適化に イ ンデ ッ ク ス が使用 さ れ る か ど う かは、い く つか の条件に よ っ て決ま り ます。 具体的には、 イ ンデ ッ ク スは次の条件をすべて満たす場合、 最適化に使用 さ れます。 ORDER BY 句で列名に続いて DESC キーワー ド があ る 。 対応す る イ ンデ ッ ク ス セグ メ ン ト が降順で定義 さ れてい る 。 指定 し た列が ヌ ル可能列ではない。 さ ら に、 イ ンデ ッ ク ス は次の逆の条件をすべて満たす場合、 最適化に使用 さ れます ( ヌ ル可能列は昇順の ORDER BY では使用で き ます)。 ORDER BY ス テー ト メ ン ト で列名の後に ASC キーワー ド ま たは ASC で も DESC で も ない も のが続 く 。 対応す る イ ンデ ッ ク ス セグ メ ン ト が昇順で定義 さ れてい る 。 同様に、関連す る すべてのセグ メ ン ト の昇順ま たは降順属性が ORDER BY 句で指定 さ れた ASC ま たは DESC キー ワ ー ド と 完全に反す る 場合、 イ ン デ ッ ク ス は ORDER BY の最適化に使用 さ れ ま す。 さ ら に、 降順に定義 さ れたセグ メ ン ト は、 関連す る 列が ヌ ル可能列でない場合にのみ使用 さ れま す。 7-12 イ ンデ ッ ク スの有効な使用法 イ ンデ ッ ク ス は、 いずれかのセグ メ ン ト の属性が昇順であ る か降順であ る かに無関係に、 制限の最適化、 DISTINCT の最適化ま たは GROUP BY 句の 最適化に使用 さ れます。 た と えば、 最初の 2 つのセグ メ ン ト に、 c1、 c2 の 2 つの列を こ の順序で持 つ イ ンデ ッ ク ス がテーブル t1 にあ り 、 セグ メ ン ト は 2 つ と も 昇順であ る と し ます。 こ の イ ンデ ッ ク スは、 次の ク エ リ で最適化を行 う ために使用す る こ と がで き ます。 SELECT SELECT SELECT SELECT SELECT c1, c2, c3 FROM c1, c2, c3 FROM DISTINCT c1, c2 DISTINCT c2, c1 * FROM t1 WHERE t1 ORDER BY c1, c2 t1 ORDER BY c1 DESC, c2 DESC FROM t1 FROM t1 c1 = 1 最初の 2 つのセグ メ ン ト に、 c1、 c2 の 2 つの列を こ の順序で持つ イ ンデ ッ ク ス がテーブル t1 にあ り 、 c1 のセグ メ ン ト は昇順、 c2 のセグ メ ン ト は降 順に定義 さ れてい る と し ます。 ま た c2 は ヌ ル可能列であ る と し ます。 2 番 目のセグ メ ン ト は降順かつヌ ル可能列であ る ため、ORDER BY の最適化に は使用で き ません。 こ の イ ンデ ッ ク スは、 次の ク エ リ で最適化を行 う ため に使用する こ と がで き ます。 SELECT SELECT SELECT SELECT SELECT c1, c2, c3 FROM c1, c2, c3 FROM DISTINCT c1, c2 DISTINCT c2, c1 * FROM t1 WHERE t1 ORDER BY c1 t1 ORDER BY c1 DESC FROM t1 FROM t1 c1 = 1 c2 列が ヌ ル可能列でない場合、 イ ンデ ッ ク スは次の ク エ リ で最適化を行 う ために使用す る こ と がで き ます。 SELECT c1, c2, c3 FROM t1 ORDER BY c1, c2 DESC SELECT c1, c2, c3 FROM t1 ORDER BY c1 DESC, c2 検索更新の最適化 イ ンデ ッ ク ス の先頭セグ メ ン ト を更新す る と き 、 検索のための WHERE 句 で同 じ イ ンデ ッ ク ス を使 う こ と に よ っ て、 検索の最適化を利用す る こ と が で き ます。 デー タ ベース エン ジ ンは、 UPDATE 用のセ ッ シ ョ ン ( ク ラ イ ア ン ト ID) と 、 も う 1 つ検索用のセ ッ シ ョ ン を使用 し ます。 次の ス テー ト メ ン ト は、 検索の最適化に よ っ て利益を得 ら れます。 CREATE CREATE INSERT INSERT INSERT INSERT INSERT UPDATE UPDATE TABLE t1 (c1 INT) INDEX t1_c1 ON t1(c1) INTO t1 VALUES (1) INTO t1 VALUES (1) INTO t1 VALUES (9) INTO t1 VALUES (10) INTO t1 VALUES (10) t1 SET c1 = 2 WHERE c1 = 10 t1 SET c1 = c1 + 1 WHERE c1 >= 1 7-13 パフ ォ ーマ ン ス リ フ ァ レ ン ス テ ンポ ラ リ テーブルのパフ ォ ーマ ン ス パフ ォーマ ン ス の改善は、こ の リ リ ース でテ ン ポ ラ リ ソ ー ト テーブルの実 装に対 し て も 行われま し た。 ク エ リ を処理す る には、 デー タ ベース エン ジ ンは内部的な使用目的でテ ン ポ ラ リ テーブルを生成す る 必要があ り ます。 こ れ ら の ク エ リ の多 く に対す る パフ ォーマ ン ス が改善 さ れま し た。 一般的に、 次の条件のいずれかが真の場合、 デー タ ベース エン ジ ンは少な く と も 1 つのテ ン ポ ラ リ テーブルを生成 し て ク エ リ を処理 し ます。 DISTINCT キーワ ー ド の次に来る 選択 リ ス ト の項目は イ ンデ ッ ク ス の 先頭セグ メ ン ト ではない。 た と えば、 次の ク エ リ は、 列 c1 お よ び c2 に イ ンデ ッ ク ス が設定 さ れ ていて先頭セグ メ ン ト でなければテ ン ポ ラ リ テーブルを生成 し ます。 SELECT DISTINCT c1, c2 FROM t1 GROUP BY 句が存在 し 、 GROUP BY 句内の項目は イ ンデ ッ ク ス の先頭 セグ メ ン ト ではない。 た と えば、 次の ク エ リ は、 列 c1 お よ び c2 に イ ンデ ッ ク ス が設定 さ れ ていて先頭セグ メ ン ト でなければテ ン ポ ラ リ テーブルを生成 し ます。 SELECT c1, c2, COUNT(*) FROM t1 GROUP BY c1, c2 静的カー ソ ルが使用 さ れてい る 。 た と え ば、 ア プ リ ケ ー シ ョ ン が 結 果 セ ッ ト の 作 成 の 前 に SQL_CURSOR_TYPE オ プ シ ョ ン と SQL_CURSOR_STATIC 値 を 指定 し て ODBC API の SQLSetStmtOption を呼び出す場合、テ ン ポ ラ リ テー ブルが生成 さ れます。 結果セ ッ ト にブ ッ ク マー ク が含まれ る 。 た と えば、 結果セ ッ ト を生成す る 前に SQL_USE_BOOKMARKS オプ シ ョ ン を指定 し て ODBC API の SQLSetStmtOption を呼び出す場合で す。 ク エ リ は、 IN ま たは =ANY キーワー ド の右側に相関関係を持たないサ ブ ク エ リ を含む。 た と えば、 次の よ う にな り ます。 SELECT c1 FROM t1 WHERE c2 IN (SELECT c2 FROM t2) 7-14 行の事前取得 行の事前取得 こ こ で使用 さ れてい る 用語の定義については、 「用語」 (7-17 ページ) を参 照 し て く だ さ い。 一定の状況の下では、 SELECT ス テー ト メ ン ト の実行時、 こ の リ リ ース の デー タ ベース エン ジ ンは、結果の行セ ッ ト の最初の 2 行を ク ラ イ ア ン ト に あ ら か じ め取得 し よ う と し ます。 こ の事前取得に よ り 、 ゼ ロ 行ま たは 1 行 の結果セ ッ ト か ら デー タ を 取得す る パ フ ォ ーマ ン ス が著 し く 改善 さ れ ま す。 行の事前取得は、 結果セ ッ ト が複数の行か ら 成 り 、 最初のデー タ 取得操作 が結果セ ッ ト の最初の行を要求 し ない よ う な場合、 つま り 最後の行を要求 す る よ う な場合には時間を著 し く 無駄に し ます。 こ のため、 事前取得が も た ら す利点が意味を成 さ ないケース を回避す る 一方、 利点を も た ら すケー ス でのパフ ォーマ ン ス の改善を目指すため、 事前取得は最大 2 行に制限 さ れてい ます。 事前取得は、 ク ラ イ ア ン ト DSN セ ッ ト ア ッ プ オプシ ョ ン で [配列フ ェ ッ チ] が有効にな っ てい る 場合にのみ行われます。 配列フ ェ ッ チは事前取得 と 似てい ますが、 配列フ ェ ッ チは最初の明示的なデー タ 取得操作が実行 さ れ る ま では行われない点が異な り ます。 こ の違いは、 最初の明示的なデー タ 取得操作に よ り 、デー タ ベース エン ジ ンが残 り の結果セ ッ ト を取得す る 方法 を 推定す る のに十分な情報 を 提供す る た めです。 た と えば、 最初の デー タ 取得操作が ODBC API の SQLFetch 呼び出 し の場合、 こ れに よ り 、 デー タ ベー ス エ ン ジ ン は一度に 1 レ コ ー ド ずつ前方へ取得 し てい く こ と で結果セ ッ ト 全体を取得で き る こ と が確実に推定で き ます。 こ の推定が成 さ れ る のは、 ODBC 仕様に従っ て、 SQLFetch を使用す る と 残 り の結果セ ッ ト も 同様 に SQLFetch で 取得 さ れ る こ と が 必要に な る た め で す。 一方、 SQLExtendedFetch が呼び出 さ れ行セ ッ ト のサ イ ズが 1 よ り 大き い場合、 ク ラ イ ア ン ト は開発者が最適な行セ ッ ト サ イ ズ を指定 し た も の と 推定 し 、配 列フ ェ ッ チでその設定を無効に し ません。 事前取得は、 次の条件のすべてが満た さ れた場合に起 こ り ます。 配列フ ェ ッ チが有効であ る 。 結果セ ッ ト は大 き な可変長デー タ を含ま ない。 た と えば、 選択 リ ス ト に LONGVARCHAR ま たは LONGVARBINARY 型の列を含ま ない。 結果セ ッ ト にブ ッ ク マー ク が含まれない。 た と えば、SQL_USE_BOOKMARKS オプシ ョ ンお よ び SQL_UB_ON 値 を指定 し て ODBC API の SQLSetStmtOption が結果セ ッ ト の生成の前 に呼び出 さ れた場合、 事前取得は行われません。 読み取 り 専用の並行カー ソ ルが使用 さ れてい る 。 7-15 パフ ォ ーマ ン ス リ フ ァ レ ン ス た と えば、 SQL_CONCURRENCY オプシ ョ ンお よ び SQL_CONCUR_READ_ONLY 以外の値を指定 し て ODBC API の SQLSetStmtOption が結果セ ッ ト の生成の前に呼び出 さ れた場合、 事前 取得は行われません。 デフ ォ ル ト で、 並行カー ソ ルは読み取 り 専用で す。 7-16 用語 用語 こ こ では、 こ の章の複雑で技術的な題材についての理解を助け る ための定 義や例を示 し ます。 集計関数 集計関数は、ク エ リ の SELECT ま たは HAVING 句の値のグループ を使用 し て単一の値 を 生成 し ま す。 集計関数には、 COUNT、 AVG、 SUM、 MAX、 MIN お よ び DISTINCT があ り ます。 閉 じ た範囲 閉 じ た範囲 と は、 AND 演算子で結合 さ れた 1 組の 「開いた範囲」 です。 開 いた範囲は両方 と も 同 じ 列を参照 し 、 一方は < ま たは <= 比較演算子を含 み、 も う 一方は >= ま たは > 演算子を含む必要があ り ます。 BETWEEN 句 も 閉 じ た範囲を定義 し ます。 た と えば、 次の式は閉 じ た範囲です。 c1 > 1 AND c1 <= 10 c1 BETWEEN 1 AND 10 論理積 論理積は、 2 つ以上の 「述部」 が AND 演算子で結合 さ れた式です。 た と え ば、 次の 「制限」 は論理積です。 c1=2 AND c2<5 c1>2 AND c1<5 AND c2= "abc" 論理積標準形 (CNF) あ る 「式」 が AND 演算子で結合 さ れた 2 つ以上の 「論理和」 を含む場合、 それは論理積標準形です。 た と えば、 次の式は CNF です。 c1 = 2 AND c2 < 5 (c1 = 2 OR c1 = 5) AND (c2 < 5 OR c2 > 20) AND (c3 = "abc" OR c3 = "efg") 7-17 パフ ォ ーマ ン ス リ フ ァ レ ン ス 論理和 論理和は、 2 つ以上の 「述部」 が OR 演算子で結合 さ れた 「式」 です。 た と えば、 次の式は論理和です。 c1 = 2 OR c2 = 5 c1 = 2 OR c1 > 5 OR c2 = "abc" 論理和標準形 (DNF) あ る 「式」 が OR 演算子で結合 さ れた 2 つ以上の 「論理積」 を含む場合、 それは論理和標準形です。 た と えば、 次の式は DNF です。 c1 = 2 OR c2 < 5 (c1 = 2 AND c2 = 5) OR (c2 > 5 AND c2 < 10) OR c3 = "abc" 式 代数的論理で構成 さ れ る 式は 「制限」 で使用で き ます。 少な く と も 1 つ以 上の完全な 「述部」 を含む制限全体ま たは制限の一部が式です。 イ ンデ ッ ク ス イ ンデ ッ ク ス は、テーブル内の 1 つ以上の列に関連付け ら れた構造で、デー タ ベース エ ン ジ ン が効率的に検索 と 並べ替え を実行で き る よ う に し ます。 デー タ ベース エン ジ ンは イ ンデ ッ ク ス を使用 し て、 テーブル内のすべての 行 を 調べ る 代わ り に検索条件 を 満たす特定の行のみ を 読み込む こ と に よ り 、 検索パフ ォーマ ン ス を向上 さ せます。 デー タ ベース エン ジ ンは、 行の 取得後に効率の悪い技術で行を並べ替え る 代わ り に、 イ ンデ ッ ク ス を使用 し て SQL ク エ リ で指定 し た順序で行を取得 し ます。 結合条件 結合条件は、 <、 <=、 =、 >=、 > の比較演算子を使用 し て、 あ る テーブルの 列を別のテーブルの列 と 比較す る 「述部」 です。 た と えば、 次の述部は結合条件です。 t1.c1 = t2.c1 t1.c1 > t2.c2 7-18 用語 先頭セグ メ ン ト イ ンデ ッ ク ス セグ メ ン ト のグループは、 「 イ ンデ ッ ク ス」 の最初の n 列で 構成 さ れていて、 n が イ ンデ ッ ク ス の合計セ グ メ ン ト 数以下の場合、 先頭 セグ メ ン ト です。 た と えば、 イ ンデ ッ ク ス が列 c1、 c2、 c4 のセグ メ ン ト で 定義 さ れてい る 場合、 c1 は先頭のセグ メ ン ト で、 c1 と c2 は ま と めて先頭 セグ メ ン ト 、 3 つすべて を ま と めた も の も 先頭セグ メ ン ト ですが、 c2 単独 では先頭セグ メ ン ト と は言え ません。 こ れは、 セグ メ ン ト c1 が c2 の前に あ り 、 c1 が除外 さ れてい る ためです。 列 c1 と c4 を ま と めて も 先頭セグ メ ン ト と は言え ません。c4 の前に c2 があ り 、こ れが除外 さ れてい る ためです。 変形論理積標準形 (変形 CNF) 変形論理積標準形内の 「式」 は 「論理積標準形 (CNF)」 内の式 と 似てい ま すが、各 「論理和」 が 「閉 じ た範囲」 に加え て 「述部」 を含む点が異な り ます。 た と えば、 次の式は変形 CNF です。 c1 = 2 AND c2 < 5 (c1 = 2 OR (c1 > 4 AND c1 < 6) OR c1 = 10) AND (c2 = 1 OR c3 = "efg") 変形論理和 変形論理和は 「論理和」 と 似てい ますが、 「閉 じ た範囲」 に加えて 「述部」 を含む点が異な り ます。 た と えば、 次の式は変形論理和です。 c1 = 2 OR (c1 > 4 AND c1 < 5) (c1 = 2 OR (c1 > 4 AND c1 < 5)) OR c2 = "abc" 開いた範囲 開いた範囲は、 <、 <=、 >= ま たは > のいずれかの比較演算子を持つ 「述部」 です。 さ ら に、 述部のオペ ラ ン ド の 1 つは単一の列で構成 さ れ、 も う 一方 のオペ ラ ン ド はほかのテーブルの単一の列ま たは リ テ ラ ルで構成 さ れてい る 必要があ り ます。 た と えば、 次の式は開いた範囲です。 c1 > 1 c1 <= 10 t1.c1 > t2.c1 7-19 パフ ォ ーマ ン ス リ フ ァ レ ン ス 述部 述部は、 AND ま たは OR の論理演算子を含ま ない論理式です (BETWEEN は除 く )。 た と えば、 次の式は述部です。 (c1 = 1) (c1 LIKE "abc") (c1 BETWEEN 1 AND 2) 次の例は述部ではあ り ません。 (c1 > 1 AND c1 < 5) (c1 = 1 OR c1 = 2) 制限 制限は SQL ク エ リ の WHERE 句全体です。 7-20 A デー タ 型 Pervasive PSQL がサポー ト す る デー タ 型 こ こ では、ODBC イ ン タ ーフ ェ イ スお よ び Btrieve イ ン タ ーフ ェ イ ス を介 し て Pervasive PSQL に よ っ て提供 さ れ る 、 デー タ 型お よ びデー タ 型マ ッ ピ ン グについて説明 し ます。 「Pervasive PSQL がサポー ト す る デー タ 型」 (A-2 ページ) 「デー タ 型に関す る 注意事項」 (A-10 ページ) 「旧デー タ 型」 (A-14 ページ) 「Btrieve キーのデー タ 型」 (A-15 ページ) A-1 デー タ 型 Pervasive PSQL がサポー ト するデー タ 型 次の表は、 Pervasive PSQL に よ っ てサポー ト さ れ る ト ラ ンザ ク シ ョ ナルお よ び リ レ ー シ ョ ナ ル デー タ 型 に 関す る 情報 を 示 し ま す。 SRDE は、 SQLGetData ま たは SQLBindCol を呼び出す と き に別のデー タ 型変換が指 定 さ れない限 り 、 リレーショナル データ型を ODBC のデフォルトのデータ型に 変換します (デー タ 型の変換につい て は、 『Microsoft ODBC Programmer’s Reference』 の 「付録 デー タ 型」 を参照 し て く だ さ い) 。 適用で き ない項目 は " 適用外 " と 示 さ れてい ます。 表 A-1 Pervasive PSQL デー タ 型 と 対応する ODBC デー タ 型 ト ラ ンザ ク シ ョ ナル型 (サイ ズ) リ レーシ ョ ナル型 ODBC 型 ( コ ー ド ) 型 コード サイ ズ (バイ ト 数) 作成 / 追加 パラ メ ー タ メモ AUTOINC(2) SMALLIDENTITY SQL_SMALLINT(5) 15 2 AUTOINC(4) IDENTITY SQL_INTEGER(4) 15 4 BFLOAT(4) BFLOAT4 SQL_REAL(7) 9 4 p2 n4 BFLOAT(8) BFLOAT8 SQL_DOUBLE(8) 9 8 p2 n4 BLOB LONGVARBINARY SQL_LONGVARBINARY (-4) 22 適用外 p2 n 2 , n3, n6 CLOB LONGVARCHAR SQL_LONGVARCHAR (-1) 21 適用外 p4 n5, n6 CURRENCY CURRENCY SQL_DECIMAL(3) 19 8 p2 DATE DATE SQL_DATE(9) 3 4 p2 DECIMAL DECIMAL SQL_DECIMAL(3) 5 1-64 p3 FLOAT (4) REAL SQL_REAL(7) 2 4 p2 FLOAT (8) DOUBLE SQL_DOUBLE(8) 2 8 p2 INTEGER(1) TINYINT SQL_TINYINT(-6) 1 1 p2 INTEGER(2) SMALLINT SQL_SMALLINT(5) 1 2 P2 INTEGER(4) INTEGER SQL_INTEGER(4) 1 4 p2 INTEGER(8) BIGINT SQL_DECIMAL(3) 1 8 p2 NUMERIC NUMERIC SQL_NUMERIC(2) 8 1-15 p3 n4 NUMERICSA NUMERICSA SQL_NUMERIC(2) 18 1-15 p3 n4 A-2 Pervasive PSQL がサポー ト するデー タ 型 表 A-1 Pervasive PSQL デー タ 型 と 対応する ODBC デー タ 型 ト ラ ンザ ク シ ョ ナル型 (サイ ズ) リ レーシ ョ ナル型 ODBC 型 ( コ ー ド ) 型 コード サイ ズ (バイ ト 数) 作成 / 追加 パラ メ ー タ メモ NUMERICSTS NUMERICSTS SQL_NUMERIC(2) 17 1-14 p3 n4 STRING BINARY SQL_BINARY(-2) 0 1-255 p1 n2, n3 STRING CHAR SQL_CHAR(1) 0 1-255 p1 n1 TIME TIME SQL_TIME(10) 4 4 p2 TIMESTAMP TIMESTAMP SQL_TIMESTAMP(11) 20 8 p2 UNSIGNED(1) BINARY UTINYINT SQL_TINYINT(-6) 14 1 p2 UNSIGNED(2) BINARY USMALLINT SQL_SMALLINT(5) 14 2 p2 UNSIGNED(4) BINARY UINTEGER SQL_INTEGER(4) 14 4 p2 UNSIGNED(8) BINARY UBIGINT SQL_DECIMAL(3) 14 8 p2 WSTRING SQL で の サ ポ ー ト なし SQL でのサポー ト な し 25 適用外 n7 WSZSTRING SQL で の サ ポ ー ト なし SQL でのサポー ト な し 26 適用外 n7 ZSTRING VARCHAR SQL_VARCHAR(12) 11 1-254 LOGICAL BIT SQL_BIT(-7) 7 1 ビット p1 n5 追加 / 作成パラ メ ー タ p1 - SIZE、 NOT NULL、 CASE p2 - NOT NULL p3 - PRECISION、 SCALE、 NOT NULL p4 - NOT NULL、 CASE メモ n1 - 空白で埋め ら れます n2 - FIELD.DDF で、 バ イ ナ リ の使用を SQL に知 ら せ る フ ラ グ セ ッ ト n3 - バ イ ナ リ ゼ ロ で埋め ら れます A-3 デー タ 型 n4 - 変数 と し て も 、 ま た ス ト ア ド プ ロ シージ ャ 内で も 使用で き ません n5 - 埋め ら れません n6 - イ ンデ ッ ク ス を作成で き ません n7 - ト ラ ンザ ク シ ョ ナルのみ デー タ 型の範囲 次の表は、 Pervasive PSQL デー タ 型で有効な値の範囲を示 し た も のです。 表 A-2 Pervasive PSQL デー タ 型の範囲 リレーショナル データ型 有効値の範囲 BFLOAT4 -1.70141172e+38 ~ +1.70141173e+38 0 以外の最小の負 / 正の値 : -2.938736e-39 お よ び +2.938736e-39 BFLOAT8 -1.70141173e+38 ~ +1.70141173e+38 0 以外の最小の負 / 正の値 : -2.93873588e-39 お よ び +2.93873588e-39 BIGINT -9223372036854775808 ~ +9223372036854775807 BINARY 範囲は適用 さ れません BIT 範囲は適用 さ れません STRING 範囲は適用 さ れません CURRENCY -922337203685477.5808 ~ +922337203685477.5807 DATE 01-01-0001 ~ 12-31-9999 DECIMAL 長 さ と 小数点以下の桁数に よ っ て異な り ます。 DOUBLE -1.7976931348623157e+308 ~ +1.7976931348623157e+308 0 以外の最小の負 / 正の値 : -2.2250738585072014e-308 お よ び +2.2250738585072014e-308 FLOAT -1.7976931348623157E+308 ~ +1.7976931348623157E+308 0 以外の最小の負 / 正の値 : -2.2250738585072014e-308 お よ び +2.2250738585072014e-308 A-4 IDENTITY +1 ~ +2147483647 INTEGER -2147483648 ~ +2147483647 LOGICAL 範囲は適用 さ れません LONGVARBINARY 範囲は適用 さ れません LONGVARCHAR 範囲は適用 さ れません Pervasive PSQL がサポー ト するデー タ 型 表 A-2 Pervasive PSQL デー タ 型の範囲 リレーショナル データ型 有効値の範囲 MONEY -99999999999999999.99 ~ +99999999999999999.99 NUMERIC 長 さ と 小数点以下の桁数に よ っ て異な り ます。 「Decimal デー タ 型の 精度 と 小数点以下桁数」 (A-8 ページ) を参照 し て く だ さ い。 NUMERICSA 長 さ と 小数点以下の桁数に よ っ て異な り ます。 「Decimal デー タ 型の 精度 と 小数点以下桁数」 (A-8 ページ) を参照 し て く だ さ い。 NUMERICSTS 長 さ と 小数点以下の桁数に よ っ て異な り ます。 「Decimal デー タ 型の 精度 と 小数点以下桁数」 (A-8 ページ) を参照 し て く だ さ い。 REAL -3.4028234E+38 ~ +3.4028234e+38 0 以外の最小の負 / 正の値 : -1.4E-45 お よ び 1.4E-45 SMALLIDENTITY +1 ~ +32767 SMALLINT -32768 ~ +32767 TIME 00:00:00 ~ 23:59:59 TIMESTAMP 0001-01-01 00:00:00.0000000 ~ 9999-12-31 23:59:59.9999999 UTC TINYINT -128 ~ +127 UBIGINT 0 ~ 18446744073709551615 UINTEGER 0 ~ 4294967295 USMALLINT 0 ~ 65535 UTINYINT 0 ~ 255 VARCHAR 範囲は適用 さ れません A-5 デー タ 型 演算子の優先順位 式には複数の演算子が含ま れ る こ と があ り ます。 演算子の優先順位に よ っ て、 演算を実行す る 順序が決定 し ます。 Pervasive PSQL は次に示す優先レ ベルを使用 し ます。 高レベルの演算子は低レベルの演算子 よ り 先に評価 さ れます。 レベル 1 が最高で、 レベル 9 が最低です。 1 + (正)、 - (負、 否定)、 ~ (ビ ッ ト 演算 NOT) 2 * (乗算)、 / (除算)、 % (剰余) 3 + (加算)、 (+ 連結)、 - (減算)、 & (ビ ッ ト 演算 AND) 4 =, >, <, >=, <=, <>, !=, !>, !< ( こ れ ら は比較演算子で、 それぞれ次 を表 し ます。 等 し い、 よ り 大 き い、 よ り 小 さ い、 以上、 以下、 等 し く ない、 等 し く ない、 よ り 大 き く ない、 よ り 小 さ く ない) 5 ^ (ビ ッ ト 演算 排他的 OR)、 | (ビ ッ ト 演算 OR) 6 NOT 7 AND 8 ALL、 ANY、 BETWEEN、 IN、 LIKE、 OR、 SOME 9 = (代入) 式に同 じ 優先レベルの演算子が 2 つあ る 場合は、 それ ら が式に現れ る 位置 を基に、 左か ら 右へ評価 さ れます。 た と えば、 次のプ ロ シージ ャ 内の SET ス テー ト メ ン ト では、 除算演算子は 乗算演算子 よ り 先に評価 さ れます。 プ ロ シージ ャ は 21 を返 し ます。 CREATE PROCEDURE checkvalue(); BEGIN DECLARE :Counter INTEGER; SET :Counter = 12 / 4 * 7; PRINT :Counter; END CALL checkvalue かっ こ か っ こ を使用する と 、 定義 さ れてい る 演算子の優先順位 よ り 優先 さ せ る こ と がで き ます。 最初にかっ こ 内の も のがすべて評価 さ れ、1 つの値が も た ら さ れます。 こ の値は、かっ こ の外にあ る 演算子で使用する こ と がで き ます。 た と えば、 次のプ ロ シージ ャ 内の SET ス テー ト メ ン ト で、 除算演算子は通 常は加算演算子 よ り 先に評価 さ れます。 結果は 12 にな り ます (つま り 、 8 + 4)。 し か し 、加算はか っ こ で囲まれてい る ため最初に実行 さ れ る ので、プ ロ シージ ャ は結果の 4 を返 し ます。 A-6 Pervasive PSQL がサポー ト するデー タ 型 CREATE PROCEDURE checkvalue1(); BEGIN DECLARE :Counter INTEGER; SET :Counter = 32 / (4 + 4); PRINT :Counter; END CALL checkvalue1 式にネ ス ト さ れたか っ こ があ る 場合は、 一番深 く ネ ス ト さ れてい る 式が最 初に評価 さ れ、 次に深 く ネ ス ト さ れてい る 式の順に評価 さ れます。 た と えば、 次の SET ス テー ト メ ン ト では、 加算が最初に実行 さ れ (一番深 いネ ス ト )、 次に乗算、 減算、 最後に除算が実行 さ れます。 変数は 5 に評価 さ れ る 結果 と な り ます。 SET :Counter = 100 / (40 - (2 * (5 + 5))); デー タ 型の優先順位 デー タ 型の優先順位は、 異な る デー タ 型の 2 つの式が演算子に よ っ て結合 さ れてい る 場合に ど のデー タ 型で結果を出すか を決定 し ます。 低い優先順 位のデー タ 型が高い優先順位のデー タ 型に変換 さ れます。 メ モ 互換性のないデー タ 型で演算を実行す る と 、Pervasive PSQL か ら エ ラ ーが返 さ れ ます。 た と えば、 INTEGER を CHAR に加算 し よ う と し た場合な ど です。 数値デー タ 型 Pervasive PSQL は リ レーシ ョ ナルの数値デー タ 型に対 し て、 次の優先順位 をサポー ト し てい ます。 DOUBLE、 FLOAT、 BFLOAT8 (最高) REAL、 BFLOAT4 DECIMAL、 NUMERIC、 NUMERICSA、 NUMERICSTS CURRENCY、 MONEY BIGINT、 UBIGINT INTEGER、 UINTEGER、 IDENTITY SMALLINT、 USMALLINT、 SMALLIDENTITY TINYINT、 UTINYINT BIT (最低) A-7 デー タ 型 文字デー タ 型 リ レーシ ョ ナルの文字デー タ 型に対す る 優先順位は以下の と お り です。 LONGVARCHAR CHAR、 VARCHAR CHAR ま たは VARCHAR と LONGVARCHAR を連結 さ せた場合、 結果は LONGVARCHAR にな り ます。 CHAR と VARCHAR を連結 さ せた場合、結果のデー タ 型はその連結で最初 に く る デー タ 型にな り ます (左か ら 右へ)。 た と えば、 c1 が CHAR で c2 が VARCHAR の場合、 (c1 + c2) の結果は CHAR にな り 、 (c2 + c1) の結果は VARCHAR にな り ます。 優先順位が適用 さ れないデー タ 型 BINARY お よ び LONGVARBINARY デー タ 型は優先順位を持ち ません。 こ れ ら のデー タ 型を組み合わせ る 演算は許可 さ れてい ません。 DATE、 TIME、 お よ び TIMESTAMP は同 じ デー タ 型のみ と 組み合わせ る こ と がで き ます。 Decimal デー タ 型の精度 と 小数点以下桁数 精度は、 数値内の数字の数 (桁数) です。 小数位は、 数値内の小数点 よ り 右側の数字の数です。 た と えば、909.777 と い う 数では精度が 6 で小数位が 3 と な り ます。 NUMERIC お よ び DECIMAL デー タ 型のデフ ォ ル ト の最大精度は 64 です。 DECIMAL を除 く すべての数値デー タ 型で、 精度 と 小数位は固定です。 同 じ デー タ 型の 2 つの式で算術演算を行っ た場合、 結果は同 じ デー タ 型 と な り 、 そのデー タ 型の精度 と 小数位を持ち ます。 デー タ 型が異な る 式で演算 を行っ た場合は、 優先順位のルールに よ っ て結果のデー タ 型が決定 さ れま す。 結果の精度 と 小数位は、 そのデー タ 型に定義 さ れてい る 桁数にな り ま す。 次の条件の場合、 結果は DECIMAL にな り ます。 両方の式が DECIMAL。 一方の式が DECIMAL で、他方の式が DECIMAL よ り も 優先順位の低い デー タ 型。 表 A-3 は、 演算結果のデー タ 型が DECIMAL にな る 場合に精度 と 小数位を 導 き 出す方法の定義を示 し てい ます。 "exp" は 「式」 を表 し 、 "s" は 「小数 位」、 "p" は 「精度」 を表 し ます。 A-8 Pervasive PSQL がサポー ト するデー タ 型 表 A-3 DECIMAL 演算の精度 と 小数位の計算方法 演算 精度 小数位 Addition (exp1 + exp2) max(s1, s2) + max(p1 - s1, p2 - s2) +1 max(s1, s2) Subtraction (exp1 - exp2) max(s1, s2) + max(p1 - s1, p2 - s2) +1 max(s1, s2) Multiplication (exp1 * exp2) p1 + p2 + 1 s1 + s2 Division (exp1 / exp2) p1 - s1 + s2 + max(6, s1 + p2 +1) max(6, s1 + p2 +1) UNION (exp1 UNION exp2) max(s1, s2) + max(p1 - s1, p2 - s2) +1 max(s1, s2) A-9 デー タ 型 デー タ 型に関する注意事項 こ のセ ク シ ョ ンでは、 使用可能なデー タ 型に関す る さ ま ざ ま な動作お よ び キー情報について説明 し ます。 CHAR、 VARCHAR、 および LONGVARCHAR CHAR 列には、 列を 「埋め る 」 ために必要なだけ空白が追加 さ れます。 VARCHAR/LONGVARCHAR 列には、 列を 「埋め る 」 ための空白は追加 さ れません。 意味のあ る デー タ は ヌ ル文字で終わ り ます。 比較演算 (LIKE お よ び =) では、 追加の空白は演算の対象にな り ませ ん。 ただ し 、 LIKE で ク エ リ に空白が明示的に挿入 さ れた場合 ('abc %' な ど) 、 ワ イ ル ド カー ド の前の空白は演算の対象にな り ます。 こ の例の 場合、 'abc< 空白 >< 任意の文字 >' を検索 し ます。 「LONGVARCHAR と LONGVARBINARY の制約」 (A-11 ページ) も 参照 し て く だ さ い。 BINARY および LONGVARBINARY BINARY 列には、列を 「埋め る 」 ために必要なだけのゼロが追加 さ れます。 LONGVARBINARY 列には、列を「埋め る 」ための空白は追加 さ れません。 現在のデー タ ベース エン ジ ンは、LONGVARBINARY の比較はで き ませ ん。 固定長の BINARY デー タ の比較はで き ます。 Pervasive PSQL では、 1 つのテーブルで複数の LONGVARCHAR 列お よ び LONGVARBINARY 列がサポー ト さ れ る よ う にな り ま し た。 デー タ は、 オ フ セ ッ ト に応 じ て レ コ ー ド の可変長部分に格納 さ れ ます。 デー タ の可変長 部分は、 デー タ の操作方法に応 じ て、 デー タ の列順 と は異な る も のにす る こ と がで き ます。 次の例で考え てみま し ょ う 。 CREATE TABLE BlobDataTest ( UINT, // 固定レ コ ー ド ( 型 14) Clob1 LONGVARCHAR, // 固定レ コ ー ド ( 型 21) Clob2 LONGVARCHAR, // 固定レ コ ー ド ( 型 21) Nbr ) A-10 Blob1 LONGVARBINARY, // 固定レ コ ー ド ( 型 21) デー タ 型に関する注意事項 デ ィ ス ク 上では、 物理レ コ ー ド は通常次の よ う に見え ます。 [ 固定デー タ (Nbr, Clob1header, Clob2header, Blob1header)][ClobData1][ClobData2][BlobData1] 列 Nbr を LONGVARCHAR 列に変更 し ます。 ALTER TABLE BlobDataTest ALTER Nbr LONGVARCHAR こ れで、物理レ コ ー ド はデ ィ ス ク 上で次の よ う に見え る よ う にな り ま し た。 [ 固定デー タ (Nbrheader, Clob1header, Clob2header, Blob1header)][ClobData1][ClobData2][BlobData1] [NbrClobData] 見た と お り 、 デー タ の可変長部分は既存のデー タ の列順には入 り ません。 し か し 、 新 し く 挿入 し た レ コ ー ド については、 デー タ の可変長部分は既存 のデー タ の列順に入 り ます。 [ 固定デー タ (Nbrheader, Clob1header, Clob2header, Blob1header)][NbrClobData][ClobData1][ClobData2] [BlobData1] 「LONGVARCHAR と LONGVARBINARY の制約」 (A-11 ページ) も 参照 し て く だ さ い。 LONGVARCHAR と LONGVARBINARY の制約 LONGVARCHAR お よ び LONGVARBINARY デー タ 型には次の制約が適用 さ れます。 LIKE 述部は、 列デー タ の最初の 65500 文字に適用 さ れます。 その他の述部はすべて、 列デー タ の最初の 256 文字に適用 さ れます。 GROUP BY、 DISTINCT、 お よ び ORDER BY を伴っ た SELECT ス テー ト メ ン ト はすべてのデー タ を返 し ますが、列デー タ の最初の 256 文字に のみ指示を行い ます。 SQLGetData の 1 回の呼び出 し では、 LONGVARCHAR ま たは LONGVARBINARY 列に対 し て Pervasive PSQL か ら 返 さ れ る 最大文字数 は 65500 です。 65500 文字を超え る 列デー タ を取得す る ためには、 SQLGetData を数回呼び出す必要があ り ます。 LONGVARCHAR お よ び LONGVARBINARY 型の列には最大 2GB ま で デー タ を挿入で き ますが、 INSERT ス テー ト メ ン ト で リ テ ラ ル値を使用 す る と 、 挿入可能な文字数は 15000 に減 り ます。 ただ し 、 パ ラ メ ー タ を 使用す る こ と に よ っ て、 15000 文字以上挿入す る こ と は可能です。 A-11 デー タ 型 浮動小数の比較 Pervasive ODBC エン ジ ン イ ン タ ーフ ェ イ ス では、比較述部の浮動小数点数 は、 近似値の アルゴ リ ズ ム を使用 し て比較 さ れ ま す。 た と えば、 12.203 = 12.20300000000001 の場合、 12.203 は >= 12.20300000000001 です。 「DBL EPSILON」 と し て定義 さ れてい る イ プシ ロ ン値は、(.204460492503131e-016) です。 こ の機能は、 大き い数値に対 し ては有効ですが、 小 さ い数値の場合、 > と < は検出 さ れません。 小 さ い数値は同一値 と し て検出 さ れます。 メ モ 小数点以下の桁数が多い数値で精度を必要 と す る 場合は、 Real ま たは Float デー タ 型の代わ り に Decimal デー タ 型を使用 し て く だ さ い。 こ こ では、 Pervasive ODBC エ ン ジ ン イ ン タ ー フ ェ イ ス で SQL_DOUBLE デー タ 型 (C 言語の double 型に対応) に使用 さ れ る 比較ルーチンについて 説 明 し ま す。 SQL_REAL デー タ 型 (C 言語 の float 型 に 対応) の 場合、 Pervasive ODBC エ ン ジ ン イ ン タ ー フ ェ イ ス は FLT_EPSILON、 つ ま り (.2204460492503131e-016) を使用 し ます。 SHORT sCnvDblCmp( DOUBLE d1, DOUBLE d2) { if (d1 == d2) return 0; if (d1 > d2) { if (d1 > d2 + DBL_EPSILON) return(1); } else { if (d2 > d1 + DBL_EPSILON) return(-1); } return(0); } A-12 デー タ 型に関する注意事項 無限の表現 Pervasive PSQL で無限を表すには、 次の表の よ う に、 4 バ イ ト (C 言語の float 型) ま たは 8 バ イ ト (C 言語の double 型) の形式で、 16 進数ま たは文 字 と し て表現で き ます。 表 A-4 無限の表現 値 Float 16 進数 Float 文字 Double 16 進数 正の最大数 0x7FEFFFFFFFFFFFFF 負の最大数 0xFFEFFFFFFFFFFFFF Double 文字 正の無限数 0x7F800000 1E999 0x7FF0000000000000 1E999 負の無限数 0xFF800000 -1E999 0xFFF0000000000000 -1E999 A-13 デー タ 型 旧デー タ 型 い く つかの古い (レ ガシー) デー タ 型は、 現行 リ リ ース の Pervasive PSQL ではサポー ト さ れてい ません。 次の表は、 旧デー タ 型に代わ っ て使用す る 新デー タ 型を示 し ます。 表 A-5 旧デー タ 型に代わっ て使用 さ れる新デー タ 型 A-14 旧デー タ 型 型コー ド 代替デー タ 型 型コー ド LOGICAL(1) 7 UTINYINT 14 LOGICAL(2) 7 USMALLINT 14 LSTRING 10 VARCHAR 11 LVAR 13 LONGVARCHAR 21 MONEY 6 DECIMAL 5 NOTE 12 LONGVARCHAR 21 Btrieve キーのデー タ 型 Btrieve キーのデー タ 型 こ のセ ク シ ョ ン では、 イ ンデ ッ ク ス を作成で き る Btrieve デー タ 型 (キー タ イ プ) について説明 し ます。 MicroKernel は内部的に、 文字列キーを 1 バ イ ト ずつ左か ら 右へ比較 し ます。 デフ ォ ル ト で、MicroKernel は ASCII 値に 基づいて文字列キーを ソ ー ト し ます。 し か し 、 文字列キーは、 大文字小文 字を無視 し た り 、 オル タ ネー ト コ レーテ ィ ン グ シーケ ン ス (ACS) を使用 す る よ う に定義す る こ と も で き ます。 MicroKernel は、符号な し バ イ ナ リ キーを一度に 1 WORD ずつ比較 し ます。 Intel 8086 プ ロ セ ッ サ フ ァ ミ リ は Integer の上位バ イ ト と 下位バ イ ト を反転 さ せ る ため、 MicroKernel は こ れ ら のキーを右か ら 左へ比較 し ます。 特定のデー タ 型が複数のサ イ ズで使用で き る (た と えば、 4 バ イ ト と 8 バ イ ト の FLOAT 値が使用で き る ) 場合は、(新 し いキーの作成に使用 さ れ る ) キー長パ ラ メ ー タ に よ り 、 そのキーのすべての値に適用 さ れ る サ イ ズが定 義 さ れ ます。 許可 さ れていないキーの長 さ を使っ て キーを定義 し よ う と す る と 、 ス テー タ ス 29 (キー長が不正) にな り ます。 次の表は、 キー タ イ プ と それに関連付け ら れた コ ー ド の一覧を示 し ます。 表に続いて、 各キー タ イ プの内部記憶形式について説明 し ます。 表 A-6 Btrieve キーのデー タ 型 と 型コ ー ド デー タ 型 型コー ド AUTOINC 15 BFLOAT 9 BLOB 22 STRING 0 CLOB 21 CURRENCY 19 DATE 3 DECIMAL 5 FLOAT 2 INTEGER 1 LOGICAL 7 LSTRING 10 MONEY 6 A-15 デー タ 型 表 A-6 Btrieve キーのデー タ 型 と 型コ ー ド デー タ 型 型コー ド NUMERIC 8 NUMERICSA 18 NUMERICSTS 17 TIME 4 TIMESTAMP 20 UNSIGNED BINARY 14 WSTRING 25 WZSTRING 26 ZSTRING 11 AUTOINC AUTOINC キー タ イ プは、 2 バ イ ト ま たは 4 バ イ ト 長の符号付き Intel 整数 です。 AUTOINC キ ーは、 内部的に Intel バ イ ナ リ 整数形式で格納 さ れ、 WORD 内で上位バ イ ト と 下位バ イ ト が反転 さ れてい ま す。 MicroKernel は AUTOINC キーを その絶対値を基に、 右か ら 左へ と 一度に 1 WORD ずつ別 の レ コ ー ド に保存 さ れてい る 値 と 比較 し て ソ ー ト し ま す。 AUTOINC キー を使用す る と 、 フ ァ イ ルに レ コ ー ド を挿入す る と き 、 既存の最大の値 よ り 1 大 き い値を自動的に割 り 当て る こ と がで き ま す。 値は絶対値を基に ソ ー ト さ れ る ため、 デー タ 型が符号付 き と 考えた場合、 可能性のあ る レ コ ー ド 数は期待す る レ コ ー ド 数のおお よ そ半分にな り ます。 フ ァ イ ルか ら 削除 さ れた値は、 自動的には再使用 さ れ ません。 挿入ま たは 更新でゼ ロ (0) 値を入力 し た ら 次に来 る 値を割 り 当て る よ う にデー タ ベー ス エン ジ ンに指示 し てい る 場合、デー タ ベースは単純に最 も 大 き い値を調 べ、 その値に 1 を足 し た結果を挿入 し ます。 すべての レ コ ー ド ま たは一部の レ コ ー ド で 1 つの フ ィ ール ド の値を 0 に初 期化 し 、 後か ら AUTOINC タ イ プの イ ンデ ッ ク ス を追加で き ます。 こ の機 能に よ り、 必要に な る ま で実際に イ ン デ ッ ク ス を 作成 し な く て も AUTOINC キーの準備をす る こ と がで き ます。 イ ンデ ッ ク ス を追加す る と 、MicroKernel は各フ ィ ール ド の 0 値を適切に変 更 し ます。 値の番号付けは、 その フ ィ ール ド で現在定義 さ れてい る 最大値 に 1 を足 し た値か ら 始ま り ます。 フ ィ ール ド に 0 以外の値が存在す る 場合、 MicroKernel は そ れ ら を 変更 し ま せ ん。 た だ し 、 0 以外 の 重複す る 値 が フ ィ ール ド に存在す る 場合は、 MicroKernel はエ ラ ー ス テー タ ス コ ー ド を 返 し ます。 A-16 Btrieve キーのデー タ 型 MicroKernel は、AUTOINC キーを含んでい る 各オープン フ ァ イ ルに関連付 け ら れ る 自動 イ ン ク リ メ ン ト 値の、 以前に使用 し た最大値を保持 し ま す。 こ の値は、 AUTOINC フ ィ ール ド に ASCII ゼ ロ を 含む レ コ ー ド につい て INSERT オペ レ ーシ ョ ン が発生 し た場合にのみ、 確立 さ れて増加 し ま す。 キー ページの並行性を利用 し て同時変更が行え る よ う に、値はすべての ク ラ イ ア ン ト か ら 使用 さ れます。 フ ァ イ ルの次の AUTOINC 値は、 前の AUTOINC 値を使っ た INSERT が発 生す る たびに増加 さ れます。 こ れは、INSERT が ト ラ ンザ ク シ ョ ン内にあ る か ど う か、 ま た変更が コ ミ ッ ト さ れ る か ど う かに無関係に起 こ り ます。 ただ し 、 以下の項目がすべて真の場合には、 INSERT 中に こ の値を小 さ く す る こ と がで き ます。 キー内にあ る 最大の AUTOINC 値が、 フ ァ イ ルに対す る 次の AUTOINC 値 よ り も 小 さ い。 ほかの ど の ク ラ イ ア ン ト も 、最大の AUTOINC 値を含んでい る ページに 影響を与え る ト ラ ンザ ク シ ョ ン を保留に し ていない。 最大の AUTOINC 値を含むキー ページが、INSERT を行っ てい る ク ラ イ ア ン ト に よ っ て保留に さ れていない。 つま り 、 1 ト ラ ンザ ク シ ョ ン内の最初の INSERT のみが、 次回使用可能な AUTOINC 値 を 小 さ く す る こ と が で き ま す。 そ の 後、 次回使用可能 な AUTOINC 値は増加 し 続け ます。 例を示 し て、 AUTOINC 値を小 さ く で き る 方法をわか り やす く し ま し ょ う 。 レ コ ー ド 1、 2、 3 お よ び 4 を含む自動 イ ン ク リ メ ン ト フ ァ イ ルがあ る と し ます。 次回使用可能な AUTOINC 値は 5 です。 ク ラ イ ア ン ト 1 が ト ラ ンザ ク シ ョ ン を開始 し 、 新 し い レ コ ー ド を 2 件挿入 す る と 、 次回使用可能な AUTOINC 値は 7 に増え ます ( ク ラ イ ア ン ト 1 は 値 5 と 6 を取得 し ます)。 ク ラ イ ア ン ト 2 が ト ラ ンザ ク シ ョ ン を開始 し 、 ま た 新 し い レ コ ー ド を 2 件挿入 し ま す。 こ れ に よ り 、 次回使用可能 な AUTOINC 値は 9 に増え ます ( ク ラ イ ア ン ト 2 は値 7 と 8 を取得 し ます)。 ク ラ イ ア ン ト 1 が レ コ ー ド 4、5、6 を削除 し ます。次回使用可能な AUTOINC 値は INSERT で し か調整 さ れないので、 同 じ 値の ま ま です。 次に、 ク ラ イ ア ン ト 1 が コ ミ ッ ト を行い ます。 コ ミ ッ ト さ れたバージ ョ ンの フ ァ イ ルに は、 現在レ コ ー ド 1、 2 お よ び 3 が含まれてい ます。 ク ラ イ ア ン ト 2 の場合、 フ ァ イ ルにはレ コ ー ド 1、 2、 3、 7 お よ び 8 が含ま れます。 次に ク ラ イ ア ン ト 2 が も う 1 件レ コ ー ド を挿入す る と 、 レ コ ー ド 9 にな り 、 次回使用可能な AUTOINC 値は 10 に増え ます。 ク ラ イ ア ン ト 2 が レ コ ー ド 3、 7、 8、 9 を削除 し ます。 ク ラ イ ア ン ト 2 では、 現在フ ァ イ ル には コ ミ ッ ト 済みの レ コ ー ド 1 と 2 だけが含まれてい ます。 A-17 デー タ 型 次に ク ラ イ ア ン ト 2 が も う 1 件レ コ ー ド を挿入する と 、レ コ ー ド 10 にな り ます。 次回使用可能な AUTOINC 値は 11 に増え ます。 こ の値は、 変更を含 んでい る ページに保留状態のほかの変更があ る ため、3 に減 ら さ れません。 次に、 ク ラ イ ア ン ト 2 が ト ラ ンザ ク シ ョ ン を中止 し ます。 コ ミ ッ ト さ れた バージ ョ ンの フ ァ イ ルには、現在レ コ ー ド 1、2 お よ び 3 が含まれてい ます が、 次回使用可能な AUTOINC 値は 11 の ま ま です。 ど ち ら かの ク ラ イ ア ン ト が、 ト ラ ンザ ク シ ョ ンの内外を問わず も う 1 件レ コ ー ド を挿入す る と 、 次回使用可能な AUTOINC 値は 4 に減少 さ れ ま す。 こ れは、 値を小 さ く す る のに必要な条件がすべて真であ る ために起 こ り ま す。 自動 イ ン ク リ メ ン ト し た値が範囲外にな る 場合は、 ス テー タ ス コ ー ド 5 が 返 さ れます。 デー タ ベース エン ジ ンは、 値の 「折 り 返 し 」 を試み る こ と も 、 再度ゼ ロ か ら 始め る こ と も し ません。 ただ し 、 以前に挿入 し た値が削除 さ れてお り 、 自動 イ ン ク リ メ ン ト のシーケ ン ス中で欠番にな っ てい る 箇所が わか る 場合は、 未使用値を直接挿入す る こ と がで き ます。 制限 AUTOINC キーには、 次の制限が適用 さ れます。 重複のないキー と し て定義す る 必要があ り ます。 キーを セグ メ ン ト キーにす る こ と はで き ません。 ただ し 、 AUTOINC キーが個別の単一のキー と し て最初に定義 さ れてお り 、そのキー番号が セグ メ ン ト キーのキー番号 よ り も 小 さ い場合に限 り 、AUTOINC キーを 別のキーのセグ メ ン ト と し て含め る こ と がで き ます。 ほかのキー と オーバー ラ ッ プす る こ と はで き ません。 キーはすべて昇順でなければな り ません。 AUTOINC キーに負の値を指定する こ と はで き ません。 フ ァ イ ルに レ コ ー ド を挿入す る と 、MicroKernel は AUTOINC キー値を次の よ う に扱い ます。 A-18 AUTOINC キーにバ イ ナ リ 0 の値を指定 し た場合、MicroKernel は以下の 基準に沿っ て キーに値を割 り 当て ます。 ファイルに最初のレコードを挿入する場合、 MicroKernel は AUTOINC キーに値 1 を割 り 当て ます。 ファイル内に既にレコードが存在する 場合、 MicroKernel は AUTOINC キーに、 フ ァ イ ル内の既存の最 も 大 き い絶対値 よ り 1 大 き い値を割 り 当て ます。 AUTOINC キーに 0 以外の正の値を指定 し た場合、MicroKernel はフ ァ イ ルに レ コ ー ド を挿入 し 、 指定 し た値を キー値 と し て使用 し ます。 その値 を含むレ コ ー ド が フ ァ イ ルに既に存在す る 場合、 MicroKernel はエ ラ ー ス テー タ ス コ ー ド を返 し 、 その レ コ ー ド を挿入 し ません。 Btrieve キーのデー タ 型 BFLOAT BFLOAT キー タ イ プは、単精度実数ま たは倍精度実数です。 単精度実数は、 23 ビ ッ ト の仮数、 128 でバ イ ア ス さ れた 8 ビ ッ ト の指数、 お よ びサ イ ン ビ ッ ト で格納 さ れ ま す。 4 バ イ ト float の内部 レ イ ア ウ ト は次の と お り で す。 倍精度実数の表現法は、 仮数が 23 ビ ッ ト ではな く 55 ビ ッ ト であ る 点を除 いては、 単精度実数の表現法 と 同 じ です。 最小有効数字の 32 ビ ッ ト は、 バ イ ト 0 か ら 3 に格納 さ れます。 BFLOAT 型 は、 一般 に 古 い BASIC ア プ リ ケ ー シ ョ ン で 使用 さ れ ま す。 Microsoft は こ のデー タ 型を MBF (Microsoft Binary Format) と 呼びますが、 Visual Basic 環境で こ の型はサポー ト し てい ません。 BLOB バ イ ナ リ ラ ージ オブジ ェ ク ト (BLOB) タ イ プは、 最大 2 GB ま でのサ イ ズのバ イ ナ リ デー タ フ ィ ール ド のサポー ト を提供 し ます。 こ の タ イ プは 2 つの部分か ら 成 り ます。 レ コ ー ド の固定長部分での 8 バ イ ト ヘ ッ ダー。 ヘ ッ ダーには、レ コ ー ド の可変長部分におけ る デー タ の開始位置を示す 4 バ イ ト 整数 と 、 その フ ィ ール ド のサ イ ズ を示す 4 バ イ ト 整数が含まれます。 レ コ ー ド の可変長部分内にあ る バ イ ナ リ デー タ 自体。 すべての BLOB お よ び CLOB フ ィ ール ド のサ イ ズの合計は 2 GB 以下であ る 必要があ り ま す。 こ れは、 レ コ ー ド の可変長部分へのオ フ セ ッ ト ポ イ ン タ が、 最 大 2 GB オ フ セ ッ ト に制限 さ れ て い る た め です。 最大サ イ ズ 2 GB の BLOB を格納す る には、 レ コ ー ド 中に BLOB ま たは CLOB フ ィ ール ド は 1 つ し か定義で き ません。 詳細については、 「BINARY お よ び LONGVARBINARY」 (A-10 ページ) お よ び 「LONGVARCHAR と LONGVARBINARY の制約」 (A-11 ページ) を 参照 し て く だ さ い。 A-19 デー タ 型 CHAR メ モ 旧バージ ョ ン の Pervasive PSQL では、 こ のデー タ 型は STRING と 呼ばれてい ま し た。 CHAR キー タ イ プは、 左か ら 右へ並んだ文字の連な り です。 キー値が ヌ ル であ る か ど う か を MicroKernel が判定す る 場合を除いて、 各文字は単一バ イ ト に ASCII 形式で表 さ れます。 CLOB 文字 ラ ージ オブジ ェ ク ト (CLOB) タ イ プは、 最大 2 GB ま でのサ イ ズの 文字列デー タ フ ィ ール ド のサポー ト を提供 し ます。 こ の タ イ プは 2 つの部 分か ら 成 り ます。 レ コ ー ド の固定長部分での 8 バ イ ト ヘ ッ ダー。 ヘ ッ ダーには、レ コ ー ド の可変長部分におけ る デー タ の開始位置を示す 4 バ イ ト 整数 と 、 その フ ィ ール ド のサ イ ズ を示す 4 バ イ ト 整数が含まれます。 レ コ ー ド の可変長部分内にあ る 文字列デー タ 自体。 すべての BLOB お よ び CLOB フ ィ ール ド のサ イ ズの合計は 2 GB 以下であ る 必要があ り ま す。 こ れは、 レ コ ー ド の可変長部分へのオ フ セ ッ ト ポ イ ン タ が、 最大 2 GB オ フ セ ッ ト に制限 さ れてい る ためです。 最大サ イ ズ 2 GB の BLOB を格納す る には、 レ コ ー ド 中に BLOB ま たは CLOB フ ィ ール ド は 1 つ し か定義で き ません。 詳細につい て は、 「CHAR、 VARCHAR、 お よ び LONGVARCHAR」 (A-10 ペー ジ) お よ び 「LONGVARCHAR と LONGVARBINARY の制約」 (A-11 ページ) を参照 し て く だ さ い。 CURRENCY CURRENCY キー タ イ プは、 8 バ イ ト の符号付 き 数値を表 し 、 Intel バ イ ナ リ 整数形式で並べ替え ら れ格納 さ れてい ます。 こ のため、 その内部表現法 は 8 バ イ ト の INTEGER デー タ 型 と 同 じ です。 CURRENCY デー タ 型には、 小数点以下に 4 桁が想定 さ れてお り 、 通貨のデー タ 値の分数部分を表 し ま す。 A-20 Btrieve キーのデー タ 型 DATE DATE キー タ イ プは、 内部的に 4 バ イ ト 値 と し て格納 さ れます。 日 と 月は それぞれ 1 バ イ ト のバ イ ナ リ 形式で格納 さ れます。 年は、 年の値全体を表 す 2 バ イ ト のバ イ ナ リ 数です。 MicroKernel は、 日を 1 番目のバ イ ト に、 月 を 2 番目のバ イ ト に、 年を月に続 く 2 バ イ ト の WORD に置 き ます。 日付フ ィ ール ド に使用す る C 言語の構造体の例を示 し ます。 TYPE dateField { char day; char month; integer year; } 日付フ ィ ール ド の year 部には、 年全体の整数表現が設定 さ れ る よ う にす る 必要があ り ます。 た と えば、 2001 年の場合は 2,001 です。 DECIMAL DECIMAL キー タ イ プは、 内部的に、 1 バ イ ト ご と に 2 つの 10 進数を含 む、 パ ッ ク さ れ た 10 進数 と し て 格納 さ れ ま す。 n バ イ ト の DECIMAL フ ィ ール ド の内部表現法は次の と お り です。 サ イ ン ニブルは、 正の数の場合は 0xF ま たは 0xC で、 負の数の場合は 0xD です。 Pervasive ODBC お よ び Pervasive ActiveX コ ン ト ロ ールでは常に、 正 の サ イ ン ニ ブ ル に 0xF を 使用 し ま す。 小数点 は 含意 さ れ て い る た め、 DECIMAL フ ィ ール ド には格納 さ れ ま せん。 DECIMAL フ ィ ール ド の値の 小数点位置の ト ラ ッ キ ン グ は ア プ リ ケーシ ョ ン が行い ま す。 MicroKernel A-21 デー タ 型 がキーを正 し く 照合す る ために、 DECIMAL キー タ イ プの値はすべて、 小 数点以下の桁数 を 同 じ にす る 必要が あ り ま す。 DECIMAL 型は、 一般に COBOL アプ リ ケーシ ョ ン で使用 さ れます。 8 バ イ ト の decimal は、15 桁の数字 と サ イ ン を保持する こ と がで き ます。 10 バ イ ト の decimal では、19 桁の数字 と サ イ ン を保持で き ます。 decimal 値は、 左側の桁をゼ ロ で埋め る 必要があ り ます。 FLOAT 注意 C 言語の定義が FLOAT (4 バ イ ト ) ま たは DOUBLE (8 バ イ ト ) デー タ 型に対 し てサポー ト し てい る 精度を超え る 精度は失われ ま す。 小数点以下の桁数が多い数値に精度が要求 さ れ る 場合は、 DECIMAL 型の使用を考慮 し て く だ さ い。 FLOAT キー タ イ プは、単精度実数ま たは倍精度実数の IEEE 規格に準拠 し てい ます。 4 バ イ ト FLOAT の内部形式は次の よ う に、23 ビ ッ ト の仮数、127 でバ イ ア ス さ れた 8 ビ ッ ト の指数、 お よ びサ イ ン ビ ッ ト で構成 さ れます。 8 バ イ ト の FLOAT キーは、 52 ビ ッ ト の仮数、 1023 でバ イ ア ス さ れた 11 ビ ッ ト の指数、 お よ びサ イ ン ビ ッ ト を持ち ます。 内部形式は次の と お り で す。 A-22 Btrieve キーのデー タ 型 INTEGER INTEGER キー タ イ プは、 符号付 き 整数で、 偶数バ イ ト を保持す る 必要が あ り ま す (1 は例外) 。 何桁の数字で も 含む こ と が で き ま す。 INTEGER フ ィ ール ド は、 内部的に Intel バ イ ナ リ 整数形式で格納 さ れ、 WORD 内で 上位バ イ ト と 下位バ イ ト が反転 さ れてい ます。 MicroKernel は、 キーを右か ら 左へ と 一度に 1 WORD ずつ評価 し ます。 サ イ ンは、 右端のバ イ ト の上位 ビ ッ ト に格納 し なければな り ません。 INTEGER 型は、ほ と ん ど の開発環境 でサポー ト さ れてい ます。 表 A-7 INTEGER キー タ イ プ 長 さ (バイ ト 単位) 値の範囲 1 0 - 255 2 -32768 - 32767 4 -2147483648 - 2147483647 8 -9223372036854775808 - 9223372036854775807 A-23 デー タ 型 LOGICAL LOGICAL キー タ イ プは、 1 バ イ ト 値ま たは 2 バ イ ト 値 と し て格納 さ れま す。 MicroKernel は LOGICAL キー タ イ プを文字列 と し て照合 し ます。 こ れ に よ り 、 アプ リ ケーシ ョ ンは、 格納 さ れてい る 真ま たは偽を表す値を判定 す る こ と がで き ます。 LSTRING LSTRING キー タ イ プは、 文字列の最初のバ イ ト に文字列の長 さ のバ イ ナ リ 表現 を 含 む点 を 除 い て、 通常 の STRING 型 と 同 じ 特性 を 持 ち ま す。 LSTRING キー タ イ プのサ イ ズは、 最大 255 バ イ ト に制限 さ れてい ま す。 LSTRING キーのバ イ ト 0 に格納 さ れてい る 長 さ に よ り 、有効バ イ ト 数が判 断 さ れます。 MicroKernel は、 値を ソ ー ト する 際、 指定 さ れた文字列の長 さ を超え る 値はすべて無視 し ます。 LSTRING 型は、一般に Pascal アプ リ ケー シ ョ ンで使用 さ れます。 MONEY MONEY キー タ イ プの内部表現法は DECIMAL 型 と 同 じ ですが、 小数点以 下が 2 桁に想定 さ れます。 A-24 Btrieve キーのデー タ 型 NUMERIC NUMERIC デー タ 型の数字はそれぞれ 1 バ イ ト を占め ます。 数値の右端の バ イ ト には、 埋め込み符号が EBCDIC 値で含まれます。 デフ ォ ル ト で、 正 の NUMERIC デー タ 型の符号値は、符号な し 数値です。 NUMERIC 型は、一 般に COBOL アプ リ ケーシ ョ ンで使用 さ れます。 オプシ ョ ンで、 正の NUMERIC デー タ 型の符号の値を シ フ ト す る よ う 指定 で き ます。 次の表は、 符合値のデフ ォ ル ト (シ フ ト さ れていない) 状態 と シ フ ト さ れた状態の比較を示 し ます。 表 A-8 NUMERICS の符合値のシ フ ト 状態 と シ フ ト な し 状態の比較 桁 デフォルト (シフトなし) の符合値 シ フ ト さ れた符合値 正 負 正 負 1 1 J A J 2 2 K B K 3 3 L C L 4 4 M D M 5 5 N E N 6 6 O F O 7 7 P G P 8 8 Q H Q 9 9 R I R 0 0 } { } A-25 デー タ 型 シ フ ト 形式の有効化 シ フ ト 形式を有効にす る には、 Pervasive PSQL デー タ ベース エン ジ ンが実 行 さ れてい る マシ ン で、 あ る 設定を手動で指定 し なければな り ません。 設 定 DBCobolNumeric を "yes" にセ ッ ト し ます。 次の表は、 設定の指定方法 について、 エ ン ジ ン のサーバー プ ラ ッ ト フ ォ ーム ご と に ま と め て あ り ま す。 完全 な 手順につい て は、 『Pervasive PSQL Programmer’s Reference』 の 「NUMERIC」 を参照 し て く だ さ い。 表 A-9 プ ラ ッ ト フ ォ ームご と の DBCobolNumeric 設定の指定方法 サーバー プ ラ ッ ト フ ォ ーム 設定の指定方法 Windows 32 ビ ッ ト オペレーテ ィ ン グ シ ス テ ムで提供 さ れ る レ ジ ス ト リ エデ ィ タ を使用 し て、 DBCobolNumeric 設定を次のキーの新 し い文 字列値 と し て レ ジ ス ト リ に追加 し ます。 HKEY_LOCAL_MACHINE/SOFTWARE/PERVASIVE SOFTWARE/DATABASE NAMES/VERSION x/ SETTINGS (x はバージ ョ ン番号を表 し ます) 文字列値に "yes" を設定 し ます。 注意: レ ジ ス ト リ の編集は高度な操作です。 誤っ て編集す る と 、 オペレーテ ィ ン グ シ ス テ ム が起動 し な く な る 恐れがあ り ます。 必要であれば、経験豊富な技術者に依頼 し て編集を 行 っ て も ら っ て く だ さ い。 Pervasive Software は レ ジ ス ト リ の破損に対 し て責任を負い ません。 デー タ ベー ス エ ン ジ ン ま たはエ ン ジ ン サー ビ ス を 停止 し て、再起動 し ます。 『Pervasive PSQL User’s Guide』の「Windows サーバー上でのサーバー エン ジ ンの起動 と 停止」 (2-3 ペー ジ) お よ び 「Windows 上での ワ ー ク グループ エ ン ジ ンの起 動 と 停止」 (2-5 ページ) を参照 し て く だ さ い。 Linux bti.ini の [Database Names] エ ン ト リ の下に DBCobolNumeric 設定を追加 し ます。 [Database Names] DBCobolNumeric=yes デフ ォ ル ト では、 bti.ini は /usr/local/psql/etc デ ィ レ ク ト リ に あ り ます。 データベース エンジンを停止して、 再起動します。 『Pervasive PSQL User’s Guide』 の 「Linux 上でのデー タ ベース エ ン ジ ン の起動 と 停止」 (2-5 ページ) を参照 し て く だ さ い。 A-26 Btrieve キーのデー タ 型 正の NUMERIC デー タ の符合値の整合 符合値が デ フ ォ ル ト (シ フ ト さ れ て い な い) 形式 で 含 ま れ て い る 正 の NUMERIC デー タ が既にあ る か も し れません。 DBCobolNumeric を "yes" に 設定 し た後、 引 き 続 き 同 じ テーブルへデー タ を追加す る と 、 形式が混在す る こ と にな り ます。 デー タ の符合値の形式を混在 さ せた ま ま に し てお く こ と はお勧めで き ません。 形式が混在 し た状態を解消す る 、 あ る いは防ぐ には、 UPDATE ス テー ト メ ン ト を使用 し て、NUMERIC 列を その列自身で更新 し ます。 た と えば、テー ブル t1 には NUMERIC デー タ 型の列 c1 があ る と し ます。 DBCobolNumeric を "yes" に設定後、 c1 を UPDATE TABLE t1 SET c1 = c1 の よ う に更新 し ま す。 「UPDATE」 (3-197 ページ) を参照 し て く だ さ い。 NUMERICSA NUMERICSA キー タ イ プ (NUMERIC SIGNED ASCII と 呼ばれ る こ と も あ り ます) は、 COBOL デー タ 型で、 埋め込みサ イ ンが EBCDIC 値ではな く ASCII 値であ る 点を除けば、 NUMERIC デー タ 型 と 同 じ です。 NUMERICSTS NUMERICSTS キー タ イ プ(SIGN TRAILING SEPARATE と 呼ばれ る こ と も あ り ます) は、 COBOL デー タ 型で、 NUMERIC デー タ 型の値 と 似た値を持 ち ます。 NUMERICSTS 値は、 先頭に 0 を付けて右揃え さ れ、 ASCII 文字列 と し て格納 さ れます。 ただ し 、NUMERICSTS 文字列の右端のバ イ ト は、「+」 (ASCII 0x2B) か 「-」 (ASCII 0x2D) のいずれかにな り ます。 こ の点が、 右 端のバ イ ト にそのバ イ ト の値 と 共にサ イ ン を埋め込む NUMERIC 値 と は異 な り ます。 REAL REAL 型は 4 バ イ ト 「FLOAT」 と し て定義 さ れます。 A-27 デー タ 型 TIME TIME キー タ イ プは、 内部的に 4 バ イ ト 値 と し て格納 さ れます。 100 分の 1 秒、 秒、 分、 時の値が、 それぞれ 1 バ イ ト のバ イ ナ リ 形式で格納 さ れます。 MicroKernel は、 100 分の 1 秒の値を最初のバ イ ト に、 それ以降のバ イ ト に それぞれ、 秒、 分、 時の値を置 き ます。 TIMESTAMP TIMESTAMP デー タ 型は日付 と 時刻の値を表 し ます。 SQL アプ リ ケーシ ョ ンでは、 こ のデー タ 型を使用 し て、 レ コ ー ド を最後に更新 し た日付 と 時刻 を レ コ ー ド に ス タ ンプ し ます。 メ モ ODBC 標準に従っ て、 CURRENT_TIME() や NOW() な ど の ス カ ラ 関数は、 デー タ 型の う ち小数の秒を表す部分は無視 し ます。 こ のた め、 ス カ ラ 関数に よ っ て生成 さ れ る TIMESTAMP 値の 1 秒未満は常に ゼ ロ にな り ま す。 た と えば、 2002-06-11 16:15:50.0000000 と な り ます。 TIMESTAMP 値の秒の小数部分に意味 を持たせ る 必要が あ る 場合は、 挿入ま たは更新す る 値の生成に ス カ ラ 関数を使用 し ないで く だ さ い。 TIMESTAMP は、 次の構成要素か ら 成 る 日付 と 時刻の値を扱 う こ と を目的 と し てい ます。 構成要素は、 年、 月、 日、 時、 分、 秒です。 次の表は、 こ れ ら の各構成要素で有効な値を示 し ます。 表 A-10 TIMESTAMP デー タ 型 A-28 年 0001 か ら 9999 月 01 か ら 12 日 01 か ら 31、 グ レ ゴ リ オ暦の年 と 月の値に よ っ て決め ら れます。 時 00 か ら 23 分 00 か ら 59 秒 00 か ら 59 Btrieve キーのデー タ 型 値は、 内部的に TIMESTAMP MicroKernel キー と し て格納 さ れ ま す。 こ れ は 8 バ イ ト 長の フ ィ ール ド で、 タ イ ム ス タ ンプ精度が示す秒の分数に変換 さ れた日付値お よ び時刻値全体を含みます。 た と えば、 タ イ ム ス タ ン プ精 度が 6 の場合はマ イ ク ロ 秒に変換 さ れ、 タ イ ム ス タ ンプ精度が 3 の場合は ミ リ 秒に変換 さ れます。現地時刻で TIMESTAMP の値を指定する と 、SRDE はそれを UTC (Coordinated Universal Time) (以前は GMT (Greenwich Mean Time) と 呼び ま し た) に変換 し てか ら 、 MicroKernel レ コ ー ド に格納 し ま す。 TIMESTAMP の値を要求する と 、 SRDE はそのデー タ を返す前に UTC か ら 現地時刻に変換 し ます。 注意 デー タ ベース エン ジ ン を実行する コ ン ピ ュ ー タ の タ イ ム ゾーン 情報が正 し く 設定 さ れてい る こ と が重大です。 タ イ ム ゾーン を ま たい だ移動を し た場合、 と い う よ り タ イ ム ゾーン情報を変更 し た場合、 返 さ れ る デー タ は UTC か ら 現地時刻に変換 さ れ る と き に変わ り ま す。 現地時刻 /UTC 変換は、 SRDE 内で、 SRDE が動作 し てい る 場所の タ イ ム ゾーン情報を使用 し て発生 し ます。 SRDE エン ジ ン と タ イ ム ゾーン が異な る セ ッ シ ョ ンの タ イ ム ゾーン情報は、 現地時刻 /UTC 変換には 使用 さ れません。 注意 タ イ ム ス タ ン プ デー タ は 格納す る 前 に 変換 さ れ る た め、 TIMESTAMP 型は、 デー タ ベース本体の外にあ る イ ベン ト を参照す る 現地時刻デー タ や現地日付デー タ での使用には向 き ません。 特に、 季 節時間の変更が行われ る タ イ ム ゾーン (米国のサマー タ イ ム な ど) で はそ う です。 た と えば、 10 月 15 日に、 11 月 15 日午前 10 時の予定を記録す る タ イ ム ス タ ン プ値を入力 し た と し ます。 タ イ ム ゾーンは U.S. 中部であ る と し ま す。 SRDE は値を格納す る と き 、 現在の現地時刻情報を使っ て 値を UTC に変換 し ます (CDT の場合、 UTC - 5 時間)。 し たがっ て、 時 間値 15 が格納 さ れます。 11 月 1 日に予定の時刻を確認す る と し ます。 現在、 お使いの コ ン ピ ュ ー タ は標準時間にな っ てい ます。 こ れは、 10 月の最終日曜日にサマー タ イ ムの切 り 替えが発生 し たためです。 こ れ に よ り 、変換は (UTC - 6 時間 ) にな り ます。 予定時刻を抽出する と 、現 地時刻の午前 9 時 (15 UTC - 6 CST) が表示 さ れますが、 こ れは正 し い予定時刻ではあ り ません。 デー タ ベース エン ジ ン を あ る タ イ ム ゾーンか ら 別の タ イ ム ゾーンに 移動 さ せた場合 も 、 同種の問題が発生 し ます。 SRDE は DATE 値お よ び TIME 値は UTC に変換 し ないので、外部デー タ を記録す る 場合は、 で き る 限 り いつ も DATE 列お よ び TIME 列を使 用す る こ と を お勧め し ま す。 TIMESTAMP 列 を 使用す る 唯一の理由 は、 デー タ ベース に入力 し た レ コ ー ド の時間順を判定す る 固有の機能 に必要だか ら です。 A-29 デー タ 型 UNSIGNED BINARY MicroKernel は、 UNSIGNED キーを符号な し の INTEGER キー と し て ソ ー ト し ま す。 UNSIGNED キ ーは偶数のバ イ ト を 含 ま な け れば な り ま せん。 MicroKernel は、 UNSIGNED キーを右か ら 左へ と 一度に 1 WORD ずつ比較 し ます。 UNSIGNED キーは INTEGER キーと同じ方法でソートされます。 UNSIGNED キー と INTEGER キー と の違いは、 INTEGER にはサ イ ン ビ ッ ト があ る の に対 し 、 UNSIGNED BINARY タ イ プにはない と い う 点です。 UNSIGNED キーは 4 バ イ ト よ り 長 く する こ と がで き ます。 WSTRING WSTRING は、 ヌ ル で終わ ら な い Unicode 文字列です。 文字列の長 さ は フ ィ ール ド の長 さ で決ま り ます。 WSTRING は SQL ではサポー ト さ れませ ん。 WZSTRING WZSTRING は、2 つの ヌ ルで終わ る Unicode 文字列です。 文字列の長 さ は、 フ ィ ール ド 内の Unicode NULL (2 ヌ ル バ イ ト ) の位置で決ま り ます。 こ れ は、 Btrieve でサポー ト さ れ る 「「ZSTRING」」 型に対応 し ます。 WZSTRING は SQL ではサポー ト さ れません。 ZSTRING ZSTRING キー タ イ プは、 C 文字列に対応 し ます。 ZSTRING 型は、 バ イ ナ リ 0 を含むバ イ ト で終わ る と い う 点以外は、 通常の文字列型 と 同 じ 特性を 持ち ます。 MicroKernel は、 キー値が ヌ ルか ど う か を判定す る 場合を除 き 、 ZSTRING 内で見つけた最初のバ イ ナ リ 0 よ り 後の値をすべて無視 し ます。 ZSTRING 型の最大長は、 ヌ ル終端文字を含めて、 255 バ イ ト です。 ヌ ル値 を許可す る 列のキー と し て使用す る 場合、 文字列の先頭 254 バ イ ト のみが キーに使用 さ れ ます。 こ のわずかな制限は、 キーの合計長が 255 バ イ ト に 制限 さ れてい る こ と に よ り 生 じ る も ので、 1 バ イ ト は列の ヌ ル イ ン ジ ケー タ が占め る ため、 残 り 254 バ イ ト だけがキー値にな り ます。 A-30 SQL の予約語 B サポー ト さ れてい る Pervasive PSQL の予約語 予約語には SQL キーワ ー ド と 、 それ以外の、 SRDE に よ っ て処理 さ れ る と き に特別な意味を持つ記号があ り ます。 予約語をデー タ ベースや、 テーブ ル、 列、 変数、 ま たはその他のオブジ ェ ク ト の名前に使用す る こ と はお勧 め し ません。 予約語をオブジ ェ ク ト 名に使用す る 場合は、 その語句が指定 し た文脈中でキーワー ド と し て使用 さ れていない こ と を SRDE に知 ら せ る ために、 二重引用符で囲む必要があ り ます。 ユーザー定義のオブジ ェ ク ト 名を常に二重引用符で囲む こ と で、 予約語の こ と を心配 し な く て も 済む よ う にな り ます。 こ の付録には次のセ ク シ ョ ンがあ り ます。 「予約語」 (B-2 ページ) 「使用を避け る 語句」 (B-7 ページ) B-1 SQL の予約語 予約語 以下に挙げ る それぞれの記号ま たは語句は、 二重引用符で区切 ら れていな い限 り 、 SRDE に よ っ て処理 さ れ る 際に特別な意味を持ち ます。 こ れ ら の 語句の 1 つを二重引用符を付けないでテーブル名ま たはオブジ ェ ク ト 名に 使用す る と 、 エ ラ ーが発生 し ます。 次のセ ク シ ョ ン、 「使用を避け る 語句」 (B-7 ページ) も 参照 し て く だ さ い。 記号 # ; : @ A ABORT ADD AFTER ALL ALTER AND ANY AS ASC ATOMIC AVG B BEFORE BEGIN BETWEEN CALL CASCADE CASE CAST CHECK CLOSE COALESCE COLLATE COLUMN COMMIT COMMITTED CONSTRAINT CONVERT COUNT CREATE CREATESP CREATETAB CREATEVIEW CROSS CS CURDATE CURRENT CURSOR CURTIME BY C B-2 予約語 D DCOMPRESS DECIMALSEPARATORCOMMA DECLARE DEFAULT DELETE DENY DESC DIAGNOSTICS DICTIONARY DISTINCT DO DROP E EACH ELSE END EX EXEC EXECUTE FETCH FN FOR FOREIGN FROM FULL EXISTS F FUNCTION G GRANT GROUP H HANDLER HAVING IF IN INDEX INNER INOUT INSERT INTERNAL INTO IS I ISOLATION J B-3 SQL の予約語 JOIN K KEY L LEAVE LEFT LEGACYOWNERNAME LEVEL LIKE LOGIN MIN MODIFIABLE NEW NEXT NO NOT NOW NULL OF OFF OLD ON ONLY OPEN OR ORDER OUT OUTER OWNER LOOP M MAX MODIFY N O P B-4 PAGESIZE PRIMARY PROCEDURE PUBLIC PRINT 予約語 R READ REFERENCES REFERENCING RELEASE REPEAT REPEATABLE REPLACE RESTRICT RETURN RETURNS REVOKE RIGHT ROLLBACK ROW ROWCOUNT SAVEPOINT SECURITY SELECT SERIALIZABLE SET SIGNAL SIZE SQLSTATE SSP_EXPR SSP_PRED START SUM SVBEGIN SVEND S T T TABLE THEN TO TOP TRANSACTION TRIGGER TRIGGERSTAMPMISC TRUEBITCREATE TRUENULLCREATE TS U UNCOMMITTED UNION UNIQUE UNTIL UPDATE USER USING V VALUES VIEW B-5 SQL の予約語 W B-6 WHEN WHERE WHILE WITH WORK WRITE 使用を避ける語句 使用を避ける語句 次の表は、 SQL-92 お よ び SQL-99 ANSI 標準で共通のキーワー ド の一覧を 示 し てい ます。 Pervasive PSQL が こ れ ら のキーワ ー ド すべてのサポー ト ま たは提供が可能でない間は、 こ れ ら の語句を二重引用符で囲んで使用 し な い限 り 、 テーブル、 列、 ま たはその他のオブジ ェ ク ト の名前に使用す る こ と は避け る 必要があ り ます。 Pervasive は、 将来の リ リ ース で、 今後追加 さ れ る ANSI SQL キー ワー ド だけでな く 、 以下のキー ワー ド のサポー ト も 追 加す る 権利を保持 し てい ます。 二重引用符を使っ てすべてのテーブル、 列、 お よ びユーザー定義オブジ ェ ク ト の名前を区切っ ておけば、 将来、 予約語 と 競合す る 可能性について心 配す る 必要はあ り ません。 前のセ ク シ ョ ン、 「予約語」 (B-2 ページ) も 参照 し て く だ さ い。 表 B-1 ユーザー定義名での使用を避ける語句 ABSOLUTE ACTION ADD ALL ALLOCATE ALTER AND ANY ARE AS ASC ASSERTION AT AUTHORIZATION AVG BEGIN BETWEEN BIT BIT_LENGTH BOTH BY CASCADE CASCADED CASE CAST CATALOG CHAR CHARACTER CHAR_LENGTH CHARACTER_LENGTH CHECK CLOSE COALESCE COLLATE COLLATION COLUMN COMMIT CONNECT CONNECTION CONSTRAINT CONSTRAINTS CONTINUE CONVERT CORRESPONDING COUNT CREATE CROSS CURRENT CURRENT_DATE CURRENT_TIME CURRENT_TIMESTAMP B-7 SQL の予約語 表 B-1 ユーザー定義名での使用を避ける語句 B-8 CURRENT_USER CURSOR DATE DAY DEALLOCATE DEC DECIMAL DECLARE DEFAULT DEFERRABLE DEFERRED DELETE DESC DESCRIBE DESCRIPTOR DIAGNOSTICS DISCONNECT DISTINCT DOMAIN DOUBLE DROP ELSE END END-EXEC ESCAPE EXCEPT EXCEPTION EXEC EXECUTE EXISTS EXTERNAL EXTRACT FALSE FETCH FIRST FLOAT FOR FOREIGN FOUND FROM FULL FUNCTION GET GLOBAL GO GOTO GRANT GROUP HAVING HOUR IDENTITY IMMEDIATE IN INDICATOR INITIALLY INNER INPUT INSENSITIVE INSERT INT INTEGER INTERSECT INTERVAL INTO IS ISOLATION JOIN KEY LANGUAGE LAST LEADING LEFT LEVEL LIKE LOCAL LOWER MASK MATCH 使用を避ける語句 表 B-1 ユーザー定義名での使用を避ける語句 MAX MIN MINUTE MODULE MONTH NAMES NATIONAL NATURAL NCHAR NEXT NO NOT NULL NULLIF NUMERIC OCTET_LENGTH OF ON ONLY OPEN OPTION OR ORDER OUTER OUTPUT OVERLAPS PAD PARTIAL POSITION PRECISION PREPARE PRESERVE PRIMARY PRIOR PRIVILEGES PROCEDURE PUBLIC READ REAL REFERENCES RELATIVE RESTRICT REVOKE RIGHT ROLLBACK ROWS SCHEMA SCROLL SECOND SECTION SELECT SESSION SESSION_USER SET SIZE SMALLINT SOME SPACE SQL SQLCODE SQLERROR SQLSTATE SUBSTRING SUM SYSTEM_USER TABLE TEMPORARY THEN TIME TIMESTAMP TIMEZONE_HOUR TIMEZONE_MINUTE TO TRAILING TRANSACTION TRANSLATE TRANSLATION TRIM B-9 SQL の予約語 表 B-1 ユーザー定義名での使用を避ける語句 TRUE UNION UNIQUE UNKNOWN UPDATE UPPER USAGE USER USING VALUE VALUES VARCHAR VARYING VIEW WHEN WHENEVER WHERE WITH WORK WRITE YEAR ZONE B-10 シ ス テム テーブル C Pervasive PSQL シ ス テ ム テーブル リ フ ァ レ ン ス こ の付録では、 Pervasive PSQL のシ ス テ ム テーブルについて説明 し ます。 以下のセ ク シ ョ ンがあ り ます。 「概要」 (C-2 ページ) 「シ ス テ ム テーブルの構造」 (C-4 ページ) C-1 シス テム テーブル 概要 Pervasive PSQL お よ びそ の コ ン ポーネ ン ト が使用す る 情報は、 シ ス テ ム テーブル と 呼ばれ る 特殊なテーブルに保管 さ れます。 注意 DELETE、UPDATE や INSERT ス テー ト メ ン ト 、 ま たはユーザー 定義 ト リ ガ を使っ て、 シ ス テ ム テーブルの変更を試みないで く だ さ い。 シ ス テ ム テーブルを変更 し てはいけ ません。 シ ス テ ム テーブルを直接照会す る ア プ リ ケーシ ョ ン を記述 し ないで く だ さ い。 シ ス テ ム テーブルの一部の列が記録 さ れない可能性があ り ます。 次 のいずれかの方法を使用すれば、 シ ス テ ム テーブルに保管 さ れてい る 情報 を アプ リ ケーシ ョ ンで取得で き ます。 「シ ス テ ム ス ト ア ド プ ロ シージ ャ 」 (6-1 ページ) ト ラ ンザ ク シ ョ ン SQL ス テー ト メ ン ト お よ び関数 Pervasive PSQL アプ リ ケーシ ョ ン プ ロ グ ラ ミ ン グ イ ン タ ーフ ェ イ ス (API) で提供 さ れ る 関数 Pervasive PSQL API に関す る 説明は、 Pervasive PSQL Software Development Kit (SDK) に含 ま れてい る ので注意 し て く だ さ い。 SDK コ ン ポーネ ン ト は、 リ リ ース ご と にデー タ ベース エン ジ ン と 互換性があ り ます。 シ ス テ ム テーブルの形式は、 Pervasive PSQL デー タ ベース エン ジ ンの内部アーキテ ク チ ャ 次第です。 リ リ ー ス ご と に アーキ テ ク チ ャ が変わ る こ と も あ り ま す。 公開 さ れていないシ ス テ ム テーブルの列に直接ア ク セ ス し てい る アプ リ ケーシ ョ ンでは、 Pervasive PSQL の内部アーキ テ ク チ ャ が変更 さ れた と き にアプ リ ケーシ ョ ンの修正が必要にな る 場合があ り ます。 次の表は、各シ ス テ ム テーブルの関連フ ァ イ ルの名前 と 、 シ ス テ ム テーブ ルの内容を概説 し た も のです。 メ モ シ ス テ ム テーブルに含 ま れ る 一部のデー タ は表示で き ま せん。 た と えば、 ユーザー パ ス ワー ド は暗号化形式で表示 さ れます。 C-2 概要 表 C-1 シ ス テム テーブル システム テーブル 辞書フ ァ イル 目次 「X$File」 FILE.DDF デー タ ベー ス 内 の テ ー ブ ル の 名前 と ロ ケーシ ョ ン 「X$Field」 FIELD.DDF 列 と 名前付 き イ ンデ ッ ク ス の定義 「X$Index」 INDEX.DDF イ ンデ ッ ク ス の定義 「X$Attrib」 ATTRIB.DDF 列属性の定義 「X$View」 VIEW.DDF ビ ュ ーの定義 「X$Proc」 PROC.DDF ス ト ア ド プ ロ シージ ャ の定義 「X$User」 USER.DDF ユーザー名、グループ名、およびパスワード 「X$Rights」 RIGHTS.DDF ユーザー と グループのア ク セ ス権の定義 「X$Relate」 RELATE.DDF 参照整合性 (RI) の情報 「X$Trigger」 TRIGGER.DDF ト リ ガの情報 「X$Depend」 DEPEND.DDF テーブル、 ビ ュ ー、 プ ロ シージ ャ と ト リ ガ と の依存関係 X$Types TYPES.DDF 今後の使用に備え て予約 さ れてい ます。 デー タ ベース を作成す る と 、 Pervasive PSQL に よ り すべてのシ ス テ ム テー ブルが作成 さ れます。 こ れ ら 以外に遭遇す る 可能性の あ る シ ス テ ム テーブルが 2 つあ り ま す。 VARIANT.DDF と OCCURS.DDF です。 こ れ ら 2 つのシ ス テ ム フ ァ イ ルは COBOL サポー ト 用に使われ る ため、 ユーザーの直接介入は一切必要 と し ません。 COBOL 用ユーテ ィ リ テ ィ の将来のバージ ョ ンは、こ れ ら のシ ス テ ム テーブルが必要でな く な っ た場合には、異な る アーキテ ク チ ャ を実装す る か も し れません。「COBOL アプ リ ケーシ ョ ンの SQL ア ク セ ス」(D-1 ペー ジ) も 参照 し て く だ さ い。 C-3 シス テム テーブル シ ス テム テーブルの構造 こ のセ ク シ ョ ンでは、 シ ス テ ム テーブルの構造について説明 し ます。 X$File X$File シ ス テ ム テーブルは、FILE.DDF フ ァ イ ルに関連付け ら れてい ます。 X$File には、 デー タ ベー ス で定義 さ れて い る 各テーブルについ て、 そ の テーブル名、 関連テーブルの ロ ケーシ ョ ン、 お よ び Pervasive PSQL が割 り 当て た固有の内部 ID 番号が含ま れてい ます。 X$File の構造は次の と お り です。 表 C-2 X$File シ ス テム テーブルの構造 列名 デー タ 型 サイズ 大小文字を 区別 し ない 説明 Xf$Id USMALLINT 2 適用外 Pervasive PSQL が 割 り 当てた内部 ID Xf$Name CHAR 20 はい テーブル名 Xf$Loc CHAR 64 いいえ フ ァ イ ルの ロ ケ ー シ ョ ン (パ ス名) Xf$Flags UTINYINT 1 適用外 フ ァ イ ル フ ラ グ。 ビ ッ ト 4 = 1 の場合、 フ ァ イ ルは辞書 フ ァ イ ルで す。ビ ッ ト 4 = 0 の場合、 フ ァ イ ルはユーザー定 義です。 ビ ッ ト 6 = 1 の 場合、 テ ー ブ ルは真の ヌ ル値 を 許可す る 列 を サポー ト し ます。 Xf$Reserved CHAR 10 いいえ 予約済み X$File テーブルには、 2 つの イ ンデ ッ ク ス が定義 さ れてい ます。 表 C-3 X$File シ ス テム テーブルのイ ンデ ッ ク ス定義 C-4 イ ンデ ッ ク ス番号 セグ メ ン ト 番号 列名 重複可能 大小文字を 区別 し ない セグ メ ン ト 0 0 Xf$Id いいえ 適用外 いいえ 1 0 Xf$Name いいえ はい いいえ シ ス テム テーブルの構造 X$Field X$Field シ ス テ ム テーブルは、 FIELD.DDF フ ァ イ ルに関連付け ら れてい ま す。 X$Field には、 デー タ ベー ス で定義 さ れてい る すべての列 と 名前付 き イ ンデ ッ ク ス に関す る 情報が含 ま れてい ま す。 X$Field の構造は次の と お り です。 表 C-4 X$Field シ ス テム テーブルの構造 列名 デー タ 型 サイズ 大小文字を 区別 し ない 説明 Xe$Id USMALLINT 2 適用外 Pervasive PSQL が 割 り 当 て た、 デー タ ベー ス 内 の 各 フ ィ ール ド に固有の内部 ID Xe$File USMALLINT 2 適用外 こ の列 ま た は名前付 き イ ン デ ッ ク ス が 属す る テ ー ブ ル の ID。 こ れは X$File 内の Xf$Id に 対応 し てい ます。 Xe$Name CHAR 20 はい 列名またはインデックス名 Xe$DataType UTINYINT 1 適用外 制御フ ィ ール ド - 列のデー タ 型 (範囲 0 ~ 26)。値が 227 の場合 は、制約名を表 し ます。値が 255 の場合は、 イ ンデ ッ ク ス名を表 し ます。 Xe$Offset USMALLINT 2 適用外 テ ー ブ ル内 で の 列 の オ フ セ ッ ト 、 名前付 き イ ンデ ッ ク ス の場 合 は イ ン デ ッ ク ス 番号。 オ フ セ ッ ト は、 ゼ ロ を基準に し た相 対です。 インデックス番号は、 X$Index シ ステム テーブルの Xi$Number 列 に保管されている値に対応しま す。 ま た、 セ グ メ ン ト 番 号 は、 X$Index シ ス テ ム テ ー ブ ル の Xi$Part 列に保管 さ れ て い る 値 に対応 し ます。 Xe$Size USMALLINT 2 適用外 列の長 さ 。 フ ィ ール ド に必要な 内部格納領域 を バ イ ト 単位 で 表 し ます。 C-5 シス テム テーブル 表 C-4 X$Field シ ス テム テーブルの構造 列名 デー タ 型 サイズ 大小文字を 区別 し ない 説明 Xe$Dec UTINYINT 1 適用外 列 の 小 数 点 位 置 (DECIMAL、 NUMERIC、 NUMERICSA、 NUMERICSTS、 MONEY、 ま た は CURRENCY 型の場合) 。 連 続 ビ ッ ト 列 の 場合は相対的 な ビ ッ ト 位置。 TIMESTAMP 型の 場合は 1 秒未満の値。 Xe$Flags USMALLINT 2 適用外 フ ラ グ を表す WORD。 ビ ッ ト 0 は文字列デー タ 型 の 大文字 と 小文字 を 区別す る フ ラ グ です。 ビ ッ ト 1 = 0 の場合、 フ ィ ール ド の 大文字 と 小文字は区別 さ れません。 ビ ッ ト 2 = 1 の場合、 フ ィ ール ド で ヌ ル値 が 許可 さ れます。Xe$Flags の ビ ッ ト 3 は、 Pervasive.SQL v7 の 1 バ イ ト TINYINT (B_TYPE_INTEGER 符号な し ) と SRDE の 1 バ イ ト TINYINT (B_TYPE_INTEGER 符号付 き ) を区別す る ために使 用 さ れ ま す。 ビ ッ ト 3 = 1 で、 Xe$DataType = 1 かつ Xe$Size = 1 の場合、TINYINT 列は、SRDE で作成された符号付きの 1 バイト TINYINT で あ る こ と を 示 し ま す。ビ ッ ト 3 = 0 で、Xe$DataType = 1 か つ Xe$Size = 1 の 場 合、 TINYINT 列は、 古い SQL エ ン ジ ン で作成 さ れた符号な し の 1 バ イ ト TINYINT で あ る こ と を 示 し ます。ビ ッ ト 12 = 1 の場合、 フ ィ ール ド は バ イ ナ リ と し て 解析 さ れます。 Xe$File 列は、 X$File シ ス テ ム テーブルの Xf$Id 列に対応 し 、 テーブル と テーブル内の列の リ ン ク にな り ます。 し たがっ て、 た と えば次の ク エ リ は、 Billing テーブルのフ ィ ール ド 定義をすべて定義順に示 し ます。 SELECT "X$Field".* FROM X$File,X$Field WHERE Xf$Id=Xe$File AND Xf$Name = 'Billing' ORDER BY Xe$Offset Xe$DataType 列の整数値は Pervasive PSQL のデー タ 型を表す コ ー ド です。 コ ー ド については、 「Pervasive PSQL がサポー ト す る デー タ 型」 (A-2 ペー ジ) を参照 し て く だ さ い。 C-6 シ ス テム テーブルの構造 X$Field テーブルでは、 次の よ う に イ ンデ ッ ク ス が 5 つ定義 さ れてい ます。 表 C-5 X$Field シ ス テム テーブルのイ ンデ ッ ク ス定義 イ ンデ ッ ク ス 番号 セグ メ ン ト 番号 列名 重複可能 大小文字 を区別 し ない セグ メ ン ト 0 0 Xe$Id いいえ 適用外 いいえ 1 0 Xe$File はい 適用外 いいえ 2 0 Xe$Name はい はい いいえ 3 0 Xe$File いいえ 適用外 はい 3 1 Xe$Name いいえ はい いいえ 4 0 Xe$File はい 適用外 はい 4 1 Xe$Offset はい 適用外 はい 4 2 Xe$Dec はい 適用外 いいえ C-7 シス テム テーブル X$Index X$Index シ ス テ ム テーブルは、 INDEX.DDF フ ァ イ ルに関連付け ら れてい ます。 X$Index には、 デー タ ベース内のテーブルで定義 さ れてい る すべて の イ ンデ ッ ク ス に関す る 情報が含ま れてい ます。 X$Index の構造は次の と お り です。 表 C-6 X$Index シス テム テーブルの構造 列名 デー タ 型 サイズ 大小文字 を区別 し ない 説明 Xi$File USMALLINT 2 適用外 イ ン デ ッ ク ス が属す る テ ーブルの固有の ID。 こ れ は X$File 内 の Xf$Id に 対応 し てい ます。 Xi$Field USMALLINT 2 適用外 イ ン デ ッ ク ス 列 の 固有 の ID。 こ れ は X$Field 内 の Xe$Id に対応 し てい ます。 Xi$Number USMALLINT 2 適用外 イ ンデ ッ ク ス番号 (範囲 0 ~ 119) Xi$Part USMALLINT 2 適用外 セグ メ ン ト 番号 (範囲 0 ~ 119) Xi$Flags USMALLINT 2 適用外 イ ンデ ッ ク ス属性フ ラ グ Xi$File 列は、 X$File シ ス テ ム テーブルの Xf$Id 列に対応 し ま す。 ま た、 Xi$Field 列は、 X$Field シ ス テ ム テーブルの Xe$Id 列に対応 し ます。 し た がっ て、イ ンデ ッ ク ス セグ メ ン ト エン ト リ は 1 つの フ ァ イ ル、1 つの フ ィ ー ル ド に リ ン ク さ れます。 Xi$Flags 列には整数値が含まれ、 イ ンデ ッ ク ス属性を定義 し ます。 次の表 は、 ビ ッ ト がバ イ ナ リ 値 1 であ る と き 、 Pervasive PSQL が各ビ ッ ト 位置を 解釈す る 方法を示 し た も のです。 ビ ッ ト 位置 0 が整数の右端のビ ッ ト にな り ます。 表 C-7 X$Index シス テム テーブルのイ ンデ ッ ク ス定義 C-8 ビ ッ ト 位置 対応する 10 進 数の値 説明 0 1 イ ンデ ッ ク ス の重複が可能 1 2 イ ンデ ッ ク ス の変更が可能 2 4 オル タ ネー ト コ レーテ ィ ン グ シーケ ン ス シ ス テム テーブルの構造 表 C-7 X$Index シス テム テーブルのイ ンデ ッ ク ス定義 ビ ッ ト 位置 対応する 10 進 数の値 説明 3 8 ヌ ル値には イ ンデ ッ ク ス な し (SQL の真の ヌ ル ではな く 、 Btrieve の ヌ ルを参照) 4 16 イ ンデ ッ ク ス 内で こ のセ グ メ ン ト に別のセ グ メ ン ト が連結 5 32 イ ンデ ッ ク ス の大小文字の区別な し 6 64 イ ンデ ッ ク ス を降順に照合 7 128 ビ ッ ト 0 = 0 の場合、 イ ンデ ッ ク ス は名前付 き イ ンデ ッ ク ス です。 ビ ッ ト 0 = 1 かつビ ッ ト 7 = 1 の場合、 イ ンデ ッ ク ス は繰 り 返 し 重複キーの方 法を使用 し ます。 ビ ッ ト 0 = 1 かつビ ッ ト 7 = 0 の 場合、 イ ンデ ッ ク ス は リ ン ク 重複キーの方法を 使用 し ます。 「LINKDUP」 (3-69 ページ) も 参照 し て く だ さ い。 リ ン ク 重複方法お よ び繰 り 返 し 重複方法の詳細 な 説明につい て は、 『Advanced Operations Guide』 の 「重複キーの操作方法」 (1312 ページ) を参照 し て く だ さ い。 8 256 イ ンデ ッ ク ス は Btrieve の拡張キー タ イ プ 13 8192 イ ンデ ッ ク ス は外部キー 14 16384 イ ン デ ッ ク ス は一部の 外部 キ ーが 参照す る 主 キー 特定の イ ンデ ッ ク ス の Xi$Flags 列の値は、 その イ ンデ ッ ク ス の属性に対応 す る 10 進数の値の合計にな り ます。 X$Index テーブルでは、 次の よ う に イ ンデ ッ ク ス が 3 つ定義 さ れてい ます。 表 C-8 X$Index シス テム テーブルのイ ンデ ッ ク ス定義 インデックス 番号 セグ メ ン ト 番号 列名 重複可能 大小文字 を区別 し ない セグ メ ン ト 0 0 Xi$File はい 適用外 いいえ 1 0 Xi$Field はい 適用外 いいえ 2 0 Xi$File いいえ 適用外 はい 2 1 Xi$Number いいえ 適用外 はい 2 2 Xi$Part いいえ 適用外 いいえ C-9 シス テム テーブル イ ンデ ッ ク ス番号は、X$Index シ ス テ ム テーブルの Xi$Number 列に保管 さ れてい る 値に対応 し ます。ま た、セグ メ ン ト 番号は、X$Index シ ス テ ム テー ブルの Xi$Part 列に保管 さ れてい る 値に対応 し ます。 た と えば、Billing テーブルに定義 さ れてい る イ ンデ ッ ク ス セグ メ ン ト に関 す る 情報を見る には、 次の よ う な ク エ リ を発行 し ます。 SELECT Xe$Name,Xe$Offset, "X$Index".* FROM X$File,X$Index,X$Field WHERE Xf$Id=Xi$File and Xi$Field=Xe$Id and Xf$Name = 'Billing' ORDER BY Xi$Number,Xi$Part C-10 シ ス テム テーブルの構造 X$Attrib X$Attrib シ ス テ ム テーブルは、 ATTRIB.DDF フ ァ イ ルに関連付け ら れてい ます。 X$Attrib には、 デー タ ベース内の各列の列属性に関す る 情報が含ま れてい ま す。 つ ま り 、 定義 し た列属性のそれぞれに項目が 1 つあ り ま す。 X$Attrib の構造は次の と お り です。 表 C-9 X$Attrib シス テム テーブルの構造 列名 デー タ 型 サイ ズ 大小文字 を区別 し ない 説明 Xa$Id USMALLINT 2 適用外 X$Field の Xe$Id に対応 Xa$Type CHAR 1 いいえ デフ ォ ル ト は D Xa$ASize USMALLINT 2 適用外 Xa$Attrib に含 ま れ る テ キ ス ト の長 さ Xa$Attrs LONGVARCHAR (NOTE) <=2048 適用外 列属性 を 定義す る テ キ スト 1 つの列に複数の属性を定義する と 、 X$Attrib シ ス テ ム テーブルには、 そ の列 ID に複数の項目が含ま れ ます。 つま り 、 定義 し た各属性につ き 1 つ の項目が対応 し ま す。特定の列に列属性を定義 し ない と 、 X$Attrib テーブ ルに そ の列の項目は含 ま れ ま せん。 Xa$Attrs 列に含 ま れ る テ キ ス ト は、 Pervasive PSQL で定義 し た と お り に表示 さ れます。 X$Attrib テーブルでは、 次の よ う に イ ンデ ッ ク ス が 1 つ定義 さ れてい ます。 表 C-10 X$Attrib シス テム テーブルのイ ンデ ッ ク ス定義 インデックス 番号 セグ メ ン ト 番号 列名 重複可能 大小文字 を区別 し ない セグ メ ン ト 0 0 Xa$Id いいえ 適用外 はい 0 1 Xa$Type いいえ いいえ いいえ イ ンデ ッ ク ス番号は、X$Index シ ス テ ム テーブルの Xi$Number 列に保管 さ れてい る 値に対応 し ます。ま た、セグ メ ン ト 番号は、X$Index シ ス テ ム テー ブルの Xi$Part 列に保管 さ れてい る 値に対応 し ます。 C-11 シス テム テーブル X$View X$View シ ス テ ム テーブルは、 VIEW.DDF フ ァ イ ルに関連付け ら れてい ま す。 X$View には、 結合テーブルの情報やビ ュ ーを定義す る 制約条件な ど のビ ュ ー定義が含まれてい ます。X$View テーブルに ク エ リ を実行 し て、辞 書に定義 さ れてい る ビ ュ ーの名前を取得す る こ と がで き ます。 X$View テーブルの先頭列には ビ ュ ー名が含 ま れ、 第 2 列 と 第 3 列には LVAR 列の Xv$Misc で検出 さ れ る 情報の説明が含まれてい ます。X$View の 構造は次の と お り です。 表 C-11 X$View シ ス テム テーブルの構造 列名 デー タ 型 サイ ズ 大小文字 を区別 し ない 説明 Xv$Name CHAR 20 はい ビ ュ ー名 Xv$Ver UTINYINT 1 適用外 バージ ョ ン ID Xv$Id UTINYINT 1 適用外 シーケ ン ス番号 Xv$Misc LONGVARCHAR (LVAR) <=2000 適用外 Pervasive PSQL 内部定義 X$View テーブルでは、 次の よ う に イ ンデ ッ ク ス が 2 つ定義 さ れてい ます。 表 C-12 X$View シ ス テム テーブルのイ ンデ ッ ク ス定義 インデックス 番号 セグ メ ン ト 番号 列名 重複可能 大小文字 を区別 し ない セグ メ ン ト 0 0 Xv$Name はい はい いいえ 1 0 Xv$Name いいえ はい はい 1 1 Xv$Ver いいえ 適用外 はい 1 2 Xv$Id いいえ 適用外 いいえ イ ンデ ッ ク ス番号は、X$Index シ ス テ ム テーブルの Xi$Number 列に保管 さ れてい る 値に対応 し ます。ま た、セグ メ ン ト 番号は、X$Index シ ス テ ム テー ブルの Xi$Part 列に保管 さ れてい る 値に対応 し ます。 C-12 シ ス テム テーブルの構造 X$Proc X$Proc シ ス テ ム テーブルは、 PROC.DDF フ ァ イ ルに関連付け ら れてい ま す。 X$Proc には、 定義 さ れてい る すべての ス ト ア ド プ ロ シージ ャ の コ ン パ イ ル さ れた構造情報が含 ま れてい ま す。 X$Proc の構造は次の と お り で す。 表 C-13 X$Proc シス テム テーブルの構造 列名 デー タ 型 サイ ズ 大小文字 を区別 し ない 説明 Xp$Name CHAR 30 はい ストアド プロシージャ名 Xp$Ver UTINYINT 1 適用外 バージ ョ ン ID Xp$Id USMALLINT 2 適用外 0 を基数 と す る シーケ ン ス番号 Xp$Flags UTINYINT 1 適用外 ス ト ア ド ス テー ト メ ン ト は 1、 ス ト ア ド プ ロ シージ ャ は 2、 外部プ ロ シージ ャ は 3 Xp$Misc LONGVARCHAR (LVAR) <=990 適用外 ス ト ア ド プ ロ シージ ャ の内部表現 メ モ ス ト ア ド ス テー ト メ ン ト お よ び外部プ ロ シージ ャ は、 旧バー ジ ョ ンの Pervasive PSQL ではサポー ト さ れてい ま し た。Pervasive PSQL v9 では ス ト ア ド プ ロ シージ ャ のみサポー ト さ れます。 X$Proc テーブルでは、 次の よ う に イ ンデ ッ ク ス が 1 つ定義 さ れてい ます。 表 C-14 X$Proc シ ス テム テーブルのイ ンデ ッ ク ス定義 インデックス 番号 セグ メ ン ト 番号 列名 重複可能 大小文字 を区別 し ない セグ メ ン ト 0 0 Xp$Name いいえ はい はい 0 1 Xp$Id いいえ 適用外 いいえ イ ンデ ッ ク ス番号は、X$Index シ ス テ ム テーブルの Xi$Number 列に保管 さ れてい る 値に対応 し ます。ま た、セグ メ ン ト 番号は、X$Index シ ス テ ム テー ブルの Xi$Part 列に保管 さ れてい る 値に対応 し ます。 C-13 シス テム テーブル X$User X$User シ ス テ ム テーブルは、 USER.DDF フ ァ イ ルに関連付け ら れてい ま す。 X$User には、 各ユーザーの名前 と パ ス ワ ー ド 、 お よ び各ユーザー グ ループの名前が含 ま れて い ま す。 Pervasive PSQL は、 セ キ ュ リ テ ィ オプ シ ョ ン が 有効 に な っ て い る と き に の み、 こ の テ ー ブ ル を 使用 し ま す。 X$User の構造は次の と お り です。 表 C-15 X$User シ ス テム テーブルの構造 列名 デー タ 型 サイズ 大小文字 を区別 し ない 説明 Xu$Id USMALLINT 2 適用外 ユーザー ま た は グ ループ に割 り 当て ら れて い る 内 部 ID Xu$Name CHAR 30 はい ユーザーまたはグループ名 Xu$Password CHAR 9 いいえ ユーザー パ ス ワー ド (暗号 化) Xu$Flags USMALLINT 2 適用外 ユーザー ま た は グ ループ フラグ メ モ グ ループ を記述す る X$User シ ス テ ム テーブル内の各行では、 Xu$Password の列の値は ヌ ルにな り ます。 Xu$Flags 列には整数値が含まれ、 その右端の 8 ビ ッ ト はユーザーま たはグ ループ属性を定義 し ま す。 次の表は、 ビ ッ ト がバ イ ナ リ 値 1 であ る と き、 Pervasive PSQL が各ビ ッ ト 位置を解釈す る 方法を示 し た も のです。 ビ ッ ト 位置 0 が整数の右端のビ ッ ト にな り ます。 表 C-16 Xu$Flags シ ス テム テーブルのビ ッ ト 位置定義 C-14 ビ ッ ト 位置 対応する 10 進数の値 説明 0 1 予約済み 1 2 予約済み 2 4 予約済み 3 8 予約済み 4 16 予約済み シ ス テム テーブルの構造 表 C-16 Xu$Flags シ ス テム テーブルのビ ッ ト 位置定義 ビ ッ ト 位置 対応する 10 進数の値 説明 5 32 予約済み 6 64 名前はグループ名 7 128 ユーザーま たはグループは、辞書内の テーブル を 定義す る 権限 を 持 っ て い ます。 特定のユーザーやグループの Xu$Flags 列の値は、 そのユーザー ま たはグ ループに適用 さ れ る 属性に対応す る 10 進数の値の合計にな り ます。 X$User テーブルでは、 次の よ う に イ ンデ ッ ク ス が 2 つ定義 さ れてい ます。 表 C-17 X$User シ ス テム テーブルのイ ンデ ッ ク ス定義 インデックス 番号 セグ メ ン ト 番号 列名 重複可能 大小文字 を区別 し ない セグ メ ン ト 0 0 Xu$Id はい 適用外 いいえ 1 0 Xu$Name いいえ はい いいえ イ ンデ ッ ク ス番号は、X$Index シ ス テ ム テーブルの Xi$Number 列に保管 さ れてい る 値に対応 し ます。ま た、セグ メ ン ト 番号は、X$Index シ ス テ ム テー ブルの Xi$Part 列に保管 さ れてい る 値に対応 し ます。 C-15 シス テム テーブル X$Rights X$Rights シ ス テ ム テーブルは、RIGHTS.DDF フ ァ イ ルに関連付け ら れてい ま す。 X$Rights には、 各ユーザーの ア ク セ ス 権情報が含 ま れ て い ま す。 Pervasive PSQL は、 セキ ュ リ テ ィ オプシ ョ ン を有効に し た場合のみ、 こ の テーブルを使用 し ます。 X$Rights の構造は次の と お り です。 表 C-18 X$Rights シ ス テム テーブルの構造 列名 デー タ 型 サイズ 大小文字 を区別 し ない 説明 Xr$User USMALLINT 2 適用外 ユーザー ID Xr$Table USMALLINT 2 適用外 テーブル ID Xr$Column USMALLINT 2 適用外 列 ID Xr$Rights UTINYINT 1 適用外 テーブル ま たは列のア ク セ ス権フ ラ グ Xr$User 列は、 X$User テーブルの Xu$Id 列に対応 し ます。 ま た、 Xr$Table 列は X$File テーブルの Xf$Id 列に、 Xr$Column 列は X$Field テーブルの Xe$Id 列に対応 し ます。 メ モ テーブル ア ク セ ス 権を記述す る シ ス テ ム テーブル内の各行で は、 Xr$Column 列の値は ヌ ルにな り ます。 Xr$Rights 列には整数値が含まれ、その右端 8 ビ ッ ト がユーザーのア ク セ ス 権を定義 し ます。 次の表は、 Pervasive PSQL が値を解析する 方法を説明 し た も のです。 こ の表の値は、 単一の Xr$Rights 値に結合 さ れ る 場合があ り ます。 表 C-19 Xr$Rights シス テム テーブルのビ ッ ト 位置定義 C-16 16 進数の値 対応する 10 進数の値 説明 1 1 再編成権 0x90 144 テーブルの参照権 0xA0 160 テーブルの変更権 0x40 64 テーブルま たは列の選択権 0x82 130 テーブルま たは列の更新権 シ ス テム テーブルの構造 表 C-19 Xr$Rights シ ス テム テーブルのビ ッ ト 位置定義 16 進数の値 対応する 10 進数の値 説明 0x84 132 テーブルま たは列の挿入権 0x88 136 テーブルま たは列の削除権 10 進数の 0 はア ク セ ス権がない こ と を示 し ます。 特定のユーザーの Xr$Rights 列の値は、 そのユーザーに適用 さ れ る ア ク セ ス権に対応す る 16 進数の ビ ッ ト 単位の共通部分にな り ます。 10 進数の値 の合計ではあ り ません。 た と えば、すべてのア ク セ ス権が割 り 当て ら れてい る ユーザーの Xr$Rights の値は、 次の よ う に表 さ れます。 144 | 160 | 64 | 130 | 132 | 136 = 254 X$Rights テーブルでは、次の よ う に イ ンデ ッ ク ス が 3 つ定義 さ れてい ます。 表 C-20 X$Rights シ ス テム テーブルのイ ンデ ッ ク ス定義 インデックス 番号 セグ メ ン ト 番号 列名 重複可能 大小文字 を区別 し ない セグ メ ン ト 0 0 Xr$User はい 適用外 いいえ 1 0 Xr$User いいえ 適用外 はい 1 1 Xr$Table いいえ 適用外 はい 1 2 Xr$Column いいえ 適用外 いいえ 2 0 Xr$Table はい 適用外 はい 2 1 Xr$Column はい 適用外 いいえ C-17 シス テム テーブル X$Relate X$Relate シ ス テ ム テーブルは、RELATE.DDF フ ァ イ ルに関連付け ら れてい ます。 X$Relate には、 デー タ ベース で定義 さ れてい る 参照整合性 (RI) 制 約に関す る 情報が含まれてい ます。 X$Relate は最初の外部キーが作成 さ れ る と き に自動的に作成 さ れ、 こ れに よ り 関係が定義 さ れます。 X$Relate の構造は次の と お り です。 表 C-21 X$Relate シ ス テム テーブルの構造 列名 デー タ 型 サイズ 大小文字 を区別 し ない 説明 Xr$PId USMALLINT 2 適用外 主テーブル ID Xr$PIndex USMALLINT 2 適用外 主テーブルに含ま れ る 主 キーの イ ンデ ッ ク ス番号 Xr$FId USMALLINT 2 適用外 従属テーブル ID Xr$FIndex USMALLINT 2 適用外 従属テーブルに含ま れ る 外部キーの イ ンデ ッ ク ス 番号 Xr$Name CHAR 20 はい 外部キー名 Xr$UpdateRule UTINYINT 1 適用外 制限は 1 Xr$DeleteRule UTINYINT 1 適用外 制限は 1、カ ス ケー ド は 2 Xr$Reserved CHAR 30 いいえ 予約済み X$Relate テーブルでは、次の よ う に イ ンデ ッ ク ス が 5 つ定義 さ れてい ます。 表 C-22 X$Relate シ ス テム テーブルのイ ンデ ッ ク ス定義 C-18 インデックス 番号 セグ メ ン ト 番号 列名 重複可能 大小文字 を区別 し ない セグ メ ン ト 0 0 Xr$PId はい 適用外 いいえ 1 0 Xr$FId はい 適用外 いいえ 2 0 Xr$Name いいえ はい いいえ 3 0 Xr$Pld いいえ 適用外 はい 3 1 Xr$Name いいえ はい いいえ シ ス テム テーブルの構造 表 C-22 X$Relate シ ス テム テーブルのイ ンデ ッ ク ス定義 インデックス 番号 セグ メ ン ト 番号 列名 重複可能 大小文字 を区別 し ない セグ メ ン ト 4 0 Xr$Fld いいえ 適用外 はい 4 1 Xr$Name いいえ はい いいえ イ ンデ ッ ク ス番号は、X$Index シ ス テ ム テーブルの Xi$Number 列に保管 さ れてい る 値に対応 し ます。ま た、セグ メ ン ト 番号は、X$Index シ ス テ ム テー ブルの Xi$Part 列に保管 さ れてい る 値に対応 し ます。 C-19 シス テム テーブル X$Trigger X$Trigger シ ス テ ム テーブルは、 TRIGGER.DDF フ ァ イ ルに関連付け ら れ てい ます。 X$Trigger には、 デー タ ベース で定義 さ れてい る ト リ ガに関す る 情報が含まれてい ます。 X$Trigger の構造は次の と お り です。 表 C-23 X$Trigger シス テム テーブルの構造 列名 デー タ 型 サイ ズ 大小文字 を区別 し ない 説明 Xt$Name CHAR 30 はい ト リ ガ名 Xt$Version USMALLINT 2 適用外 ト リ ガ の バ ー ジ ョ ン。 Scalable SQL バージョ ン 4 の場合は 4 Xt$File USMALLINT 2 適用外 ト リ ガが定義 さ れて い る フ ァ イ ル。 X$File 内の Xf$Id に 対応 Xt$Event UNSIGNED 1 適用外 INSERT は 0、 DELETE は 1、 UPDATE は 2 Xt$ActionTime UTINYINT 1 適用外 BEFORE は 0、 AFTER は 1 Xt$ForEach UTINYINT 1 適用外 ROW は 0 (デフ ォ ル ト )、 STATEMENT は1 Xt$Order USMALLINT 2 適用外 ト リ ガの実行順序 Xt$Sequence USMALLINT 2 適用外 0 を基数 と す る シー ケ ン ス番号 Xt$Misc LONGVARCHAR (LVAR) <=4054 適用外 ト リ ガの内部表現 十分な長 さ のあ る ト リ ガは、 TRIGGER.DDF 内の複数の項目を必要 と す る こ と があ り ます。各項目は、Xt$Name フ ィ ール ド に同一の ト リ ガ名を持ち、 Xt$Sequence フ ィ ール ド で指定 さ れた順で使用 さ れます。 C-20 シ ス テム テーブルの構造 X$Trigger テーブルでは、次の よ う に イ ンデ ッ ク ス が 3 つ定義 さ れてい ます。 表 C-24 X$Trigger シ ス テム テーブルのイ ンデ ッ ク ス定義 インデックス 番号 セグ メ ン ト 番号 列名 重複可能 大小文字 を区別 し ない セグメント 0 0 Xt$Name いいえ はい はい 0 1 Xt$Sequence いいえ 適用外 いいえ 1 0 Xt$File いいえ 適用外 はい 1 1 Xt$Name いいえ はい はい 1 2 Xt$Sequence いいえ 適用外 いいえ 2 0 Xt$File はい 適用外 はい 2 1 Xt$Event はい 適用外 はい 2 2 Xt$ActionTime はい 適用外 はい 2 3 Xt$ForEach はい 適用外 はい 2 4 Xt$Order はい 適用外 はい 2 5 Xt$Sequence はい 適用外 いいえ イ ンデ ッ ク ス番号は、X$Index シ ス テ ム テーブルの Xi$Number 列に保管 さ れてい る 値に対応 し ます。ま た、セグ メ ン ト 番号は、X$Index シ ス テ ム テー ブルの Xi$Part 列に保管 さ れてい る 値に対応 し ます。 C-21 シス テム テーブル X$Depend X$Depend シ ス テ ム テーブルは、DEPEND.DDF フ ァ イ ルに関連付け ら れて い ま す。 X$Depend には、 テーブル、 ビ ュ ー、 お よ びプ ロ シージ ャ と ト リ ガ と の依存関係に関す る 情報が含 ま れてい ま す。 X$Depend の構造は次の と お り です。 表 C-25 X$Depend シ ス テム テーブルの構造 列名 デー タ 型 サイズ 大小文字 を区別 し ない 説明 Xd$Trigger CHAR 30 はい ト リ ガ名。 X$Trigger 内 の Xt$Name に対応 Xd$DependType UNSIGNED 1 適用外 テーブルは 1、 ビ ュ ーは 2、 プ ロ シージ ャ は 3 Xd$DependName CHAR 30 はい ト リ ガ と 関連付け ら れ て い る 依存関係の名 前。X$File の Xf$Name、 X$View の Xv$Name、 X$Proc の Xp$Name の いずれか に対応 し て い ます。 X$Depend テーブルでは、 次の よ う にインデックスが 2 つ定義 さ れてい ます。 表 C-26 X$Depend シ ス テム テーブルのイ ンデ ッ ク ス定義 インデックス 番号 セグメント 番号 列名 重複可能 大小文字 を区別 し ない セグメント 0 0 Xd$Trigger いいえ はい はい 0 1 Xd$DependType いいえ 適用外 はい 0 2 Xd$DependName いいえ はい いいえ 1 0 Xd$DependType はい 適用外 はい 1 1 Xd$DependName はい はい いいえ イ ンデ ッ ク ス番号は、X$Index シ ス テ ム テーブルの Xi$Number 列に保管 さ れてい る 値に対応 し ます。ま た、セグ メ ン ト 番号は、X$Index シ ス テ ム テー ブルの Xi$Part 列に保管 さ れてい る 値に対応 し ます。 C-22 COBOL ア プ リ ケーシ ョ ンの SQL ア ク セス D COBOL アプ リ ケーシ ョ ン の SQL ア ク セ ス の提供 こ の付録では、 以下の項目について説明 し ます。 「概要」 (D-2 ページ) 「 コ ン ポーネ ン ト 」 (D-4 ページ) 「SQL ア ク セ ス の使用」 (D-6 ページ) 「サンプル XML フ ァ イ ルの実行例」 (D-14 ページ) D-1 COBOL ア プ リ ケーシ ョ ンの SQL ア ク セス 概要 Pervasive PSQL リ レ ー シ ョ ナ ル イ ン タ ー フ ェ イ ス に は、 COBOL の OCCURS コ ン ス ト ラ ク ト 、 部分的 REDEFINES、 お よ び可変レ コ ー ド レ イ ア ウ ト のサポー ト が含まれてい ます。 部分的 REDEFINES は、 レ コ ー ド の中でデー タ の一部分 を再定義 し ま す。 た と えば、01 レベルの中にあ る 05 レベルで再定義を行い ます。 可変レ コ ー ド レ イ ア ウ ト も ま た REDEFINES と 呼ばれます。 こ れは、 レ コ ー ド 全体を 再定義す る も のだか ら です。 用語の混乱を避け る ため、 こ のセ ク シ ョ ン で は部分的 REDEFINES お よ び可変レ コ ー ド レ イ ア ウ ト と 呼びます。 SQL ア ク セ ス を利用す る ために COBOL アプ リ ケーシ ョ ン を変更す る 必要 はあ り ません。 ア プ リ ケーシ ョ ン に よ る デー タ の解釈を Pervasive PSQL リ レ ーシ ョ ナル イ ン タ ーフ ェ イ ス に示す こ と に よ っ て SQL ア ク セ ス が可能にな り ます。 開 発者の用語を使用すれば、 リ レーシ ョ ナル イ ン タ ーフ ェ イ ス に メ タ デー タ を定義 し ます。 こ のセ ク シ ョ ン は、 OCCURS、 部分的 REDEFINES、 ま たは可変 レ コ ー ド レ イ ア ウ ト を含んでい る COBOL アプ リ ケーシ ョ ンにのみ適用 さ れ る こ と に注意 し て く だ さ い。 制限 現在、 COBOL アプ リ ケーシ ョ ンに SQL ア ク セ ス を提供す る 場合には以下 の制限が適用 さ れます。 D-2 OCCURS の中で OCCURS を ネ ス ト す る こ と はで き ません 部分的 REDEFINES の中で OCCURS を ネ ス ト す る こ と はで き ません 部分的 REDEFINES の中で部分的 REDEFINES を ネ ス ト す る こ と はで き ません OCCURS の中で部分的 REDEFINES を ネ ス ト す る こ と はで き ません OCCURS に定義で き る のは 1 イ ンデ ッ ク ス のみです。 OCCURS の中で、 項目に追加 イ ンデ ッ ク ス を定義す る こ と はで き ません。 サポー ト さ れ る デー タ 型は、 Pervasive PSQL の ト ラ ンザ ク シ ョ ナルお よ び リ レーシ ョ ナル イ ン タ ーフ ェ イ ス に定義 さ れてい る デー タ 型のみで す。 デー タ 型は、 ト ラ ンザ ク シ ョ ナル デー タ 型のみを使っ て、 XML コ ン ト ロ ール フ ァ イ ルに記述 さ れます。 XML コ ン ト ロ ール フ ァ イ ルの解 説については、 表 D-2 の 「cobolschemaexec.xsd」 を参照 し て く だ さ い。 デー タ 型の説明については、『Pervasive PSQL Programmer’s Reference』 の 「Pervasive PSQL がサポー ト する デー タ 型」 (A-2 ページ) を参照 し て く だ さ い。 概要 SQL ス テー ト メ ン ト 次の表は、 OCCURS、 部分的 REDEFINES、 ま たは可変レ コ ー ド レ イ ア ウ ト に基づいて作成 さ れたデー タ テーブルでの SQL ス テー ト メ ン ト の使用 を示 し ます。 表 D-1 COBOL デー タ 構造での SQL ス テー ト メ ン ト の使用 ス テー ト メ ン ト OCCURS、 部分的 REDEFINES での使用 可変レコード レイアウトで の使用 ALTER TABLE No No CREATE INDEX No No CREATE INDEX IN DICTIONARY No Yes CREATE TRIGGER No No DELETE No Yes DROP TABLE Yes Yes INSERT INTO No No UPDATE Yes Yes UPDATE ス テー ト メ ン ト で、 テーブル フ ィ ル タ が 定 義 さ れ て い る 列 は 更 新 で き ま せ ん。 テーブル フ ィ ル タ と は、 テーブルに関連付け ら れて い る 論理式の こ と です。 テーブル フ ィ ル タ は XML フ ァ イ ル内の メ タ デー タ の一部 と し て定義 さ れます。 『Pervasive PSQL Programmer’s Reference』 に 列挙 さ れてい る その他すべ ての SQL ス テー ト メ ン ト Yes Yes 『Pervasive PSQL Programmer’s Reference』 の 「ス テー ト メ ン ト の文法」 (3-2 ページ) を参照 し て く だ さ い。 メモ DROP TABLE ス テ ー ト メ ン ト は、 シ ス テ ム テーブルか ら すべてのエ ン ト リ を削除 し ま す。 デー タ フ ァ イ ル自体は削除 も 変更 も さ れ ま せ ん。 ま た、 メ イ ン テーブルを削除す る 場合、 従 属テーブルが検出 さ れ る と 、それ ら をすべて削 除す る よ う 通知す る メ ッ セージ が表示 さ れ ま す。 従属テーブルは メ イ ン テーブルに依存す る も のであ り 、 こ れは イ ンデ ッ ク ス を含んでい る OCCURS や部分的 REDEFINES な ど の条件 に よ っ て生 じ ま す。 従属テーブル を 削除すれ ば、 メ イ ン テーブルの削除が可能にな り ます。 D-3 COBOL ア プ リ ケーシ ョ ンの SQL ア ク セス コ ンポーネ ン ト Pervasive PSQL v9 は、 COBOL アプ リ ケーシ ョ ンの SQL ア ク セ ス を提供す る ために以下の コ ン ポーネ ン ト を イ ン ス ト ール し ます。 表 D-2 COBOL アプリケーションの SQL アクセスを提供するためにインストールされるコンポーネント コ ンポーネ ン ト 用途 場所 w3cobolschemaexec100.dll Schema Executor が使用す る ルー チンの ラ イ ブ ラ リ Windows サーバー : PVSW\bin\ libpsqlcobolschemaexec100.so cobolschemaexec.xsd cobolschemaexec.log cobolschemaexec.exe Linux サーバー : /usr/local/psql/lib XML フ ァ イ ル を 処 理 す る 際 に Schema Executor が使用す る コ ン ト ロ ール フ ァ イ ル ( ド キ ュ メ ン ト 型定義) Windows サーバー : PVSW\schemas\ XML フ ァ イ ル を 処 理 す る 際 に Schema Executor が生成 し た メ ッ セー ジ を 記録す る デ フ ォ ル ト の ロ グ フ ァ イル Windows サーバー : PVSW\logs\ ISAM データを正規化された SQL テ ーブ ル と 解釈す る た め に、 リ レ ーシ ョ ナル イ ン タ ー フ ェ イ ス が使用す る シ ス テ ム テーブル を 作成す る ユーテ ィ リ テ ィ Windows サーバーおよびクライアント : PVSW\bin\ Linux サーバー : /user/local/psql/schemas/ Linux サーバー : /usr/local/psql/logs/ Schema Executor と も 呼ばれます。 cobolschemaexec ISAM データを正規化された SQL テ ーブ ル と 解釈す る た め に、 リ レ ーシ ョ ナル イ ン タ ー フ ェ イ ス が使用す る シ ス テ ム テーブル を 作成す る ユーテ ィ リ テ ィ Linux イ ン ス ト ール : /usr/local/psq/bin/ Schema Executor と も 呼ばれます。 SampleMainTable.xml シ ン プル な テ ーブルのデー タ を 定義す る 、 サンプルの XML テ ン プ レー ト 「サ ン プル XML フ ァ イ ルの実行 例」 (D-14 ページ) も 参照 し て く だ さ い。 SampleMainWithOccurs.xml OCCURS 構造 を 含んでい る デー タ の定義に使用す る 、サンプルの XML テ ンプ レー ト 「サ ン プル XML フ ァ イ ルの実行 例」 (D-14 ページ) も 参照 し て く だ さ い。 D-4 Windows サーバーおよびクライアント : PVSW\samples\cobolschemaexec Linux イ ン ス ト ール : /usr/local/psql/samples/cobolschemaexec Windows サーバーおよびクライアント : PVSW\samples\cobolschemaexec Linux イ ン ス ト ール : /usr/local/psql/samples/cobolschemaexec コ ンポーネ ン ト 表 D-2 COBOL アプリケーションの SQL アクセスを提供するためにインストールされるコンポーネント コ ンポーネ ン ト 用途 場所 SampleMainWithRedefines.xml REDEFINES 構 造 を 含 ん で い る デー タ の定義に使用す る 、サンプ ルの XML テ ンプ レー ト Windows サーバーおよびクライアント : PVSW\samples\cobolschemaexec 「サ ン プル XML フ ァ イ ルの実行 例」 (D-14 ページ) も 参照 し て く だ さ い。 SampleVariantRecord.xml 可変 レ コ ー ド レ イ ア ウ ト を含ん でい る デー タ の定義に使用す る 、 サンプルの XML テ ンプ レー ト 「サ ン プル XML フ ァ イ ルの実行 例」 (D-14 ページ) も 参照 し て く だ さ い。 Windows ク ラ イ ア ン ト お よ び Linux ク ラ イ ア ン ト では、ロ グ フ ァ イ ル は オ プ シ ョ ン で す。 Schema Executor を起動す る と き に指定で き ます。 「Schema Executor コ マ ン ド の 形 式」 (D-8 ページ) を参照 し て く だ さ い。 Linux イ ン ス ト ール : /usr/local/psql/samples/cobolschemaexec Windows サーバーおよびクライアント : PVSW\samples\cobolschemaexec Linux イ ン ス ト ール : /usr/local/psql/samples/cobolschemaexec パス が指定 さ れていない場合は、現在 のデ ィ レ ク ト リ と 同 じ です。 そ う で な い場合は、 ユーザー指定のパ ス に よ っ て決ま り ます。 D-5 COBOL ア プ リ ケーシ ョ ンの SQL ア ク セス SQL ア ク セスの使用 SQL ア ク セ ス を利用す る には次の作業を行い ます。 1 適切な XML テ ンプ レー ト を手で編集 し て、 デー タ レ イ ア ウ ト を記述 し ます。 2 XML テ ンプ レー ト で指定 し たデー タ フ ァ イ ルをデー タ ベース フ ォ ル ダに コ ピー し ます。 3 ユーテ ィ リ テ ィ を実行 し て、 リ レーシ ョ ナル イ ン タ ーフ ェ イ ス が使用 す る シ ス テ ム テーブルを作成 し ます (XML を使っ て、 正規化 さ れた デー タ を作成 し ます)。 4 COBOL アプリケーションの開発者である場合は、任意で、Schema Executor に よ っ て作成 さ れた新 し いシ ス テ ム テーブルを配布 し ます。 手順 1 : サン プル XML テ ン プ レー ト の変更 Pervasive PSQL v9 にはサンプルの XML テ ンプ レー ト が含まれてお り 、 こ れを利用す る と 、 COBOL アプ リ ケーシ ョ ン で必要 と さ れ る と お り にデー タ の レ イ ア ウ ト を定義で き ます。 表 D-2 を参照 し て く だ さ い。 開発者向け に専門的に言えば、 XML フ ァ イ ルに メ タ デー タ を記述 し ます。 ¾XML テ ン プ レー ト を変更するには 1 テ キ ス ト エデ ィ タ で XML テ ンプ レー ト を開 き ます。 2 フ ァ イ ルに記述 さ れてい る コ メ ン ト に従っ て XML を変更 し ます。 3 選択 し たパス と フ ァ イ ル名で、 変更 し たテ ンプ レー ト を保存 し ます。 手順 2 : XML テ ン プ レー ト で指定 し たデー タ フ ァ イルの コ ピー Schema Executor を起動す る 前に、 XML フ ァ イ ルで指定 し たデー タ フ ァ イ ルをデー タ ベース のデー タ フ ァ イ ルの場所へ コ ピー し ます。 デー タ ベース は、 テーブルを追加す る 必要のあ る デー タ ベース です。 た と えば、 XML で mytable.mkd と 指定 し た テーブルをデー タ ベー ス "test" に 追 加 す る と し ま す。 こ の と き 、 デー タ ベー ス の デー タ フ ァ イ ル は c:\data\test にあ る と し ます。 Schema Executor を起動す る 前に、デー タ フ ァ イ ル mytable.mkd を c:\data\test へコ ピー し ます。 D-6 SQL ア ク セスの使用 手順 3 : Schema Executor ユーテ ィ リ テ ィ の実行 Pervasive PSQL v9 には Schema Executor と い う コ マ ン ド ラ イ ン ユーテ ィ リ テ ィ が付属 し てい ます。こ のユーテ ィ リ テ ィ は SchemaExec と も いい ます。 Schema Executor は以下の操作を実行 し ます。 手で編集 さ れた XML フ ァ イ ルの解析 リ レーシ ョ ナル イ ン タ ーフ ェ イ ス がデー タ を正規化 さ れた SQL テーブ ル と 解 釈 す る た め に 使 用 す る 、 既 存 の シ ス テ ム テ ー ブ ル の 配置 (Pervasive PSQL v9 で作成 さ れ る テーブルには、 SQL ア ク セ ス のサポー ト に必要なシ ス テ ム テーブルがすべて含まれてい ます) Pervasive PSQL v9 よ り 前のバージ ョ ンの Pervasive PSQL で作成 さ れた デー タ ベース に対 し て こ のユーテ ィ リ テ ィ を実行す る 場合は、追加のシ ス テ ム テーブルの作成 と 配置 ¾Schema Executor で XML フ ァ イルを処理するには 「サンプル XML フ ァ イ ルの実行例」 (D-14 ページ) も 参照 し て く だ さ い。 1 オペレーテ ィ ン グ シ ス テ ムで コ マ ン ド プ ロ ンプ ト にア ク セ ス し ます。 2 コ マ ン ド ラ イ ンで Schema Executor を実行 し ます ( こ の実行可能プ ロ グ ラ ムがデフ ォ ル ト で イ ン ス ト ール さ れ る 場所は、 表 D-2 を参照 し て く だ さ い)。 必須オプシ ョ ンの XMLfilename お よ び databasename と 、必要な任意の オプシ ョ ン を指定 し ます。「Schema Executor コ マ ン ド の形式」(D-8 ペー ジ) を参照 し て く だ さ い。 XML コ ン テ ン ツの処理中にエ ラ ーが発生 し た場合は、Schema Executor ロ グ フ ァ イ ルに報告 さ れてい る エ ラ ーを検討 し ます。 「 ロ グ メ ッ セー ジ」 (D-11 ページ) を参照 し て く だ さ い。 処理でエ ラ ーが発生 し な く な る ま で、 繰 り 返 し XML を修正 し てユーテ ィ リ テ ィ を再実行 し ます。 D-7 COBOL ア プ リ ケーシ ョ ンの SQL ア ク セス Schema Executor コ マ ン ド の形式 cobolschemaexec XMLfilename databasename [-s servername] [-u login_id] [-p password] [-i svr_loginid] [-c svr_password] [-l log_file] [ -h | -? ] 表 D-3 Schema Executor ユーテ ィ リ テ ィ のオプ シ ョ ン オプ シ ョ ン 説明 XMLfilename デー タ の レ イ ア ウ ト を 定義す る XML ス キーマ の フ ァ イ ル 名。 必須オプ シ ョ ン です。 「手順 1 : サ ン プル XML テ ン プ レー ト の変更」 (D-6 ページ) を参照 し て く だ さ い。 databasename ア プ リ ケ ー シ ョ ン が ア ク セ ス す る Pervasive PSQL デー タ ベース の名前。 必須オプシ ョ ンです。 指定 し たデー タ ベース が存在 し ない場合は、ユーテ ィ リ テ ィ か ら パス と フ ァ イ ル名 の入力を求め ら れます。 「Schema Executor に よ る 新規デー タ ベー ス の 作成」 (D-10 ページ) も 参照 し て く だ さ い。 D-8 -s servername Pervasive PSQL デー タ ベー ス エ ン ジ ン が 実行 さ れ て い る サーバーの名前、 ま たは IP ア ド レ ス。 デー タ ベース エン ジ ン と 同 じ マシ ン上で SchemaExec を実行 し てい る 場合は、 名 前 と し て "localhost" を使用で き ます。 servername が指定 さ れ ていない場合は、 ロ ーカル マ シ ン がサーバーで あ る と 見な し ます。 -u login_id セ キ ュ リ テ ィ で保護 さ れたデー タ ベー ス への ア ク セ ス に必 要なユーザー名。 Pervasive PSQL セキ ュ リ テ ィ モデルの解説 については、『Advanced Operations Guide』 の 「Pervasive PSQL セキ ュ リ テ ィ 」 (7-1 ページ) を参照 し て く だ さ い。 -p password セ キ ュ リ テ ィ で保護 さ れたデー タ ベー ス への ア ク セ ス に必 要なパ ス ワー ド 。 Pervasive PSQL セキ ュ リ テ ィ モデルの解説 については、『Advanced Operations Guide』 の 「Pervasive PSQL セキ ュ リ テ ィ 」 (7-1 ページ) を参照 し て く だ さ い。 -i svr_loginid リ モー ト マシ ンのオペレーテ ィ ン グ シ ス テ ムへのア ク セ ス に必要な ロ グ イ ン名。 SchemaExec が リ モー ト サーバー上に あ る XML フ ァ イ ルを処理 し てい る 場合には、 こ のオプシ ョ ンは必須です。 -c svr_password リ モー ト マシ ンのオペレーテ ィ ン グ シ ス テ ムへのア ク セ ス に必要なパ ス ワー ド 。 SchemaExec が リ モー ト サーバー上に あ る XML フ ァ イ ルを処理 し てい る 場合には、 こ のオプシ ョ ンは必須です。 SQL ア ク セスの使用 表 D-3 Schema Executor ユーテ ィ リ テ ィ のオプ シ ョ ン オプ シ ョ ン 説明 -l log_file XML フ ァ イ ルの処理中に生成 さ れ る メ ッ セージの記録に使 用す る ロ グ フ ァ イ ル。 Pervasive PSQL デー タ ベー ス エ ン ジ ン が実行 さ れてい る マ シ ンで SchemaExec を実行す る 場合は、 自動的にデフォルト ロ グが作成されます。 -l log_file オプシ ョ ン を使用す る 必要はあ り ま せん。 デフ ォ ル ト ロ グ の名前は cobolschemaexec.log で す。 ク ラ イ ア ン ト マシ ン (Pervasive PSQL デー タ ベース エ ン ジ ンが実行 さ れていないマシ ン) で SchemaExec を実行す る 場 合は、 ク ラ イ ア ン ト マシ ン用の ロ グ フ ァ イ ルを指定で き ま す。 「 ロ グ メ ッ セージ」 (D-11 ページ) を参照 し て く だ さ い。 -h ま たは -? コ マ ン ド の使い方 を 表示 し ま す。 その他すべて のオプ シ ョ ンは無視 さ れます。 メ モ 必須オプシ ョ ンの XMLfilename と databasename は位置決め さ れ てお り 、 こ の順序で指定す る 必要があ り ます。 使い方の例 次の例は、 Schema Executor の使い方を示 し てい ます。 デー タ ベース が既に存在す る 場合 (サーバーは ロ ーカル ホ ス ト で動作 し てい る ) : cobolschemaexec c:\pvsw\samples\cobolschemaexec\test.xml demodata デー タ ベース が存在 し ない場合 (サーバーは ロ ーカル ホ ス ト で動作 し てい る ) : cobolschemaexec c:\pvsw\samples\cobolschemaexec\test.xml mytest ユーテ ィ リ テ ィ は次の よ う なプ ロ ンプ ト を表示 し ます。 CB103 : mytest に接続で き ません デー タ ベース を作成 し ますか (y/n)? "y" を押す と 、 ユーテ ィ リ テ ィ はデー タ ベース パ ス を入力す る プ ロ ンプ ト を表示 し ます。 デー タ ベース パス を入力 し て く だ さ い。 D-9 COBOL ア プ リ ケーシ ョ ンの SQL ア ク セス 既存のパス を入力 し ます。そ う し ない と 、エ ラ ーが返 さ れます。 必ず、XML フ ァ イ ルで使用 さ れてい る デー タ ベース フ ァ イ ル (た と えば .MKD フ ァ イ ル) がそのパス で使用可能であ る よ う に し て く だ さ い。 デー タ ベース が リ モー ト サーバーに存在す る 場合 : cobolschemaexec c:\pvsw\samples\cobolschemaexec\test.xml demodata -s TestMachine -i testuser -c testuser こ の例では、 管理者権限を持つユーザー "testuser" (パ ス ワ ー ド "testuser") が リ モー ト マシ ン (TestMachine) に存在 し 、 XML フ ァ イ ルで使用 さ れ る デー タ ベー ス フ ァ イ ルは、 リ モー ト マ シ ン 上のデー タ ベー ス のデー タ フ ァ イ ル デ ィ レ ク ト リ にあ る も の と し ます。 デー タ ベース が リ モー ト サーバーに存在 し ない場合 : cobolschemaexec c:\pvsw\samples\cobolschemaexec\test.xml mytest s RemoteMachine -i testuser -c testuser こ の例では、 ユーザー "testuser" (パ ス ワー ド "testuser") は リ モー ト マシ ン (TestMachine) に存在 し 、 管理者権限を持っ てい る も の と し ます。 ユーテ ィ リ テ ィ は次の よ う なプ ロ ンプ ト を表示 し ます。 CB103 : mytest に接続で き ません デー タ ベース を作成 し ますか (y/n)? "y" を押す と 、 ユーテ ィ リ テ ィ はデー タ ベース パ ス を入力す る プ ロ ンプ ト を表示 し ます。 デー タ ベース パス を入力 し て く だ さ い。 既存のパス を入力 し ます。そ う し ない と 、エ ラ ーが返 さ れます。 必ず、XML フ ァ イ ルで使用 さ れてい る デー タ ベース フ ァ イ ル (た と えば .MKD フ ァ イ ル) がそのパス で使用可能であ る よ う に し て く だ さ い。 Schema Executor に よ る新規デー タ ベースの作成 ユーテ ィ リ テ ィ オプシ ョ ン databasename に存在 し ないデー タ ベー ス を指 定す る と 、Schema Executor は新 し いデー タ ベース を作成す る か ど う か を尋 ねます。 "yes" と 答え る と 、 新 し いデー タ ベース の場所を入力す る プ ロ ンプ ト が表示 さ れます。 Schema Executor がデー タ ベース を作成す る 場所 (パ ス と フ ォ ルダ名) は既存でなければな り ません。 ま た、 Schema Executor は、 デフ ォ ル ト フ ォ ルダに databasename のデー タ フ ァ イ ルがあ る こ と を期待す る ので注意 し て く だ さ い。 デー タ フ ァ イ ルが 見つか ら ない場合は、 その旨が通知 さ れます。 デー タ フ ァ イ ルを自分でデ フ ォ ル ト フ ォ ルダへ コ ピー し てか ら 、 Schema Executor を再実行 し て XML を処理 し ます。 D-10 SQL ア ク セスの使用 ログ メ ッ セージ こ のセ ク シ ョ ンは、 Schema Executor に よ る XML フ ァ イ ルの処理後、 ロ グ フ ァ イ ルに記載 さ れてい る 可能性のあ る コ ー ド の一覧を示 し ます。 成功を表すコ ー ド は、「CB100:Schemaexec は正常に完了 し ま し た」 です。 次の表は、 エ ラ ー コ ー ド の一覧を示 し ます。 表 D-4 CobolSchemaExec ログ フ ァ イルに記載 さ れる可能性のある エ ラー コー ド エラー コー ド 説明 CB001 不明なエ ラ ーです CB002 プ ロ パテ ィ 名属性があ り ません CB003 MAINTABLE お よ び VARIANTRECORDTABLES はサ ポー ト さ れ てい ません CB004 指定 さ れた Occurs テーブル名が不正です CB005 指定 さ れた Occurs Count が不正です CB006 指定 さ れた Occurs マ ッ ピ ン グ イ ンデ ッ ク ス は親テーブルの イ ン デ ッ ク ス ではあ り ません CB007 TableName - TableName が重複 し てい ます CB008 FieldName - FieldName が重複 し てい ます CB009 IndexName - IndexName が重複 し てい ます CB010 テーブル名パ ラ メ ー タ が指定 さ れてい ません CB012 Identifier - 不正な文字が含まれてい ます CB013 オ フ セ ッ ト は負でない整数でなければな り ません CB014 識別子の長 さ は 20 文字を超え てはいけ ません CB016 精度はゼ ロ よ り 大 き く なければな り ません CB017 指定 さ れた精度が不正です - FieldName CB018 小数位を精度 よ り も 大 き く す る こ と はで き ません - FieldName CB019 ロ グ フ ァ イ ル と XML フ ァ イ ルは別に し なければな り ません CB022 TableFilter - テーブル フ ィ ル タ は 255 文字を超え てはいけ ません CB023 FieldName は TableName の フ ィ ール ド ではあ り ません D-11 COBOL ア プ リ ケーシ ョ ンの SQL ア ク セス 表 D-4 CobolSchemaExec ログ フ ァ イルに記載 さ れる可能性のある エ ラー コー ド D-12 エラー コー ド 説明 CB024 TableFilter は、 すべて の REDEFINES テーブルに対 し て、 ま た は NONE に対 し て定義す る 必要があ り ます CB025 親要素が正 し く あ り ません CB028 識別子名 identifiername は英文字で始ま っ てい る 必要があ り ます CB029 識別子名 identifiername にキー ワー ド は使用で き ません CB050 DataFile - DatabasePath に存在 し ません CB051 OCCURS/REDEFINES の長 さ は負でない整数でなければなりません CB052 Btrievefilename の長 さ が 64 文字を超え てはいけ ません CB057 親テーブルにインデックスが指定 さ れてい ません - ParentTableName CB099 パーサー エ ラ ー CB100 Schemaexec は正常に完了 し ま し た CB101 コ マ ン ド ラ イ ン引数 argument の値が不正です CB102 Login を指定 し ないで、Password の値を指定す る こ と はで き ません CB103 DatabaseName に接続で き ません CB105 デ ィ レ ク ト リ パ ス Databasepath にデー タ ベー ス DatabaseName を 作成で き ませんで し た CB106 指定 さ れた DSN を作成で き ませんで し た CB108 デー タ ベース databasename を閉 じ ら れませんで し た CB109 XML フ ァ イ ルか ら デー タ を読み取れませんで し た CB110 デー タ ベース を削除で き ませんで し た SQL ア ク セスの使用 手順 4 : シ ス テム テーブルの配布 (任意) COBOL ア プ リ ケ ー シ ョ ン の開発者で あ る 場合は、 作成 し た ア プ リ ケ ー シ ョ ン と 共にすべてのシ ス テ ム ア プ リ ケーシ ョ ン を配布す る よ う に し て く だ さ い。 配布自体に違いはあ り ませんが、 追加す る シ ス テ ム テーブルが 生 じ る 可能性があ る ので、 こ こ で述べてい ます。 た と えば、 Pervasive PSQL v9 よ り 前のバージ ョ ンの Pervasive.SQL で作成 さ れたデー タ ベース に対 し て Schema Executor を実行 し た場合は、 追加のシ ス テ ム テーブルが作成 さ れ配置 さ れます。 その結果、 配布す る シ ス テ ム テーブル (DDF フ ァ イ ル) がい く つか追加 さ れ る こ と にな り ます。 D-13 COBOL ア プ リ ケーシ ョ ンの SQL ア ク セス サン プル XML フ ァ イルの実行例 サンプル XML フ ァ イ ルお よ びデー タ フ ァ イ ルは、 \PVSW\samples\cobolschemaexec フ ォ ルダ内に提供 さ れてい ます。 Schema Executor を使っ て XML フ ァ イ ル SampleMainTable.xml を実行する には、 次 の手順に従い ます。 1 接続す る デー タ ベース のデー タ フ ァ イ ル フ ォ ルダに maintbl.mkd を コ ピー し ます。 た と え ば、 デー タ ベー ス "test" が あ り 、 デー タ フ ァ イ ル の 場所 は c:\data\test で あ る と し ま す。 c:\data\test へ maintbl.mkd を コ ピ ー し ま す。 2 C:\pvsw\bin で コ マ ン ド プ ロ ンプ ト を開 き ます。 こ れは、Pervasive PSQL の イ ン ス ト ール先がデフ ォ ル ト (C:\pvsw フ ォ ルダ) であ る こ と を前提 と し てい ます。 3 DOS プ ロ ンプ ト で次の コ マ ン ド を実行 し ます。 cobolschemaexec c:\pvsw\samples\cobolschemaexec\samplemaintable.x ml test 4 Schema Executor の実行が成功 し た ら 、 (XML フ ァ イ ルに指定 さ れてい る ) テーブル maintbl が "test" デー タ ベース に作成 さ れます。 5 こ れで、 PCC を使っ て、 テーブル maintbl で SQL 操作を実行で き ま す。 補注 こ のセ ク シ ョ ンでは、 SELECT ス テー ト メ ン ト お よ びテーブル フ ィ ル タ に 関す る 注意事項を提供 し ます。 SELECT ス テー ト メ ン ト OCCURS テーブルで SELECT クエリを実行す る と 、 次の内容が返 さ れます。 OCCURS テーブルの列 マ ッ ピ ン グ イ ンデ ッ ク ス を構成す る メ イ ン テーブルの列 OCCURS 句の出現回数を示す OCCURS カ ウ ン タ た と えば、 SELECT * FROM FIELD と い う ク エ リ を、 Schema Executor でサ ンプル XML フ ァ イ ル C:\pvsw\samples\cobolschemaexec\ SampleMainWithOccurs.xml について実行 し た結果作成 さ れ る テーブルに対 し 実行す る と し ます。 D-14 サン プル XML フ ァ イルの実行例 ユーテ ィ リ テ ィ は、 列 Id、 OccursCounter、 Field_1、 Field_2、 お よ び Field_3 を返 し ます。 REDEFINES テ ー ブ ル で SELECT を 実行す る と 、 親 テ ー ブ ル の 列 と REDEFINES テーブルの列がすべて返 さ れます。 た と えば、 SELECT * FROM Redefined_group と い う ク エ リ を、 Schema Executor でサンプル XML フ ァ イ ル C:\pvsw\samples\ cobolschemaexec\SampleMainWithRedefines.xml について実行 し た結果作成 さ れ る テーブルに対 し 実行す る と し ます。 ユーテ ィ リ テ ィ は、 列 Id、 Account_Num、 Category、 Redef_Struct_Num (親 テーブルのすべての列)、 お よ び Redefined_field_1 (REDEFINES テーブル の列) を返 し ます。 テーブル フ ィ ル タ テーブル フ ィ ル タ (サンプル XML フ ァ イ ルでは "TABLEFILTER" と 呼び ます) は、 特定のテーブルの フ ィ ル タ 条件です。 TABLEFILTER の式は、 左右両方のオペ ラ ン ド が列名であ っ て も か ま い ません。 たとえば、 Cust_Num = My_Cust_Num と指定できます (Cust_Num と My_Cust_Num はど ち ら も 列名です)。 オペ ラ ン ド と 演算子の間に スペース を入れて く だ さ い。 TABLEFILTER の式で定数を使用す る 場合は、 値を一重引用符で囲んで 指定す る 必要があ り ます。 例 : Cust_Num = '100' (Cust_Num は列名です) XML フ ァ イ ルで TABLEFILTER を指定する 場合は、次の XML エン テ ィ テ ィ を使用 し ます。 XML エ ン テ ィ テ ィ 使用目的 < よ り 小 さ い (<) > よ り 大 き い (>) & ア ンパサン ド (&) (AND) " 二重引用符 (") ' 一重引用符 (') 有効な TABLEFILTER の例 : Cust_Num = '100' (Cust_Num = 100 と 同等) Cust_Num < '100' (Cust_Num < 100 と 同等) D-15 COBOL ア プ リ ケーシ ョ ンの SQL ア ク セス D-16 Cust_Num > '100' (Cust_Num > 100 と 同等) Cust_Num <> '100' (Cust_Num <> 100 と 同等) 'a' = Category | Account_Num <= 'a123' ('a'=category OR account_num <= 'a123' と 同等) 'a' = Category & Account_Num = 'a123' account_num = 'a123' と 同等) Cust_Num = My_cust_Num (両オペ ラ ン ド が列名) ('a' = category AND 索引 記号 / 数字 B @@IDENTITY グ ロ ーバル変数 ............. 3-216 例 ........................................................... 3-216 @@ROWCOUNT グ ロ ーバル変数......... 3-217 例 ................................................ 3-217, 3-218 @@SPID グ ロ ーバル変数 ....................... 3-218 before/after - SQL 文法要素の定義.......... 3-208 before/after (文法要素の定義).................. 3-74 BEGIN サポー ト し てい る 文法 ......................... 3-24 BFLOAT デー タ 型...................................... A-19 BINARY デー タ 型 SELECT ................................................ 3-222 奇数桁の場合の 0 詰め ....................... 3-222 サポー ト し ないデー タ 型 ................... 3-123 注意事項 ................................................. A-10 BIT_LENGTH................................................ 5-2 BLOB デー タ 型........................................... A-19 サポー ト し ないデー タ 型 ................... 3-123 Btrieve オーナー ネーム , 「オーナー ネーム」 を参照 A ABS................................................................. 5-6 ACOS.............................................................. 5-6 ADD サポー ト し てい る 文法 ........................... 3-3 ALL サポー ト し てい る 文法 ........................... 3-4 ALTER TABLE COBOL での使用 .................................... D-3 IN DICTIONARY キーワー ド .............. 3-10 USING キー ワー ド ................................ 3-12 WITH REPLACE キーワ ー ド ............... 3-14 サポー ト し てい る 文法 ........................... 3-8 AND でつないだ述部 SQL ス テー ト メ ン ト におけ る 最大数 .. 2-3 AND ビ ッ ト 演算子....................................... 4-3 ANSI 文字変換 ............................................... 3-227 ANY サポー ト し てい る 文法 ......................... 3-22 API 関数 ODBC サポー ト ....................................... 2-7 AS サポー ト し てい る 文法 ......................... 3-23 ASCII.............................................................. 5-2 ASIN ............................................................... 5-6 as またはセミコロン - SQL 文法要素の定義 3-208 ATAN ............................................................. 5-6 ATAN2 ........................................................... 5-6 ATTRIB.DDF................................................. C-3 Pervasive PSQL で無視 さ れ る 属性...... C-11 AUTOINCREMENT デー タ 型................... A-16 AVG 集計関数........................................... 3-155 C CALL サポー ト し てい る 文法 ......................... 3-25 ス ト ア ド プ ロ シージ ャ の呼び出 し .... 3-59 CASCADE ON DELETE ........................................... 3-65 サポー ト し てい る 文法 ......................... 3-26 CASE サポー ト し てい る 文法 ......................... 3-32 case 値式 (文法要素の定義) .................. 3-155 CASE (文法要素の定義) .......................... 3-27 CAST ............................................................ 5-19 CB001 ........................................................... D-11 CB002 ........................................................... D-11 CB003 ........................................................... D-11 CB004 ........................................................... D-11 CB005 ........................................................... D-11 CB006 ........................................................... D-11 CB007 ........................................................... D-11 CB008 ........................................................... D-11 CB009 ........................................................... D-11 CB010 ........................................................... D-11 CB012 ........................................................... D-11 CB013 ........................................................... D-11 索引 1 CB014 .......................................................... D-11 CB016 .......................................................... D-11 CB017 .......................................................... D-11 CB018 .......................................................... D-11 CB019 .......................................................... D-11 CB022 .......................................................... D-11 CB023 .......................................................... D-11 CB024 .......................................................... D-12 CB025 .......................................................... D-12 CB028 .......................................................... D-12 CB029 .......................................................... D-12 CB050 .......................................................... D-12 CB051 .......................................................... D-12 CB052 .......................................................... D-12 CB057 .......................................................... D-12 CB099 .......................................................... D-12 CB100 .......................................................... D-12 CB101 .......................................................... D-12 CB102 .......................................................... D-12 CB103 .......................................................... D-12 CB105 .......................................................... D-12 CB106 .......................................................... D-12 CB108 .......................................................... D-12 CB109 .......................................................... D-12 CB110 .......................................................... D-12 CEILING......................................................... 5-6 CHAR ............................................................. 5-2 CHAR_LENGTH ........................................... 5-2 CHARACTER_LENGTH .............................. 5-2 CHAR デー タ 型 注意事項 ................................................ A-10 CLOB デー タ 型.......................................... A-20 サポー ト し ないデー タ 型 ................... 3-123 CLOSE サポー ト し てい る 文法 ......................... 3-33 COALESCE .................................................. 5-15 サポー ト し てい る 文法 ......................... 3-34 COALESCE (文法要素の定義)................ 3-34 COBOL ALTER TABLE ス テー ト メ ン ト の使用 D-3 CREATE INDEX IN DICTIONARY の使用 D3 CREATE INDEX の使用 ........................ D-3 CREATE TRIGGER の使用 ................... D-3 DBCobolNumeric 設定.......................... A-25 DELETE の使用 ...................................... D-3 2 索引 DROP TABLE の使用 ............................. D-3 INSERT INTO の使用 ............................. D-3 Schema Executor....................................... D-4 サンプル XML フ ァ イ ルの実行..... D-14 使い方の例.......................................... D-9 ロ グ メ ッ セージ............................... D-11 SQL 拡張ア ク セ ス Schema Executor.................................. D-4 コ ン ポーネ ン ト .................................. D-4 使用...................................................... D-6 UPDATE の使用 ...................................... D-3 アプ リ ケーシ ョ ンの SQL ア ク セ ス ..... D-8 正の NUMERIC デー タ 型のための符号値 A25 COMMIT サポー ト し てい る 文法 ......................... 3-37 CONCAT ........................................................ 5-2 CONVERT .......................................... 5-18, 5-19 COS................................................................. 5-6 COT ................................................................ 5-6 COUNT( ), COUNT(*) 関数 相違点 .......................................... 3-54, 3-115 COUNT 集計関数...................................... 3-155 CREATE FUNCTION サポー ト し てい る 文法 ......................... 3-39 CREATE GROUP サポー ト し てい る 文法 ......................... 3-45 CREATE INDEX COBOL での使用 .................................... D-3 サポー ト し てい る 文法 ......................... 3-46 制約 ......................................................... 3-46 CREATE INDEX IN DICTIONARY COBOL での使用 .................................... D-3 CREATE PROCEDURE サポー ト し てい る 文法 ......................... 3-50 CREATE TABLE IN DICTIONARY キーワ ー ド .............. 3-66 USING キーワー ド ................................ 3-66 WITH REPLACE キーワ ー ド ............... 3-68 サポー ト し てい る 文法 ......................... 3-62 フ ァ イ ル圧縮 ......................................... 3-69 ページ サ イ ズ ........................................ 3-69 CREATE TRIGGER COBOL での使用 .................................... D-3 サポー ト し てい る 文法 ......................... 3-74 CREATE VIEW サポー ト し てい る 文法 ......................... 3-77 CURDATE ..................................................... 5-9 CURRENCY デー タ 型 ............................... A-20 CURRENT_DATE ......................................... 5-9 CURRENT_TIME.......................................... 5-9 CURRENT_TIME() ................................... 3-181 CURRENT_TIMESTAMP........................... 5-10 CURTIME ...................................................... 5-9 CURTIME()................................................ 3-181 D DATABASE ................................................. 5-14 DATE デー タ 型........................................... A-21 DAYNAME.................................................. 5-10 DAYOFMONTH.......................................... 5-10 DAYOFYEAR.............................................. 5-10 DBCobolNumeric 設定 ................................ A-25 DCOMPRESS............................................... 3-69 DDF デー タ フ ァ イ ルに影響を与え ないでデー タ 定義を変更す る ................................. 3-47 DECIMAL デー タ 型 ................................... A-21 SUM() 関数結果の精度....................... 3-156 DECLARE サポー ト し てい る 文法 ......................... 3-79 DECLARE CURSOR サポー ト し てい る 文法 ......................... 3-80 DEFAULT .................................................. 3-121 CREATE TABLE の使用例 .................. 3-69 UPDATE 内 ............................... 3-197, 3-201 DEGREES ...................................................... 5-6 DELETE COBOL での使用 .................................... D-3 サポー ト し てい る 文法 ................ 3-89, 3-90 DEPEND.DDF................................................ C-3 DISTINCT .................................................. 3-166 サブ ク エ リ 内 ....................................... 3-201 サポー ト し てい る 文法 ......................... 3-93 DROP FUNCTION サポー ト し てい る 文法 ......................... 3-94 DROP INDEX サポー ト し てい る 文法 ......................... 3-96 DROP PROCEDURE サポー ト し てい る 文法 ......................... 3-98 DROP TABLE COBOL での使用 .................................... D-3 IN DICTIONARY キーワ ー ド .............. 3-99 サポー ト し てい る 文法 ......................... 3-99 DROP TRIGGER サポー ト し てい る 文法 ....................... 3-100 DROP VIEW サポー ト し てい る 文法 ....................... 3-101 DSN 接続文字列 ............................................... 2-5 E END サポー ト し てい る 文法 ....................... 3-102 EXISTS サポー ト し てい る 文法 ....................... 3-104 EXP................................................................. 5-6 EXTRACT.................................................... 5-10 F FETCH サポー ト し てい る 文法 ....................... 3-106 FIELD.DDF .................................................... C-3 Field.ddf.......................................................... C-3 File.ddf FILE.DDF.................................................. C-3 FLOAT デー タ 型 ........................................ A-22 値の比較 ................................................. A-12 FLOOR ........................................................... 5-6 FOREIGN KEY サポー ト し てい る 文法 ....................... 3-108 列を変更で き ない ................................. 3-15 G GRANT サポー ト し てい る 文法 ....................... 3-110 GROUP BY HAVING 句の使用 .............................. 3-117 サポー ト し てい る 文法 ....................... 3-115 H HAVING GROUP BY 式...................................... 3-117 HOUR ........................................................... 5-10 索引 3 I IDENTITY グ ロ ーバル変数 , 「@@IDENTITY」 を参照 IF ................................................................... 5-15 サポー ト し てい る 文法 ....................... 3-118 ネ ス ト 制限 ........................................... 3-118 IF (SELECT 付 き ) サポー ト し てい る 文法 ....................... 3-163 IFNULL ........................................................ 5-15 IN サポー ト し てい る 文法 ....................... 3-120 IN DICTIONARY キー ワー ド 3-10, 3-47, 3-66, 399 バ ウ ン ド デー タ ベース で許可 さ れない 3-10, 3-47 Index.ddf ....................................................... 3-48 INDEX.DDF.............................................. C-3 INSERT サポー ト し てい る 文法 ....................... 3-121 デフ ォ ル ト 値 ....................................... 3-121 INSERT INTO COBOL での使用.................................... D-3 INTEGER デー タ 型 ................................... A-23 In- 述部 サポー ト し てい る 文法 ....................... 3-160 ISNULL ........................................................ 5-15 J JOIN サポー ト し てい る 文法 ....................... 3-127 L LCASE ............................................................ 5-2 LEAVE サポー ト し てい る 文法 ....................... 3-133 LEFT ............................................................... 5-2 LEFT OUTER JOIN 構文 ....................................................... 3-127 ベン ダ文字列 ....................................... 3-128 LENGTH......................................................... 5-2 LIKE 構文 と 使用法 ....................................... 3-134 LIKE 述部 LONGVARBINARY ............................. A-11 LONGVARCHAR.................................. A-11 4 索引 LOCATE......................................................... 5-2 LOG ................................................................ 5-6 LOG10 ............................................................ 5-6 LOGICAL デー タ 型.................................... A-24 LONGVARBINARY INSERT ス テー ト メ ン ト の制約 .......... A-11 SQLGetData の使用 ............................... A-11 制約 ......................................................... A-11 注意事項 ................................................. A-10 LONGVARCHAR INSERT ス テー ト メ ン ト の制約 .......... A-11 SQLGetData の使用 ............................... A-11 UNION ス テー ト メ ン ト の制約 ......... 3-194 制約 ......................................................... A-11 注意事項 ................................................. A-10 Long デー タ 使用時の制約 ......................................... 3-60 挿入ま たは更新 ................................... 3-123 LOOP サポー ト し てい る 文法 ....................... 3-136 LSTRING デー タ 型 .................................... A-24 LTRIM............................................................ 5-2 M Master ユーザー ........................................ 3-111 MAX 集計関数 .......................................... 3-155 MINUTE....................................................... 5-10 MIN 集計関数............................................ 3-155 MOD ............................................................... 5-7 MONEY デー タ 型....................................... A-24 MONTH........................................................ 5-10 MONTHNAME............................................ 5-10 N NOT サポー ト し てい る 文法 ....................... 3-137 NOT NULL デフ ォ ル ト 値 ....................................... 3-122 NOT ビ ッ ト 演算子 ....................................... 4-5 NOW............................................................. 5-11 NULL............................................................ 5-15 サブ ク エ リ が行を返 さ ない場合の UPDATE に よ る 挿入 ....................................... 3-198 デフ ォ ル ト 値を持つ NOT NULL 列へ挿入を 試みる ............................................... 3-122 ヌ ル値を許可す る 列にで き ない ......... 3-15 NULLIF ........................................................ 5-15 NUMERICSA デー タ 型.............................. A-27 NUMERICSTS デー タ 型 ............................ A-27 NUMERIC デー タ 型................................... A-25 正のデー タ 型のための符号値............. A-25 O Occurs DDF .................................................... C-3 Occurs.DDF .................................................... C-3 OCTET_LENGTH ......................................... 5-2 ODBC API 合致...................................................... 2-7 合致の例外........................................ 2-10 合致 ........................................................... 2-7 イ ン タ ーフ ェ イ ス .............................. 2-7 記述子フ ィ ール ド ............................ 2-13 属性.................................................... 2-12 セキ ュ リ テ ィ ....................................... 3-111 ODBC API 関数 サポー ト さ れ る .................................. 2-7 OEM か ら ANSI へ 接続文字列 ........................................... 3-227 文字変換 ............................................... 3-227 ON DELETE ................................................ 3-65 ON UPDATE................................................ 3-66 ONLY サポー ト し てい る 文法 ....................... 3-138 ORDER BY SET ROWCOUNT................................ 3-178 TOP ....................................................... 3-166 order-by 式 - SQL 文法要素の定義.......... 3-209 order-by 式 (文法要素の定義) ............... 3-153 OR ビ ッ ト 演算子.......................................... 4-6 P PAGESIZE ................................................... 3-69 Pervasive ODBC エン ジ ン イ ン タ ーフ ェ イ ス SQL の合致 ............................................ 2-14 サポー ト さ れ る デー タ 型 ....................... A-2 制限 ........................................................... 2-2 Pervasive PSQL Control Center OEM 文字 ............................................. 3-227 Pervasive.SQL 7 ス テー タ ス コ ー ド 59........................... 3-67 PI..................................................................... 5-7 POSITION ...................................................... 5-3 POWER .......................................................... 5-7 PRIMARY KEY サポー ト し てい る 文法 ....................... 3-139 列を変更で き ない ................................. 3-15 PRINT サポー ト し てい る 文法 ....................... 3-142 PROC.DDF..................................................... C-3 psp_column_attributes.................................... 6-6 psp_column_rights.......................................... 6-9 psp_columns ................................................... 6-3 psp_fkeys ...................................................... 6-12 psp_groups.................................................... 6-15 psp_help_sp .................................................. 6-16 psp_help_trigger ........................................... 6-18 psp_help_udf................................................. 6-21 psp_help_view .............................................. 6-23 psp_indexes................................................... 6-24 psp_pkeys ..................................................... 6-27 psp_stored_procedures ................................. 6-31 psp_table_rights............................................ 6-37 psp_tables ..................................................... 6-34 psp_triggers................................................... 6-40 psp_udfs........................................................ 6-43 psp_users....................................................... 6-45 psp_views ..................................................... 6-48 PUBLIC サポー ト し てい る 文法 ....................... 3-141 public ま たはユーザー / グループ名 - SQL 文法 要素の定義...................................... 3-211 Q QUARTER ................................................... 5-11 R RADIANS....................................................... 5-7 RAND ............................................................. 5-7 REAL デー タ 型........................................... A-27 RELATE.DDF ................................................ C-3 RELEASE SAVEPOINT サポー ト し てい る 文法 ....................... 3-143 REPLACE....................................................... 5-3 REPLICATE................................................... 5-3 RESTRICT ON DELETE ........................................... 3-65 索引 5 サポー ト し てい る 文法 ....................... 3-145 RETURNS CREATE PROCEDURE の例 ................ 3-55 REVOKE サポー ト し てい る 文法 ....................... 3-146 RIGHT ............................................................ 5-3 RIGHTS.DDF ................................................. C-3 RI 「参照整合性」 を参照 ROLLBACK WORK サポー ト し てい る 文法 ....................... 3-148 ROUND .......................................................... 5-7 ROWCOUNT グ ロ ーバル変数 , 「@@ROWCOUNT」 を参照 ROWCOUNT (SET) ................................ 3-178 RTRIM ............................................................ 5-3 S SAVEPOINT サポー ト し てい る 文法 ....................... 3-150 Schema Executor ................................... D-4, D-8 サンプル XML フ ァ イ ルの実行 ......... D-14 使い方の例 .............................................. D-9 テーブル フ ィ ル タ の使用 ................... D-15 ロ グ メ ッ セージ ................................... D-11 SchemaExec 「Schema Executor」 を参照 SECOND....................................................... 5-11 SELECT TOP 句................................................... 3-166 最大列数 ................................................... 2-3 サポー ト し てい る 文法 ....................... 3-153 SELECT (INTO 付 き ) サポー ト し てい る 文法 ....................... 3-152 SET DECIMALSEPARATORCOMMA 3-169, 3172 SET OWNER.............................................. 3-174 SET PASSWORD サポー ト し てい る 文法 ....................... 3-176 SET SECURITY サポー ト し てい る 文法 ....................... 3-179 SET TIME ZONE ....................................... 3-181 SET TRUENULLCREATE サポー ト し てい る 文法 ....................... 3-187 SET VARIABLE サポー ト し てい る 文法 ....................... 3-188 SET ROWCOUNT ..................................... 3-178 6 索引 SIGN ............................................................... 5-7 SIGNAL サポー ト し てい る 文法 ....................... 3-189 SIN.................................................................. 5-7 SPACE............................................................ 5-3 SPID グ ロ ーバル変数 , 「@@SPID」 を参照 SQL COBOL デー タ 構造での ス テー ト メ ン ト の使 用 ........................................................... D-3 COBOL のための拡張ア ク セ ス コ ン ポーネ ン ト .................................. D-4 使用...................................................... D-6 シ ス テ ム テーブル 「 シ ス テ ム テーブル」 を 参照 ス テー ト メ ン ト 種類...................................................... 1-1 デー タ 制御........................................ 1-10 デー タ 操作................................... 1-5, 1-7 デー タ 定義.......................................... 1-3 デ リ ミ タ 付 き 識別子........................ 2-15 ス テー ト メ ン ト 内の引用文字列の最大サ イ ズ ........................................................... 2-3 ス テー ト メ ン ト の区切 り 文字 PCC での変更 ..................................... 3-2 ス テー ト メ ン ト の最大長 ....................... 2-3 ス テー ト メ ン ト の リ ス ト ................... 3-213 セキ ュ リ テ ィ ....................................... 3-111 説明 と 目的 ............................................... 1-1 標準の拡張機能 ....................................... B-1 変数 制限.................................................... 3-60 パ ラ メ ー タ ........................................ 3-60 予約語 ....................................................... B-1 SQLBindCol ................................................... 2-7 SQLBindParameter......................................... 2-7 SQLBrowseConnect ....................................... 2-7 SQLCancel...................................................... 2-8 SQLColAttributes ........................................... 2-8 SQLColumns .................................................. 2-8 SQLConnect ................................................... 2-8 SQLDataSources............................................. 2-8 SQLDescribeCol............................................. 2-8 SQLDescribeParam ........................................ 2-8 SQLDisconnect............................................... 2-8 SQLDriverConnect ......................................... 2-8 SQLExecDirect............................................... 2-8 SQLExecute.................................................... 2-8 SQLFetch........................................................ 2-8 SQLForeignKeys ............................................ 2-8 SQLFreeStmt ....................................... 2-8, 3-223 SQLGetCursorName....................................... 2-8 SQLGetData ................................................... 2-8 LONGVARBINARY .............................. A-11 LONGVARCHAR .................................. A-11 SQLGetFunctions ........................................... 2-9 SQLGetInfo ........................................... 2-9, 2-11 SQLGetTypeInfo ................................... 2-9, 2-10 SQLMoreResults ................................... 2-9, 2-10 SQLNativeSql................................................. 2-9 SQLNumParams ............................................. 2-9 SQLNumResultCols ....................................... 2-9 SQLParamData ............................................... 2-9 SQLPrepare..................................................... 2-9 SQLPrimaryKeys............................................ 2-9 SQLProcedureColumns .................................. 2-9 SQLProcedures ............................................... 2-9 SQLPutData.................................................... 2-9 SQL Relational Database エン ジ ン 最適化 ....................................................... 7-1 制限の最適化 ........................................... 7-4 テ ン ポ ラ リ フ ァ イ ル , ロ ケーシ ョ ン 3-219 パフ ォーマ ン ス ....................................... 7-1 SQLRowCount ............................................... 2-9 SQLSetCursorName ....................................... 2-9 SQLSetPos...................................................... 2-9 SQLSpecialColumns..................................... 2-10 SQLSTATE サポー ト し てい る 文法 ....................... 3-191 sqlstate 値 - SQL 文法要素の定義 ........... 3-212 sqlstate 値 (文法要素の定義) ................... 3-52 SQLStatistics ................................................ 2-10 SQLTablePrivileges...................................... 2-10 SQL エデ ィ タ OEM 文字 ............................................. 3-227 SQL ス テー ト メ ン ト 内の引用文字列 最大サ イ ズ ............................................... 2-3 SQL 文法要素................................................ 3-2 SQL 文法要素の定義 as ま たはセ ミ コ ロ ン........................... 3-208 before/after ............................................ 3-208 order-by 式 ............................................ 3-209 public ま たはユーザー / グループ名. 3-211 sqlstate 値 .............................................. values 句................................................ 値 ........................................................... 値 リ ス ト ............................................... 位置引数 ............................................... イ ンデ ッ ク ス セグ メ ン ト の定義 ...... イ ンデ ッ ク ス定義 ............................... イ ンデ ッ ク ス名 ................................... カー ソ ル名 ........................................... 外部結合 タ イ プ ................................... 外部結合の定義 ................................... ク エ リ スペ ッ ク .................................. グループ名 ........................................... 桁数 ....................................................... 結果 ....................................................... 結合定義 ............................................... 検索条件 ............................................... コ ミ ッ ト ス テー ト メ ン ト .................. コ レーシ ョ ン名 ................................... 参照ア ク シ ョ ン ................................... 参照エ イ リ ア ス ................................... 参照更新ア ク シ ョ ン ........................... 参照削除ア ク シ ョ ン ........................... 式ま たはサブ ク エ リ ........................... 述部 ....................................................... 小数位 ................................................... ス カ ラ 関数 ........................................... 制約名 ................................................... セーブポ イ ン ト 名 ............................... セ ッ ト 関数 ........................................... 選択項目 ............................................... 選択 リ ス ト ........................................... 相関名 ................................................... 挿入 / 更新 / 削除................................. 挿入値 ................................................... デー タ 型 ............................................... デー タ 型名 ........................................... デー タ ベース名 ................................... テーブル権限 ....................................... テーブル参照 ....................................... テーブル式 ........................................... テーブル制約 ....................................... テーブル制約定義 ............................... テーブル名 ........................................... テーブル要素 ....................................... ト ラ ンザ ク シ ョ ン ス テー ト メ ン ト .. 3-212 3-213 3-213 3-213 3-210 3-209 3-209 3-209 3-208 3-210 3-210 3-211 3-209 3-210 3-212 3-209 3-212 3-208 3-208 3-212 3-212 3-212 3-212 3-209 3-210 3-212 3-212 3-208 3-212 3-212 3-212 3-212 3-208 3-209 3-209 3-208 3-208 3-208 3-213 3-213 3-213 3-212 3-212 3-213 3-213 3-213 索引 7 ト リ ガ名 ............................................... 3-213 パ ス ワ ー ド ........................................... 3-210 パ ラ メ ー タ ........................................... 3-210 パ ラ メ ー タ タ イ プ .............................. 3-210 パ ラ メ ー タ タ イ プ名 .......................... 3-210 パ ラ メ ー タ 名 ....................................... 3-210 比較演算子 ........................................... 3-208 ビ ュ ー名 ............................................... 3-213 フ ェ ッ チ方向 ....................................... 3-209 プ ロ シージ ャ 検索条件 ....................... 3-210 プ ロ シージ ャ 式 ................................... 3-210 プ ロ シージ ャ ス テー ト メ ン ト .......... 3-210 プ ロ シージ ャ 名 ................................... 3-211 変更オプシ ョ ン ................................... 3-208 変更オプシ ョ ン リ ス ト ...................... 3-208 変数名 ................................................... 3-213 ユーザー / グループ名 ........................ 3-213 ユーザー パ ス ワー ド .......................... 3-213 ユーザー名 ........................................... 3-213 呼び出 し 引数 ....................................... 3-208 ラ ベル名 ............................................... 3-209 リ テ ラ ル ............................................... 3-209 リ リ ース ス テー ト メ ン ト .................. 3-212 列制約 ................................................... 3-208 列定義 ................................................... 3-208 列名 ....................................................... 3-208 ロ ールバ ッ ク ス テー ト メ ン ト .......... 3-212 SQRT .............................................................. 5-7 START TRANSACTION サポー ト し てい る 文法 ....................... 3-192 STRING デー タ 型 ...................................... A-20 STUFF............................................................. 5-3 SUBSTRING .................................................. 5-3 SUM 集計関数........................................... 3-155 DECIMAL 型の精度 ............................ 3-156 T TAN ................................................................ 5-7 TEMP 環境変数 SQL Relational Database エン ジ ン テ ン ポ ラ リ フ ァ イ ル..................... 3-219 Time INSERT ス テー ト メ ン ト で追加 ........ 3-122 現在値の挿入 ....................................... 3-122 現地 と UTC .......................................... 3-181 サポー ト し てい る 書式 ............ 3-161, 3-221 8 索引 リ テ ラ ル書式 ............................ 3-161, 3-221 リ テ ラ ル値 ........................................... 3-221 列値の挿入ま たは更新 ............ 3-161, 3-221 TIMESTAMPADD....................................... 5-11 TIMESTAMPDIFF....................................... 5-11 TIMESTAMP デー タ 型 .............................. A-28 多目的には不適切 ................................. A-29 リ テ ラ ル値の解釈 ............................... 3-182 TIME デー タ 型............................................ A-28 TMP 環境変数 SQL Relational Database エン ジ ン テ ン ポ ラ リ フ ァ イ ル..................... 3-219 TOP SELECT で使用 ................................... 3-166 top 句 (文法要素の定義) ........................ 3-153 TRANSLATIONDLL 接続文字列............ 3-227 TRIGGER.DDF .............................................. C-3 TRUENULLCREATE................................ 3-187 TRUNCATE ................................................... 5-7 U UCASE ........................................................... 5-3 Unicode キー タ イ プ................................... A-16 Unicode デー タ 型........................................ A-30 UNION サポー ト し てい る 文法 ....................... 3-194 制約 ....................................................... 3-194 UNIQUE サポー ト し てい る 文法 ....................... 3-196 UNSIGNED BINARY デー タ 型................. A-30 UPDATE COBOL での使用 .................................... D-3 サブクエリが複数行を返した場合の失敗 3-198 サポー ト し てい る 文法 ....................... 3-197 Update 規則 ......................................................... 3-66 UPDATE (位置付け) サポー ト し てい る 文法 ....................... 3-204 UPPER............................................................ 5-3 USER ............................................................ 5-14 サポー ト し てい る 文法 ....................... 3-206 USER.DDF ..................................................... C-3 USING キーワー ド ............................ 3-12, 3-66 パ ス名の長 さ ................................ 3-12, 3-66 UTC 時刻 , 「時刻」 を参照 V Y values 句 - SQL 文法要素の定義 ............. 3-213 VARCHAR デー タ 型 注意事項 ................................................. A-10 Variant DDF ................................................... C-3 Variant.DDF ................................................... C-3 VIEW.DDF..................................................... C-3 YEAR ........................................................... 5-11 W ア ク セ ス権 許可 ......................................................... 1-11 取 り 消 し ................................................. 1-11 ア ク セ ス権の取 り 消 し .............................. 1-11 値 デフ ォ ル ト ........................................... 3-121 BLOB、 CLOB ま たは BINARY でサポー ト し ない ....................................... 3-123 値 - SQL 文法要素の定義 ........................ 3-213 値 (文法要素の定義) .............................. 3-154 値 リ ス ト - SQL 文法要素の定義 ............ 3-213 WEEK........................................................... 5-11 WHERE 句 ........................................................... 3-153 WHILE サポー ト し てい る 文法 ....................... 3-207 WITH REPLACE キーワ ー ド ........... 3-14, 3-68 WSTRING デー タ 型 (Unicode) ............... A-30 WZSTRING デー タ 型 (Unicode) ............. A-30 X X$Attrib.......................................................... C-3 X$Attrib シ ス テ ム テーブル...................... C-11 X$Depend ....................................................... C-3 X$Depend シ ス テ ム テーブル ................... C-22 X$Field ........................................................... C-3 X$Field シ ス テ ム テーブル ......................... C-5 X$File ............................................................. C-3 X$File シ ス テ ム テーブル ........................... C-4 X$Index .......................................................... C-3 X$Index シ ス テ ム テーブル .............. 3-48, C-8 X$Proc ............................................................ C-3 X$Proc シ ス テ ム テーブル ........................ C-13 X$Relate ......................................................... C-3 X$Relate シ ス テ ム テーブル ..................... C-18 X$Rights ......................................................... C-3 X$Rights シ ス テ ム テーブル ..................... C-16 X$Trigger ....................................................... C-3 X$Trigger シ ス テ ム テーブル ................... C-20 X$User............................................................ C-3 X$User シ ス テ ム テーブル........................ C-14 X$View........................................................... C-3 X$View シ ス テ ム テーブル....................... C-12 XML Schema Executor ユーティリティでの使用 D-14 Z ZSTRING デー タ 型 .................................... A-30 あ い 一重引用符 含有す る デー タ と 一致 さ せ る ........... 3-134 一重引用符 , 表記法 ..................................... 2-3 位置引数 - SQL 文法要素の定義 ............ 3-210 イ ンデ ッ ク ス イ ンデ ッ ク ス付 き の ヌ ル値を許可す る 列の 最大数 ................................................. 3-46 イ ンデ ッ ク ス を設定で き ないデー タ 型 3-47 可能な場合に使用 さ れ る 既存の イ ンデ ッ ク ス ....................................... 3-11, 3-46, 3-68 既存の Btrieve イ ンデ ッ ク ス と リ レーシ ョ ナ ル定義 ............................... 3-11, 3-46, 3-68 最適化 ..................................................... 7-11 作成 ........................................................... 1-4 シ ス テ ム テーブル X$Field................................................. C-5 X$Index................................................ C-8 定義 , SQL Btrieve イ ンデ ッ ク ス ..... 3-11, 3-46, 3-68 名前 最大長.................................................. 2-3 名前付 き イ ンデ ッ ク ス の削除 ............... 1-4 分離 さ れた , 定義 .................................. 3-48 イ ンデ ッ ク ス セグ メ ン ト の定義 - SQL 文法要 素の定義.......................................... 3-209 索引 9 イ ンデ ッ ク ス定義 - SQL 文法要素の定義 3-209 イ ンデ ッ ク ス名 - SQL 文法要素の定義. 3-209 引用符 含有す る デー タ と 一致 さ せ る ........... 3-134 引用符 , 一重~の表記法.............................. 2-3 う 埋め込み BINARY 列 ............................................ CHAR 列 ................................................ LONGVARBINARY 列 ........................ LONGVARCHAR 列............................. VARCHAR 列........................................ A-10 A-10 A-10 A-10 A-10 え エ ス ケープ文字......................................... 3-134 演算子 ビ ッ ト 単位 ............................................... 4-2 ビ ッ ト 演算 AND (&) ....................... 4-3 ビ ッ ト 演算 NOT (~) ........................ 4-5 ビ ッ ト 演算 OR (|)............................. 4-6 ビ ッ ト 演算の真理値表...................... 4-9 ビ ッ ト 演算 排他的 OR (^) .............. 4-8 よ り 大き い ........................................... 3-153 よ り 小 さ い ........................................... 3-153 お オーナー ネーム........................................ 3-111 SQL での指定....................................... 3-174 保護 さ れたデー タ ベース ..................... 1-10 か カー ソ ル TOP に よ っ て変更 さ れ る タ イ プ....... 3-167 制限 ......................................................... 3-60 ループ方法 ............................................. 3-59 カー ソ ル名 - SQL 文法要素の定義......... 3-208 概算数値 リ テ ラ ル サポー ト し てい る 文法 ....................... 3-159 外部結合 タ イ プ - SQL 文法要素の定義. 3-210 外部結合 タ イ プ (文法要素の定義) ...... 3-153 外部結合の定義 - SQL 文法要素の定義. 3-210 外部結合の定義 (文法要素の定義) ...... 3-153 拡張デー タ 型.............................................. A-16 型変換........................................................... 5-18 10 索引 関数 時刻 値の挿入.............................................. 5-9 現在値の挿入...................................... 5-9 シ ス テ ム ................................................. 5-14 集計 AVG ................................................. 3-155 COUNT............................................ 3-155 MAX ................................................ 3-155 MIN.................................................. 3-155 SUM ...................................... 3-155, 3-156 数値 ........................................................... 5-6 日付 ........................................................... 5-9 値の挿入.............................................. 5-9 変換 ......................................................... 5-18 文字列 ....................................................... 5-2 論理 ......................................................... 5-15 カンマ 小数点の記号 デー タ 入力...................................... 3-224 デー タ 表示........................... 3-169, 3-172 き キーの ソ ー ト 順 文字列 ..................................................... A-15 行 返 さ れ る 個数の制限 ................ 3-166, 3-178 制限 ........................................................... 2-4 行セ ッ ト のサ イ ズ 指定 ....................................................... 3-178 く ク エ リ スペ ッ ク - SQL 文法要素の定義 3-211 ク エ リ スペ ッ ク (文法要素の定義) ..... 3-153 区切 り 文字 PCC での SQL ス テー ト メ ン ト ............. 3-2 小数点のカ ン マ デー タ 入力...................................... 3-224 デー タ 表示........................... 3-169, 3-172 グループ 作成 ......................................................... 1-11 グループ名 - SQL 文法要素の定義 ........ 3-209 グ ロ ーバル変数 ........................................ 3-216 @@IDENTITY ..................................... 3-216 @@ROWCOUNT................................. 3-217 @@SPID ............................................... 3-218 け 桁数 - SQL 文法要素の定義 .................... 3-210 結果 部分的なセ ッ ト を返す ............ 3-166, 3-178 結果 - SQL 文法要素の定義 .................... 3-212 結合 2 方向 LEFT OUTER JOIN ................. 3-129 LEFT OUTER ....................................... 3-164 RIGHT OUTER .................................... 3-165 TOP 句に含まれ る .............................. 3-167 カルテシア ン ....................................... 3-165 最大テーブル数 ....................................... 2-4 デー タ ベース を ま たが る ................... 3-163 マルチデー タ ベース ........................... 3-163 結合 タ イ プ (文法要素の定義) .............. 3-153 結合定義 - SQL 文法要素の定義 ............ 3-209 結合定義 (文法要素の定義) .................. 3-153 権限 , 「ア ク セ ス権」 を参照 検索条件 - SQL 文法要素の定義 ............ 3-212 検索条件 (文法要素の定義) .................. 3-153 現時刻 INSERT ス テー ト メ ン ト へ追加 3-122, 3-124 現日付 INSERT ス テー ト メ ン ト へ追加 3-122, 3-124 こ 更新 シ ス テ ム テーブル .................................. C-2 構造化問い合わせ言語 , 「SQL」 を参照 コー ド デー タ 型 ................................................. A-16 語句 , 予約済み ............................................. B-1 コミット ス テー ト メ ン ト - SQL 文法要素の定義 3-208 コ レーシ ョ ン名 - SQL 文法要素の定義 3-208 コ レーシ ョ ン名 (文法要素の定義) ........ 3-63 さ サイズ デー タ ページ , 指定 ............................. 3-69 最大 ビ ュ ー名の長 さ ..................................... 3-77 列名の長 さ ............................................... 2-2 最適化 SQL Relational Database エン ジ ン ......... 7-1 イ ンデ ッ ク ス の使用 ............................. 7-11 式の左辺のサブ ク エ リ ....................... 3-157 制限 ........................................................... 7-4 削除 規則 ......................................................... 3-65 カ ス ケー ド ........................................ 3-65 制限.................................................... 3-65 ビ ュ ー ....................................................... 1-9 作成 グループ ................................................. 1-11 ス ト ア ド プ ロ シージ ャ ........................ 3-59 ビ ュ ー ....................................................... 1-9 ユーザー定義関数 ................................... 1-5 ユーザー と グループ ........................... 3-111 レガシー ヌル サポートを含むテーブル 3-187 サブ ク エ リ DISTINCT に よ る 重複行の除去........ 3-201 サポー ト し てい る 文法 ....................... 3-156 相関 ............................................ 3-157, 3-198 パフ ォーマ ン ス の向上 ....................... 3-157 非相関 ................................................... 3-198 サブ ク エ リ 式 (文法要素の定義) .......... 3-155 サブ ク エ リ での不正な行カ ウ ン ト UPDATE 内の SELECT が複数行を返 し た場 合に返 さ れ る ................................... 3-198 サポー ト さ れてい る ODBC API Pervasive.SQL 2000.................................. 2-7 サポー ト さ れてい る 数値関数 .................... 5-6 サポー ト さ れてい る デー タ 型 .................... A-2 サポー ト さ れてい る 論理関数 .................. 5-15 算術 浮動小数点の比較 ................................. A-12 参照ア ク シ ョ ン - SQL 文法要素の定義 3-212 参照ア ク シ ョ ン (文法要素の定義) ........ 3-63 参照エ イ リ ア ス - SQL 文法要素の定義 3-212 参照エ イ リ ア ス (文法要素の定義) ........ 3-74 参照更新ア ク シ ョ ン - SQL 文法要素の定義 3212 参照更新ア ク シ ョ ン (文法要素の定義) 3-63 参照削除ア ク シ ョ ン - SQL 文法要素の定義 3212 参照削除ア ク シ ョ ン (文法要素の定義) 3-63 参照整合性 X$Relate シ ス テ ム テーブル................ C-18 更新規則 ................................................. 3-66 削除規則 ................................................. 3-65 索引 11 し 式 左辺のサブ ク エ リ ............................... 3-157 ス ト ア ド プ ロ シージ ャ 内 .................. 3-214 式 (文法要素の定義)............................... 3-154 式ま たはサブ ク エ リ - SQL 文法要素の定義 3209 式ま たはサブ ク エ リ (文法要素の定義) 3-154 時刻 INSERT ス テー ト メ ン ト で追加 ............ 5-9 TIMESTAMP 型 , 使用 し ない理由 ..... A-29 現在値の挿入 ........................................... 5-9 サポー ト さ れてい る 関数 ....................... 5-9 時刻 リ テ ラ ル サポー ト し てい る 文法 ............ 3-161, 3-221 システム サポー ト さ れてい る SQL 関数............ 5-14 時刻 ....................................................... 3-181 地域の設定 ........................................... 3-181 時計 ....................................................... 3-181 シ ス テ ム ス ト ア ド プ ロ シージ ャ ............... 6-2 psp_column_attributes............................... 6-6 エ ラ ー状況.......................................... 6-8 返 さ れ る 結果セ ッ ト .......................... 6-7 権限...................................................... 6-7 引数...................................................... 6-6 psp_column_rights..................................... 6-9 エ ラ ー状況........................................ 6-12 返 さ れ る 結果セ ッ ト ........................ 6-10 引数...................................................... 6-9 psp_columns .............................................. 6-3 エ ラ ー状況.......................................... 6-6 返 さ れ る 結果セ ッ ト .......................... 6-3 引数...................................................... 6-3 psp_fkeys ................................................. 6-12 エ ラ ー状況........................................ 6-14 返 さ れ る 結果セ ッ ト ........................ 6-13 引数.................................................... 6-12 psp_groups............................................... 6-15 エ ラ ー状況........................................ 6-16 返 さ れ る 結果セ ッ ト ........................ 6-15 引数.................................................... 6-15 psp_help_sp ............................................. 6-16 エ ラ ー状況........................................ 6-18 返 さ れ る 結果セ ッ ト ........................ 6-17 引数.................................................... 6-17 12 索引 psp_help_trigger ...................................... エ ラ ー状況........................................ 返 さ れ る 結果セ ッ ト ........................ 引数.................................................... psp_help_udf ........................................... エ ラ ー状況........................................ 返 さ れ る 結果セ ッ ト ........................ 引数.................................................... psp_help_view......................................... エ ラ ー状況........................................ 返 さ れ る 結果セ ッ ト ........................ 権限.................................................... 引数.................................................... psp_indexes ............................................. エ ラ ー状況........................................ 返 さ れ る 結果セ ッ ト ........................ 引数.................................................... psp_pkeys ................................................ エ ラ ー状況........................................ 返 さ れ る 結果セ ッ ト ........................ 引数.................................................... psp_stored_procedures ............................ エ ラ ー状況........................................ 返 さ れ る 結果セ ッ ト ........................ 引数.................................................... psp_table_rights....................................... エ ラ ー状況........................................ 返 さ れ る 結果セ ッ ト ........................ 引数.................................................... psp_tables ................................................ エ ラ ー状況........................................ 返 さ れ る 結果セ ッ ト ........................ 引数.................................................... psp_triggers ............................................. エ ラ ー状況........................................ 返 さ れ る 結果セ ッ ト ........................ 引数.................................................... psp_udfs................................................... エ ラ ー状況........................................ 返 さ れ る 結果セ ッ ト ........................ 引数.................................................... psp_users ................................................. エ ラ ー状況........................................ 返 さ れ る 結果セ ッ ト ........................ 引数.................................................... psp_views ................................................ 6-18 6-20 6-19 6-19 6-21 6-22 6-21 6-21 6-23 6-24 6-23 6-23 6-23 6-24 6-27 6-25 6-25 6-27 6-29 6-28 6-28 6-31 6-33 6-31 6-31 6-37 6-40 6-38 6-38 6-34 6-37 6-34 6-34 6-40 6-43 6-41 6-41 6-43 6-45 6-43 6-43 6-45 6-47 6-46 6-46 6-48 エ ラ ー状況........................................ 6-49 返 さ れ る 結果セ ッ ト ........................ 6-48 引数.................................................... 6-48 呼び出 し ................................................... 1-9 シ ス テ ム テーブル ....................................... C-1 X$Attrib................................................... C-11 X$Depend................................................ C-22 X$Field...................................................... C-5 X$File........................................................ C-4 X$Index ..................................................... C-8 X$Proc..................................................... C-13 X$Relate.................................................. C-18 X$Rights.................................................. C-16 X$Trigger ................................................ C-20 X$User..................................................... C-14 X$View ................................................... C-12 更新 ........................................................... C-2 シフ ト 正の NUMERIC デー タ 型のための符号値 A25 集計関数 AVG ...................................................... 3-155 COUNT ................................................. 3-155 MAX...................................................... 3-155 MIN ....................................................... 3-155 SUM ...................................................... 3-155 DECIMAL の精度 .......................... 3-156 述部 ス ト ア ド プ ロ シージ ャ 内.................. 3-214 述部 - SQL 文法要素の定義 .................... 3-210 述部間 サポー ト し てい る 文法 ....................... 3-159 述部 (文法要素の定義) .......................... 3-154 小数位 - SQL 文法要素の定義 ................ 3-212 小数点 カ ン マ ............................. 3-169, 3-172, 3-224 表示のみ............................... 3-169, 3-172 使用を避け る 語句 ........................................ B-7 ABSOLUTE .............................................. B-7 ACTION.................................................... B-7 ADD .......................................................... B-7 ALL ........................................................... B-7 ALLOCATE.............................................. B-7 ALTER ...................................................... B-7 AND .......................................................... B-7 ANY .......................................................... B-7 ARE ........................................................... AS.............................................................. ASC ........................................................... ASSERTION ............................................. AT.............................................................. AUTHORIZATION .................................. AVG .......................................................... BEGIN....................................................... BETWEEN................................................ BIT............................................................. BIT_LENGTH........................................... BOTH ........................................................ BY ............................................................. CASCADE ................................................ CASCADED ............................................. CASE......................................................... CAST......................................................... CATALOG................................................ CHAR........................................................ CHAR_LENGTH...................................... CHARACTER........................................... CHARACTER_LENGTH......................... CHECK ..................................................... CLOSE ...................................................... COALESCE .............................................. COLLATE................................................. COLLATION ............................................ COLUMN.................................................. COMMIT................................................... CONNECT ................................................ CONNECTION ......................................... CONSTRAINT.......................................... CONSTRAINTS ....................................... CONTINUE............................................... CONVERT ................................................ CORRESPONDING ................................. COUNT ..................................................... CREATE ................................................... CROSS ...................................................... CURRENT ................................................ CURRENT_DATE.................................... CURRENT_TIME..................................... CURRENT_TIMESTAMP ....................... CURRENT_USER .................................... CURSOR ................................................... DATE ........................................................ B-7 B-7 B-7 B-7 B-7 B-7 B-7 B-7 B-7 B-7 B-7 B-7 B-7 B-7 B-7 B-7 B-7 B-7 B-7 B-7 B-7 B-7 B-7 B-7 B-7 B-7 B-7 B-7 B-7 B-7 B-7 B-7 B-7 B-7 B-7 B-7 B-7 B-7 B-7 B-7 B-7 B-7 B-7 B-8 B-8 B-8 索引 13 DAY........................................................... B-8 DEALLOCATE......................................... B-8 DEC ........................................................... B-8 DECIMAL ................................................. B-8 DECLARE................................................. B-8 DEFAULT ................................................. B-8 DEFERRABLE ......................................... B-8 DEFERRED............................................... B-8 DELETE .................................................... B-8 DESC ......................................................... B-8 DESCRIBE ................................................ B-8 DESCRIPTOR........................................... B-8 DIAGNOSTICS......................................... B-8 DISCONNECT .......................................... B-8 DISTINCT ................................................. B-8 DOMAIN................................................... B-8 DOUBLE ................................................... B-8 ELSE.......................................................... B-8 END ........................................................... B-8 END-EXEC ............................................... B-8 ESCAPE .................................................... B-8 EXCEPT .................................................... B-8 EXCEPTION ............................................. B-8 EXEC......................................................... B-8 EXECUTE ................................................. B-8 EXISTS...................................................... B-8 EXTERNAL .............................................. B-8 EXTRACT................................................. B-8 FALSE ....................................................... B-8 FETCH....................................................... B-8 FIRST ........................................................ B-8 FLOAT ...................................................... B-8 FOR ........................................................... B-8 FOREIGN.................................................. B-8 FOUND ..................................................... B-8 FROM........................................................ B-8 FULL ......................................................... B-8 FUNCTION ............................................... B-8 GET ........................................................... B-8 GLOBAL ................................................... B-8 GO ............................................................. B-8 GOTO ........................................................ B-8 GRANT ..................................................... B-8 GROUP...................................................... B-8 HOUR........................................................ B-8 IDENTITY................................................. B-8 14 索引 IMMEDIATE ............................................ B-8 IN............................................................... B-8 INDICATOR ............................................. B-8 INITIALLY ............................................... B-8 INNER....................................................... B-8 INPUT ....................................................... B-8 INSENSITIVE........................................... B-8 INSERT ..................................................... B-8 INT ............................................................ B-8 INTEGER.................................................. B-8 INTERSECT ............................................. B-8 INTERVAL ............................................... B-8 INTO ......................................................... B-8 IS ............................................................... B-8 ISOLATION.............................................. B-8 JOIN .......................................................... B-8 KEY........................................................... B-8 LANGUAGE............................................. B-8 LAST ......................................................... B-8 LEADING ................................................. B-8 LEFT ......................................................... B-8 LEVEL ...................................................... B-8 LIKE .......................................................... B-8 LOCAL...................................................... B-8 LOWER..................................................... B-8 MASK ....................................................... B-8 MATCH..................................................... B-8 MAX.......................................................... B-9 MIN ........................................................... B-9 MINUTE ................................................... B-9 MODULE.................................................. B-9 MONTH .................................................... B-9 NAMES ..................................................... B-9 NATIONAL .............................................. B-9 NATURAL................................................ B-9 NCHAR ..................................................... B-9 NEXT ........................................................ B-9 NO ............................................................. B-9 NOT........................................................... B-9 NULL ........................................................ B-9 NULLIF..................................................... B-9 NUMERIC................................................. B-9 OCTET_LENGTH .................................... B-9 OF.............................................................. B-9 ON ............................................................. B-9 ONLY........................................................ B-9 OPEN......................................................... OPTION .................................................... OR ............................................................. ORDER ..................................................... OUTER...................................................... OUTPUT ................................................... OVERLAPS .............................................. PAD ........................................................... PARTIAL .................................................. POSITION................................................. PRECISION .............................................. PREPARE ................................................. PRESERVE ............................................... PRIMARY................................................. PRIOR ....................................................... PRIVILEGES ............................................ PROCEDURE ........................................... PUBLIC..................................................... READ ........................................................ REAL......................................................... REFERENCES.......................................... RELATIVE ............................................... RESTRICT ................................................ REVOKE................................................... RIGHT....................................................... ROLLBACK ............................................. ROWS ....................................................... SCHEMA .................................................. SCROLL.................................................... SECOND ................................................... SECTION .................................................. SELECT .................................................... SESSION................................................... SESSION_USER....................................... SET............................................................ SIZE........................................................... SMALLINT............................................... SOME........................................................ SPACE....................................................... SQL ........................................................... SQLCODE................................................. SQLERROR .............................................. SQLSTATE ............................................... SUBSTRING............................................. SUM .......................................................... SYSTEM_USER ....................................... B-9 B-9 B-9 B-9 B-9 B-9 B-9 B-9 B-9 B-9 B-9 B-9 B-9 B-9 B-9 B-9 B-9 B-9 B-9 B-9 B-9 B-9 B-9 B-9 B-9 B-9 B-9 B-9 B-9 B-9 B-9 B-9 B-9 B-9 B-9 B-9 B-9 B-9 B-9 B-9 B-9 B-9 B-9 B-9 B-9 B-9 TABLE ...................................................... B-9 TEMPORARY .......................................... B-9 THEN ........................................................ B-9 TIME ......................................................... B-9 TIMESTAMP............................................ B-9 TIMEZONE_HOUR ................................. B-9 TIMEZONE_MINUTE ............................. B-9 TO.............................................................. B-9 TRAILING ................................................ B-9 TRANSACTION....................................... B-9 TRANSLATE............................................ B-9 TRANSLATION ....................................... B-9 TRIM ......................................................... B-9 TRUE....................................................... B-10 UNION .................................................... B-10 UNIQUE.................................................. B-10 UNKNOWN............................................ B-10 UPDATE ................................................. B-10 UPPER..................................................... B-10 USAGE.................................................... B-10 USER....................................................... B-10 USING..................................................... B-10 VALUE ................................................... B-10 VALUES ................................................. B-10 VARCHAR ............................................. B-10 VARYING............................................... B-10 VIEW....................................................... B-10 WHEN ..................................................... B-10 WHENEVER........................................... B-10 WHERE................................................... B-10 WITH....................................................... B-10 WORK..................................................... B-10 WRITE .................................................... B-10 YEAR ...................................................... B-10 ZONE ...................................................... B-10 削除 ........................................................... B-8 書式 リ テ ラ ル値 時刻.................................................. 3-221 タ イ ム ス タ ンプ.............................. 3-222 日付.................................................. 3-221 文字列.............................................. 3-220 書式 , リ テ ラ ル 時刻 ............................................ 3-161, 3-221 タ イ ム ス タ ンプ ........................ 3-162, 3-222 日付 ............................................ 3-161, 3-221 索引 15 文字列 ................................................... 3-220 真の無限 表現 ........................................................ A-13 す ス カ ラ 関数 ABS ........................................................... 5-6 ACOS......................................................... 5-6 ASCII......................................................... 5-2 ASIN .......................................................... 5-6 ATAN ........................................................ 5-6 ATAN2 ...................................................... 5-6 BIT_LENGTH........................................... 5-2 CAST ....................................................... 5-19 CEILING ................................................... 5-6 CHAR ........................................................ 5-2 CHAR_LENGTH ...................................... 5-2 CHARACTER_LENGTH ......................... 5-2 COALESCE............................................. 5-15 CONCAT................................................... 5-2 CONVERT .............................................. 5-19 COS ........................................................... 5-6 COT ........................................................... 5-6 CURDATE ................................................ 5-9 CURRENT_DATE .................................... 5-9 CURRENT_TIME..................................... 5-9 CURRENT_TIMESTAMP ..................... 5-10 CURTIME ................................................. 5-9 DATABASE ............................................ 5-14 DAYNAME............................................. 5-10 DAYOFMONTH..................................... 5-10 DAYOFYEAR......................................... 5-10 DEGREES ................................................. 5-6 EXP............................................................ 5-6 EXTRACT............................................... 5-10 FLOOR ...................................................... 5-6 HOUR...................................................... 5-10 IF.............................................................. 5-15 IFNULL ................................................... 5-15 ISNULL ................................................... 5-15 LCASE ま たは LOWER .......................... 5-2 LEFT.......................................................... 5-2 LENGTH ................................................... 5-2 LOCATE ................................................... 5-2 LOG ........................................................... 5-6 LOG10 ....................................................... 5-6 16 索引 LTRIM....................................................... 5-2 MINUTE ................................................. 5-10 MOD.......................................................... 5-7 MONTH .................................................. 5-10 MONTHNAME....................................... 5-10 NOW ....................................................... 5-11 NULL ...................................................... 5-15 NULLIF................................................... 5-15 OCTET_LENGTH .................................... 5-2 PI ............................................................... 5-7 POSITION................................................. 5-3 POWER ..................................................... 5-7 QUARTER .............................................. 5-11 RADIANS ................................................. 5-7 RAND........................................................ 5-7 REPLACE ................................................. 5-3 REPLICATE ............................................. 5-3 RIGHT....................................................... 5-3 ROUND..................................................... 5-7 RTRIM ...................................................... 5-3 SECOND ................................................. 5-11 SIGN.......................................................... 5-7 SIN............................................................. 5-7 SPACE....................................................... 5-3 SQRT......................................................... 5-7 STUFF ....................................................... 5-3 SUBSTRING............................................. 5-3 TAN........................................................... 5-7 TIMESTAMPADD ................................. 5-11 TIMESTAMPDIFF ................................. 5-11 TIMESTAMP の小数の秒を無視す る . A-28 TRUNCATE.............................................. 5-7 UCASE ま たは UPPER ........................... 5-3 USER....................................................... 5-14 WEEK ..................................................... 5-11 YEAR ...................................................... 5-11 カテゴ リ 時刻...................................................... 5-9 シ ス テ ム ............................................ 5-14 数値...................................................... 5-6 日付...................................................... 5-9 変換.................................................... 5-18 文字列.................................................. 5-2 ス カ ラ 関数 - SQL 文法要素の定義 ........ 3-212 ス カ ラ 関数 (文法要素の定義) .............. 3-155 ス テー タ ス コ ー ド 59 ............................................................. 3-67 ス テー ト メ ン ト 接続当た り の最大数 ............................... 2-4 ス テー ト メ ン ト の区切 り 文字 , 変更 ......... 3-2 ス ト ア ド プ ロ シージ ャ 削除 .................................................. 1-5, 3-98 作成 ........................................................... 1-5 式 ........................................................... 3-214 システム 「シ ス テ ム ス ト ア ド プ ロ シージ ャ 」 を 参照 シ ス テ ム テーブル (X$Proc).............. C-13 実行 ........................................................... 1-9 述部 ....................................................... 3-214 使用 ......................................................... 3-59 制限 ......................................................... 3-60 合計サ イ ズ................................. 2-4, 3-53 最大列数..................................... 2-2, 3-53 パ ラ メ ー タ リ ス ト 内の引数の数 2-2, 3-53 選択項目 と し ての変数の使用............. 3-53 デー タ 型の制限 ..................................... 3-53 呼び出 し ................................................... 1-9 スペーシ ン グ BINARY 列............................................. A-10 CHAR 列................................................. A-10 LONGVARBINARY 列 ......................... A-10 LONGVARCHAR 列 ............................. A-10 VARCHAR 列 ........................................ A-10 せ 正確な数値 リ テ ラ ル サポー ト し てい る 文法 ....................... 3-160 制限 Long デー タ の使用時 ........................... 3-60 Pervasive ODBC エン ジ ン イ ン タ ーフ ェ イ ス 2-2 SQL ス テー ト メ ン ト 内の引用文字列の最大 サ イ ズ ................................................... 2-3 SQL ス テー ト メ ン ト におけ る AND でつない だ述部の最大数 ................................... 2-3 SQL 変数 と パ ラ メ ー タ ........................ 3-60 カー ソ ル ................................................. 3-60 ス ト ア ド プ ロ シージ ャ ........................ 3-60 サ イ ズ......................................... 2-4, 3-53 パ ラ メ ー タ リ ス ト 内の引数.... 2-2, 3-53 プ ロ シージ ャ 名................................ 3-60 変数名................................................ 3-60 ト リガ 列数............................................. 2-2, 3-53 静的カー ソ ル TOP に よ っ て変更 さ れ る タ イ プ ...... 3-167 精度 DECIMAL デー タ での SUM 結果 ..... 3-156 制約 INSERT ス テー ト メ ン ト での LONGVARBINARY .......................... A-11 INSERT ス テー ト メ ン ト での LONGVARCHAR .............................. A-11 LONGVARBINARY .............................. A-11 LONGVARCHAR .................................. A-11 UNION ス テー ト メ ン ト での LONGVARCHAR ............................ 3-194 列 , 数 ........................................................ 2-2 制約名 - SQL 文法要素の定義 ................ 3-208 制約名 (文法要素の定義) ........................ 3-63 セーブポ イ ン ト 名 - SQL 文法要素の定義 3-212 世界時 , 「時刻」 を 参照 ......................... 3-181 セキ ュ リ テ ィ Master ユーザーのパ ス ワー ド ........... 3-111 SET OWNER ........................................ 3-174 オーナー ネーム ....................... 3-111, 3-174 関係 ....................................................... 3-111 シ ス テ ム テーブル 権利 (X$Rights) .............................. C-16 ユーザー (X$User) ......................... C-14 設定 ....................................................... 3-179 有効化 と 無効化 ..................................... 1-10 セキ ュ リ テ ィ の無効化 .............................. 1-10 接続 最大接続数 ............................................... 2-2 接続文字列 DSN ........................................................... 2-5 TRANSLATIONDLL ........................... 3-227 セ ッ ト 関数 SELECT ス テー ト メ ン ト でサポー ト さ れて い る 文法 ........................................... 3-160 セ ッ ト 関数 - SQL 文法要素の定義 ........ 3-212 セ ッ ト 関数 (文法要素の定義) .............. 3-155 選択項目 - SQL 文法要素の定義 ............ 3-212 選択項目 (文法要素の定義) .................. 3-153 選択 リ ス ト - SQL 文法要素の定義 ........ 3-212 選択 リ ス ト (文法要素の定義) .............. 3-153 索引 17 そ 相関サブ ク エ リ .............................. 3-157, 3-198 相関名 サポー ト し てい る 文法 ....................... 3-160 相関名 - SQL 文法要素の定義................. 3-208 挿入 現時刻、 現日付、 タ イ ム ス タ ンプ 3-122, 3124, 5-9 挿入 / 更新 / 削除 - SQL 文法要素の定義 3-209 挿入 / 更新 / 削除 (文法要素の定義) ...... 3-74 挿入値 - SQL 文法要素の定義................. 3-209 ゾーン 時刻の設定 ........................................... 3-181 た タ イ ム ス タ ンプ INSERT ス テー ト メ ン ト へ追加 3-122, 3-124 現在値の挿入 ....................................... 3-122 サポー ト し てい る 書式 ............ 3-162, 3-222 リ テ ラ ル書式 ............................ 3-162, 3-222 リ テ ラ ル値 ........................................... 3-222 列値の挿入ま たは更新 ............ 3-162, 3-222 タ イ ム ス タ ンプ リ テ ラ ル サポー ト し てい る 文法 ............ 3-162, 3-222 タ イ ム ゾーン 設定 ....................................................... 3-181 ち 地域の設定 小数点の記号のカ ン マ デー タ 入力...................................... 3-224 デー タ 表示........................... 3-169, 3-172 て 定義 イ ンデ ッ ク ス Btrieve イ ンデ ッ ク ス ..... 3-11, 3-46, 3-68 定数値 , 表記 時刻 ....................................................... 3-221 タ イ ム ス タ ンプ ................................... 3-222 日付 ....................................................... 3-221 文字列 ................................................... 3-220 デー タ long, 挿入ま たは更新 .......................... 3-123 18 索引 デー タ 型 AUTOINCREMENT............................... A-16 BFLOAT ................................................. A-19 BLOB ...................................................... A-19 CLOB ...................................................... A-20 CURRENCY ........................................... A-20 DATE ...................................................... A-21 DECIMAL............................................... A-21 FLOAT .................................................... A-22 INTEGER................................................ A-23 LOGICAL ............................................... A-24 LSTRING ................................................ A-24 MONEY .................................................. A-24 NUMERIC............................................... A-25 NUMERICSA ......................................... A-27 NUMERICSTS........................................ A-27 REAL....................................................... A-27 STRING................................................... A-20 TIME ....................................................... A-28 TIMESTAMP.......................................... A-28 UNSIGNED BINARY ............................ A-30 WSTRING............................................... A-30 WZSTRING ............................................ A-30 ZSTRING ................................................ A-30 イ ンデ ッ ク ス を設定で き ない ............. 3-47 拡張 ......................................................... A-16 コ ー ド ..................................................... A-16 サポー ト さ れ る ....................................... A-2 ス ト ア ド プ ロ シージ ャ での制限 ........ 3-53 ト リ ガでの制限 ..................................... 3-75 長 さ と 範囲 ............................................... A-4 別の型への変換 ..................................... 5-18 変換 ........................................................... A-2 ユーザー定義関数の制限 ..................... 3-40 デー タ 型 - SQL 文法要素の定義 ............ 3-208 デー タ 型 (文法要素の定義) .................... 3-62 デー タ 型名 - SQL 文法要素の定義 ........ 3-208 デー タ 辞書 シ ス テ ム テーブルの一覧 ...................... C-2 デー タ 制御ス テー ト メ ン ト ...................... 1-10 デー タ 操作 ス テー ト メ ン ト ....................................... 1-5 デー タ ソ ース名 接続文字列キーワー ド ........................... 2-5 エン ジ ン.............................................. 2-6 ク ラ イ ア ン ト ...................................... 2-6 デー タ 定義ス テー ト メ ン ト ........................ 1-3 デー タ の取得 説明 ........................................................... 1-7 デー タ フ ァ イ ル 既存の置 き 換え ............................ 3-14, 3-68 シ ス テ ム テーブル (X$File)................. C-4 バ イ ナ リ 互換性のあ る 複数のプ ラ ッ ト フ ォーム .................................... 3-13, 3-67 デー タ フ ァ イ ルの圧縮 SQL に よ る ............................................ 3-69 デー タ フ ァ イ ルの置換 .................... 3-14, 3-68 デー タ ベース 複数の結合 ........................................... 3-163 デー タ ベース名 - SQL 文法要素の定義 3-208 テーブル SQL ス テー ト メ ン ト で閉 じ る .......... 3-223 最大行数 ................................................... 2-4 最大列数 ................................................... 2-2 削除 ........................................................... 1-3 作成 ........................................................... 1-3 シ ス テ ム テーブル .................................. C-1 シ ス テ ム テーブルの更新...................... C-2 変更 ........................................................... 1-3 レ ガシー ヌ ル サポー ト を使っ た作成 3-187 テーブル権限 - SQL 文法要素の定義 .... 3-213 テーブル参照 - SQL 文法要素の定義 .... 3-213 テーブル参照 (文法要素の定義) .......... 3-153 テーブル式 - SQL 文法要素の定義 ........ 3-213 テーブル制約 - SQL 文法要素の定義 .... 3-212 テーブル制約定義 - SQL 文法要素の定義 3-212 テーブル制約定義 (文法要素の定義) .... 3-63 テーブル制約 (文法要素の定義) ............ 3-63 テーブル フ ィ ル タ ..................................... D-15 テーブル名 最大長 ....................................................... 2-4 テーブル名 - SQL 文法要素の定義 ........ 3-213 テーブル名 (文法要素の定義) ................ 3-62 テーブル要素 - SQL 文法要素の定義 .... 3-213 テーブル要素 (文法要素の定義) ............ 3-62 デフ ォ ル ト 値 , 「値 , デフ ォ ル ト 」 を参照 デフ ォ ル ト 値の式 (文法要素の定義) .... 3-62 デ リ ミ タ 付 き 識別子 SQL ス テー ト メ ン ト ............................ 2-15 テ ン ポ ラ リ テーブル パフ ォーマ ン ス ..................................... 7-14 テンポ ラ リ フ ァ イル SQL Relational Database エン ジ ン ロ ケーシ ョ ン.................................. 3-219 と 動的カー ソ ル SET ROWCOUNT................................ 3-178 TOP に よ っ て変更 さ れ る タ イ プ ...... 3-167 特殊文字 .................................................... 3-134 閉じ る 開いたテーブル ................................... 3-223 ト ラ ンザ ク シ ョ ン 定義 ........................................................... 1-8 ト ラ ンザ ク シ ョ ン ス テー ト メ ン ト - SQL 文法 要素の定義...................................... 3-213 ト ラ ンザ ク シ ョ ン ス テー ト メ ン ト (文法要素 の定義).............................................. 3-51 ト リガ 依存関係 シ ス テ ム テーブル (X$Depend) ... C-22 削除 ........................................................... 1-4 作成 ........................................................... 1-4 シ ス テ ム テーブル (X$Trigger) ......... C-20 実行 ........................................................... 1-9 使用可能な列数 .............................. 2-2, 3-53 デー タ 型の制限 ..................................... 3-75 呼び出 し ................................................... 1-9 ト リ ガ名 - SQL 文法要素の定義 ............ 3-213 ト リ ガ名 (文法要素の定義) .................... 3-74 な 長さ USING でのパ ス名....................... 3-12, 3-66 列名の最大 ............................................... 2-2 夏時刻 , 「時刻」 を参照 名前 最大長 ....................................................... 2-2 名前付 き デー タ ベース フ ァ イ ル名 .................................... 3-12, 3-66 に 二重引用符 含有す る デー タ と 一致 さ せ る ........... 3-134 索引 19 ぬ ヌル サポー ト テーブル作成時の設定.................. 3-187 レ ガシーを含むテーブルの作成.. 3-187 ヌ ル値を許可す る 列 イ ンデ ッ ク ス設定の最大数 ................. 3-46 デフ ォ ル ト 値 ....................................... 3-122 ね ネ ス ト 制限 IF............................................................ 3-118 は 排他的 OR ビ ッ ト 演算子 ............................. 4-8 バ イ ナ リ ラ ージ オブジ ェ ク ト ................ A-19 バ ウ ン ド デー タ ベース IN DICTIONARY を許可 し ない . 3-10, 3-47 パ ス名 USING での長 さ ........................... 3-12, 3-66 パス ワー ド Master ユーザー用 ............................... 3-111 パ ス ワ ー ド - SQL 文法要素の定義......... 3-210 パ タ ーン検索 LIKE に よ る ......................................... 3-134 パフ ォーマ ン ス SQL Relational Database エン ジ ン.......... 7-1 テ ン ポ ラ リ テーブル ............................ 7-14 パ ラ メ ー タ - SQL 文法要素の定義......... 3-210 パ ラ メ ー タ タ イ プ - SQL 文法要素の定義 3-210 パ ラ メ ー タ タ イ プ (文法要素の定義) ... 3-50 パ ラ メ ー タ タ イ プ名 - SQL 文法要素の定義 3210 パ ラ メ ー タ タ イ プ名 (文法要素の定義) 3-50 パ ラ メ ー タ (文法要素の定義)................. 3-50 パ ラ メ ー タ 名 - SQL 文法要素の定義..... 3-210 パラ メ ータ リ ス ト ス ト ア ド プ ロ シージ ャ の引数の数 2-2, 3-53 範囲 デー タ 型 .................................................. A-4 ひ 比較演算子 - SQL 文法要素の定義......... 3-208 比較演算子 (文法要素の定義)............... 3-154 20 索引 引数 ス ト ア ド プ ロ シージ ャ のパ ラ メ ー タ リ ス ト 内の数 .......................................... 2-2, 3-53 非相関サブ ク エ リ .................................... 3-198 日付 INSERT ス テー ト メ ン ト で追加 ........ 3-122 TIMESTAMP デー タ 型 使用 し ない理由................................ A-29 現在値の挿入 ................................ 3-122, 5-9 サポー ト さ れてい る 関数 ....................... 5-9 サポー ト し てい る 書式 ............ 3-161, 3-221 リ テ ラ ル書式 ............................ 3-161, 3-221 リ テ ラ ル値 ........................................... 3-221 列値の挿入ま たは更新 ............ 3-161, 3-221 日付演算 サポー ト し てい る 文法 ............ 3-162, 3-222 日付時刻列のデフ ォ ル ト 値 と し ての式 .. 3-87 サポートされているデータ型および制約 3-85 使用 コ ン テ キ ス ト ................................. 3-87 日付 リ テ ラ ル サポー ト し てい る 文法 ....................... 3-161 ビ ッ ト 演算子 「演算子」 を参照 ビ ッ ト 演算の真理値表 ................................ 4-9 ビ ュー TOP 句に含まれ る .............................. 3-167 削除 ........................................................... 1-9 作成 ........................................................... 1-9 シ ス テ ム テーブル (X$View) ............ C-12 デー タ ベース ......................................... 3-77 ビ ュ ー名 - SQL 文法要素の定義 ............ 3-213 ふ フ ァ イル 圧縮 , SQL に よ る 指定 ......................... 3-69 テ ン ポ ラ リ の ロ ケーシ ョ ン ............... 3-219 フ ェ ッ チ方向 - SQL 文法要素の定義 .... 3-209 フ ェ ッ チ方向 (文法要素の定義) ............ 3-52 符号値 正の NUMERIC デー タ 型用................. A-25 プ ッ シ ュダウ ン フ ィ ルタ 「テーブル フ ィ ル タ 」 を参照 付与 ア ク セ ス権 ............................................. 1-11 プ ロ シージ ャ 作成 ......................................................... 3-59 プ ロ シージ ャ 検索条件 - SQL 文法要素の定義 3-210 プ ロ シージ ャ 検索条件 (文法要素の定義) 3-52 プ ロ シージ ャ 式 - SQL 文法要素の定義 3-210 プ ロ シージ ャ 式 (文法要素の定義) ........ 3-50 プ ロ シージ ャ ス テー ト メ ン ト - SQL 文法要素 の定義.............................................. 3-210 プ ロ シージ ャ ス テー ト メ ン ト (文法要素の定 義)...................................................... 3-50 プ ロ シージ ャ 名 - SQL 文法要素の定義 3-211 プ ロ シージ ャ 名 (文法要素の定義) ........ 3-50 文法要素の定義 ........................................ 3-208 before/after .............................................. 3-74 CASE....................................................... 3-27 case 値式 ............................................... 3-155 COALESCE ............................................ 3-34 order-by 式 ............................................ 3-153 sqlstate 値 ................................................ 3-52 top 句..................................................... 3-153 values 句................................................ 3-121 値 ........................................................... 3-154 外部結合 タ イ プ ................................... 3-153 外部結合の定義 ................................... 3-153 ク エ リ スペ ッ ク .................................. 3-153 結合 タ イ プ ........................................... 3-153 結合定義 ............................................... 3-153 検索条件 ............................................... 3-153 コ レーシ ョ ン名 ..................................... 3-63 サブ ク エ リ 式 ....................................... 3-155 参照ア ク シ ョ ン ..................................... 3-63 参照エ イ リ ア ス ..................................... 3-74 参照更新ア ク シ ョ ン ............................. 3-63 参照削除ア ク シ ョ ン ............................. 3-63 式 ................................................ 3-152, 3-154 式ま たはサブ ク エ リ ........................... 3-154 述部 ....................................................... 3-154 ス カ ラ 関数 ........................................... 3-155 制約名 ..................................................... 3-63 セ ッ ト 関数 ........................................... 3-155 選択項目 ............................................... 3-153 選択 リ ス ト ................................ 3-152, 3-153 挿入 / 更新 / 削除................................... 3-74 デー タ 型 ................................................. 3-62 テーブル参照 ............................ 3-152, 3-153 テーブル制約 ......................................... 3-63 テーブル制約定義................................. 3-63 テーブル名 ............................................. 3-62 テーブル要素 ......................................... 3-62 デフ ォ ル ト 値の式 ................................. 3-62 ト ラ ンザ ク シ ョ ン ス テー ト メ ン ト .... 3-51 ト リ ガ名 ................................................. 3-74 パ ラ メ ー タ ............................................. 3-50 パ ラ メ ー タ タ イ プ ................................ 3-50 パ ラ メ ー タ タ イ プ名 ............................ 3-50 比較演算子 ........................................... 3-154 ビ ュ ー名 ................................................. 3-77 フ ェ ッ チ方向 ......................................... 3-52 プ ロ シージ ャ 検索条件 ......................... 3-52 プ ロ シージ ャ 式 ..................................... 3-50 プ ロ シージ ャ ス テー ト メ ン ト ............ 3-50 プ ロ シージ ャ 名 ..................................... 3-50 変更オプシ ョ ン ....................................... 3-8 変更オプシ ョ ン リ ス ト .......................... 3-8 リ テ ラ ル ................................................. 3-63 列制約 ..................................................... 3-63 列定義 ..................................................... 3-62 列名 ......................................................... 3-62 分離 さ れた イ ンデ ッ ク ス , 定義 ............... 3-48 へ 並行性 ........................................................ 3-224 ページ サイズ SQL に よ る 指定 ............................... 3-69 変換 デー タ を別の型へ ................................. 5-18 変更 シ ス テ ム テーブル .................................. C-2 デー タ ス テー ト メ ン ト .................................. 1-8 変更オプシ ョ ン - SQL 文法要素の定義 3-208 変更オプシ ョ ン (文法要素の定義) .......... 3-8 変更オプシ ョ ン リ ス ト - SQL 文法要素の定義 3-208 変更オプシ ョ ン リ ス ト (文法要素の定義) 3-8 変数 グ ロ ーバル , 「グ ロ ーバル変数」 を参照 現時刻の追加 ....................................... 3-122 現日付の追加 ....................................... 3-122 ス ト ア ド プ ロ シージ ャ 内で選択項目 と し て 使用する ............................................. 3-53 タ イ ム ス タ ンプの追加 ....................... 3-122 索引 21 変数名 - SQL 文法要素の定義................. 3-213 ベン ダ文字列 LEFT OUTER JOIN ス テー ト メ ン ト . 3-128 埋め込み ............................................... 3-127 ほ 方法 カー ソ ル内をループす る ..................... 3-59 保護 さ れたデー タ ベース Btrieve オーナー ネーム ....................... 1-10 む 無限 表現 ........................................................ A-13 め メ タ デー タ Schema Executor ...................................... D-8 も 文字 変換 OEM か ら ANSI へ......................... 3-227 ワ イ ル ド カー ド 文字のエ ス ケープ ... 3-134 文字列 SQL ス テー ト メ ン ト 内の引用文字列の最大 サ イ ズ ................................................... 2-3 サポー ト さ れてい る 関数 ....................... 5-2 リ テ ラ ル値 ........................................... 3-220 ゆ 有効化 セキ ュ リ テ ィ ......................................... 1-10 有効値の範囲 デー タ 型 .................................................. A-4 ユーザー Master .................................................... 3-111 ユーザー / グループ名 - SQL 文法要素の定義 3213 ユーザー定義関数 削除 ........................................................... 1-5 作成 ........................................................... 1-5 制限 ......................................................... 3-40 呼び出 し ................................................. 3-42 22 索引 ユーザー と ユーザー グループ , 「ユーザー グ ループ」 を参照 ユーザー パ ス ワー ド - SQL 文法要素の定義 3213 ユーザー名 最大長 ....................................................... 2-4 ユーザー名 - SQL 文法要素の定義 ........ 3-213 優先順位 TOP 対 SET ROWCOUNT ....... 3-167, 3-178 よ 呼び出 し 引数 - SQL 文法要素の定義 .... 3-208 予約語 ............................................................ B-1 ABORT ..................................................... B-2 ADD .......................................................... B-2 AFTER ...................................................... B-2 ALL ........................................................... B-2 ALTER ...................................................... B-2 AND .......................................................... B-2 ANY .......................................................... B-2 AS.............................................................. B-2 ASC ........................................................... B-2 ATOMIC ................................................... B-2 AVG .......................................................... B-2 BEFORE.................................................... B-2 BEGIN/BEGINS ....................................... B-2 BETWEEN................................................ B-2 BY ............................................................. B-2 CALL......................................................... B-2 CASCADE ................................................ B-2 CASE......................................................... B-2 CAST......................................................... B-2 CHECK ..................................................... B-2 CLOSE ...................................................... B-2 COALESCE .............................................. B-2 COLLATE................................................. B-2 COLUMN.................................................. B-2 COMMIT................................................... B-2 COMMITTED........................................... B-2 CONSTRAINT.......................................... B-2 CONVERT ................................................ B-2 COUNT ..................................................... B-2 CREATE ................................................... B-2 CREATETAB ........................................... B-2 CROSS ...................................................... B-2 CS .............................................................. B-2 CURDATE ................................................ CURRENT ................................................ CURSOR ................................................... CURTIME ................................................. DCOMPRESS ........................................... DECIMALSEPARATORCOMMA.......... DECLARE................................................. DEFAULT................................................. DELETE.................................................... DENY........................................................ DESC......................................................... DIAGNOSTICS ........................................ DICTIONARY .......................................... DISTINCT................................................. DO ............................................................. EACH ........................................................ ELSE ......................................................... END........................................................... EX.............................................................. EXEC......................................................... EXECUTE................................................. EXISTS ..................................................... FETCH ...................................................... FN.............................................................. FOR ........................................................... FOREIGN.................................................. FROM........................................................ FULL ......................................................... FUNCTION............................................... GRANT ..................................................... GROUP ..................................................... HANDLER................................................ HAVING ................................................... IF ............................................................... IN............................................................... INDEX....................................................... INNER....................................................... INOUT....................................................... INSERT ..................................................... INTERNAL ............................................... INTO ......................................................... IS ............................................................... ISOLATION.............................................. JOIN .......................................................... KEY........................................................... LEAVE...................................................... B-2 B-2 B-2 B-2 B-3 B-3 B-3 B-3 B-3 B-3 B-3 B-3 B-3 B-3 B-3 B-3 B-3 B-3 B-3 B-3 B-3 B-3 B-3 B-3 B-3 B-3 B-3 B-3 B-3 B-3 B-3 B-3 B-3 B-3 B-3 B-3 B-3 B-3 B-3 B-3 B-3 B-3 B-3 B-4 B-4 B-4 LEFT ......................................................... B-4 LEGACYOWNERNAME ........................ B-4 LEVEL ...................................................... B-4 LIKE.......................................................... B-4 LOGIN....................................................... B-4 LOOP......................................................... B-4 MAX.......................................................... B-4 MIN ........................................................... B-4 MODIFIABLE .......................................... B-4 MODIFY ................................................... B-4 NEW.......................................................... B-4 NEXT ........................................................ B-4 NO ............................................................. B-4 NOT........................................................... B-4 NOW ......................................................... B-4 NULL ........................................................ B-4 OF.............................................................. B-4 OFF............................................................ B-4 OLD........................................................... B-4 ON ............................................................. B-4 ONLY........................................................ B-4 OPEN......................................................... B-4 OR ............................................................. B-4 ORDER ..................................................... B-4 OUT........................................................... B-4 OUTER...................................................... B-4 OWNER .................................................... B-4 PAGESIZE ................................................ B-4 PRIMARY................................................. B-4 PRINT ....................................................... B-4 PROCEDURE ........................................... B-4 PUBLIC..................................................... B-4 READ ........................................................ B-5 REFERENCES.......................................... B-5 REFERENCING ....................................... B-5 RELEASE ................................................. B-5 REPEAT.................................................... B-5 REPEATABLE ......................................... B-5 REPLACE ................................................. B-5 RESTRICT ................................................ B-5 RETURN ................................................... B-5 RETURNS................................................. B-5 REVOKE................................................... B-5 RIGHT....................................................... B-5 ROLLBACK ............................................. B-5 ROW.......................................................... B-5 索引 23 ROWCOUNT ............................................ B-5 SAVEPOINT ............................................. B-5 SECURITY................................................ B-5 SELECT..................................................... B-5 SERIALIZABLE ....................................... B-5 SET ............................................................ B-5 SIGNAL..................................................... B-5 SIZE........................................................... B-5 SQLSTATE ............................................... B-5 SSP_EXPR ................................................ B-5 SSP_PRED ................................................ B-5 START....................................................... B-5 SUM........................................................... B-5 SVBEGIN.................................................. B-5 SVEND...................................................... B-5 T................................................................. B-5 TABLE ...................................................... B-5 THEN......................................................... B-5 TO .............................................................. B-5 TOP............................................................ B-5 TRANSACTION ....................................... B-5 TRIGGER.................................................. B-5 TRIGGERSTAMPMISC........................... B-5 TRUEBITCREATE................................... B-5 TRUENULLCREATE............................... B-5 TS............................................................... B-5 UNCOMMITTED ..................................... B-5 UNION ...................................................... B-5 UNIQUE .................................................... B-5 UNTIL ....................................................... B-5 UPDATE ................................................... B-5 USER ......................................................... B-5 USING ....................................................... B-5 VALUES ................................................... B-5 VIEW......................................................... B-5 WHEN ....................................................... B-6 WHERE ..................................................... B-6 WHILE ...................................................... B-6 WITH......................................................... B-6 WORK ....................................................... B-6 WRITE....................................................... B-6 削除 ........................................................... B-3 「使用を避け る 語句」 を参照 よ り 大 き い (>) 演算子 .......................... 3-153 よ り 小 さ い (<) 演算子 .......................... 3-153 24 索引 ら ラ ベル名 - SQL 文法要素の定義 ............ 3-209 り リ テ ラ ル - SQL 文法要素の定義 ............ 3-209 リ テ ラ ル値 時刻 ....................................................... 3-221 タ イ ム ス タ ンプ ................................... 3-222 日付 ....................................................... 3-221 文字列 ................................................... 3-220 最大長 よ り 長いデー タ の入力...... 3-123 リ テ ラ ル (文法要素の定義) .................... 3-63 リ リ ース ス テー ト メ ン ト - SQL 文法要素の定義 3-212 リ レーシ ョ ナル イ ンデ ッ ク ス定義 Btrieve イ ンデ ッ ク ス .......... 3-11, 3-46, 3-68 リ レーシ ョ ナル セキ ュ リ テ ィ ............... 3-111 れ 列 最大 SELECT リ ス ト 内の最大数 .............. 2-3 サ イ ズ.................................................. 2-2 数値...................................................... 2-2 テーブル内での数.............................. 2-2 ト リ ガで使用可能な数...................... 2-2 名前の長 さ .......................................... 2-2 シ ス テ ム テーブル (X$Field)............... C-5 属性 シ ス テ ム テーブル (X$Attrib) ...... C-11 定義 作成.................................................... 3-62 変更...................................................... 3-8 ト リ ガで使用可能な数 ......................... 3-53 列制約 - SQL 文法要素の定義 ................ 3-208 列制約定義 - SQL 文法要素の定義 ........ 3-208 列制約 (文法要素の定義) ........................ 3-63 列定義 - SQL 文法要素の定義 ................ 3-208 列定義 (文法要素の定義) ........................ 3-62 列名 - SQL 文法要素の定義 .................... 3-208 列名 (文法要素の定義) ............................ 3-62 レ プ リ ケーシ ョ ン SET TIME ZONE ................................. 3-181 ろ ロ ーカル タ イ ム ゾーンの設定.......................... 3-181 ロ ールバ ッ ク ス テー ト メ ン ト - SQL 文法要素 の定義.............................................. 3-212 ロ ケール固有の動作 小数点の記号のカ ン マ デー タ 入力...................................... 3-224 デー タ 表示........................... 3-169, 3-172 わ ワ イ ル ド カー ド 文字 あ ら ゆ る 文字数 ................................... 3-134 エ ス ケープ文字 ................................... 3-134 単一文字 ............................................... 3-134 索引 25 26 索引