...

IBM Informix SQL リファレンス・ガイド リファレンス・ガイド (

by user

on
Category: Documents
111

views

Report

Comments

Transcript

IBM Informix SQL リファレンス・ガイド リファレンス・ガイド (
IBM Informix
SQL
リファレンス・ガイド (下巻
(下巻)
下巻)
バージョン 5.2
Part No. CT1YKJA
GB88-8617-00
( 英文原典:G251-0405-00)
お願い
本書および本書で紹介する製品をご使用になる前に、特記事項に記載されている情報をお読みくださ
い。
本マニュアルに関するご意見やご感想は、次の URL からお送りください。今後の参考にさせていただきま
す。
http://www.ibm.com/jp/manuals/main/mail.html
なお、日本 IBM の発行のマニュアルはインターネット経由でもご購入いただけます。詳しくは
http://www.ibm.com/jp/manuals/ の「ご注文について」をご覧ください。
(URL は変更になる場合があります)
原典 :
G251-0405-00
IBM Informix
Guide for SQL
発行 :
日本アイ・ビー・エム株式会社
担当 :
ナショナル・ランゲージ・サポート
第 1 刷 2002.12
© Copyright International Business Machines Corporation 1996, 2002. All rights reserved.
Translation@Copyright IBM Japan 2002
目次
目次
概要
はじめに . . . . . . . . . . . . . . . . . . . . .
本書について . . . . . . . . . . . . . . . . . . . .
本書の構成 . . . . . . . . . . . . . . . . . . . .
SQL を使用する IBM Informix 製品 . . . . . . . . . . . .
本書で扱う製品 . . . . . . . . . . . . . . . . . . .
デモンストレーション・データベース . . . . . . . . . . .
IBM Informix OnLine でのデモンストレーション・データ
ベースの作成 . . . . . . . . . . . .
IBM Informix SE でのデモンストレーション・データベース
の作成 . . . . . . . . . . . . . .
IBM Informix Server 製品、バージョン 5.x の新規機能 . . . . . .
ドキュメント規則 . . . . . . . . . . . . . . . . . .
文字の表記 . . . . . . . . . . . . . . .
構文規則 . . . . . . . . . . . . . . . .
コード規則の例 . . . . . . . . . . . . . .
関連マニュアル . . . . . . . . . . . . . . . . . . .
オンライン・マニュアル . . . . . . . . . . .
エラー・メッセージ・ファイル . . . . . . . . .
ドキュメント・ノート、リリース・ノート、マシン・ノート .
業界標準の準拠 . . . . . . . . . . . . . . . . . . .
資料・製品についてのご意見 . . . . . . . . . . . . . .
第 1 章
3
3
4
5
5
6
7
8
9
11
12
13
18
19
20
21
23
24
24
stores5 データベース
本章の内容 . .
表の構造 . . .
customer 表.
orders 表 .
items 表. .
stock 表 . .
. . .
. . .
. . .
. . .
. . .
. . .
.
.
.
.
.
.
. .
. .
.
.
.
.
.
.
.
.
.
.
. .
. .
. .
. .
. .
. .
.
.
.
.
.
.
. . .
. . .
. .
. .
. .
. .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. .
. .
.
.
.
.
1-3
1-4
1-5
1-6
1-6
1-8
catalog 表 . . . . . .
cust_calls 表 . . . . .
call_type 表 . . . . .
manufact 表 . . . . .
state 表 . . . . . .
stores5 データベース・マップ .
主キーと外部キーの関係 . .
customer 表と orders 表 . .
orders 表と items 表 . . .
items 表と stock 表 . . .
stock 表と catalog 表. . .
stock 表と manufact 表 . .
cust_calls 表と customer 表 .
call_type 表と cust_calls 表 .
state 表と customer 表 . .
stores5 データベース内のデータ
第 2 章
.
.
.
.
.
.
.
.
.
.
. . .
. . .
. .
. .
. .
. .
. .
. .
. .
. .
. . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . . .
. . . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. .
. .
.
.
.
.
.
.
.
.
. .
1-9
1-10
1-10
1-11
1-11
1-11
1-13
1-14
1-15
1-16
1-17
1-18
1-19
1-20
1-21
1-21
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
2-3
2-4
2-8
2-9
2-9
2-10
2-11
2-11
2-12
2-13
2-16
2-17
2-18
2-18
2-22
2-24
2-25
2-26
2-27
2-28
2-28
2-29
システム・カタログ
本章の内容 . . . . . . . . . . .
システム・カタログの使用 . . . . . .
システム・カタログへのアクセス .
システム・カタログ・データの更新 .
システム・カタログの構造 . . . . . .
SYSBLOBS . . . . . . . . . .
SYSCHECKS . . . . . . . . .
SYSCOLAUTH . . . . . . . .
SYSCOLDEPEND. . . . . . . .
SYSCOLUMNS . . . . . . . .
SYSCONSTRAINTS . . . . . . .
SYSDEFAULTS . . . . . . . .
SYSDEPEND . . . . . . . . .
SYSINDEXES . . . . . . . . .
SYSOPCLSTR . . . . . . . . .
SYSPROCAUTH . . . . . . . .
SYSPROCBODY . . . . . . . .
SYSPROCEDURES . . . . . . .
SYSPROCPLAN . . . . . . . .
SYSREFERENCES . . . . . . .
SYSSYNONYMS . . . . . . . .
SYSSYNTABLE . . . . . . . .
iv IBM Informix SQL リファレンス・ガイド
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. . .
. . .
. .
. .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
SYSTABAUTH
SYSTABLES .
SYSUSERS .
SYSVIEWS .
. . . . . . . . . . . . . . . . . . 2-30
. . . . . . . . . . . . . . . . . . 2-31
. . . . . . . . . . . . . . . . . . 2-34
. . . . . . . . . . . . . . . . . . 2-34
システム・カタログ・マップ
第 3 章
. .
.
. .
.
. .
. .
.
. .
. 2-35
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
データ型
本章の内容 . . . . . . .
データベースのデータ型 . .
BYTE . . . . . . .
CHAR(n) . . . . . .
CHARACTER(n) . . .
DATE . . . . . . .
DATETIME . . . . .
DEC . . . . . . . .
DECIMAL[(p,s)] . . . .
DOUBLE PRECISION(n) .
FLOAT(n) . . . . . .
INT . . . . . . . .
INTEGER . . . . . .
INTERVAL . . . . .
MONEY(p,s) . . . . .
NUMERIC(p,s) . . . .
REAL . . . . . . .
SERIAL(n) . . . . .
SMALLFLOAT . . . .
SMALLINT . . . . .
TEXT . . . . . . .
VARCHAR(m,r) . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3-3
3-4
3-5
3-6
3-7
3-7
3-8
3-11
3-11
3-12
3-12
3-12
3-13
3-13
3-17
3-17
3-17
3-17
3-18
3-19
3-19
3-21
データ型変換 . . . . . . . . . . . . . . . . . . . . 3-22
数値から数値への変換 . . . . . . . . . . . . 3-23
数値と文字 (CHAR) 型との間の変換 . . . . . . . . 3-23
DATE と DATETIME 間の変換 . . . . . . . . . . 3-24
DATE、DATETIME、および INTERVAL を使用した演算の範囲 . . 3-24
DATETIME 値の操作 . . . . . . . . . . . . . 3-26
INTERVAL 値を持つ DATETIME の操作 . . . . . . . 3-26
DATETIME 値および INTERVAL 値を持つ DATE の操作. . . 3-27
INTERVAL 値の操作 . . . . . . . . . . . . . 3-29
INTERVAL 値の乗算または除算. . . . . . . . . . 3-30
目次
v
第 4 章
第 5 章
環境変数
本章の内容 . . . . . .
環境変数の設定 . . . . .
Informix 環境変数 . . . .
DBANSIWARN . . .
DBDATE . . . . . .
DBDELIMITER . . .
DBEDIT . . . . . .
DBFORMAT . . . .
DBLANG . . . . .
DBMENU . . . . .
DBMONEY . . . . .
DBNETTYPE . . . .
DBPATH . . . . . .
DBPRINT . . . . .
DBREMOTECMD. . .
DBSRC . . . . . .
DBTEMP . . . . .
DBTIME . . . . . .
INFORMIXCOB . . .
INFORMIXCOBDIR . .
INFORMIXCOBSTORE .
INFORMIXCOBTYPE .
INFORMIXDIR . . .
INFORMIXONLINEDIR
INFORMIXTERM. . .
NOSORTINDEX . . .
SQLEXEC . . . . .
SQLRM . . . . . .
SQLRMDIR . . . . .
TBCONFIG . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4-3
4-4
4-5
4-7
4-8
4-9
4-10
4-10
4-11
4-12
4-12
4-13
4-14
4-15
4-16
4-16
4-17
4-18
4-20
4-20
4-21
4-21
4-22
4-23
4-23
4-24
4-25
4-26
4-27
4-27
UNIX 環境変数 .
PATH . . .
TERM. . .
TERMCAP .
TERMINFO .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4-28
4-28
4-29
4-30
4-30
. .
.
. .
.
. .
. .
.
. .
5-3
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
SQLCA を使用したエラー処理
本章の内容
.
.
vi IBM Informix SQL リファレンス・ガイド
. .
.
. .
IBM Informix 4GL 内の SQLCA レコード . . . .
IBM Informix ESQL/C 内の sqlca 構造体 . . . . .
IBM Informix ESQL/COBOL 内の SQLCA レコード .
第 6 章
.
.
.
. .
. .
. .
. 5-5
. 5-7
. 5-10
記述子の使用
本章の内容 . . . . . . . . . . . . . . .
ESQL/C のシステム記述子領域および sqlda 構造体 .
システム記述子領域の使用 . . . . . .
sqlda 構造体へのポインターの使用 . . . .
ESQL/COBOL でのシステム記述子領域 . . . . .
システム記述子領域の使用 . . . . . .
第 7 章
. .
. .
. .
. . .
. . .
. . .
. . .
. . .
. . .
. . . 6-3
. . . 6-4
. .
6-5
. .
6-9
. . . 6-13
. . 6-13
構文
本章の内容 . . . . . . . .
SQL 文 . . . . . . . . .
ALLOCATE DESCRIPTOR .
ALTER INDEX . . . . .
ALTER TABLE . . . . .
BEGIN WORK . . . . .
CHECK TABLE . . . . .
CLOSE . . . . . . .
CLOSE DATABASE . . .
COMMIT WORK . . . .
CREATE AUDIT . . . .
CREATE DATABASE . . .
CREATE INDEX . . . .
CREATE PROCEDURE . .
CREATE PROCEDURE FROM
CREATE SCHEMA . . . .
CREATE SYNONYM . . .
CREATE TABLE . . . .
CREATE VIEW . . . . .
DATABASE . . . . . .
DEALLOCATE DESCRIPTOR
DECLARE . . . . . .
DELETE . . . . . . .
DESCRIBE . . . . . .
DROP AUDIT . . . . .
DROP DATABASE . . . .
DROP INDEX . . . . .
DROP PROCEDURE . . .
DROP SYNONYM . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
7-9
7-9
7-13
7-17
7-20
7-37
7-39
7-41
7-45
7-47
7-48
7-50
7-55
7-59
7-68
7-69
7-71
7-76
7-98
7-102
7-106
7-108
7-124
7-127
7-133
7-134
7-136
7-138
7-139
目次
vii
DROP TABLE . . . . . . .
DROP VIEW . . . . . . .
EXECUTE . . . . . . . .
EXECUTE IMMEDIATE . . .
EXECUTE PROCEDURE . . .
FETCH . . . . . . . . .
FLUSH . . . . . . . . .
FREE . . . . . . . . . .
GET DESCRIPTOR . . . . .
GRANT . . . . . . . . .
INFO . . . . . . . . . .
INSERT . . . . . . . . .
LOAD. . . . . . . . . .
LOCK TABLE . . . . . . .
OPEN . . . . . . . . . .
OUTPUT . . . . . . . . .
PREPARE . . . . . . . .
PUT . . . . . . . . . .
RECOVER TABLE . . . . .
RENAME COLUMN
. . . .
RENAME TABLE . . . . .
REPAIR TABLE . . . . . .
REVOKE . . . . . . . .
ROLLBACK WORK . . . . .
ROLLFORWARD DATABASE .
SELECT . . . . . . . . .
SET CONSTRAINTS . . . . .
SET DEBUG FILE TO . . . .
SET DESCRIPTOR . . . . .
SET EXPLAIN . . . . . . .
SET ISOLATION . . . . . .
SET LOCK MODE . . . . .
SET LOG . . . . . . . .
SET OPTIMIZATION. . . . .
START DATABASE . . . . .
UNLOAD . . . . . . . .
UNLOCK TABLE . . . . . .
UPDATE . . . . . . . . .
UPDATE STATISTICS . . . .
WHENEVER . . . . . . .
セグメント . . . . . . . . .
条件 . . . . . . . .
制約名 . . . . . . .
viii IBM Informix SQL リファレンス・ガイド
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. .
. .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
7-141
7-143
7-144
7-149
7-152
7-155
7-164
7-167
7-172
7-178
7-188
7-192
7-202
7-207
7-210
7-219
7-221
7-234
7-243
7-246
7-248
7-250
7-252
7-259
7-261
7-263
7-294
7-296
7-298
7-306
7-312
7-316
7-319
7-321
7-323
7-325
7-329
7-331
7-341
7-343
7-349
7-350
7-365
データベース名 . . . .
データ型 . . . . . .
DATETIME フィールド修飾子
式 . . . . . . . .
識別子 . . . . . . .
インデックス名 . . . .
INTERVAL フィールド修飾子
リテラル DATETIME . . . .
リテラル INTERVAL . . . .
リテラル番号 . . . . .
プロシージャー名 . . . .
引用符付きストリング . .
関係演算子 . . . . . .
シノニム名 . . . . . . .
表名 . . . . . . . . .
ビュー名 . . . . . .
第 8 章
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. .
. .
.
.
.
.
. .
. .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. .
. .
.
7-367
7-370
7-373
7-375
7-403
7-417
7-419
7-421
7-424
7-427
7-429
7-431
7-434
7-438
7-440
7-444
ストアード・プロシージャーおよび SPL
概要 . . . . . . . . . . . . . . . . . . .
ストアード・プロシージャーと SPL の概要 . . . . .
ストアード・プロシージャーの機能 . . . . .
SQL とストアード・プロシージャーの関係 . . .
ストアード・プロシージャーの作成と使用 . . . . .
DB-Access の使用によるプロシージャーの作成 . .
埋め込み言語製品の使用によるプロシージャーの作成
プロシージャーのコメント化とドキュメント化 . .
コンパイル時エラーの診断 . . . . . . . .
コンパイル時警告の表示 . . . . . . . . .
テキストまたはマニュアルの生成 . . . . . .
プロシージャーの実行 . . . . . . . . .
プロシージャーのデバッグ . . . . . . . .
プロシージャーの再作成 . . . . . . . . .
ストアード・プロシージャーに対するアクセス権 . . .
作成時のアクセス権 . . . . . . . . . .
実行時のアクセス権 . . . . . . . . . .
アクセス権の取り消し . . . . . . . . .
変数と式 . . . . . . . . . . . . . . . . .
変数 . . . . . . . . . . . . . . .
式 . . . . . . . . . . . . . . .
プログラムの流れの制御 . . . . . . . . . . . .
分岐 . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
目次
8-5
8-5
8-6
8-6
8-7
8-7
8-8
8-8
8-9
8-10
8-11
8-11
8-14
8-16
8-16
8-17
8-17
8-19
8-19
8-19
8-23
8-25
8-26
ix
ループ . . . . . . .
関数処理 . . . . . . .
プロシージャーとの情報のやり取り
結果の戻り . . . . . .
例外処理 . . . . . . . . . .
エラーのトラップと復旧 . .
ON EXCEPTION 文の制御範囲
ユーザー生成の例外 . . .
SPL 文の構文 . . . . . . . .
CALL . . . . . . . . . .
CONTINUE . . . . . . . .
DEFINE . . . . . . . . .
EXIT . . . . . . . . . .
FOR . . . . . . . . . .
FOREACH . . . . . . . .
IF . . . . . . . . . . .
LET . . . . . . . . . .
ON EXCEPTION . . . . . .
RAISE EXCEPTION . . . . .
RETURN. . . . . . . . .
SYSTEM . . . . . . . .
TRACE . . . . . . . . .
WHILE . . . . . . . . .
付録 A
特記事項
用語集
索引
x IBM Informix SQL リファレンス・ガイド
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. . .
. . .
. . . .
. . .
. . . .
. . .
. . .
. . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
8-26
8-28
8-29
8-29
8-32
8-32
8-33
8-34
8-36
8-37
8-40
8-41
8-49
8-51
8-55
8-59
8-63
8-66
8-72
8-74
8-77
8-79
8-83
PREPARE
PREPARE
目的
PREPARE 文は、実行時に、4GL または IBM Informix ESQL プログラムの SQL
文に関する実行計画を構文解析、妥当性検査、および生成するために使用
します。
構文
I4GL
ESQL
< 文識別子 >
PREPARE
ESQL
< 文識別子
変数 >
FROM
引用符付き
ストリング
7-431
ページ
< 変数名 >
< 文識別子 > SQL 文識別子です。< 文識別子 > は、どの識別子とも同じ
ルールに従っていなければなりません (7-403 ページの識別子
セグメントを参照 )。
< 文識別子
変数 >
SQL 文識別子を含む埋め込み言語文字変数の名前です。< 識
別子変数 > とそれに含まれている識別子は、どの識別子とも
同じルールに従っていなければなりません (7-403 ページの識
別子セグメントを参照 )。
< 変数名 >
PREPARE 文で処理する SQL 文が含まれている IBM Informix
4GL プログラム変数または IBM Informix ESQL ホスト変数の名
前です。
PREPARE 文における引用符付きストリングの最大長は 2048 バイトです。
構文 7-221
使用法
使用法
PREPARE 文を使用すれば、実行時にユーザー・プログラムで SQL 文のテキ
ストをアセンブルし、それを実行可能にすることができます。SQL のこの
動的フォームは、次の 3 つのステップで実行されます。
1.
PREPARE 文は、入力された文テキストを、引用符付きストリング
として、または文字変数内に格納されたテキストとして受け入れま
す。文テキストには、文を実行するときに定義する値を表すため
の疑問符 ( ?) 位置指定値を含めることができます。
2.
EXECUTE または OPEN 文は、必要な入力値を提供し、PREPARE 文
で処理された文を 1 回または複数回実行することができます。
3.
PREPARE 文で処理された文に割り当てられたリソースは、後で
FREE 文を使用して解放することができます。
単一プログラム内の、PREPARE 文で処理されたオブジェクトの数は、利用
できるメモリーによって制限されます。この数には、PREPARE 文で指定さ
れた 文識別子と、SELECT または INSERT 文を組み入れたカーソル宣言の両
方が含まれています。制限を超えないようにするには、FREE 文を使用して
いくつかの文またはカーソルを解放してください。
「文識別子」という用語は、文識別子 または文識別子変数 を意味していま
す。
文識別子
PREPARE 文は、文テキストをデータベース・サーバーに送信し、文テキス
トはそこで分析されます。文テキストにエラーが含まれていれば、その文
テキストは内部フォームに変換されます。こうして変換された文は、後で
実行するために、PREPARE 文が割り当てたデータ構造体に格納されます。
この構造体は、文識別子 という名前を持っています。後続の SQL 文は、こ
の文識別子 を使用して文を参照します。
後続の FREE 文は、文に割り当てられたリソースを解放します。ユーザー
は、データベース・サーバー・リソースを解放したら、文を再度 PREPARE
文で処理するまで、DECLARE カーソルまたは EXECUTE 文で 文識別子を使
用することはできません。
7-222 IBM Informix SQL リファレンス・ガイド
使用法
プログラムは、1 つ以上のソース・コード・ファイルからなっていること
があります。デフォルトでは、文識別子の範囲はプログラムに対してグ
ローバルになっています。つまり、1 つのファイルで準備した文識別子は
他のファイルからも参照できます。
複数ファイルのプログラムで、文識別子の範囲をそれが準備されるファイ
ルに限定したい場合は、-local コマンド行オプションを指定して、すべての
ファイルをプリプロセッサー処理する必要があります。-local オプションを
指定してプリプロセッサーで処理する場合の詳細説明、制限事項、および
パフォーマンスの問題については、ESQL 製品マニュアルを参照してくださ
い。
文識別子の解放
文識別子は、1 つまたは一連の SQL 文を同時に表すことができます。特定
の文識別子を別の SQL 文テキストにバインドしたい場合は、既存の文識別
子を指定して、新規の PREPARE 文を実行することができます。
ESQL
PREPARE 文では動的文識別子名がサポートされますので、文識別子を識別
子として、またはホスト文字ストリング変数として準備することができま
す。次の 2 つの例の場合、最初の例は、埋め込み言語変数として準備した
文識別子を示し、2 番目の例は文字ストリング定数として準備した文識別
子を示しています。
図 7-61
IBM Informix ESQL/C における文識別子の準備
strcpy (stmtid, "query2");
$ PREPARE $stmtid FROM
"SELECT * FROM customer";
$ PREPARE query2 FROM
"SELECT * FROM customer";
構文 7-223
使用法
図 7-62
IBM Informix ESQL/COBOL における文識別子の準備
MOVE "QUERY_2" TO STMTID.
EXEC SQL
PREPARE :STMTID FROM
"SELECT * FROM CUSTOMER"
END-EXEC.
EXEC SQL
PREPARE QUERY_2 FROM
"SELECT * FROM CUSTOMER"
END-EXEC.
< 文識別子変数 > は、CHARACTER データ型でなければなりません。C で
は、この文識別子変数は $char として定義する必要があります。COBOL で
は、< 識別子変数 > は、標準 CHARACTER 型として定義する必要がありま
す。♦
文テキスト
PREPARE 文は、文テキストを引用符付きストリングとして、またはプログ
ラム変数に格納されたテキストとして受け取ることができます。文テキス
トには次の制限が適用されます。
!
テキストには、SQL 文のみを含めることができます。テキストに
は、ホストプログラム言語からの文やコメントを含めることはでき
ません。
“--” ( 二重ハイフン ) が前に付いているコメント、または “{ }” ( 中
括弧 ) で囲まれているコメントは、SQL で標準であり、文テキスト
で使用できます。コメントは行の終わりまたは文の終わりで終了し
ます。
!
テキストには、単一の SQL 文、セミコロンで分離された文のシー
ケンスのいずれかを含めることができます。
!
ホスト言語変数の名前は、PREPARE 文で処理された文テキストで
は認識されません。使用できる識別子は、表名や列名など、データ
ベースで定義された名前だけです。したがって、INTO 節を含む
SELECT 文を PREPARE 文で処理することはできません。それは、
INTO 節にはホスト言語変数が必要だからです。
? を位置指定値として使用して、文を実行するときに、どこにデー
タを提供するかを指示します。
7-224 IBM Informix SQL リファレンス・ガイド
使用法
ESQL
!
ドル記号、セミコロン、EXEC SQL という語などの、埋め込み SQL
文プレフィックスや終了文字をテキストにインクルードすることは
できません。♦
IBM Informix 4GL の PREPARE 文の例を示します。
図 7-63
IBM Informix 4GL におけるサンプル PREPARE 文
PREPARE new_cust FROM
"INSERT INTO customer(fname,lname)",
"VALUES(?,?)"
許可される文
以下にリストされている文を除き、任意の単一 SQL 文を PREPARE 文で処
理するすることができます。
I4GL
CLOSE
EXECUTE IMMEDIATE
FREE
PUT
DECLARE
FETCH
OPEN
WHENEVER
EXECUTE
FLUSH
PREPARE
上記の文に加え、LOAD 文と UNLOAD 文も PREPARE 文で処理することはで
きません。♦
SELECT 文を PREPARE 文で処理することができます。SELECT 文に INTO
TEMP 節がインクルードされている場合は、PREPARE 文で処理された文を
EXECUTE 文で実行することができます。INTO TEMP 節がインクルードされ
ていない場合は、この文はデータ行を戻します。それらの行を取り出すに
は、DECLARE、OPEN、および FETCH カーソル文を使用してください。
PREPARE 文で処理された SELECT 文には、FOR UPDATE 節をインクルード
することができます。この節は、通常、UPDATE カーソルを作成するため
に DECLARE 文で使用されます。4GL コードのサンプル・セグメントを次に
示します。
構文 7-225
パラメーターが既知の場合の PREPARE 文による文の処理
図 7-64
IBM Informix における FOR UPDATE 節を持つ SELECT 文 4GL
PREPARE up_sel FROM
"SELECT * FROM customer ",
"WHERE customer_num between ? and ? ",
"FOR UPDATE"
DECLARE up_curs CURSOR FOR up_sel
OPEN sel_cursor USING low_cust, high_cust
PREPARE 文による複数文の処理
セミコロンで区切られた複数の文が入っているテキストで、以下の文 ( 上
記の文に加え ) は使用できません。
CLOSE DATABASE
DATABASE
SELECT
CREATE DATABASE
DROP DATABASE
START DATABASE
したがって、SELECT は、PREPARE 文による複数文の処理では使用できま
せん。一連の文を実行しているときに現行データベースをクローズさせる
文も使用できません。
パラメーターが既知の場合の PREPARE 文による文の
処理
PREPARE 文で処理された一部の文では、必要なすべての情報が、
PREPARE 文で処理する時点で分かっている場合があります。次の例は、
IBM Informix ESQL/C において、2 つの文が定数データから PREPARE 文で処
理されています。
図 7-65
IBM Informix ESQL/C における PREPARE 文による定数データからの 2 つの文の処理
sprintf(redo_st, "%s; %s",
"DROP TABLE workt1",
"CREATE TABLE workt1 (wtk serial, wtv float)" );
$PREPARE redotab FROM redo_st;
PREPARE 文で処理する前に文のすべての部分が分かっていますが、それら
はプログラム入力からも動的に引き出すことができます。この IBM Informix
4GL の例では、ユーザー入力データが SELECT 文に取り込まれ、次にこの文
が PREPARE 文で処理され、カーソルに関連付けられます。
7-226 IBM Informix SQL リファレンス・ガイド
後でパラメーターを受け取る文の PREPARE 文による処理
図 7-66
PREPARE 文による 4GL 文の処理とユーザー入力データのインクルード
DEFINE u_po LIKE orders.po_num
PROMPT "Enter p.o. number please: " FOR u_po
PREPARE sel_po FROM
"SELECT * FROM orders ",
"WHERE po_num = '", u_po, "'"
DECLARE get_po CURSOR FOR sel_po
詳細については、使用しているアプリケーション開発支援ツールのマニュ
アルを参照してください。
後でパラメーターを受け取る文の PREPARE 文による
処理
一部の文では、文を実行するたびに異なる値が挿入されるため、PREPARE
文で文を処理するときにパラメーターが分かっていない場合があります。
これらの文では、文の実行時にパラメーターを提供しなければならなく
なった場合に ? 位置指定値を使用することができます。
次の例の PREPARE 文は、? 位置指定値を使用した場合を示しています。
図 7-67
? 位置指定値を使用した場合の PREPARE 文による 4GL 文の処理
PREPARE s3 FROM
"SELECT * FROM customer WHERE state MATCHES ?"
PREPARE in1 FROM
"INSERT INTO manufact VALUES (?,?,?)"
PREPARE update2 FROM
"UPDATE customer SET zipcode = ?"
"WHERE CURRENT OF zip_cursor"
位置指定値を使用して式の値のみを提供することができます。データベー
ス名、表名、列名などの識別子を表すために、? 位置指定値を使用すること
はできません。
次の例の IBM Informix ESQL/C コード・セグメントでは、demoquery という
名前の変数に基づいて、PREPARE 文による処理を行っています。この変数
のテキストには 1 つの ? 位置指定値がインクルードされています。
PREPARE 文で処理された文はカーソルに関連付けられ、カーソルがオープ
ンされると、OPEN 文の USING 節が位置指定値の値を提供します。
構文 7-227
SQL 識別子を持つ文の PREPARE 文による処理
図 7-68
値を受け取る IBM Informix ESQL/C 文の PREPARE 文による処理
$char queryvalue [6];
$char demoquery [80];
$database stores5;
sprintf(demoquery, "%s %s",
"SELECT fname, lname FROM customer",
"WHERE lname > ? ");
$PREPARE quid FROM $demoquery;
$DECLARE democursor CURSOR FOR quid;
strcpy(queryvalue, "C");
$OPEN democursor USING $queryvalue;
USING 節は、OPEN 文 ( カーソルと関連付けられた文 ) にも、EXECUTE 文
(PREPARE 文で処理された他のすべての文 ) にも使用できます。
IBM Informix 4GL の例を次に示します。
図 7-69
PREPARE 文で処理した 4GLSELECT 文の、OPEN 文を使用した実行
DEFINE zip LIKE customer.zipcode
PREPARE zip_sel FROM
"SELECT * FROM customer WHERE zipcode MATCHES ?"
DECLARE zip_curs CURSOR FOR zip_sel
PROMPT "Enter a zipcode: " FOR zip
OPEN zip_curs USING zip
I4GL
PREPARE 文で処理した SELECT 文に? 位置指定値が含まれている場合は、
この文を FOREACH 文で実行することはできません。この場合は、OPEN、
FETCH、および CLOSE 文グループを使用してください。♦
SQL 識別子を持つ文の PREPARE 文による処理
データベース名、表名、列名などの SQL 識別子に? 位置指定値を使用する
ことはできません。この場合は、文テキストを PREPARE 文で処理すると
きに、これらの識別子をその文テキストに指定してください。
ただし、文を書き込むときにこれらの識別子が使用できない場合は、ユー
ザー入力から SQL 識別子を受け取る文を構築する必要があります。次の
4GL 例では、列名がユーザーから提供され、文テキストに挿入された後、
PREPARE 文で処理されます。この列の検索値もユーザー入力から受け取ら
れますが、このデータは USING 節を持つ文に提供されます。
7-228 IBM Informix SQL リファレンス・ガイド
SQL 識別子を持つ文の PREPARE 文による処理
図 7-70
SQL 識別子を入力として受け取る 4GL 文の PREPARE 文による処理
DEFINE column_name CHAR(30),
column_value CHAR(40),
del_str CHAR(100)
PROMPT "Enter column name: " FOR column_name
LET del_str =
"DELETE FROM customer WHERE ",
column_name CLIPPED, "=?"
PREPARE de4 FROM del_str
PROMPT "Enter search value in column ",column_name, ":"
FOR column_value
EXECUTE de4 USING column_value
次の例の IBM Informix ESQL/C プログラム・フラグメントは、表名の入力を
ユーザーに要求し、その名前を SELECT 文に使用します。表名は実行時に
なるまで分からないため、表列の数とデータ型も分かりません。したがっ
て、プログラムは、前もって各行からデータを受け取るためのホスト変数
を割り当てることができません。その代わり、このプログラム・フラグメ
ントは、文を sqlda 記述子の中に記述し、その記述子を使用して各行を取
り出します。この取り出しにより、各行は、プログラムによって動的に提
供されるメモリー格納場所に入れられます。
アクティブ・セット内のすべての行をプログラムで検索する必要がある場
合は、FETCH 文が、各行を取り出したループに入れられます。FETCH 文が
複数のデータ値 ( 列 ) を検索した場合は、その FETCH の後に別のループが
発生し、このループにより各データ値に対して何らかのアクションが取ら
れます。
図 7-71
SQL 識別子を入力として受け取る IBM Informix ESQL/C 文の PREPARE 文による処理
#include
$include
$include
$include
<stdio.h>
sqlca;
sqlda;
sqltypes;
char *malloc( );
main()
{
struct sqlda *demodesc;
$char demoselect[200];
char tablename[19];
int i;
/*
This program selects all the columns of a given tablename.
The tablename is supplied interactively. */
構文 7-229
SQL 識別子を持つ文の PREPARE 文による処理
$database stores5;
printf( "This program does a SELECT * on a table\n" );
printf( "Enter table name: " );
scanf( "%s",tablename );
sprintf( demoselect, "select * from %s", tablename );
$prepare iid from $demoselect;
$describe iid into demodesc;
/* Print what DESCRIBE returns */
for ( i = 0; i < demodesc->sqld; i++ )
prsqlda (demodesc->sqlvar + i);
/* Assign the data pointers. */
for ( i = 0; i < demodesc->sqld; i++ ) {
switch (demodesc->sqlvar[i].sqltype & SQLTYPE) {
case SQLCHAR:
demodesc->sqlvar[i].sqltype = CCHARTYPE;
demodesc->sqlvar[i].sqllen++;
demodesc->sqlvar[i].sqldata =
malloc( demodesc->sqlvar[i].sqllen );
break;;
case SQLSMINT:
case SQLINT:
case SQLSERIAL:
demodesc->sqlvar[i].sqltype = CINTTYPE;
demodesc->sqlvar[i].sqldata =
malloc( sizeof( int ) );
break;
/*
And so on for each type.
*/
}
}
/* Declare and open cursor for select . */
$prepare d_stmt from $demoselect;
$declare d_curs cursor for d_stmt;
$open d_curs;
/* Fetch selected rows one at a time into demodesc. */
for( ; ; ) {
printf( "\n" );
$fetch d_curs using descriptor demodesc;
if ( sqlca.sqlcode != 0 )
break;
for ( i = 0; i < demodesc->sqld; i++ ) {
switch (demodesc->sqlvar[i].sqltype) {
case CCHARTYPE:
printf( "%s: \"%s\"\n", demodesc->sqlvar[i].sqlname,
demodesc->sqlvar[i].sqldata );
break;
case CINTTYPE:
7-230 IBM Informix SQL リファレンス・ガイド
複数 SQL 文のシーケンスの PREPARE 文による処理
printf( "%s: %d\n", demodesc->sqlvar[i].sqlname,
*((int *) demodesc->sqlvar[i].sqldata) );
break;
/* And so forth for each type... */
}
}
}
$close d_curs;
$free d_curs;
/*
Free the data memory. */
for ( i = 0; i < demodesc->sqld; i++ )
free( demodesc->sqlvar[i].sqldata );
printf ("Program Over.\n");
}
prsqlda(sp)
struct sqlvar_struct *sp;
{
printf ("type = %d\n", sp->sqltype);
printf ("len = %d\n", sp->sqllen);
printf ("data = %lx\n", sp->sqldata);
printf ("ind=%lx\n", sp->sqlind);
printf ("name=%lx\n", sp->sqlname);
}
複数 SQL 文のシーケンスの PREPARE 文による処理
いくつかの SQL 文をまとめて同一の PREPARE 文にインクルードすれば、そ
れらの文を 1 つのアクションとして実行することができます。複数文テキ
ストは 1 つの単位として処理されます。各アクションは逐次処理されませ
ん。したがって、複数文テキストに、テキスト内の前の文で実行されたア
クションに依存する文をインクルードすることはできません。
コンパイル済みのすべての製品は、複数文テキストの最初のエラーに関す
るエラー状態情報を戻します。シーケンス内のどの文がエラーを起こした
かは示されません。
次の例には、既存の製造元コードを新規コードと置き換えて、stores5 デー
タベースを更新する IBM Informix 4GL コードのフラグメントが示されていま
す。manu_code 列は、4 つの表をリンクする可能性のある結合列であるた
め、3 つの表では、以前のコードを新規コードで置き換えなければなりま
せん。
構文 7-231
複数 SQL 文のシーケンスの PREPARE 文による処理
図 7-72
IBM Informix 4GL における複数文テキストの PREPARE 文による処理
DATABASE stores5
MAIN
DEFINE code_chnge RECORD
new_code LIKE manufact.manu_code,
old_code LIKE manufact.manu_code
END RECORD,
sqlmulti CHAR(250)
PROMPT "Enter new manufacturer code: "
FOR code_chnge.new_code
PROMPT "Enter old manufacturer code: "
FOR code_chnge.old_code
LET sqlmulti =
"UPDATE manufact SET manu_code = ? WHERE manu_code = ?;",
"UPDATE stock SET manu_code = ? WHERE manu_code = ?;",
"UPDATE items SET manu_code = ? WHERE manu_code = ?;",
"UPDATE catalog SET manu_code = ? WHERE manu_code = ?;"
PREPARE exmulti FROM sqlmulti
EXECUTE exmulti USING code_chnge.*, code_chnge.*, code_chnge.*
code_chnge.*
END MAIN
次の例では、PREPARE 文により 6 つの SQL 文が処理されて単一の
IBM Informix ESQL/C ストリング照会に編成されます。個々の文はセミコロン
で区切られます。1 つの $prepare 文が 6 つの文をすべて実行用に処理でき、
1 つの $execute 文が qid ストリングを実行できます。
図 7-73
IBM Informix ESQL/C における複数文テキストの PREPARE 文による処理
sprintf (query, "%s %s %s %s %s %s %s %s %s",
"begin work;",
"update account set balance = balance + ?",
"where acct_number = ?;",
"update teller set balance = balance + ?",
"where teller_number = ?;",
"update branch set balance = balance + ?",
"where branch_number = ?;",
"insert into history values (?, ?);",
"commit work;");
$prepare qid from $query;
$execute qid using
$delta, $acct_number, $delta, $teller_number,
$delta, $branch_number, $timestamp,$values;
7-232 IBM Informix SQL リファレンス・ガイド
PREPARE 文で処理された文の効率化
PREPARE 文で処理された文の効率化
パフォーマンス効率を高めるには、PREPARE とループの EXECUTE 文を使用
して、冗長な構文解析と最適化が原因で発生するオーバーヘッドを除去し
てください。たとえば、WHILE ループに含まれている UPDATE 文は、この
ループが実行されるたびに構文解析されます。PREPARE 文により UPDATE
文をこのループの外部で処理すれば、この文は 1 回しか構文解析されない
ため、オーバーヘッドが除去され、文の実行を迅速に行うことができます。
4GL 例を次に示します。
図 7-74
パフォーマンス改善のための PREPARE 文による 4GL 文の処理
PREPARE up1 FROM "UPDATE customer ",
"SET discount = 0.1 WHERE customer_num = ?"
WHILE TRUE
PROMPT "Enter Customer Number" FOR dis_cust
IF dis_cust = 0 THEN
EXIT WHILE
END IF
EXECUTE up1 USING dis_cust
END WHILE
参考資料
本書では、DECLARE、DESCRIBE、EXECUTE、FREE、および OPEN 文を参照
してください。
IBM Informix SQL チュートリアル・ガイド では、PREPARE 文と動的な SQL の説
明を参照してください。
構文 7-233
PUT
PUT
目的
PUT 文は、後でデータベースに挿入するための行をバッファーに格納する
ために使用します。
構文
I4GL
ESQL
+
< カーソル
識別子 >
PUT
ESQL
ESQL
,
< カーソル
変数 >
< 変数名 >
FROM
USING
SQL DESCRIPTOR
"< 記述子 >"
< 記述子
変数 >
E/C
DESCRIPTOR
<sqlda ポイ
ンター >
< カーソル
識別子 >
INSERT 文に対して宣言されたカーソルの識別子です。
< カーソル
変数 >
INSERT 文に対して宣言されたカーソルを識別する埋め込み変
< 記述子 >
ALLOCATE DESCRIPTOR 文で割り当てられたシステム記述子
数名です。
領域を識別する引用符付きストリングです。
7-234 IBM Informix SQL リファレンス・ガイド
使用法
< 記述子
変数 >
ALLOCATE DESCRIPTOR 文で割り当てられたシステム記述子
領域を識別する埋め込み変数名です。
<sqlda
PREPARE 文で処理された INSERT 文の中の ? 位置指定値に対
ポインター > 応する値を表す sqlda 構造体をポイントします。
< 変数名 >
PREPARE 文で処理された INSERT 文の中の ? 位置指定値と置
き換えられる内容を持つプログラム変数です。
使用法
各 PUT 文は、< カーソル名 > をオープンしたときに作成した INSERT バッ
ファーに行を格納します。文を実行するときにバッファーに新規行を入れ
るスペースがない場合は、バッファー内の行が一括してデータベースに書
き込まれ、バッファーは空になります。その結果、PUT 文の実行によって、
データベースが出力されたり、されなかったりします。
FLUSH 文を使用して、新規行を追加せずに、バッファー内の行をデータ
ベースに書き込むことができます。CLOSE 文は、残りのすべての行を書き
込んでから INSERT カーソルをクローズします。
現行のデータベースが明示的な トランザクションを使用する場合は、PUT
文をトランザクション内で実行しなければなりません。
次に、4GL における PUT 文の使用例を示します。
図 7-75
IBM Informix 4GL における PUT 文の使用
DECLARE ins_curs CURSOR FOR
INSERT INTO state VALUES (code, sname)
OPEN ins_curs
LET code = "AK"
LET sname = "Alaska"
PUT ins_curs
次に、IBM Informix ESQL/C と、PREPARE 文で処理された文の使用例を示し
ます。
図 7-76
IBM Informix ESQL/C における PUT 文の使用
$PREPARE ins_mcode FROM "INSERT INTO manufact VALUES(?,?)";
$DECLARE mcode CURSOR FOR ins_mcode;
$OPEN mcode;
$PUT mcode FROM $the_code, $the_name;
構文 7-235
使用法
X/O
PUT は X/Open の標準 SQL 文ではありません。したがって、ESQL 製品で
PUT 文を X/Open モードでコンパイルすると、警告メッセージが出ます。
X/Open モードでのコンパイルについて詳しくは、使用している製品のマ
ニュアルを参照してください。♦
7-236 IBM Informix SQL リファレンス・ガイド
挿入値の提供
挿入値の提供
挿入行を構成する値のソースは、次の 4 つのいずれかです。
ESQL
!
INSERT 文に書き込まれた定数値。
!
INSERT 文で指定されたプログラム変数。
!
PUT 文の FROM 節で指定されたプログラム変数。
!
sqlda 構造体またはシステム記述子領域によってアドレッシングさ
れたメモリー内で準備された後、PUT 文の USING 節で指定された
値。♦
INSERT での定数値の使用
INSERT 文の VALUES 節は、挿入列の値をリストします。これらの うちの 1
つ以上の値は定数、つまり数字または文字ストリング、である可能性があ
ります。
すべての 挿入値が定数であれば、PUT 文に特殊な効果が現れます。PUT 文
は、行を作成してそれをバッファーに入れることをしないで、単にカウン
ターを増分します。FLUSH または CLOSE 文を使用してバッファーを空にす
ると、1 つの行と反復カウントがデータベース・サーバーに送信され、
データベース・サーバーはその数だけの行を挿入します。
次の IBM Informix 4GL 例では、99 個の空の顧客レコードが customer 表に挿
入されます。すべての値が定数であるため、カーソルがクローズされるま
で、ディスク出力は行われません。(customer_num が定数ゼロであれば、
SERIAL 値の生成が行われます。)
図 7-77
IBM Informix 4GL における表への空の顧客レコードの挿入
DECLARE fill_c CURSOR FOR
INSERT INTO customer(customer_num) VALUES(0)
DEFINE count SMALLINT
OPEN fill_c
FOR count = 1 TO 99
PUT fill_c
END FOR
CLOSE fill_c
構文 7-237
挿入値の提供
INSERT におけるプログラム変数の指名
INSERT 文をカーソル宣言の一環として書き込むときは、(DECLARE 文で )、
VALUES 節でプログラム変数を指名することができます。各 PUT 文を実行
すると、その時点のプログラム変数の内容を使用して、バッファーに挿入
する行が構成されます。
ヒント : VALUES 節でプログラム変数を指名できるのは、DECLARE 分の一
部として INSERT 文を書き込むときだけです。文識別子によってカーソルに
関連付けられた、PREPARE 文で処理された文のコンテキストでは、変数名
は認識されません。
以下の IBM Informix ESQL/C 例は、INSERT カーソルの使用を示しています。
このコードには次の文がインクルードされています。
!
DECLARE 文が、データを customer 表に挿入する INSERT 文に
ins_curs というカーソルを関連付けます。VALUES は、cust_rec と
いうデータ構造体を指名します。ESQL/C プリプロセッサーは、構
造体の各コンポーネントごとに 1 つずつ cust_rec を値のリストに変
換します。
!
OPEN 文がバッファーを作成します。
!
この例では定義されていない関数が、対話型ユーザーから顧客情報
を取得し、それを cust_rec に残します。
!
PUT 文が、cust_rec 構造体の現行内容から行を構成し、それを行
バッファーに送信します。
!
CLOSE 文が、行バッファーに残っているすべての行を customer 表
に挿入し、INSERT カーソルをクローズします。
図 7-78
IBM Informix ESQL/C における INSERT カーソルの使用
int keep_going = 1;
$struct cust_row { /* fields of a row of customer table */ } cust_rec;
$declare ins_curs cursor for
insert into customer values ($cust_rec);
$open ins_curs;
for (; (sqlca.sqlcode == 0) && (keep_going) ;)
{
keep_going = get_user_input(cust_rec); /* ask user for new customer */
if (keep_going)/* user did supply customer info */
{
cust_rec.customer_num = 0;/* request new serial value */
$put ins_curs;
}
if (sqlca.sqlcode == 0)/* no error from PUT */
keep_going = (prompt_for_y_or_n("another new customer") == 'Y')
}
$close ins_curs;
7-238 IBM Informix SQL リファレンス・ガイド
挿入値の提供
PUT におけるプログラム変数の指名
INSERT 文を PREPARE 文で処理すると ( 7-221 ページの PREPARE 文を参照 )、
その VALUES 節のプログラム変数を使用できません。
しかし、? 位置指定値を
使用して値を表すことができます。欠落した値を提供するには、
PUT 文の
FROM 節にプログラム変数の名前をリストします。
次に IBM Informix 4GL の
例を示します。
図 7-79
IBM Informix 4GL における PUT 文でのプログラム変数のリスト作成
DEFINE answer CHAR(1), u_company LIKE customer.company
PREPARE sel2 FROM
"INSERT INTO customer (customer_num, company) ",
"VALUES (0, ?)"
DECLARE ins_curs CURSOR FOR sel2
OPEN ins_curs
LET answer = "y"
WHILE answer = "y"
PROMPT "Enter a customer: " FOR u_company
PUT ins_curs FROM u_company
PROMPT "Do you want to enter another customer (y/n) ? "
FOR answer
END WHILE
CLOSE ins_curs
システム記述子領域の使用
ESQL
1 つ以上の値のデータ型とメモリー格納場所を記述するシステム記述子領
域を作成することができます。次に、そのシステム記述子領域を PUT 文の
USING SQL DESCRIPTOR 節で指定することができます。
記述の使用について詳しくは、本書の 第 6 章 および使用している埋め込み
言語製品のマニュアルを参照してください。次の例は、システム記述子領
域から取得した値を関連付ける方法を示しています。
図 7-80
IBM Informix ESQL/C におけるサンプル PUT USING SQL DESCRIPTOR 文
$ PUT selcurs USING SQL DESCRIPTOR "desc1";
構文 7-239
バッファー内の行の書き込み
図 7-81
IBM Informix ESQL/COBOL におけるサンプル PUT USING SQL DESCRIPTOR 文
EXEC SQL PUT SEL_CURS USING SQL DESCRIPTOR "DESC1" END-EXEC.
♦
sqlda 構造体の使用
E/C
1 つ以上の値のデータ型とメモリー格納場所を記述する sqlda 構造体を作成
することができます。そうすると、PUT 文の USING DESCRIPTOR 節で sqlda
構造体を指定することができます。PUT 文を実行するたびに、sqlda によっ
て記述された値を使用して、INSERT 文の ? 位置指定値が置き換えられま
す。このプロセスは、変数のリストで USING キーワードを使用するのと似
ていますが、ユーザーのプログラムがデータ値のメモリー格納場所の完全
制御を行うという点が異なります。
sqlda 構造体の詳細については、本書の第 6 章および IBM Informix ESQL/C
Programmer’s Manual を参照してください。
図 7-82
ESQL/C におけるサンプル PUT USING DESCRIPTOR 文
$put selcurs using descriptor pointer2;
♦
バッファー内の行の書き込み
OPEN 文が INSERT カーソルをオープンすると、INSERT バッファーが作成
されます。PUT 文はこの INSERT バッファーに行を入れます。バッファー
内の行のブロックが、必要なときだけ、データベース表に一括して挿入さ
れます。この動作は「バッファーのフラッシュ」と呼ばれます。バッ
ファーのフラッシュが行われるのは、以下のいずれかのイベントの後です。
!
PUT 文の開始時にバッファーがいっぱいになっていて、新規行を収
容できない。
!
FLUSH 文が実行された。
!
CLOSE 文がカーソルをクローズした。
!
カーソルを指名して OPEN 文が実行された。
OPEN 文をオープン・カーソルに適用すると、カーソルをクローズ
してからそれを再オープンします。この暗黙の CLOSE 文はバッ
ファーをフラッシュします。
!
COMMIT WORK 文が実行された。
7-240 IBM Informix SQL リファレンス・ガイド
エラー検査
プログラムが INSERT カーソルをクローズせずに終了した場合は、バッ
ファーはフラッシュされません。最後のフラッシュ以降にバッファーに挿
入された行は失われます。プログラムの終了でカーソルがクローズされ、
バッファーがフラッシュされると考えないでください。
エラー検査
SQLCA には、各 PUT 文の正常終了に関する情報と、挿入された行をカウン
トできる情報が含まれています。各 PUT 文の結果は、次の表に示されてい
るように、SQLCA のフィールドに含まれています。
4GL
ESQL/C
ESQL/COBOL
STATUS
SQLCA.SQLCODE
sqlca.sqlcode
SQLCODE
SQLCODE OF SQLCA
SQLCA.SQLERRD[3]
sqlca.sqlerrd[2]
SQLERRD[3] OF SQLCA
INSERT カーソルによるデータ・バッファー方式は、バッファーがフラッ
シュされるまでエラーが発見されないことを意味します。たとえば、意図
された列のデータ型と互換性がない入力値は、バッファーがフラッシュさ
れたときにのみ発見されます。エラーが発見されると、そのエラーの後に
配置されたバッファー内の行は挿入されません。それらの行はメモリーか
ら消失します。
エラーが発生しないと、SQLCODE フィールドはゼロに設定されます。エ
ラーが発生すると、このフィールドはエラー・コードに設定されます。
SQLERRD 配列の 3 番目のエレメントは、正常にデータベースに挿入された
行の数に設定されます。
!
INSERT バッファーに行が入れられ、バッファー内の行がデータ
ベースに書き込まれないと、SQLCODE と SQLERRD の両方がゼロに
設定されます ( エラーが発生しなかったために SQLCODE、および
行が挿入されなかったために SQLERRD)。
!
PUT 文の実行中にバッファー内の行ブロックがデータベースに書き
込まれた場合は、SQLCODE はゼロに設定され、SQLERRD は、デー
タベースに正常に挿入された行の数に設定されます。
構文 7-241
参考資料
!
バッファー内の行をデータベースに書き込んでいるときにエラーが
発生した場合は、SQLCODE がエラーを示し、SQLERRD には、正常
に挿入された行の数が入ります。( 挿入されなかった行はバッ
ファーから廃棄されます。)
合計および保留中の行のカウント
実際にデータベースに挿入された行の数と、まだ挿入されていない行の数
をカウントするには、以下の手順を実行してください。
!
2 つの整変数を PREPARE 文で処理します。
たとえば、
< 合計 > と < 保
留中 >。
!
カーソルがオープンされたら、両方の変数をゼロに設定します。
!
PUT 文を実行するたびに、合計 と保留中 を増やします。
!
PUT または FLUSH 文を実行するたびに、あるいはカーソルをクロー
ズするたびに、SQLERRD 配列の 3 番目のフィールドを保留中 から
減算します。
合計から保留中を引いた数は、常に、実際に挿入された行の数です。すべ
てのコマンドが正常に実行された場合は、カーソルをクローズした後、保
留中にはゼロが入っていなければなりません。PUT、FLUSH、または CLOSE
文の実行中にエラーが発生した場合は、保留中に残っている値は、挿入さ
れなかった ( 廃棄された ) 行の数に設定されます。
参考資料
本書では、カーソル関連の CLOSE、FLUSH、DECLARE、および OPEN 文を
参照してください。また、ALLOCATE DESCRIPTOR 文も参照してください。
IBM Informix SQL チュートリアル・ガイド では、PUT 文の説明を参照してくだ
さい。
7-242 IBM Informix SQL リファレンス・ガイド
RECOVER TABLE
RECOVER TABLE
目的
RECOVER TABLE 文は、障害が発生した場合にデータベース表を復元するた
めに IBM Informix SE と一緒に使用します。
構文
SE
+
RECOVER TABLE
表名
7-440
ページ
使用法
RECOVER TABLE 文は、表更新記録をデータベースのアーカイブ・コピーに
適用します。IBM Informix SE は、更新記録を使用して、表ごとに操作を記録
します。表を所有している場合や、データベースに対する DBA アクセス権
を持っている場合は、RECOVER TABLE 文を出すことができます。
システム障害が発生した場合は、オペレーティング・システム・ユーティ
リティーを使用して、更新記録が入っている各表ファイルを復元してくだ
さい。RECOVER TABLE 文を出して、更新記録に記録されたトランザクショ
ンで、新規に復元された各表を更新してください。
構文 7-243
バックアップ / 復元プロシージャー
バックアップ / 復元プロシージャー
更新記録が含まれているデータベースのアーカイブ・コピーを取るための
推奨されるバックアップ / 復元プロシージャーは、次のとおりです。
!
更新記録が含まれている各表ごとに DROP AUDIT 文を実行します。
DROP AUDIT 文が、更新記録ファイルへのシステム・ログ操作を終
了します。
!
新規更新記録のパス名を指定して、各表ごとに CREATE AUDIT 文を
実行します。保護機能を最大化するために、データベースと同じ記
憶装置上にない位置を指定してください。更新記録内のファイルの
表名とシーケンスを反映するファイル名、たとえば、
audit_cust_001 または audit_cust_002 を選択することもできます。
CREATE AUDIT 文は、systables システム・カタログ表の更新記録
ファイルの新規名と格納場所を登録します。
!
オペレーティング・システム・ユーティリティーを使用してデータ
ベース・ファイルをバックアップします。
実行中に、RECOVER TABLE は、更新記録と表名が、変更が行われた行のレ
コード番号と整合しているかどうかを調べます。非常にまれなケースとし
て、RECOVER TABLE 文が、システム・クラッシュによる不整合を検出でき
る場合があります。この場合にのみ、RECOVER TABLE 文は停止し、ユー
ザーが手動で表を復旧させなければなりません。
次に示すアクションと文のリストは、customer 表を復旧させるためのガイ
ドとして役立ちます。まず、最後のアーカイブ・コピーから customer 表を
復元します。次に、以下の文を実行します。この場合、アーカイブ・コ
ピーを作成した直後から更新記録が開始されたと想定しています。
RECOVER TABLE customer
DROP AUDIT FOR customer
CREATE AUDIT FOR customer
その次に、復旧した表の新規バックアップを作成します。
更新記録ファイル は、人間に解読可能なフォームになっていません。しか
し、DBA は、必要な場合、このファイルをデータベース (.dat) ファイルに
コピーして、このファイルを操作することができます。変更したファイル
を再度更新記録ファイルにコピーし、特定の表のカスタマイズ復元を行う
ことができます。たとえば、更新記録ファイルを修正して、特定のユー
ザーによって入力された行を除外したり、特定のトランザクションを元に
戻したりできます。更新記録ファイルを修正するための個々の手順につい
ては、アプリケーション開発支援ツールのマニュアルを参照してください。
7-244 IBM Informix SQL リファレンス・ガイド
参考資料
参考資料
本書では、CREATE AUDIT および DROP AUDIT 文を参照してください。
構文 7-245
RENAME COLUMN
RENAME COLUMN
目的
RENAME COLUMN 文は、列の名前を変更するために使用します。
構文
+
RENAME COLUMN
< 新列 >
表名
7-440
ページ
.< 以前の列 >
TO
< 新列 >
列の新規名です。
< 以前の列 > リネームされる列です。
使用法
以下のいずれかの条件が当てはまる場合は、表の列の名前を変更すること
ができます。
!
表を所有している。
!
データベースに対する DBA アクセス権を持っている。
!
表に対する Alter アクセス権を持っている。
列の名前を変更するときは、表内で固有の列名を選択してください。
DB
ESQL
列がデータベース内のビューによって参照された場合は、sysviews システ
ム・カタログ表内のビューのテキストが、新規列名を反映するように更新
されます。列がデータベース内のチェック制約によって参照された場合は、
syschecks システム・カタログ表内のチェック制約のテキストが、新規列名
を反映するように更新されます。♦
7-246 IBM Informix SQL リファレンス・ガイド
参考資料
次の例は、customer 表の customer_num 列に c_num という新規名を割り当
てます。
RENAME COLUMN customer.customer_num TO c_num
SE
ROLLBACK WORK 文を使用して、正常に実行された RENAME COLUMN 文を
元に戻すことはできません。RENAME COLUMN 文が含まれているトランザ
クションをロールバックした場合は、列にはその新規名が保存され、エ
ラー・メッセージは出ません。♦
参考資料
本書では、ALTER TABLE、CREATE TABLE、および RENAME TABLE 文を参照
してください。
構文 7-247
RENAME TABLE
RENAME TABLE
目的
RENAME TABLE 文は、表の名前を変更するために使用します。
構文
+
< 以前の
名前 >
RENAME TABLE
TO
< 新規名 >
< 所有者 >.
< 新規名 >
表に割り当てられる新規名です。
< 以前の
名前 >
リネームされる表です。
< 所有者 >
表の所有者です。
使用法
以下のいずれかの文が当てはまる場合は、表の名前を変更することができ
ます。
!
表を所有している。
!
データベースに対する DBA アクセス権を持っている。
!
表に対する Alter アクセス権を持っている。
表の名前を変更しても、表の所有者を変更することはできません。所有者
を以前の名前 の一部として指定することができますが、所有者 を 新規名の
一部として指定すると、コンパイル中にエラーが発生します。
ビューがこの表を参照する場合は、sysviews システム・カタログ表内の
ビューのテキストが、新規表名を反映するように更新されます。
ANSI
ANSI 準拠のデータベースでは、自分が所有していない表を参照する場合、
所有者 を指定しなければなりません。♦
7-248 IBM Informix SQL リファレンス・ガイド
参考資料
次の例は、items 表を再編成します。この例の意図は、quantity 列を 5 番目
の位置から 3 番目の位置へ移動することです。この例は、次の 4 つのス
テップを示しています。
!
3 番目の位置に quantity 列が入っている新規表 new_table を作成す
る。
!
表を現行 items 表からのデータで充てんする。
!
以前の items 表を削除する。
!
new_table 名を items 名で変更する。
図 7-83
RENAME TABLE 文を使用した項目表の再編成
CREATE TABLE new_table
(
item_num
SMALLINT,
order_num
INTEGER,
quantity
SMALLINT,
stock_num
SMALLINT,
manu_code
CHAR(3),
total_price
MONEY(8)
)
INSERT INTO new_table
SELECT item_num, order_num, quantity, stock_num,
manu_code, total_price
FROM items
DROP TABLE items
RENAME TABLE new_table TO items
SE
ROLLBACK WORK 文を使用して、正常に実行された RENAME TABLE 文を元
に戻すことはできません。RENAME TABLE 文が含まれているトランザク
ションをロールバックした場合は、表にはその新規名が保存され、エ
ラー・メッセージは出ません。♦
参考資料
本書では、ALTER TABLE、CREATE TABLE、DROP TABLE、および RENAME
COLUMN 文を参照してください。
構文 7-249
REPAIR TABLE
REPAIR TABLE
目的
REPAIR TABLE 文は、電源障害、コンピューター・クラッシュ、その他の予
期しないプログラム停止などが原因で、損傷を受けたかまたは破壊された
可能性のある表インデックスを削除および再作成するために使用します。
損傷を受けたと判明した表のみが再作成されます。REPAIR TABLE 文を使用
する必要があるかどうかを判別するには、最初に CHECK TABLE 文を出しま
す。
構文
SE
DB
ISQL
+
REPAIR TABLE
表名
7-440
ページ
使用法
インデックス・ファイルの整合性を復元したい表の名前を指定します。例 :
REPAIR TABLE cust_calls
表を所有していない場合 や、データベースに対する DBA アクセス権を持っ
ていない場合は、その表に対して REPAIR TABLE 文を使用することはできま
せん。データベースに対する DBA アクセス権を持っていない場合は、
systables システム・カタログ表に対して REPAIR TABLE 文を使用することは
できません。
REPAIR TABLE 文は bcheck ユーティリティーを呼び出します。bcheck の詳
細については、IBM Informix SE Administrator’s Guide を参照してください。
7-250 IBM Informix SQL リファレンス・ガイド
参考資料
参考資料
本書では、CHECK TABLE 文を参照してください。
IBM Informix SE Administrator’s Guide では、bcheck ユーティリティーの説明を
参照してください。
構文 7-251
REVOKE
REVOKE
目的
REVOKE 文は、表、データベース、またはプロシージャーに関する他の
ユーザーのアクセス権を取り去るために使用します。
構文
+
REVOKE
表
レベル・
アクセス権
7-254 ページ
ON
表名
7-440
ページ
ビュー名
7-444
ページ
FROM
PUBLIC
,
< ユーザー>
シノニム
名 7-438
ページ
EXECUTE ON
プロシー
ジャー名
7-429
ページ
データベース・
レベル・
アクセス権
7-256 ページ
< ユーザー > アクセス権が取り消されるユーザー ( 複数の場合もある ) を
指名します。PUBLIC キーワードはすべてのユーザーからア
クセス権を取り消します。
使用法
REVOKE 文を GRANT 文と一緒に使用して、データベースの修正、表データ
のアクセスや修正などを行うためのユーザー権限を細かく制御することが
できます。
7-252 IBM Informix SQL リファレンス・ガイド
使用法
他のユーザーに付与したアクセス権のすべてまたは一部を取り消すことが
できます。他のユーザーが付与したアクセス権は、だれも取り消すことは
できません。ただし、WITH GRANT OPTION キーワードを使用して付与した
アクセス権を < ユーザー > から取り消したい場合は、その < ユーザー > に
よって付与されたアクセス権のチェーンを切断することができます。この
場合、< ユーザー > からアクセス権を取り消すと、< ユーザー > またはそ
の < ユーザー > が作成したチェーンから受け取ったすべてのユーザーのア
クセス権が自動的に取り消されます。
あるユーザーからストアード・プロシージャーに対する EXECUTE アクセス
権を取り消すと、そのユーザーは、EXECUTE PROCEDURE または CALL 文を
使用してそのストアード・プロシージャーを実行できなくなります。
ユーザーは自分自身からアクセス権を取り消すことはできません。
SE
ROLLBACK WORK を使用して、正常に実行された REVOKE 文を元に戻すこ
とはできません。REVOKE 文が含まれたトランザクションをロールバック
した場合は、アクセス権がユーザーに付与されず、エラー・メッセージは
出ません。♦
構文 7-253
表レベル・アクセス権
表レベル・アクセス権
表レベル・
アクセス権
ALL
PRIVILEGES
,
INSERT
DELETE
SELECT
UPDATE
INDEX
ALTER
REFERENCES
ある表レベル・アクセス権をユーザーから取り消すには、そのアクセス権
のすべての発生を取り消す必要があります。たとえば、2 人のユーザーが
あるユーザーに同じアクセス権を付与している場合は、両方のユーザーが
アクセス権を取り消さなければなりません。片方の権限授与者しかアクセ
ス権を取り消さなかった場合、ユーザーは、もう一方の権限授与者から受
け取ったアクセス権を保持することになります。( データベース・サーバー
は、各表レベル付与のレコードを syscolauth および systabauth システム・
カタログ表に保持します。)
ある表所有者がアクセス権を PUBLIC に付与した場合、その表所有者は、
どのユーザーからもそのアクセス権を取り消すことはできません。たとえ
ば、表所有者が Select アクセス権を PUBLIC に付与し、mary から Select ア
クセス権を取り消そうとすると、REVOKE 文がエラーを生成します。Select
アクセス権は PUBLIC に付与されたのであり、mary に付与されたわけでは
ないため、そのアクセス権を mary から取り消すことはできません。(ISAM
エラー番号 111、「レコードが見つかりません」は、表所有者が取り消そうとし
ているアクセス権を表すレコードが、syscolauth および systabauth システ
ム・カタログ表のどちらにも入っていないことを示しています。)
7-254 IBM Informix SQL リファレンス・ガイド
表レベル・アクセス権
表レベル・アクセス権の取り消しは、個別に行うことも、組み合わせて行
うこともできます。< ユーザー > から取り消すアクセス権に対応するキー
ワードをリストしてください。それらのキーワードは、次のリストに記述
されています。ただし、GRANT 文と異なり、Select、Update、または References アクセス権を REVOKE 文の列名で修飾することはできません。つま
り、特定の列に対するアクセス権を取り消すことはできません。
SELECT
SELECT 文から取得したデータを表示する権限です。
UPDATE
列値を変更する権限です。
INSERT
行を挿入する権限です。
DELETE
行を削除する権限です。
INDEX
永久インデックスを作成する権限です。Index アクセス権を
利用するには、Resource アクセス権を持っていなければなり
ません。(Connect アクセス権を持つユーザーは、だれでも一
時表のインデックスを作成できます。)
ALTER
列の追加または削除、または列データ型の修正を行う権限で
す。Alter アクセス権を利用するには、Resource アクセス権を
持っていなければなりません。
REFERENCES 参照制約の列を参照する権限です。References アクセス権を
利用するには、Resource アクセス権を持っていなければなり
ません。( ただし、ALTER TABLE 文に参照制約を追加するこ
とができます。この方法を使用する場合は、データベースに
対する Resource アクセス権を持っている必要はありません。
)Resource アクセス権を 1 つ以上の列に限定するには、それら
をリストしてください。
ALL
先行のすべてのアクセス権です。PRIVILEGES キーワードはオ
プションです。
次の例は、customer 表のすべてのユーザーから Index および Alter アクセス
権を取り消します。次にこれらのアクセス権は、個別にユーザー mary に
付与されます。
図 7-84
Index および Alter アクセス権の取り消しと付与
REVOKE INDEX, ALTER ON customer FROM PUBLIC
GRANT INDEX, ALTER ON customer TO mary
構文 7-255
データベース・レベル・アクセス権
特定の列に対するアクセス権を取り消すことはできないため、あるユー
ザーから Select、Update、または References アクセス権を取り消すと、表の
すべての列に対するアクセス権を取り消すことになります。ユーザーに提
供する必要がある列固有のアクセス権を個別に付与し直すには、GRANT 文
を使用する必要があります。
図 7-85
列固有のアクセス権の付与し直し
REVOKE ALL ON customer FROM PUBLIC
GRANT ALL ON customer TO john, cathy
GRANT SELECT (fname, lname, company, city)
ON customer TO PUBLIC
データベース・レベル・ アクセス権
データベース・
レベル・
アクセス権
CONNECT
RESOURCE
DBA
DBA アクセス権を持つユーザーのみが、データベース・レベル・アクセス
権を付与または取り消すことができます。
アクセス権を制御するデータベース・アクセス権には 3 つのレベルがあり
ます。それらのアクセス権レベルは、低いほうから高いほうへ、Connect、
Resource、および DBA です。データベース・アクセス権を取り消すには、
CONNECT、RESOURCE、または DBA のいずれかを REVOKE 文に指定しま
す。
アクセス権の階層構成 ( 後述のアクセス権定義の項を参照 ) が原因で、DBA
アクセス権を持つユーザーから Resource または Connect アクセス権を取り
消しても、その文は効果がありません。DBA アクセス権を持つユーザーか
ら DBA アクセス権を取り消した場合は、そのユーザーはデータベースに対
する Connect アクセス権を保持します。DBA または Resource アクセス権を
持つユーザーがデータベース・アクセスを行えないようにするには、まず、
DBA または Resource アクセス権を取り消し、次に、別個の REVOKE 文の
Connect アクセス権を取り消します。
7-256 IBM Informix SQL リファレンス・ガイド
データベース・レベル・アクセス権
同様に、Resource アクセス権を持つユーザーから Connect アクセス権を取
り消しても、その文は効果がありません。Resource アクセス権を持つユー
ザーから Resource アクセス権を取り消すと、そのユーザーはデータベース
に対する Connect アクセス権を保持します。
次のキーワードには、3 つのデータベース・アクセス権が関連付けられて
います。
CONNECT
Connect アクセス権はデータの照会と修正を行えるようにし
ます。修正したいオブジェクトを所有している場合は、デー
タベース・スキーマを修正することができます。Connect ア
クセス権を持つユーザーは、だれでも以下の機能を実行でき
ます。
!
ユーザーが必要な表レベル・アクセス権を持ってい
る場合、SELECT、INSERT、UPDATE、および DELETE
文を実行する。
!
ユーザーが基礎表に対する Select アクセス権を持っ
ている場合、ビューを作成する。
!
シノニムを作成する。
!
一時表を作成し、一時表のインデックスを作成する。
!
ユーザーが表またはインデックス ( または表の Alter、
Index、または References アクセス権 ) を所有してい
る場合、表またはインデックスを修正または削除す
る。
!
ユーザーが表を所有している場合 ( または WITH
GRANT OPTION キーワードによる表のアクセス権を付
与されている場合 ) 、表に対するアクセス権を付与
する。
RESOURCE
Resource アクセス権はデータベースの構造体を拡張できるよ
うにします。Connect アクセス権の機能に加え、Resource ア
クセス権の所有者は以下のことも行えます。
!
新規表を作成する。
!
新規インデックスを作成する。
!
新規プロシージャーを作成する。
構文 7-257
参考資料
DBA
Resource アクセス権の機能に加え、DBA アクセス権の所有者
は以下のことも行えます。
!
DBA アクセス権を含め、すべてのアクセス権を他の
ユーザーに付与する。
!
NEXT SIZE キーワードを使用して、システム・カタロ
グのサイズを変更する。
SE
!
systables 以外のすべてのシステム・カタログ表の行
を挿入、削除、または更新する。
!
所有者には関係なく、すべてのオブジェクトを削除
する。
!
表、ビュー、およびインデックスを作成し、他の
ユーザーをオブジェクトの所有者として指定する。
!
DROP DATABASE コマンドを実行する。
!
START DATABASE および ROLLFORWARD DATABASE コ
マンドを実行する。♦
ヒント : ユーザー informix を使用すればシステム・カタログ表を修正でき
ますが、システム・カタログ表の行を更新、削除、または変更しないこと
を強くお勧めします。システム・カタログ表に修正を加えると、データ
ベースの整合性が壊れる場合があります。
参考資料
本書では、GRANT 文を参照してください。
IBM Informix SQL チュートリアル・ガイド では、アクセス権とセキュリティー
の説明を参照してください。
7-258 IBM Informix SQL リファレンス・ガイド
ROLLBACK WORK
ROLLBACK WORK
目的
ROLLBACK WORK 文は、トランザクションをキャンセルし、トランザク
ションの開始以降に行われたすべての変更を元に戻すために使用します。
構文
ROLLBACK WORK
使用法
ROLLBACK WORK 文はトランザクション付きデータベースでのみ有効です。
ANSI 準拠でないデータベースでは、BEGIN WORK 文でトランザクションを
開始してください。トランザクションを終了させるには COMMIT WORK 文
を使用し、トランザクションをキャンセルするには ROLLBACK WORK 文を
使用します。ROLLBACK WORK 文は、データベースをトランザクション開
始前の状態に復元します。
ROLLBACK WORK 文は、キャンセルしたトランザクションによって設定さ
れているすべての行および表をアンロックします。保留中のトランザク
ションがないときに ROLLBACK WORK 文を出すと、エラーが発生します。
ANSI
ANSI 準拠データベースでは、トランザクションは暗黙的です。トランザク
ションは、各 COMMIT WORK または ROLLBACK WORK 文の後で開始されま
す。保留中のトランザクションがないときに ROLLBACK WORK 文を出した
場合は、この文は受け入れられますが、それには効果がありません。♦
構文 7-259
参考資料
SE
IBM Informix SE を使用する場合は、ROLLBACK WORK 文は、GRANT または
REVOKE 文、あるいはデータ定義文によって行われたデータベース変更を
除く、すべてのデータベース変更を元に戻します。データ定義文は単一ト
ランザクションとして扱われます。データ定義文が正常に実行された場合
は、それらは自動的にコミットされ、ROLLBACK WORK 文でロールバック
することはできません。データ定義文には、表の数、名前、またはイン
デックスを修正する文、および列の数、名前、またはデータ型を修正する
文が含まれています。
あるトランザクションをロールバックすると、そのトランザクションを元
に戻すために実行されたアクションも表更新記録にログ記録されます ( 表
更新記録が存在する場合 )。♦
I4GL
ROLLBACK WORK 文は、保留として宣言されたカーソルを除く、すべての
ESQL
オープン・カーソルをクローズします。保留として宣言されたカーソルは、
トランザクションの動作に関係なく、オープン状態になっています。♦
I4GL
FOREACH ループ内で ROLLBACK WORK 文を使用しないでください。♦
ESQL
WHENEVER 文によって呼び出されたルーチン内で ROLLBACK WORK 文を使
用する場合は、ROLLBACK WORK 文の前で WHENEVER SQLERROR
CONTINUE および WHENEVER SQLWARNING CONTINUE を指定してください。
こうすることで、ROLLBACK WORK 文にエラーまたは警告が発生した場合
に、プログラムのループを回避することができます。♦
参考資料
本書では、BEGIN WORK および COMMIT WORK 文を参照してください。
4GL を使用している場合は、アプリケーション開発支援ツールのマニュア
ルで、FOREACH および WHENEVER 文を参照してください。
IBM Informix SQL チュートリアル・ガイド では、ROLLBACK WORK の説明を参
照してください。
7-260 IBM Informix SQL リファレンス・ガイド
ROLLFORWARD DATABASE
ROLLFORWARD DATABASE
目的
ROLLFORWARD DATABASE は、トランザクション・ログ・ファイルを復元
済みデータベースに適用するために IBM Informix SE データベース・サー
バーで使用します。
構文
SE
+
ROLLFORWARD DATABASE
データ
ベース名
7-367
ページ
使用法
データベースを復元するには、データベースのアーカイブ・コピーと、
アーカイブ・コピーを作成した直後に開始されたトランザクション・ログ
の両方が必要です。
ROLLFORWARD DATABASE 文を実行するには、DBA アクセス権が必要です。
常に ROLLFORWARD DATABASE 文の前に CLOSE DATABASE 文を入れてくだ
さい。データベースがオープンしていると、ROLLFORWARD DATABASE 文
は失敗します。
ROLLFORWARD DATABASE 文は、他のプロセスによるアクセスを防止する
ために排他ロックをデータベースに設定します。別のプロセスがデータ
ベースを使用している場合は ( データベースを読み取っているだけの場合
でも )、ROLLFORWARD DATABASE 文は失敗します。
ROLLFORWARD DATABASE 文が実行された後、データベースはロックされ
たままになります。このため、ユーザーはエラーを調べてから他のユー
ザーにアクセス権を与えることができます。データベースが使用できる状
態になっていることを確認したら、CLOSE DATABASE 文を実行して、排他
ロックをアンロックしてください。DATABASE 文でデータベースをオープ
ンすることができます。
構文 7-261
参考資料
INET
IBM Informix NET を使用している場合は、データベース・サーバーから
ROLLFORWARD DATABASE 文を出してください。この文はクライアントか
らは実行できません。♦
参考資料
本書では、BEGIN WORK、COMMIT WORK、CLOSE DATABASE、DATABASE、
および ROLLBACK WORK 文を参照してください。
IBM Informix SQL チュートリアル・ガイド では、アーカイブとログの説明を参
照してください。
7-262 IBM Informix SQL リファレンス・ガイド
SELECT
SELECT
目的
SELECT は、データベースを照会するために使用します。
構文
UNION
UNION ALL
SELECT
選択リスト
7-265
ページ
FROM 節
7-274
ページ
I4GL
ESQL
SPL
WHERE 節
7-276
ページ
INTO 節
7-270
ページ
GROUP BY
節
7-284 ページ
HAVING
節
7-286 ページ
+
ORDER BY
節
7-288 ページ
INTO TEMP
節
7-290 ページ
使用法
現行のデータベースの表または現行でないデータベースの表を照会するこ
とができます。
構文 7-263
使用法
STAR
SE
現行データベースと異なるデータベース・サーバー上のデータベースの表
を照会することができます。♦
現行のデータベースのみを照会することができます。♦
SELECT 文は、8 つの基本部分からなっています。各部分を以下にリスト
し、それぞれについて次ページ以降で詳しく説明します。
I4GL
SELECT 節
データベースから読み取る項目のリストを指名します。
INTO 節
選択したデータを受け取るプログラム変数またはホス
ト変数を指定します。♦
FROM 節
選択した列を含む表を指名します。
WHERE 節
選択した行に対して条件を設定します。
GROUP BY 節
行グループを要約結果に結合します。
HAVING 節
要約結果に対して条件を設定します。
ORDER BY 節
選択した行を整列します。
INTO TEMP 節
現行データベースに一時表を作成し、照会の結果をそ
の表に入れます。
ESQL
SPL
7-264 IBM Informix SQL リファレンス・ガイド
SELECT 節
SELECT 節
SELECT 節には、以下の図に示されているように、SELECT キーワードと選
択されたオブジェクトのリストが含まれています。
選択
リスト
SELECT
,
選択
リスト
式
7-375
ページ
ALL
+
DISTINCT
< 表示
ラベル >
AS
UNIQUE
*
表名
7-440 ページ
.
ビュー名
7-444 ページ
.
シノニム名
7-438 ページ
.
< 表示
ラベル >
式に割り当てられる一時的な名前です。
SELECT 節では、どのデータを選択するか、および重複した値を省略するか
どうかを正確に指定してください。
構文 7-265
SELECT 節
重複の許容
ALL、UNIQUE、または DISTINCT キーワードを適用して、重複値が存在す
る場合にそれを戻すかどうかを指示することができます。これらのキー
ワードを指定しないと、デフォルトにより、すべての行が戻されます。
ALL
選択した値が重複しているかどうかにかかわらず、それらの
値をすべて戻すことを指定します。ALL はデフォルトの状態
です。
DISTINCT
照会結果から重複行を除去します。
UNIQUE
照会結果から重複行を除去します。UNIQUE は DISTINCT のシ
ノニムです。
たとえば、次の照会は、重複の項目を除き、注文されたすべての項目の
stock_num と manu_code をリストします。
SELECT DISTINCT stock_num, manu_code FROM items
DISTINCT または UNIQUE キーワードは、各レベルの照会または副照会につ
き 1 回ずつ使用できます。たとえば、次の照会は、照会と副照会の両方で
DISTINCT を使用します。
SELECT DISTINCT stock_num, manu_code FROM items
WHERE order_num = (SELECT DISTINCT order_num FROM orders
WHERE customer_num = 120)
選択リストの式
式の 4 つの基本型 ( 列、定数、関数、および集計関数 ) のいずれか、または
組み合わせを選択リストで使用できます。この 4 つの式型の詳しい説明が、
7-375 ページの『式』のセクションに記載されています。
以下のセクションでは、それぞれの単純式の型を選択リストで使用する例
を示します。
いくつかの単純数値式を結合するには、それらを加算、減算、乗算、およ
び除算の算術演算子で接続します。ただし、列式と集計関数を結合する場
合は、列式を GROUP BY 節にインクルードする必要があります。
7-266 IBM Informix SQL リファレンス・ガイド
SELECT 節
列の選択
列式は、SELECT 文で最もよく使用される式です。列式の構文と使用法の詳
しい説明については、7-378 ページの『列式』を参照してください。
選択リスト内の列式の例を次に示します。
図 7-86
選択リスト内の列式
SELECT orders.order_num, items.price FROM orders, items
SELECT customer.customer_num ccnum, company FROM customer
SELECT catalog_num, stock_num, cat_advert [1,15] FROM catalog
SELECT lead_time - 2 UNITS DAY FROM manufact
定数の選択
定数式を選択リストにインクルードすると、照会によって戻された各行ご
とに同じ値が戻されます。定数式の構文と使用法の詳しい説明については、
7-380 ページの『定数式』を参照してください。
選択リスト内の定数式の例を次に示します。
図 7-87
選択リスト内の定数式
SELECT "The first name is", fname FROM customer
SELECT TODAY FROM cust_calls
SELECT SITENAME FROM systables WHERE tabid = 1
SELECT lead_time - 2 UNITS DAY FROM manufact
SELECT customer_num + LENGTH("string") from customer
関数式の選択
関数式は、照会の各行について評価する関数を使用する式です。すべての
関数式には引数が必要です。このセットの式には、列名を引数として使用
した時刻関数と長さ関数が含まれています。
選択リスト内の関数式の例をいくつか次に示します。
構文 7-267
SELECT 節
図 7-88
選択リスト内の関数式
SELECT EXTEND(res_dtime, YEAR TO SECOND) FROM cust_calls
SELECT LENGTH(fname) + LENGTH(lname) FROM customer
SELECT HEX(order_num) FROM orders
SELECT MONTH(order_date) FROM orders
集計関数の選択
集計関数は照会した行のセットにつき 1 つの値を戻します。集計関数は、
SELECT 文の WHERE 節によって戻された行のセットに依存する値を使用し
ます。WHERE 節がない場合は、集計関数は、FROM 節によって書式化され
たすべての行に依存する値を使用します。
選択リスト内の集計関数の例をいくつか次に示します。
図 7-89
選択リスト内の集計関数
SELECT SUM(total_price) FROM items WHERE order_num = 1013
SELECT COUNT(*) FROM orders WHERE order_num = 1001
SELECT MAX(LENGTH(fname) + LENGTH(lname)) FROM customer
算術演算子を使用する式の選択
数値式と算術演算子を結合して複雑な式を作成することができます。集計
関数が含まれている式と列式を結合することはできません。次の例は、選
択リスト内で算術演算子を使用する式を示しています。
図 7-90
選択リスト内で算術演算子を使用する式
SELECT stock_num, quantity*total_price FROM customer
SELECT price*2 doubleprice FROM items
SELECT count(*)+2 FROM customer
SELECT count(*)+LENGTH("ab") FROM customer
7-268 IBM Informix SQL リファレンス・ガイド
SELECT 節
表示ラベルの使用
一時表を作成する場合は、単純列式でないすべての列について、表示ラベ
ルを提供する必要があります。表示ラベルは、一時表内の列の名前として
使用されます。
DB
SELECT 文の出力では、表示ラベルはその列の見出しとして表示されま
す。♦
ISQL
ESQL
< 表示ラベル > の値は、sqlda 構造体の sqlname フィールドに格納されま
す。sqlda 構造体の詳細については、本書の第 6 章を参照してください。♦
ビューを作成するときに SELECT 文を使用する場合は、表示ラベルを使用
しないでください。代わりに、必要なラベル名を CREATE VIEW 列リストに
指定してください。
AS キーワードの使用
表示ラベルもキーワードであれば、AS キーワードを表示ラベルと一緒に使
用して、語の使用を明確にすることができます。UNITS、YEAR、MONTH、
DAY、HOUR、MINUTE、SECOND、または FRACTION の各単語を表示ラベル
として使用したい場合は、AS キーワードをこの表示ラベルと一緒に使用し
てください。次の例は、AS キーワードを使用して、minute を表示ラベルと
して使用する方法を示しています。
SELECT call_dtime AS minute FROM cust_calls
構文 7-269
INTO 節
INTO 節
INTO 節は、SELECT 文によって検索されたデータを受け取るためのプログ
ラム変数とホスト変数を指定するために使用します。INTO 節の構文は次の
とおりです。
INTO 節
,
INTO
< データ変数 >
ESQL
+
INDICATOR
< データ
変数 >
:< 標識変数 >
< 標識変数 >
型と順序が選択リスト内の対応する列または式と一致するプ
ログラム変数またはホスト・オブジェクトです。
< 標識変数 > 対応する < データ変数 > に NULL データが入れられた場合
に戻りコードを受け取る、プログラム変数です。
SELECT 文がスタンドアロンの場合、つまり、DECLARE 分の一部でなく、
INTO 節を使用していない場合は、単一の SELECT 文でなければなりません。
単一の SELECT 文は 1 つの行しか戻しません。次の例は、IBM Informix 4GL
における単一の SELECT を示しています。
図 7-91
IBM Informix 4GL における単一の SELECT 文
SELECT fname, lname, company_name
INTO p_fname, p_lname, p_coname
WHERE customer_num = 101
標識変数を持つ INTO 節
SELECT 文から戻されたデータが NULL である可能性がある場合は、標識変
数を使用してください。標識変数の詳細については、埋め込み言語製品の
マニュアルを参照してください。
7-270 IBM Informix SQL リファレンス・ガイド
INTO 節
カーソルを持つ INTO 節
SELECT 文が複数行を戻した場合は、カーソルを使用して、一度に 1 行ずつ
FETCH する必要があります。INTO 節を、SELECT 文ではなく、FETCH 文に
含めることができますが、両方の文に含めることはできません。
次の IBM Informix 4GL コード・フラグメントは、両方とも同等です。
図 7-92
IBM Informix 4GL プログラムにおける SELECT の INTO 節の使用
DECLARE q_curs CURSOR FOR
SELECT lname, company
INTO p_lname, p_company
FROM customer
OPEN q_curs
WHILE status = 0
FETCH q_curs
...
END WHILE
CLOSE q_curs
図 7-93
IBM Informix 4GL プログラムにおける FETCH の INTO 節の使用
DECLARE q_curs CURSOR FOR
SELECT lname, company
FROM customer
OPEN q_curs
WHILE status = 0
FETCH q_curs INTO p_lname, p_company
...
END WHILE
CLOSE q_curs
I4GL
4GL では、FETCH、OPEN、および CLOSE 文の代わりに、FOREACH 文を使用
することができます。
次の IBM Informix 4GL コード・フラグメントは、上記の 2 つの例と同じタス
クを実行します。ただしこの場合は、IBM Informix 4GL でのみ提供される
FOREACH 文を使用します。
構文 7-271
INTO 節
図 7-94
IBM Informix 4GL における FOREACH の使用
DECLARE q_curs CURSOR FOR
SELECT lname, company
FROM customer
FOREACH q_curs INTO p_lname, p_company
...
END FOREACH
♦
SELECT...INTO 照会の PREPARE 文による処理
INTO 節を持つ照会を PREPARE 文で処理することはできません。INTO 節を
持たない照会を PREPARE 文で処理し、PREPARE 文で処理した照会に対し
てカーソルを宣言し、そのカーソルをオープンしてから、INTO 節を持つ
FETCH 文を使用して、カーソルをプログラム変数にフェッチするすること
ができます。あるいは、最初に照会を PREPARE 文で処理しないで照会に
対するカーソルを宣言し、そのカーソルを宣言するときに INTO 節を照会に
インクルードすることもできます。次に、カーソルをオープンし、FETCH
文の INTO 節を使用せずに、カーソルをフェッチします。
INTO 節を持つ配列変数の使用
INTO 節が含まれている SELECT 文と一緒に DECLARE 文を使用し、かつプロ
グラム変数が配列エレメントである場合は、個々の配列エレメントを整定
数または変数で識別することができます。文字部分列として使用する変数
の値はカーソルを宣言するときに決定されるため、一度宣言すれば、文字
部分列変数は定数として働きます。
たとえば、次の IBM Informix 4GL コード・フラグメントは、i および j 変数を
a 配列として使用して、SELECT...INTO のカーソルを宣言します。カーソル
を宣言すれば、SELECT 文の INTO 節は、INTO a[5], a[2] と同等になります。
図 7-95
IBM Informix 4GL における SELECT...INTO 文のカーソルの宣言
LET i = 5
LET j = 2
DECLARE c CURSOR FOR
SELECT order_num, po_num INTO a[i], a[j] FROM orders
WHERE order_num =1005 AND po_num =2865
また、FETCH 文でプログラム変数を使用して、INTO 節でプログラム配列エ
レメントを指定することもできます。FETCH 文の場合、プログラム変数は、
カーソルの宣言時ではなく、各フェッチ時に評価されます。
7-272 IBM Informix SQL リファレンス・ガイド
INTO 節
I4GL
また、FOREACH 文でプログラム変数を使用して、INTO 節でプログラム配列
エレメントを指定することもできます。プログラム変数は、カーソルの宣
言時ではなく、FOREACH 文の各ループで評価されます。♦
エラー検査
INTO 節にリストされた変数の数と SELECT 節内の項目の数が異なる場合は、
SQLWARN 構造体に警告が戻されます。特定の構造体名が次の図に示されて
います。転送された変数の数は、この 2 つの数のうち小さいほうの値です。
SQLWARN 構造体については、本書の第 5 章を参照してください。
ANSI
4GL
ESQL/C
ESQL/COBOL
SQLCA.SQLAWARN[4]
sqlca.sqlwarn.sqlwarn3
SQLWARN3 OF SQLWARN
OF SQLCA
INTO 節にリストされた変数の数と SELECT 節内の項目の数が異なる場合は、
エラーが戻されます。♦
受け取る変数のデータ型と選択した項目のデータ型が一致しない場合は、
変換が可能であれば、選択した項目のデータ型が変換されます。変換が可
能でなければ、エラーが発生し、負の値が状態変数に戻されます。この場
合、プログラム変数の値は予測できません。各アプリケーション開発支援
ツールの状態変数の特定名が、次の図に示されています。
4GL
ESQL/C
ESQL/COBOL
STATUS
SQLCA.SQLCODE
sqlca.sqlcode
SQLCODE
SQLCODE OF SQLCA
構文 7-273
FROM 節
FROM 節
FROM 節は、データを選択する元の表 ( 複数の場合もある ) をリストしま
す。次の図は、FROM 節の構文を示しています。
表名
7-440
ページ
FROM
,
< 表の
別名 >
ビュー名
7-444
ページ
追加表
AS
シノニム名
7-438
ページ
追加表
,
表名
7-440
ページ
< 表の
別名 >
ビュー名
7-444
ページ
+
AS
シノニム名
7-438
ページ
表名
7-440
ページ
OUTER
< 表の
別名 >
ビュー名
7-444
ページ
AS
シノニム名
7-438
ページ
OUTER
(
表名
7-440
ページ
ビュー名
7-444
ページ
シノニム名
7-438
ページ
7-274 IBM Informix SQL リファレンス・ガイド
)
< 表の
別名 >
AS
,
追加表
FROM 節
< 表の別名 > SELECT 文の範囲内で表に関連付けられる名前です。
OUTER キーワードを使用して外部結合を形成します。外部結合は、そうで
ない場合に単純結合によって廃棄される行を保存します。外部結合の詳細
については、IBM Informix SQL チュートリアル・ガイド を参照してください。
表名として別名を指定することができます。その別名を使用して、SELECT
文の他の節に含まれている表を参照することができます。これは特にセル
フ結合の場合に有効です。( セルフ結合の詳細については、7-276 ページの
WHERE 節を参照してください。)
I4GL
FROM 節で指定できる表の別名は、フォーム仕様ファイルの TABLES セク
ションで時々必要になることがある、表の別名とは明確に区別されます。♦
ISQL
次の例は、FROM 節の代表的な使用法を示しています。最初の照会では、
customer 表からすべての列と行を選択します。2 番目の照会では、
customer 表と orders 表の結合を使用して、発注したすべての顧客を選択し
ます。
図 7-96
FROM 節の代表的な使用
SELECT * FROM customer
SELECT fname, lname, order_num
FROM customer, orders
WHERE customer.customer_num = orders.customer_num
次の例は、上例の 2 番目の照会と同じです。ただしこの例は、表の別名を
FROM 節に確立し、それらを WHERE 節で使用している点が異なります。
図 7-97
表の別名の確立と使用
SELECT fname, lname, order_num
FROM customer c, orders o
WHERE c.customer_num = o.customer_num
次の例は、OUTER キーワードを使用して、外部結合を作成し、顧客が発注
したかどうかに関係なく、すべての顧客とその発注内容のリストを作成し
ます。
図 7-98
外部結合の作成
SELECT customer.customer_num, lname, order_num
FROM customer c, OUTER orders o
WHERE c.customer_num = o.customer_num
構文 7-275
WHERE 節
表の別名を持つ AS キーワード
潜在的にあいまいな語を表の別名として使用するには、その語の前に AS
キーワードを付けます。ORDER、FOR、GROUP、HAVING、INTO、UNION、
WHERE、WITH、CREATE、または GRANT の各用語を表の別名として使用し
たい場合は、AS キーワードを使用してください。
WHERE 節
WHERE 節は、選択するデータに対する検索基準と結合条件を指定するため
に使用します。
AND
WHERE
条件
7-350
ページ
結合
7-282
ページ
WHERE 節での条件の使用
WHERE 節では、次の 5 種類の単純条件または比較を使用できます。
!
関係演算子条件
!
BETWEEN
!
IN
!
IS NULL
!
LIKE または MATCHES
7-276 IBM Informix SQL リファレンス・ガイド
WHERE 節
また、WHERE 節内で SELECT 文を使用することもできます。これは副照会
と呼ばれます。副照会 WHERE 節としては、次の 3 種類があります。
!
IN
!
EXISTS
!
ALL/ANY/SOME
それぞれの型の条件の例が以下のセクションで示されています。それぞれ
の種類の条件について詳しくは、7-350 ページの条件セクションを参照して
ください。
集計関数が副照会の一部でない限り、それを WHERE 節で使用することはで
きません。
関係演算子条件
関係演算子条件の詳しい説明については、7-353 ページを参照してくださ
い。
関係演算子条件が満たされるのは、関係演算子の両サイドの式が、演算子
によって設定された関係を満たしたときです。次の SELECT 文は、より大
(>) および等しい (=) 関係演算子を使用しています。
図 7-99
関係演算子条件の例
SELECT order_num FROM orders
WHERE order_date > "6/04/91"
SELECT fname, lname, company
FROM customer
WHERE city[1,3] = "San"
BETWEEN 条件
BETWEEN 条件の詳しい説明については、7-354 ページを参照してください。
BETWEEN 条件が満たされるのは、BETWEEN キーワードの左側にある値が、
BETWEEN キーワードの右側にある 2 つの値の包括的範囲内にあるときで
す。次の例の最初の照会は、BETWEEN キーワードの後で定数値を使用しま
す。3 番目の照会は、CURRENT 関数とリテラル間隔を使用します。この照
会は現在日と 7 日前との間の日付を探します。
構文 7-277
WHERE 節
図 7-100
BETWEEN 条件の例
SELECT stock_num, manu_code FROM stock
WHERE unit_price BETWEEN 125.00 AND 200.00
SELECT DISTINCT customer_num, stock_num, manu_code
FROM orders, items
WHERE order_date BETWEEN "6/1/90" AND "9/1/90"
SELECT * FROM cust_calls WHERE call_dtime
BETWEEN (CURRENT - INTERVAL(7) DAY TO DAY) AND CURRENT
IN 条件
IN 条件の詳しい説明については、7-355 ページを参照してください。
IN 条件が満たされるのは、IN キーワードの左側にある式が、このキーワー
ドの右側にある値のリストにインクルードされているときです。
図 7-101
IN 条件の例
SELECT lname, fname, company
FROM customer
WHERE state IN ("CA","WA", "NJ")
SELECT * FROM cust_calls
WHERE user_id NOT IN (USER )
IS NULL 条件
IS NULL 条件の詳しい説明については、7-356 ページを参照してください。
IS NULL 条件が満たされるのは、この条件に NULL 値が含まれているときで
す。NOT オプションを使用した場合にこの条件が満たされるのは、列に非
NULL 値が含まれているときです。次の例は、注文代金が支払われた注文
番号と顧客番号を選択します。
図 7-102
IS NULL 条件の例
SELECT order_num, customer_num FROM orders
WHERE paid_date IS NULL
LIKE または MATCHES 条件
LIKE または MATCHES 条件の詳しい説明については、7-357 ページを参照し
てください。
7-278 IBM Informix SQL リファレンス・ガイド
WHERE 節
LIKE または MATCHES 条件が満たされるのは、列値が、引用符付きストリ
ングに指定された基準を満たしたときです。
次の SELECT 文は、lname 列がリテラル・ストリング "Baxter" で始まってい
る各行から、customer 表内のすべての列を戻します。このストリングはリ
テラル・ストリングであるため、条件には大文字と小文字の区別がありま
す。
SELECT * FROM customer WHERE lname LIKE "Baxter%"
次の例は、ワイルドカードで LIKE 条件を使用します。最初の SELECT 文
は、何らかの種類のボールであるすべての在庫品目を検索します。2 番目
の SELECT 文は、% 記号が入っているすべての会社名を検索します。バッ
クスラッシュは、ワイルドカード "%" の標準エスケープ文字として使用さ
れています。3 番目の SELECT 文は、LIKE 条件を指定した ESCAPE オプショ
ンを使用して、company 列に % 記号が含まれている customer 表から行を
検索します。z は、ワイルドカード "%" のエスケープ文字として使用されて
います。
図 7-103
LIKE 条件の例
SELECT stock_num, manu_code FROM stock
WHERE description LIKE "%ball"
SELECT * FROM customer
WHERE company LIKE "%\%%"
SELECT * FROM customer
WHERE company LIKE "%z%%" ESCAPE "z"
次の例は、ワイルドカードを持つ MATCHES を使用します。最初の SELECT
文は、何らかの種類のボールであるすべての在庫品目を検索します。2 番
目の SELECT 文は、アスタリスクが入っているすべての会社名を検索しま
す。バックスラッシュは、ワイルドカード "*" の標準エスケープ文字として
使用されています。3 番目の文は、MATCHES 条件を指定した ESCAPE オプ
ションを使用して、company 列にアスタリスクが含まれている customer 表
から行を検索します。z 文字は、ワイルドカード "*" のエスケープ文字とし
て使用されています。
構文 7-279
WHERE 節
図 7-104
MATCHES 条件の例
SELECT stock_num, manu_code FROM stock
WHERE description MATCHES "*ball"
SELECT * FROM customer
WHERE company MATCHES "*\**"
SELECT * FROM customer
WHERE company MATCHES "*z**" ESCAPE "z"
IN 副照会
IN 副照会の詳しい説明については、7-355 ページを参照してください。
IN 副照会では、複数行を戻すことができますが、1 つの列しか戻すことが
できません。次の例は、SELECT 文での IN 副照会の使用法を示しています。
図 7-105
IN 副照会の例
SELECT DISTINCT customer_num FROM orders
WHERE order_num NOT IN
(SELECT order_num FROM items
WHERE stock_num = 1)
EXISTS 副照会
EXISTS 副照会の詳しい説明については、7-361 ページを参照してください。
EXISTS 副照会では、1 つ以上の列を戻すことができます。
EXISTS 副照会を指定した次の SELECT 文は、注文がなかった ( したがって、
items 表にリストされていない ) すべての品目の在庫番号と製造者コードを
戻します。items の stock_num と manu_code の両方を調べるには相関副照
会が必要であるため、この SELECT 文では EXISTS を使用することをお勧め
します。
図 7-106
EXISTS 副照会の例
SELECT stock_num, manu_code FROM stock
WHERE NOT EXISTS
(SELECT stock_num, manu_code FROM items
WHERE stock.stock_num = items.stock_num AND
stock.manu_code = items.manu_code)
上の例では 1 つの行または複数の行を調べているため、この副照会では、
列名の代わりに、SELECT * を使用することもできます。
7-280 IBM Informix SQL リファレンス・ガイド
WHERE 節
ALL/ANY/SOME 副照会
ALL/ANY/SOME 副照会の詳しい説明については、7-362 ページを参照してく
ださい。
次の例の最初の SELECT 文は、注文番号 1023 のすべての品目の合計価格よ
りも大きな合計価格を持つ品目が含まれている、すべての注文の注文番号
を戻します。2 番目の SELECT 文は、MAX 集計関数を使用して同じ結果を出
しますが、こちらのほうが実行が速くなります。
図 7-107
ALL 副照会および同等の集合副照会の例
SELECT DISTINCT order_num FROM items
WHERE total_price > ALL (SELECT total_price FROM items
WHERE order_num = 1023)
SELECT DISTINCT order_num FROM items
WHERE total_price > (SELECT MAX(total_price) FROM items
WHERE order_num = 1023)
次の SELECT 文は、注文番号 1023 の少なくとも 1 つの品目の合計価格より
も大きな合計価格を持つ品目が含まれているすべての注文の注文番号を戻
します。最初の文は ANY キーワードを使用し、2 番目の文は MIN 集計関数
を使用します。
図 7-108
ANY 副照会および同等の集合副照会の例
SELECT DISTINCT order_num FROM items
WHERE total_price > ANY (SELECT total_price FROM items
WHERE order_num = 1023)
SELECT DISTINCT order_num FROM items
WHERE total_price > (SELECT MIN(total_price) FROM items
WHERE order_num = 1023)
副照会が正確に 1 つの値だけを戻すことが分かっている場合は、その副照
会で ANY、ALL、または SOME キーワードを省略することができます。
ANY、ALL、または SOME を省略し、副照会が複数の値を戻した場合は、エ
ラーになります。次の例の副照会は集計関数を使用しているので、1 行し
か戻しません。
図 7-109
ANY、ALL、または SOME キーワードを省略した副照会の例
SELECT order_num FROM items
WHERE stock_num = 9 AND quantity =
(SELECT MAX(quantity) FROM items WHERE stock_num = 9)
構文 7-281
WHERE 節
WHERE 節での結合の使用
WHERE 節で、
ある表の少なくとも 1 つの列と別の表の少なくとも 1 つの列
の間の関係を作成する場合、2 つの表を結合します。結合すると、
一時複合表
が作成されます。この表では、結合条件を満たすそれぞれの行のペア ( それ
ぞれの表から 1 行ずつ ) がリンクされて、1 つの行を形成しています。
2 表結
合、複数表結合、およびセルフ結合を作成できます。
次の図は結合の構文を示しています。
結合
.< 列名 >
表名
7-440
ページ
関係型
演算子
7-434
ページ
< 別名 >
.
< 列名 >
表名
7-440
ページ
< 別名 >
ビュー名
7-444
ページ
ビュー名
7-444
ページ
シノニム名
7-438
ページ
シノニム名
7-438
ページ
< 別名 >
FROM 節で割り当てられた別名です。
< 列名 >
いずれかの表内の列の名前です。
2 表結合
次の例は 2 表結合を示しています。
図 7-110
2 表結合の例
SELECT order_num, lname, fname
FROM customer, orders
WHERE customer.customer_num = orders.customer_num
ただし、2 表が結合された列を選択する必要はありません。
7-282 IBM Informix SQL リファレンス・ガイド
WHERE 節
複数表結合
複数表結合は 3 表以上の結合です。
その構造は 2 表結合の構造と類似してい
ますが、WHERE 節で複数ペアの表に対する結合条件を持つ点が異なります。
他の表の列が同じ名前を持っている場合は、それらを区別するために、
その
名前の前にそれと関連する表名または表別名を入れる必要があります ( た
とえば、table.column)。
表名の構文については、7-440 ページの『表名』
を参照
してください。
次の複数表結合は、品目を注文した顧客の会社名のほか、その品目の在庫
番号と製造者コードも作成します。
図 7-111
複数表結合の例
SELECT DISTINCT company, stock_num, manu_code
FROM customer c, orders o, items i
WHERE c.customer_num = o.customer_num
AND o.order_num = i.order_num
セルフ結合
表をそれ自身と結合することができます。そのためには、FROM 節で表名
を 2 回リストして、それに 2 つの異なる表別名を割り当てる必要がありま
す。これらの別名を使用して、WHERE 節内の “2 つ ” の表を参照します。
次の例は、stock 表でのセルフ結合を示しています。この例は、単価を 2.5
倍したものより大きな単価の在庫品目のペアを検索します。x および y 文
字は、stock 表のそれぞれの別名です。
図 7-112
セルフ結合の例
SELECT x.stock_num, x.manu_code, y.stock_num, y.manu_code
FROM stock x, stock y
WHERE x.unit_price > 2.5 * y.unit_price
外部結合
次の外部結合は、顧客から注文があった場合に、顧客の会社名と、関連す
る注文番号をすべてリストします。注文がなかった場合は、会社名は引き
続きリストされますが、注文番号として NULL 値が戻されます。
構文 7-283
GROUP BY 節
図 7-113
外部結合の例
SELECT company, order_num
FROM customer c, OUTER orders o
WHERE c.customer_num = o.customer_num
外部結合の詳細については、IBM Informix SQL チュートリアル・ガイド を参照
してください。
GROUP BY 節
GROUP BY 節は、各グループごとに単一の結果行を作成するために使用し
ます。グループとは、リストされた各列の値が同じである行のセットです。
,
GROUP BY
< 列名 >
+
< 列名 >
表名
7-440
ページ
.
ビュー名
7-444
ページ
.
シノニム名
7-438
ページ
.
< 選択番号 >
列の名前、または SELECT 節の中の関係演算子によって結合
された一組の列の名前です。BYTE 型または TEXT 型の列をイ
ンクルードしないでください。
< 選択番号 > SELECT 節の中の列または式の配置を表す整数です。
GROUP BY 節を使用すると、SELECT 節に入力できるデータが制限されます。
GROUP BY 節を使用する場合は、選択した各列を GROUP BY リストに入れな
ければなりません。集計関数と 1 つ以上の列式を選択リストで使用する場
合は、集合式または時刻式の一部として使用しない、すべての列名を
GROUP BY 節に含めなければなりません。定数式または BYTE または TEXT
列式を GROUP BY リストに含めないでください。BYTE または TEXT 列を選
択した場合は、GROUP BY 節を使用することはできません。
7-284 IBM Informix SQL リファレンス・ガイド
GROUP BY 節
次の例は、集計式に含まれていない 1 つの列を指名します。total_price 列
は集計関数の引数として現れるので、それを GROUP BY リストに含めない
でください。COUNT および SUM キーワードは各グループに適用されます
が、照会セット全体には適用されません。
図 7-114
GROUP BY 節の例
SELECT order_num, COUNT(*), SUM(total_price)
FROM items
GROUP BY order_num
ある列が選択リストの列式でスタンドアロンであれば、それを GROUP BY
節で使用する必要があります。ある列が算術演算子で他の列と結合されて
いる場合は、個々の列ごとにグループ化することも、選択番号を使用して
結合式ごとにグループ化することもできます。
選択番号の使用
GROUP BY 節で 1 つ以上の整数を使用して列式を表すことができます。次の
例の最初の SELECT 節は、GROUP BY の選択番号 order_date および
paid_date - order_date を使用します。ただし、選択番号表記を使用する以
外に、結合式別にグループ化する方法はありません。2 番目の SELECT 節で
は、2 と paid_date - order_date 式を置き換えることはできません。
図 7-115
GROUP BY 節での選択番号の例
SELECT order_date, COUNT(*), paid_date - order_date
FROM orders
GROUP BY 1, 3
SELECT order_date, paid_date - order_date
FROM orders
GROUP BY order_date, 2
選択番号 ( または列番号 ) が必要になるのは、UNION または UNION ALL
キーワードによって SELECT 文が結合され、互換列の異なる名前が同じ位
置に現れている場合です。
GROUP BY 節の NULL
GROUP BY 節によって指定された列に NULL 値が入っている各行は、単一
のグループに属していると見なされます。つまり、すべての NULL 値が一
緒にグループ化されます。
構文 7-285
HAVING 節
HAVING 節
HAVING 節は、1 つ以上の限定条件をグループに適用するために使用しま
す。
HAVING
条件
7-350 ページ
次の例では、それぞれの条件がグループの 1 つの計算済みプロパティーと、
グループの別の計算済みプロパティーまたは定数とを比較します。最初の
SELECT 文は、計算済み式 COUNT(*) と定数 2 を比較する HAVING 節を使用
します。この照会は、3 品目以上のすべての注文に関する品目当たりの平
均合計価格を戻します。2 番目の SELECT 文は、顧客が同一月に 2 回以上電
話を掛けてきた場合の、顧客名と電話してきた月をリストします。
図 7-116
計算済み値を持つ HAVING 節の使用
SELECT order_num, AVG(total_price) FROM items
GROUP BY order_num
HAVING COUNT(*) > 2
SELECT customer_num, EXTEND (call_dtime, MONTH TO MONTH)
FROM cust_calls
GROUP BY 1, 2
HAVING COUNT(*) > 1
HAVING 節を使用すれば、
GROUP BY 節だけでなく、
計算済み値についても条
件を設定することができます。次の照会は、
customer_num、call_dtime ( 通年
フォーマット )、および cust_code を戻し、
それらを、120 より小さな
customer_num を持つ顧客から掛かってきたすべての電話呼び出しについて
call_code 別にグループ化します。
図 7-117
列値を持つ HAVING 節の使用
SELECT customer_num, EXTEND (call_dtime), call_code
FROM cust_calls
GROUP BY call_code, 2, 1
HAVING customer_num < 120
HAVING 節は、通常、GROUP BY 節を補完します。GROUP BY 節を持たない
HAVING 節を使用すると、HAVING 節は照会を満足するすべての行に適用さ
れます。GROUP BY 節を使用しないと、表内のすべての行が単一のグルー
プを形成します。次の照会は、表に 11 個以上の行が含まれている限り、表
内のすべての値の平均価格を戻します。
7-286 IBM Informix SQL リファレンス・ガイド
HAVING 節
図 7-118
GROUP BY 節を持たない HAVING 節の使用
SELECT AVG(total_price) FROM items
HAVING COUNT(*) > 10
構文 7-287
ORDER BY 節
ORDER BY 節
ORDER BY 節は、1 つ以上の列に含まれている値によって照会結果をソート
するために使用します。
,
ORDER BY
< 列名 >
表名
7-440
ページ
.
ビュー名
7-444
ページ
.
シノニム名
7-438
ページ
.
ASC
DESC
< 選択番号 >
< 表示ラベル >
< 列名 >
照会結果をソートするための基準となる、SELECT 節の列の
名前です。
< 表示
ラベル >
選択リストの列または式に使用される表示ラベルです。
< 選択番号 > SELECT 節の中の列または式の配置を表す整数です。
SELECT 節で指定された列による整列、または列式が入っている式による整
列しか行うことができません。唯一の例外は集計関数です。集計関数は、
ORDER BY 節では使用できません。
次の照会は、orders 表から注文日と出荷日を明示的に選択し、照会を注文
日で整列します。デフォルトでは、照会結果は昇順で整列されます。
図 7-119
列を明示的に選択するときの ORDER BY 節の使用
SELECT order_date, ship_date FROM orders
ORDER BY order_date
次の照会では、order_date 列が SELECT * によって暗黙的に選択されるた
め、order_date を ORDER BY 節で使用することができます。
7-288 IBM Informix SQL リファレンス・ガイド
ORDER BY 節
図 7-120
列を暗黙的に選択するときの ORDER BY 節の使用
SELECT * FROM orders
ORDER BY order_date
導出列による整列
導出列で整列するには、次の例に示されているように、SELECT 節で表示ラ
ベルを指定します。
図 7-121
導出列による整列
SELECT paid_date - ship_date span, customer_num
FROM orders
ORDER BY span
昇順および降順
ASC および DESC キーワードを使用して、昇順 ( 最小値から開始 ) または降
順 ( 最大値から開始 ) を指定することができます。デフォルトの順序は昇順
です。
DATE および DATETIME データ型の場合、
「最小」は時間的に最も早いこと
を意味し、「最大」は時間的に最も遅いことを意味します。文字データ型の
場合は、ASCII 照合順序が使用されます。照合順序のリストについては、
7-435 ページを参照してください。
ORDER BY 節の NULL
NULL 値の順序は非 NULL 値よりも小さくなります。ASC 順序を使用する
と、NULL 値は非 NULL 値の前に来ます。DESC 順序を使用すると、NULL
値は最後になります。
入れ子にした整列
複数列を ORDER BY 節にリストすると、照会は多重ソートによって整列さ
れます。ソートの第 1 レベルは最初の列に基づきます。2 番目の列は 2 次レ
ベルのソートを決定します。たとえば、次の照会は、cust_calls 表内のすべ
ての行を選択してから、それらを call_code 内で call_code および call_dtime
によって整列します。
構文 7-289
INTO TEMP 節
図 7-122
多重ソート
SELECT * FROM cust_calls
ORDER BY call_code, call_dtime
選択番号の使用
列名の場所に、SELECT 節で項目位置を参照する 1 つ以上の整数を入力する
ことができます。選択番号を使用して式別に整列することができます。た
とえば、次の照会は、paid_date- order_date および customer_num 式別に整
列します。
図 7-123
多重ソートでの選択番号の使用
SELECT order_num, customer_num, paid_date - order_date
FROM orders
ORDER BY 3, 2
選択番号が ORDER BY 節で必要になるのは、SELECT 文を UNION または
UNION ALL キーワードで結合する場合に、同じ位置の互換列が異なる名前
を持っているときです。
DECLARE による ORDER BY 節
I4GL
ORDER BY 節を持つ SELECT 文にカーソルを関連付けるために、FOR
UPDATE 節を持つ DECLARE 文を使用することはできません。♦
ESQL
INTO TEMP 節
INTO TEMP
< 一時表名 >
WITH NO LOG
< 一時表名 > 表の単純名です。7-440 ページの表名セグメントで説明されて
いるどの拡張構文も使用することはできません。7-403 ペー
ジの識別子セグメントで説明されている規則に従ってくださ
い。
INTO TEMP 節は、照会結果が含まれている一時表を作成します。
7-290 IBM Informix SQL リファレンス・ガイド
INTO TEMP 節
一時表は、常に、ルート DB 領域に配置されています。一時表の初期エク
ステントと次のエクステントは、常に 8 ページです。
一時表が消失するのは、ユーザーのプログラムが終了したとき、または一
時表に対して DROP TABLE 文を出したときです。データベースがロギング
を持っていない場合や、データベースはロギングを持っているが、WITH
NO LOG キーワードを指定しないで一時表を作成した場合は、現行データ
ベースをクローズしたときに一時表が消失します。
同じ照会結果を複数回使用する場合は、一時表が時間を節約します。さら
に、INTO TEMP 節を使用すれば、多くの場合、より明確でより分かりやす
い SELECT 文を作成することができます。ただし、一時表のデータは静的
になります。つまり、一時表を作成するために使用する表に変更を加えて
も、そのデータは更新されません。
一時表の列名は、SELECT 節で指名された列名です。単純列式以外のすべて
の式に対して表示ラベルを提供する必要があります。列または式の表示ラ
ベルは、一時表では列名になります。列式に表示ラベルを提供しないと、
一時表は選択リストから取得した列名を使用します。たとえば、次の照会
は、2 つの列 customer_num および slowdate を持つ pushdate 表を作成しま
す。
図 7-124
一時表の作成
SELECT customer_num, call_dtime + 5 UNITS DAY
FROM cust_calls INTO TEMP pushdate
一時表にインデックスを書き込むことができます。
INTO TEMP 節および INTO
I4GL
ESQL
INTO TEMP 節を持つ INTO オプションを使用しないでください。使用する
と、プログラム変数に結果が戻されず、sqlcode 変数が負の値に設定されま
す。各製品の sqlcode 変数が次に示されています。
4GL
ESQL/C
ESQL/COBOL
STATUS
SQLCA.SQLCODE
sqlca.sqlcode
SQLCODE
SQLCODE OF SQLCA
♦
構文 7-291
UNION 演算子
WITH NO LOG オプション
WITH NO LOG キーワードを使用した場合は、一時表に対する操作はトラン
ザクション・ログ操作にインクルードされません。このオプションを使用
して、トランザクション・ロギングのオーバーヘッドを削減することがで
きます。
UNION 演算子
UNION 演算子を 2 つの SELECT 文の間に入れて、複数の照会を単一の照会
に結合します。UNION 演算子を使用して、複数の SELECT 文をまとめてス
トリング化することができます。対応する項目は同じ名前でなくても構い
ません。
結合した SELECT に対する制限
UNION 演算子に接続できる照会には、次のようないくつかの制限がありま
す。
!
各照会の SELECT 節に含まれる項目の数は同じでなければならず、
各 SELECT 節内の対応する項目は互換性のあるデータ型を持ってい
なければならない。
!
ORDER BY 節を使用する場合、その節は、最後の SELECT 節の次に
配置しなければならず、識別子ではなく、整数によって整列され
た、項目を参照しなければならない。整列操作は、設定操作が完了
した後に行われる。
I4GL
ESQL
!
副照会の内部で、またはビューの定義で UNION 演算子を使用する
ことはできない。
!
複合照会が正確に 1 つの行を戻すということが確認でき、かつカー
ソルを使用していない場合を除き、INTO 節を照会に使用すること
はできない。この場合、INTO 節は、最初の SELECT 文に入っていな
ければならない。♦
UNION 演算子の結果を一時表に入れるには、INTO TEMP 節を最後の SELECT
文に入れます。
ISQL
表示される列名は、最初の SELECT 文の列名または表示ラベルです。♦
7-292 IBM Informix SQL リファレンス・ガイド
参考資料
結合した SELECT の重複行
UNION 演算子だけを使用する場合は、行の完全セットから重複行が削除さ
れます。つまり、各列の同一値が複数の行に含まれている場合は、1 行の
みが保持されます。UNION ALL 演算子を使用する場合は、選択したすべて
の行が戻されます ( 重複行は削除されません )。たとえば、次の照会は、
UNION ALL 演算子を使用して、2 つの SELECT 文を結合しますが、重複の削
除は行いません。この照会は、1990 年の第 1 四半期から 1991 年の第 1 四半
期までの間に受けたすべての電話のリストを戻します。
図 7-125
UNION ALL 演算子による 2 つの SELECT 文の接続
SELECT customer_num, call_code FROM cust_calls
WHERE call_dtime BETWEEN
DATETIME (1990-1-1) YEAR TO DAY
AND DATETIME (1990-3-31) YEAR TO DAY
UNION ALL
SELECT customer_num, call_code FROM cust_calls
WHERE call_dtime BETWEEN
DATETIME (1991-1-1)YEAR TO DAY
AND DATETIME (1991-3-31) YEAR TO DAY
重複の削除を行いたい場合は、ALL キーワードを指定せずに、UNION 演算
子を照会で使用してください。上の例では、customer_num と call_code の組
み合わせ 101B というデータが両方の SELECT 文で戻された場合、UNION 演
算子がその組み合わせを 1 回だけリストに出しました。( 各 SELECT 文から
重複を削除したい場合は、7-265 ページに示されているように、SELECT 節
で DISTINCT キーワードを使用してください。)
参考資料
IBM Informix SQL チュートリアル・ガイド では、外部結合の説明を参照してく
ださい。
構文 7-293
SET CONSTRAINTS
SET CONSTRAINTS
目的
SET CONSTRAINTS 文は、ログ機能付きのデータベースで実効確認をオフや
オンに切り替えるために使用します。
構文
OL
+
SET
CONSTRAINTS
ALL
IMMEDIATE
,
DEFERRED
制約名
7-365 ページ
使用法
デフォルトの制約確認モードは IMMEDIATE です。SET CONSTRAINTS 文を
IMMEDIATE に設定すると、実効確認がオンに切り替わり、指定されたすべ
ての制約が各 INSERT、UPDATE、または DELETE 文の終了時に検査されま
す。制約エラーが発生した場合は、この文は実行されません。
SET CONSTRAINTS 文を DEFERRED に設定すると、実効確認がオフに切り替
わり、指定されたすべての制約は、トランザクションがコミットされるま
で検査されません。トランザクションのコミット中に制約エラーが発生し
た場合は、トランザクションがロールバックされます。ログ機能付きデー
タベースでは、制約は DEFERRED にしか設定できません。
SET CONSTRAINTS 文の継続時間は、それが実行されるトランザクションで
す。SET CONSTRAINTS 文をトランザクションの外部で実行することはでき
ません。COMMIT または ROLLBACK WORK 文が正常に終了した場合は、す
べての制約の制約モードが IMMEDIATE に復帰します。
DEFERRED から実効確認に復帰するには、SET CONSTRAINTS を IMMEDIATE
に設定するか、COMMIT または ROLLBACK 文をトランザクションで使用し
てください。
7-294 IBM Informix SQL リファレンス・ガイド
参考資料
列 (NOT NULL 制約が指定されていない ) または列のセットに対して明示的
に NOT NULL 制約を据え置くことはできません。ただし、主キー制約の検
査を据え置く場合は、その列または列のセットに対する NOT NULL 制約の
検査も据え置かれます。すべての NOT NULL 制約の検査を据え置くには、
すべての制約を据え置く必要があります。
参考資料
本書では、CREATE TABLE 文を参照してください。
構文 7-295
SET DEBUG FILE TO
SET DEBUG FILE TO
目的
SET DEBUG FILE TO 文は、ストアード・プロシージャーの実行時トレース出
力を保持するためのファイルを指名するために使用します。
構文
DB
ESQL
+
SET DEBUG FILE TO
"< ファイル名 > "
< 変数名 >
WITH APPEND
< 文字式 >
< 文字式 >
使用可能なファイル名を評価する任意の式です。
< ファイル
名>
トレース文出力を含むファイルのフル パスおよびファイル名
です。
< 変数名 >
トレース文出力を含むファイルのフル パスおよびファイル名
が含まれている文字変数です。
使用法
この文は、プロシージャー TRACE 文の出力を filename で示されたファイル
に出すことを示します。WITH APPEND オプションは、そのファイルが存在
する場合、それに追加することを示します。WITH APPEND キーワードを使
用しない場合は、このファイルは、同じファイル名を指定して別の SET
DEBUG FILE TO 文を出したときに上書きされます。
7-296 IBM Informix SQL リファレンス・ガイド
参考資料
STAR
INET
ローカル・データベース上の単純ファイル名を指定して SET DEBUG FILE TO
文を起動すると、出力ファイルは現行ディレクトリーに配置されます。現
行のデータベースが他のデータベース・サーバーにある場合は、出力ファ
イルは、データベース・サーバーがあるマシン上のホーム・ディレクト
リーに配置されます。デバッグ・ファイルに対して絶対パス名を指定する
と、データベース・サーバーがあるマシン上の指定ディレクトリーおよび
ファイルに入れられます。ディレクトリーへの書き込み権限がない場合は、
エラーが戻されます。♦
SET DEBUG FILE TO 文によってオープンされたファイルをクローズするに
は、別のファイル名を指定して別の SET DEBUG FILE TO 文を出してくださ
い。そうすると、最初のファイルの内容を編集することができます。
プロシージャーの外部で SET DEBUG FILE TO 文を使用して、プロシー
ジャーのトレース出力をファイルに送信することができます。この文をプ
ロシージャーの内部で使用して独自の出力をリダイレクトすることもでき
ます。
次の例は、SET DEBUG FILE TO 文の出力を debugging.out というファイルに
送信します。
SET DEBUG FILE TO "debugging" || ".out"
参考資料
本書では、セクション 8-14 ページの『プロシージャーのデバッグ』および
8-79 ページの TRACE 文を参照してください。
IBM Informix SQL チュートリアル・ガイド では、ストアード・プロシージャー
の説明を参照してください。
構文 7-297
SET DESCRIPTOR
SET DESCRIPTOR
目的
SET DESCRIPTOR 文は、次の 3 つのインスタンスで値をシステム記述子領域
に割り当てるために使用します。
!
システム記述子領域で記述を提供する項目の数に一致するように、
システム記述子領域の COUNT フィールドを設定する。( これらの
項目は、通常、WHERE 節の項目です。)
!
システム記述子領域で記述を提供する各値に対して項目記述子
フィールドを設定する。( これらの項目は、通常、WHERE 節の項目
です。)
!
DESCRIBE 文を使用して、SELECT または INSERT 文のフィールドを
充てんした後に、項目記述子フィールドの内容を修正する。
7-298 IBM Informix SQL リファレンス・ガイド
構文
構文
ESQL
SET DESCRIPTOR
"
< 記述子 >
"
COUNT
=
<値>
< カウント
変数 >
< 記述子
変数 >
VALUE
< 項目
番号 >
,
項目記述子
情報
< 項目
番号
変数 >
項目
記述子情報
=
TYPE
< リテラル整数 >
< 整数ホスト
変数 >
LENGTH
PRECISION
SCALE
NULLABLE
INDICATOR
DATA
ITYPE
IDATA
ILEN
NAME
=
リテラル番号
7-427 ページ
リテラル日時
(DATETIME) 型
7-421 ページ
リテラル時間隔
(INTERVAL) 型 7-424 ページ
引用符付きストリング
7-431 ページ
< データ変数 >
< カウント
変数 >
システム記述子領域で記述する回数を指定するリテラル整数
を保持する変数です。その値は、システム記述子領域の項目
記述子の数 ( システム記述子領域を割り当てるときに設定さ
れる ) 以下でなければなりません。
< データ
変数 >
設定するフィールドに適した情報が含まれているホスト変数
です。
< 記述子 >
現在割り当てられているシステム記述子領域を識別するスト
リングです。
構文 7-299
使用法
< 記述子
変数 >
現在割り当てられているシステム記述子領域を識別するスト
リングが含まれている埋め込み変数名です。
< 整数ホスト 示されたフィールドに適した整数値が含まれている変数の名
変数 >
前です。TYPE フィールドについては、整数コードとデータ
型の間の対応関係が 7-301 ページの 図 7-127 に示されていま
す。
< 項目番号 > 記述子領域内のいずれかの項目を表す符号なし整数です。
< 項目番号
変数 >
記述子領域内のいずれかの項目を表す符号なし整数が含まれ
ている整ホスト変数の名前です。
< リテラル
整数 >
項目のデータ型を表す正の非ゼロ整数です。整数コードと
データ型の対応関係が 7-301 ページの 図 7-127 に示されてい
ます。
<値>
システム記述子領域で記述する回数を指定するリテラル整数
です。その値は、システム記述子領域の項目記述子の数 ( シ
ステム記述子領域を割り当てるときに設定される ) 以下でな
ければなりません。
使用法
識別されたいずれかのシステム記述子フィールドへの割り当てを実行中に
エラーが発生した場合は、その変数の型に応じて、識別されたすべての
フィールドの内容はゼロまたは NULL に設定されます。
COUNT オプション
COUNT オプションは、システム記述子領域で使用する項目の数を設定する
ために使用します。
使用する項目の数より多い項目をシステム記述子領域に割り当てた場合
は、COUNT フィールドを実際に使用する項目の数に設定する必要がありま
す。たとえば、図 7-126 の文のシーケンス (IBM Informix ESQL/C を使用して
表示 ) をプログラムで使用することができます。
7-300 IBM Informix SQL リファレンス・ガイド
使用法
図 7-126
ESQL/C を使用してシステム記述子の COUNT フィールドを設定する例
EXEC SQL BEGIN DECLARE SECTION;
INT count, itemno, type, length;
CHAR chval[21];
EXEC SQL END DECLARE SECTION;
ALLOCATE DESCRIPTOR 'desc_100'; /*allocates for 100 items*/
count = 2;
EXEC SQL SET DESCRIPTOR 'desc_100' COUNT = :count;
VALUE オプション
VALUE オプションは、システム記述子領域の特定の項目に関する値をホス
ト変数からフィールドに割り当てるために使用します。記述を提供する項
目の値 ( たとえば、WHERE 節のパラメーター ) を割り当てることもできる
し、DESCRIBE 文の処理中にデータベース・サーバーによって記述された項
目の値を修正することもできます。
TYPE フィールドの設定
図 7-127 に示されているコードのセットを使用して、各項目の TYPE の値
を設定します。
図 7-127
データ型整定数のリスト
SQL データ型
整数値
CHAR
0
SMALLINT
1
INTEGER
2
FLOAT
3
SMALLFLOAT
4
DECIMAL
5
SERIAL
6
DATE
7
(2 の 1)
構文 7-301
使用法
SQL データ型
整数値
MONEY
8
DATETIME
10
BYTE
11
TEXT
12
VARCHAR
13
INTERVAL
14
(2 の 2)
図 7-128 は、ESQL/C における TYPE フィールドの設定方法を示しています。
図 7-128
ESQL/C を使用した TYPE 設定の例
main()
{
$int count, itemno, type, length;
...
$ALLOCATE DESCRIPTOR 'desc1' WITH MAX 5;
...
$SET DESCRIPTOR "desc1" VALUE 2 TYPE = 5;
type = 2; itemno = 3;
$SET DESCRIPTOR "desc1" VALUE $itemno TYPE = $type;
}
-xopen オプションを使用してコンパイルしない場合は、標準の Informix
SQL コードが TYPE に割り当てられます。通常モードと X/Open モードを混
合しないようにしてください。混合すると、エラーになります。たとえば、
特定の型が X/Open モードのもとでは定義されていないが、通常モードのも
とでは定義されている場合、SET DESCRIPTOR 文を実行するとエラーになる
ことがあります。
7-302 IBM Informix SQL リファレンス・ガイド
使用法
X/Open プログラムでの TYPE フィールドの設定
X/O
X/Open モードでは、TYPE フィールドのデータ型に対して X/Open セットの
整数コードを使用する必要があります。データ型ごとの X/Open コードが
図 7-129 に示されています。
図 7-129
X/Open データ型コード
SQL データ型
整数値
CHAR
1
SMALLINT
4
INTEGER
5
FLOAT
6
DECIMAL
3
SET DESCRIPTOR 文で ILENGTH、IDATA、または ITYPE フィールドを使用す
ると、警告メッセージが出ます。この警告メッセージは、これらのフィー
ルドが、システム記述子領域にとって標準の X/Open フィールドでないこと
を示しています。♦
DATA フィールドの設定
DATA フィールドを設定するときは、適切なデータの型 (CHAR または
VARCHAR の場合は文字ストリング、INTEGER の場合は整数、など ) を指定
する必要があります。
DATA 以外の値を設定すると、DATA は未定義になります。ある項目に対し
て TYPE が設定されていない場合は、その項目に対して DATA フィールドを
設定することはできません。ある項目に対して TYPE フィールドを文字型
に設定する場合は、LENGTH フィールドも設定する必要があります。文字
項目に対して LENGTH フィールドを設定しないと、エラーになります。
構文 7-303
使用法
DECIMAL または MONEY 型の使用
DECIMAL または MONEY 型に対して TYPE フィールドを設定し、デフォル
ト値以外の小数点以下桁数または精度を使用したい場合は、SCALE および
PRECISION フィールドを設定してください。DECIMAL または MONEY 項目
に対して LENGTH フィールドを設定する必要はありません。LENGTH フィー
ルドは、提供された SCALE および PRECISION に適宜設定されます。
DATETIME または INTERVAL 型の使用
TYPE フィールドに DATETIME または INTERVAL 値を設定する場合は、DATA
フィールドを DATETIME または INTERVAL リテラルとして設定することも、
文字ストリングとして設定することもできます。文字ストリングを使用す
る場合は、LENGTH フィールドをエンコードされた修飾子の値に設定する
必要があります。
E/C
DATETIME または INTERVAL 文字ストリングのエンコードされた修飾子を決
定するには、datetime.h ヘッダー・ファイルに日時 (DATETIME) 型および
時間隔 (INTERVAL) 型マクロを使用してください。
DATA を DATETIME または INTERVAL のホスト変数に設定する場合は、
LENGTH をエンコードされた修飾子整数に明示的に設定する必要はありま
せん。♦
E/CO
DATETIME または INTERVAL 文字ストリングのエンコードされた修飾子を決
定するには、ECO-IQL ルーチンを使用します。♦
INDICATOR フィールドの設定
NULL 値をシステム記述子領域に入れたい場合は、INDICATOR フィールド
を -1 に設定し、DATA フィールドを設定しないでください。
INDICATOR フィールドを 0 ( データが NULL でないことを示す ) に設定する
場合は、DATA フィールドを設定する必要があります。
ITYPE フィールドの設定
ITYPE フィールドには、標識変数のデータ型を示す整定数が必要です。
TYPE フィールドの場合と同じセットの定数を使用してください。それらの
定数が図 7-127 にリストされています。
7-304 IBM Informix SQL リファレンス・ガイド
参考資料
DESCRIBE 文によって設定された値の修正
システム記述子領域の内容が DESCRIBE 文によって設定された後に、それ
らを修正することができます。
E/CO
SELECT または INSERT 文で DESCRIBE 文を使用したら、TYPE フィールドが
11 または 12 ( データ型が TEXT であるか、BYTE であるかを示す ) のどちら
に設定されているかを調べる必要があります。TYPE に 11 または 12 が含ま
れている場合は、SET DESCRIPTOR 文を使用して、TYPE を 116 にリセットし
て FILE 型を示す必要があります。♦
参考資料
本書では、動的 SQL 分の詳細について、ALLOCATE DESCRIPTOR、
DEALLOCATE DESCRIPTOR、DECLARE、DESCRIBE、EXECUTE、FETCH、GET
DESCRIPTOR、OPEN、PREPARE、 および PUT 文を参照してください。
システム記述子領域の詳細については、第 6 章、
『記述子の使用』を参照し
てください。
構文 7-305
SET EXPLAIN
SET EXPLAIN
目的
SET EXPLAIN 文は、照会の実行で必要な作業のメジャーを取得するために
使用します。
構文
+
SET EXPLAIN
OFF
ON
使用法
SET EXPLAIN 文は、データベース・サーバー最適化フェーズで実行されま
す。このフェーズは、照会の開始時に行われます。カーソル関連の照会の
場合は、照会はカーソルのオープン時に開始されます。
SET EXPLAIN ON 文を出すと、後続のすべての照会のアクセス手順とオプ
ティマイザーによって選択されたパスが、sqexplain .out という名前でファ
イルの現行ディレクトリーに渡されて格納されます。このファイルがすで
に存在している場合は、後続の出力がそれに追加されます。
SET EXPLAIN ON 文は、ユーザーが別の SET EXPLAIN 文を出すまで、または
プログラムが終了するまで有効です。
SET EXPLAIN 出力
SET EXPLAIN 出力ファイルには、照会のコピー、データベース・サーバー・
オプティマイザーによって選択された計画、および処理する作業量の見積
値が入っています。オプティマイザーは、インデックスの存在と型、およ
び各表内の行数に基づいて、照会の最も効率的な実行方法としてこの計画
を選択しています。
7-306 IBM Informix SQL リファレンス・ガイド
SET EXPLAIN 出力
作業の見積値は、1 つパスのコストと別のパスのコストを比較するために
使用できる重み付けの合計値です。作業の見積値は任意の単位で表されま
す。単一のディスク・アクセスが 1 つの単位になり、それを基準として他
のアクションが評価されます。ただし、合計値は直接、時間に変換されず、
照会のための作業とそれに使用されるリソースとの間には直接的な相関関
係はありません。一般に、照会の見積値が高くなると、見積値の低い照会
よりも実行時間が長くなる傾向があります。
数字による見積もりに加え、出力ファイルには次の情報も含まれています。
!
戻される行の推定数
!
オプティマイザーが表にアクセスする順序
!
オプティマイザーが各表を読み取るために使用する以下のいずれか
のメソッド ( アクセス・パス )。
!
SEQUENTIAL
SCAN
行を順々に読み取ります。
INDEX PATH
1 つ以上のインデックスを走査します。
AUTOINDEX
PATH
一時インデックスを作成します。
SORT SCAN
先行の結合または表走査の結果をソートします。
MERGE JOIN
入れ子ループ結合ではなく、ソート・マージ結合
を使用します。
フィルターとして機能するテーブル列 ( 複数の場合もある )、および
フィルター操作をインデックスを介して行うかどうか
出力ファイルでは、表所有者の名前が表名の前に示されます。
結合がインクルードされている照会に関して戻された情報は正確でないこ
とがあります。結合内の列がインデックス付けされている場合は、情報の
信頼性は高まりますが、まだ不正確な部分があります。
オプティマイザーは実行のための最適パスを選択して、可能な最速の表結
合を作成します。つまり、入れ子ループ結合、ソート / マージ結合、また
はこの両者を組み合わせたものです。ソート / マージ結合を使用すると、
SORT SCAN および MERGE JOIN の語で始まる 2 行が 出力ファイルに現れま
す。
構文 7-307
SET EXPLAIN 出力
SORT SCAN セクションは、前の結合または表走査の結果のソートをソート /
マージ結合に備えて実行することを示します。このセクションには、ソー
ト・キーを形成する列のリストが含まれています。列の順序はソートの順
序です。インデックスの場合と同様に、デフォルトの順序は 昇順 です。可
能であれば、要求された任意の ORDER BY または GROUP BY 節をサポート
するようにこの順序を調整します。
MERGE JOIN セクションは、前の結合 / 表ペアに対して、入れ子ループ結合
( 暗黙の ) ではなく、ソート / マージ結合を使用することを示します。この
セクションには、ソート / マージ結合を制御するフィルターのリストが含
まれており、また該当する場合は、他のすべての結合フィルターのリスト
も含まれています。たとえば、フィルター A.c1= B.c1 および A.c2 < B.c2 を持
つ表 A と表 B の結合は、最初の表を 「Merge Filters」の下に、2 番目の表を
「Other Join Filters」の下にリストします。
STAR
INET
SET EXPLAIN 文をホーム・マシンで起動すると、出力ファイルは現行ディ
レクトリーに配置されます。現行のデータベースが他のマシン上にある場
合は、出力ファイルは引き続きローカル・マシンに送られます。
また出力ファイルには、次のように、6 番目の型の表アクセスを含めるこ
とができます。
REMOTE PATH ♦
SE
他のデータベースにアクセスします ( 分散データベース
のみ )。
IBM Informix SE データベース・サーバーが生成する照会処理統計の数は、
IBM Informix OnLine データベース・サーバーから提供される統計の数より
も少なくなります。その結果、IBM Informix OnLine を使用している場合は、
IBM Informix SE を使用している場合よりも、コストと戻される行数に関する
見積もりが正確になります。結合をインクルードする照会について戻され
る見積もりは非常に不正確になる傾向があります。♦
次の出力例は、IBM Informix OnLine を使用して SET EXPLAIN ON 文を出した
ときに表示される出力を表しています。
最初の 2 つの例には、複数表照会のための 2 つの項目が含まれており、こ
こには SORT SCAN 行と MERGE JOIN 行が示されています。ただし、いずれ
の場合も、SORT MERGE を選択しなければ、自動作成されたインデックス・
パス を使用して、2 番目の表が走査されたはずです。
7-308 IBM Informix SQL リファレンス・ガイド
SET EXPLAIN 出力
図 7-130
複数表項目と MERGE JOIN の出力例
QUERY:
----------select i.stock_num from items i, stock s, manufact m
where i.stock_num = s.stock_num
and i.manu_code = s.manu_code
and s.manu_code = m.manu_code
Estimated Cost: 52
Estimated # of Rows Returned: 130
1) rdtest.m: SEQUENTIAL SCAN
SORT SCAN: rdtest.m.manu_code
2) rdtest.s: SEQUENTIAL SCAN
SORT SCAN: rdtest.s.manu_code
MERGE JOIN:
Merge Filters: rdtest.m.manu_code = rdtest.s.manu_code
3) rdtest.i: INDEX PATH
(1) Index Keys: stock_num manu_code
Lower Index Filter: (rdtest.i.stock_num = rdtest.s.stock_num AND
rdtest.i.manu_code = rdtest.s.manu_code)
QUERY:
----------select stock.description from stock, stock2
where stock.description = stock2.description
and stock.unit_price < stock2.unit_price
Estimated Cost: 15
Estimated # of Rows Returned: 370
1) rdtest.stock: SEQUENTIAL SCAN
SORT SCAN: rdtest.stock.description
2) rdtest.stock2: SEQUENTIAL SCAN
SORT SCAN: rdtest.stock2.description
MERGE JOIN
Merge Filters: rdtest.stock2.description = rdtest.stock.description
Other Join Filters: rdtest.stock.unit_price < rdtest.stock2.unit_price
次の出力例には、customer 表から取得した簡単な照会と複雑な照会の項目
が含まれています。
構文 7-309
SET EXPLAIN 出力
図 7-131
簡単な照会と複雑な照会の SET EXPLAIN の結果
QUERY:
----------SELECT fname, lname, company FROM customer
Estimated Cost: 3
Estimated # of Rows Returned: 28
1) joe.customer: SEQUENTIAL SCAN
QUERY:
-----SELECT fname, lname, company FROM customer
WHERE company MATCHES "Sport*" AND customer_num BETWEEN 110 AND 115
ORDER BY lname;
Estimated Cost: 4
Estimated # of Rows Returned: 1
Temporary Files Required For: Order By
1) joe.customer: INDEX PATH
Filters: joe.customer.company MATCHES 'Sport*'
(1) Index Keys: customer_num
Lower Index Filter: joe.customer.customer_num >= 110
Upper Index Filter: joe.customer.customer_num <= 115
次の出力例は、複数表照会のための項目を持つ出力ファイルから取得した
ものです。
図 7-132
複数表照会の SET EXPLAIN の結果
QUERY:
----------SELECT * FROM customer, orders, items
WHERE customer.customer_num = orders.customer_num
AND orders.order_num = items.order_num
Estimated Cost: 20
Estimated # of Rows Returned: 69
1) joe.orders: SEQUENTIAL SCAN
2) joe.customer: INDEX PATH
(1) Index Keys: customer_num
Lower Index Filter: joe.customer.customer_num = joe.orders.customer_num
3) joe.items: INDEX PATH
(1) Index Keys: order_num
Lower Index Filter: joe.items.order_num
7-310 IBM Informix SQL リファレンス・ガイド
= joe.orders.order_num
参考資料
参考資料
IBM Informix SQL チュートリアル・ガイド では、SET EXPLAIN の説明を参照し
てください。
構文 7-311
SET ISOLATION
SET ISOLATION
目的
SET ISOLATION 文は、同一行を同時にアクセスしようとするいくつかのプ
ロセス間の並行性の度合いを定義するために、IBM Informix OnLine データ
ベース・サーバーで使用します。
構文
OL
+
SET ISOLATION TO
DIRTY READ
COMMITTED READ
CURSOR STABILITY
REPEATABLE READ
使用法
データベース排他レベルは、行をデータベースから検索するときの並行性
に影響を与えます。IBM Informix OnLine は、共有ロックを使用して、デー
タにアクセスしようとするいくつかのプロセス間の 4 つの排他レベルをサ
ポートします。
特定のデータベースのデフォルト排他レベルは、データベース型に従って
データベースを作成するときに確立されます。各データベース型のデフォ
ルト排他レベルは次のとおりです。
DIRTY READ
ロギングなしのデータベースにおけるデフォルトの排他レベ
ル
COMMITTED ANSI 準拠でない、ログ機能付きデータベースにおけるデフォ
READ
ルトの排他レベル
REPEATABLE ANSI 準拠データベースにおけるデフォルトの排他レベル
READ
7-312 IBM Informix SQL リファレンス・ガイド
排他レベル
デフォルトのレベルは、ユーザーが SET ISOLATION 文を出すまで有効に
なっています。SET ISOLATION 文を実行すると、新規排他レベルは、ユー
ザーが別の SET ISOLATION 文を出すか、またはプログラムが終了するまで、
有効になっています。
排他レベルは、データを更新または削除するプロセスを妨げません。更新
または削除プロセスでは、常に、変更する行の排他ロックが必要です。
排他レベル
以下の定義は、各排他レベルの重要な特性を説明しています。これらの排
他レベルは、最も低い排他レベルから最も高い排他レベルへリストされて
います。
DIRTY READ
まったく排他を行いません。単純読み込みは、照会に使用す
る静的表の場合に適しています。単純読み込み排他レベルを
使用すれば、照会で幻行 を戻すことができます。つまり、ト
ランザクション内で挿入または変更した非コミット行が後で
ロールバックされます。その他の排他レベルでは幻行にアク
セスすることはできません。トランザクションを持たない
データベースで使用できる排他レベルは、単純読み込みだけ
です。
COMMITTED 検索するすべての行が、検索時に表でコミットされることを
READ
保証します。ただし、その場合でも、ロックは獲得されませ
ん。1 つのプロセスがある行を使用しているときに、他のプ
ロセスは、その行に対する排他ロックを獲得し、行のデータ
を修正または削除することができます。コミット読み込み
は、ANSI 準拠でない、ログ機能付きデータベースにおけるデ
フォルトの排他レベルです。
構文 7-313
排他レベルの影響
CURSOR
STABILITY
選択した行に対する共有ロックを獲得します。他のプロセス
もその行に対する共有ロックを獲得できますが、どのプロセ
スもその行のデータを修正するための排他ロックを獲得する
ことはできません。ユーザーが他の行を取り出すかカーソル
をクローズすると、IBM Informix OnLine は共有ロックをアン
ロックします。
REPEATABLE トランザクション中に選択したすべての行に対する共有ロッ
READ
クを獲得します。他のプロセスも選択した行に対する共有
ロックを獲得できますが、どのプロセスもトランザクション
中に選択した行を修正することはできません。トランザク
ション中に照会を反復すると、同じ情報を再読み取りしま
す。共有ロックが解放されるのは、トランザクションがコ
ミットまたはロールバックされたときだけです。繰り返し可
能読み込みは、ANSI 準拠データベースにおけるデフォルトの
排他レベルです。
排他レベルの影響
ロギングなしのデータベースにデータベース排他レベルを設定することは
できません。この種のデータベースでの検索はすべて単純読み込みとして
行われます。
バイナリー・ラージ・オブジェクト (BLOB) 検索で取得したデータは、デー
タベース排他レベルに応じて異なります。単純読み込みまたはコミット読
み込みの排他レベルでは、プロセスは、削除された ( 削除がまだコミット
されていない場合 ) か、または削除中の BLOB を読み取ることができます。
つまり、これらの排他レベルでは、アプリケーションで削除済みの BLOB
を読み取ることができる特定の条件が存在します。
ISQL
STAR
IBM Informix SQL および DB-Access は、明示的なカーソルを使用しません。
コミット読み込み排他レベルとカーソル安定性排他レベルは、同じような
効果を持っていますが、カーソル安定性を起動した場合のほうが検索はよ
り低速になります。♦
データベースがオープンされた後でのみ、クライアント・マシンから SET
ISOLATION 文を出すことができます。♦
INET
7-314 IBM Informix SQL リファレンス・ガイド
参考資料
I4GL
ESQL
トランザクションでスクロール・カーソルを使用する場合、排他レベルを
繰り返し可能読み込みに設定するか、またはトランザクション時に表全体
をロックすることにより、一時表とデータベース表との間の一貫性を保持
することができます。
トランザクションで保留付きスクロール・カーソルを使用する場合は、一
時表とデータベース表の間の一貫性を保持することはできません。表レベ
ル・ロックまたは繰り返し可能読み込みによって設定されたロックは、ト
ランザクションが完了したときにアンロックされますが、保留付きスク
ロール・カーソルは、トランザクションの終了を超えてオープン状態に
なっています。したがって、トランザクションが終了したらすぐに解放済
みの行を修正することができます。これにより、一時表で検索したデータ
が実際のデータと矛盾する可能性が生じます。♦
参考資料
本書では、CREATE DATABASE および SET LOCK MODE 文を参照してくださ
い。
IBM Informix SQL チュートリアル・ガイド では、排他レベルの説明を参照して
ください。
構文 7-315
SET LOCK MODE
SET LOCK MODE
目的
SET LOCK MODE 文は、ロックされた行または表へアクセスしようとするプ
ロセスをデータベース・サーバーにどのように処理させるかを定義するた
めに使用します。
構文
+
SET LOCK MODE TO
WAIT
OL
<秒>
NOT WAIT
<秒>
あるプロセスがアンロックを待機している最大秒数です。
使用法
ロックされた行または表にプロセスがアクセスしようとしているときに、
以下のような方法でデータベース・サーバーの応答を送信することができ
ます。
SE
NOT WAIT
操作を即時に終了し、エラー・コードを戻します。これはデ
フォルトの条件です。
WAIT
アンロックされるまでプロセスを一時停止します。
WAIT < 秒 >
アンロックされるか、または待ち時間 ( 秒で指定 ) が終了す
るまで、プロセスを一時停止します。待機後もロックが残っ
ている場合は、操作を終了し、エラー・コードを戻します。
IBM Informix SE は < 秒 > オプションをサポートしません。プロセスにアン
ロックを待機させると決定した場合は、待ち時間を限定することはできま
せん。♦
7-316 IBM Informix SQL リファレンス・ガイド
WAIT キーワード
ロック・モードは排他ロックには効果がありません。排他モードでロック
されている行、表、またはデータベースにプロセスがアクセスしようとす
ると、操作は終了し、エラー・コードが戻されます。
SE
SET LOCK MODE オプションは、カーネル・ロックを使用するマシンで使用
できます。使用しているマシンでカーネル・ロックを使用するかどうかを
決定するには、データベース・ファイルを保持しているディレクトリーを
調べてください。ディレクトリーに .lok 拡張子を持つファイルが含まれて
いる場合は、システムはカーネル・ロックを使用しておらず、SET LOCK
MODE オプションは使用できません。♦
WAIT キーワード
データベース・サーバーは、ユーザーが WAIT オプションを要求したとき
に、デッドロックが発生しないようにユーザーを保護します。プロセスを
一時停止する前に、データベース・サーバーは、プロセスの一時停止に
よってデッドロックが発生するかどうかを調べます。データベース・サー
バーは、デッドロックの可能性を検出すると、操作を終了して ( 待機指示
を破棄 ) エラーを戻します。デッドロックの疑いがある場合または実際に
デッドロックが発生した場合、データベース・サーバーはエラーを戻しま
す。
< 秒 > を指定せずに WAIT オプションを指定して作成された無制限の待ち
時間を使用する際には、細心の注意が必要です。上限が指定されておらず、
何らかのロックを設定したプロセスがそのアンロックに失敗した場合は、
一時停止しているプロセスが無限の待ち状態に入ることがあります。これ
は真のデッドロック状態ではないため、データベース・サーバーは修正処
置を取りません。
STAR
データベースがオープンされた後でのみ、クライアント・マシンから SET
LOCK MODE 文を出すことができます。♦
INET
STAR
DBA は、システム全体に適用される < 秒 > のデフォルト値を設定します。
SETLOCK MODE 文を使用して上限を設定する場合は、その値は、待ち時間
がシステム・デフォルトより短い場合にのみ適用されます。♦
構文 7-317
参考資料
参考資料
本書では、LOCK TABLE、UNLOCK TABLE、および SET ISOLATION MODE 文
を参照してください。
IBM Informix SQL チュートリアル・ガイド では、SET LOCK MODE の説明を参
照してください。
7-318 IBM Informix SQL リファレンス・ガイド
SET LOG
SET LOG
目的
SET LOG 文は、IBM Informix OnLine データベース・ロギング・モードをバッ
ファー付きトランザクション・ロギングからバッファーなしトランザク
ション・ロギングへ、またはその逆へ変更するために使用します。
構文
OL
+
SET
LOG
BUFFERED
使用法
トランザクション・ロギングは、データベースを作成するとき、または既
存のデータベースにロギングを追加するときに起動します。これらのトラ
ンザクション・ログは、バッファー付きにもバッファーなしにもできます。
トランザクション・ログのデフォルトの条件は、バッファーなしロギング
です。トランザクションが終了するとすぐに、IBM Informix OnLine データ
ベース・サーバーはトランザクションをディスクに書き込みます。バッ
ファーなしロギングを使用しているときにシステム障害が発生した場合は、
完了しているすべてのトランザクションを復旧させてください。
バッファー付きロギングを使用すれば、最低限の効率向上を得られますが、
多少のリスクも発生します。システム障害が発生した場合、IBM Informix
OnLine データベース・サーバーは、バッファーに入れられた完了トランザ
クションを復旧させることはできません。
SET LOG 文は、トランザクション・ロギング・モードをバッファーなしロ
ギングに変更します。SET BUFFERED LOG 文は、トランザクション・ロギン
グ・モードをバッファー付きロギングに変更します。
SET LOG 文は、現行セッションのみのモードを再定義します。DBA が DBMonitor を使用して設定するデフォルト・モードは、未変更のままです。
構文 7-319
参考資料
STAR
ANSI
バッファー方式オプションは外部表からの検索操作に影響を与えません。
ログ機能付きのデータベースのみが、ログ機能付きの他のデータベースに
アクセスできますが、それらのデータベースがバッファー付き ロギングを
使用しているか、バッファーなしロギングを使用しているかは関係ありま
せん。♦
ANSI 準拠データベースはバッファー付きログを使用できません。♦
参考資料
本書では、CREATE DATABASE および START DATABASE 文を参照してくださ
い。
7-320 IBM Informix SQL リファレンス・ガイド
SET OPTIMIZATION
SET OPTIMIZATION
目的
SET OPTIMIZATION 文は、高レベルまたは低レベルのデータベース・サー
バー最適化を指定するために使用します。
構文
+
SET OPTIMIZATION
HIGH
LOW
使用法
SET OPTIMIZATION 文はいつでも実行できます。最適化レベルはデータベー
ス間で有効ですが、現行のデータベース・サーバー内でのみ適用されます。
SET OPTIMIZATION 文を実行すると、新規最適化レベルは、ユーザーが別の
SET OPTIMIZATION 文を入力するまで、またはプログラムが終了するまで有
効です。
デフォルトのデータベース・サーバー最適化レベル HIGH は、ユーザーが
別の SET OPTIMIZATION 文を出すまで有効です。LOW オプションは、あま
り高度ではないが、より高速の最適化アルゴリズムを起動します。
SET OPTIMIZATION HIGH 文によって起動されたアルゴリズムは、高度なコ
スト・ベースのストラテジーで、妥当なすべての選択肢を検証し、最適の
全体的代替方法を選択します。大規模結合の場合、このアルゴリズムは必
要以上のオーバーヘッドを生じることがあります。極端な場合、メモリー
不足になることがあります。
構文 7-321
参考資料
SET OPTIMIZATION LOW 文によって起動される代替アルゴリズムは、ありそ
うにない結合ストラテジーを早期の段階で除去し、最適化中に使用される
時間とリソースの量を減らします。ただし、低レベルの最適化を指定すれ
ば、アルゴリズムの早期の段階で最適化ストラテジーが考慮の対象から外
されているので、最適化ストラテジーが選択されないというリスクが生じ
ます。
STAR
INET
次の例は、ネットワーク全体にまたがる最適化を示しています。
central デー
タベース ( マシン 1 上 ) は LOW 最適化を行い、western データベース ( マシ
ン 2 上 ) は HIGH 最適化を行います。western データベースが central データ
ベースと同じマシン上にあれば、
このデータベースは LOW 最適化を行いま
す。
図 7-133
IBM Informix STAR ネットワーク全体にまたがる SET OPTIMIZATION 文の例
set optimization low;
database central;
select * from stock;
close database;
database western@rockies;
select * from stock;
図 7-134
IBM Informix NET ネットワーク全体にまたがる SET OPTIMIZATION 文の例
set optimization low;
database central;
select * from stock;
close database;
database //rockies/western;
select * from stock;
♦
参考資料
IBM Informix SQL チュートリアル・ガイド では、照会の最適化の説明を参照し
てください。
7-322 IBM Informix SQL リファレンス・ガイド
START DATABASE
START DATABASE
目的
START DATABASE 文は、トランザクションの記録を開始したり、データ
ベースを ANSI 準拠にしたり、既存のトランザクション・ログ・ファイルの
名前を変更したりするために、IBM Informix SE データベース・サーバーで使
用します。
構文
SE
+
START
DATABASE
データベース
名
7-367 ページ
WITH
LOG
IN
"< パス名 >"
MODE ANSI
< パス名 >
トランザクション・ログ・ファイルのパス名で、引用符で囲
まれています。
使用法
START DATABASE 文を使用するには、以下のすべての条件を満たしていな
ければなりません。
!
DBA アクセス権を持っている。
!
現行のデータベースはない。
!
< パス名 > に指定されたディレクトリーが存在している。
保護機能を最大化するために、データベースと同じ記憶装置上にないトラ
ンザクション・ログの位置を指定してください。
CLOSE DATABASE 文を出してから、トランザクション・ログを作成し、開
始してください。START DATABASE 文は、他のプロセスによるアクセスを
防止するために、データベースに排他ロックを掛けます。別のプロセスが
データベースを使用している場合は ( データベースを読み取っているだけ
の場合でも )、START DATABASE 文は失敗します。
構文 7-323
MODE ANSI キーワード
START DATABASE 文が実行された後、データベースはロックされたままに
なります。データベースが使用できる状態になっていることを確認したら、
CLOSE DATABASE 文を実行して、排他ロックを削除してください。
DATABASE 文を使ってデータベースを再オープンします。
MODE ANSI キーワード
ANSI
MODE ANSI キーワードは、データベースを ANSI 準拠にするために使用しま
す。ANSI 準拠データベースは、ANSI 規格に準拠しないデータベースとは異
なる、トランザクション処理およびオブジェクト命名規則に従っています。
次の例は、stores5 という ANSI 準拠データベースを開始します。
START DATABASE stores5
WITH LOG IN "/u/myname/stores5.log" MODE ANSI
♦
トランザクション・ログ名の変更
トランザクション・ログの名前や位置を変更する場合は、データベースを
アーカイブする直前に START DATABASE 文を出してください。START
DATABASE 文では、トランザクション・ログへの新規パスを指定します。
参考資料
本書では、CREATE DATABASE および ROLLFORWARD DATABASE 文を参照し
てください。
IBM Informix SQL チュートリアル・ガイド では、トランザクション処理の説明
を参照してください。
7-324 IBM Informix SQL リファレンス・ガイド
UNLOAD
UNLOAD
目的
UNLOAD 文は、SELECT 文で検索した行を ASCII オペレーティング・システ
ム・ファイルに書き込むために使用します。
構文
I4GL
DB
ISQL
+
UNLOAD TO
"
< ファイル名 >
I4GL
< ファイル名
変数 >
"
"
DELIMITER
< 区切り文字 >
"
SELECT 文
7-263
ページ
I4GL
< 区切り文字
変数 >
< 区切り
文字 >
フィールド間の区切り文字として働く引用符付き文字です。
デフォルトの区切り文字は垂直バー (| = ASCII 124) または
DBDELIMITER 環境変数 ( 設定されている場合 ) の値です。
< 区切り文字 フィールド間の区切り文字として使用する文字が含まれてい
変数 >
る文字変数です。デフォルトの区切り文字は垂直バー (| =
ASCII 124) または DBDELIMITER 環境変数 ( 設定されている場
合 ) の値です。
< ファイル
名>
ファイルの名前を指定する引用符付きストリング定数です。
SELECT 文に検索された行はこのファイルに書き込まれます。
< ファイル名 ファイル名が含まれている CHARACTER または VARCHAR 変
変数 >
数です。SELECT 文に検索された行はこのファイルに書き込
まれます。
構文 7-325
使用法
使用法
UNLOAD 文を使用するには、SELECT 文で選択したすべての列に対して
Select アクセス権を持っていなければなりません。データベース・レベル
アクセス権と表レベル・アクセス権については、7-178 ページの GRANT 文
を参照してください。
SELECT 文は、リテラル SELECT 文で構成することも、SELECT 文が含まれて
いる文字変数の名前で構成することもできます。(7-263 ページの SELECT 文
を参照してください。)
I4GL
PREPARE 文を使用して UNLOAD 文をプリプロセッサーで処理することはで
きません。♦
UNLOAD TO ファイル
UNLOAD TO ファイルには、表から検索した選択行が含まれています。
次の表は、IBM Informix 4GL、IBM Informix SQL、および DB-Access によって行
われる出力の書式設定方法を示しています。
図 7-135
UNLOAD 文のデータ型と出力フォーマット
データの型
出力フォーマット
文字
文字 (CHAR) 型フィールドに区切り文字が含まれていれ
ば、IBM Informix 製品は、自動的にそれをバックスラッ
シュでエスケープして、特殊文字として解釈されないよ
うにします。(LOAD 文を使用して行を表に挿入する場合
は、円記号は自動的に除去されます。) 後続の空白文字は
自動的にクリップされます。
日付
DATE 値は、yyyy/mm/dd として表されます。ここで、mm
は月 (January= 1、など )、dd は日、yyyy は年を示します。
ただし、DBDATE 環境変数が設定され、他のフォーマッ
トが指定されている場合を除きます。
MONEY
MONEY 値は、先行の通貨記号を付けないでアンロード
されます。
NULL
NULL 列は、区切り文字間に文字を挿入しないでアン
ロードされます。
(2 の 1)
7-326 IBM Informix SQL リファレンス・ガイド
使用法
データの型
出力フォーマット
番号
番号データ型は、先行ブランクを付けないで表示されま
す。
INTEGER または SMALLINT ゼロは 0 として表され、
FLOAT、SMALLFLOAT、DECIMAL、または MONEY ゼ
ロは 0.00 として表されます。
時刻
DATETIME および INTERVAL 値は文字フォームで表さ
れ、そのフィールド桁と区切り文字のみを示します。出
力には、型仕様も修飾子もインクルードされません。
yyyy-mm-dd hh:mi:ss.fff のパターンが使用され、データの一
部でないフィールドは省略されます。
(2 の 2)
バックスラッシュをフィールド区切り記号または UNLOAD 区切り記号とし
て使用しないでください。この文字はエスケープ文字として働き、次の文
字をデータの一部として解釈するように UNLOAD コマンドに通知します。
VARCHAR または BLOB データ型が含まれているファイルをアンロードする
場合は、以下の点に注意してください。
!
BYTE 項目は、16 進数ダンプ・フォーマットで書き込まれ、空白ま
たは新規行は追加されません。したがって、BYTE 項目が含まれた
アンロード・ファイルの論理長は非常に長くなるため、印刷や編集
が非常に困難になります。
!
後書きの空白文字は、VARCHAR フィールドに保持されます。
!
UNLOAD TO ファイル内の区切り文字として、0-9、a-f、A-F、空白、
タブ、またはバックスラッシュを使用しないでください。
次の文は、customer 表から行をアンロードし ( この場合、customer_num の
値は 138 以上 )、それらの行を cust_file というファイルに入れます。
UNLOAD TO "cust_file" DELIMITER "!"
SELECT * FROM customer WHERE customer_num> = 138
出力ファイル cust_file は次のとおりです。
138!Jeffery!Padgett!Wheel Thrills!3450 El Camino!Suite 10!Palo Alto!CA!94306!!
139!Linda!Lane!Palo Alto Bicycles!2344 University!!Palo Alto!CA!94301!(415)323-5400
構文 7-327
参考資料
DELIMITER 節
DELIMITER 節は、出力ファイルの行上の各列に含まれているデータを分離
する区切り文字を識別するために使用します。この節を省略すると、
IBM Informix 4GL、IBM Informix SQL、および DB-Access が DBDELIMITER 環境
変数を検査します。
DBDELIMITER 変数が設定されていなければ、デフォルトの区切り文字は
垂直バー (| = ASCII 124) です。DBDELIMITER 環境変数の設定方法について
は、第 4 章、『環境変数』を参照してください。
次の文は、セミコロン (;) を区切り文字として指定します。
UNLOAD TO "cust.out" DELIMITER ";"
SELECT fname, lname, company, city
FROM customer
参考資料
本書では、LOAD および SELECT 文を参照してください。
7-328 IBM Informix SQL リファレンス・ガイド
UNLOCK TABLE
UNLOCK TABLE
目的
UNLOCK TABLE 文は、LOCKTABLE 文によってすでにロックされている表を
アンロックするために、トランザクションなしデータベースで使用します。
構文
+
UNLOCK TABLE
表名
7-440
ページ
シノニム名
7-438
ページ
使用法
表を所有している場合や、表に対する Select アクセス権を持っている場合
は、直接認可または PUBLIC の認可により表をロックすることができます。
ユーザーは自分がロックした表のみをアンロックすることができます。他
のプロセスによってロックされた表はアンロックできません。
< 表名 > は、アンロックする表の名前または表のシノニムのいずれかです。
ビューまたはビューのシノニムを指定しないでください。
一度に 1 つしかロックを表に適用できません。
トランザクションなしデータベース内の表のロック・モードを変更するに
は、まず、UNLOCK TABLE 文を使用して表をアンロックし、次に、新規の
LOCK TABLE 文を出します。
UNLOCK TABLE 文をトランザクション内で出すと、この文は失敗します。
トランザクション内で設定された表ロックは、トランザクションが完了す
ると自動的にアンロックされます。
ANSI
UNLOCK TABLE を ANSI 準拠データベース内で出さないでください。
UNLOCK TABLE 文をトランザクション内で出すと、この文は失敗しますが、
トランザクションは、常に、ANSI 準拠データベース内で有効です。♦
構文 7-329
参考資料
参考資料
本書では、COMMIT WORK、ROLLBACK WORK、および LOCK TABLE 文を参
照してください。
7-330 IBM Informix SQL リファレンス・ガイド
UPDATE
UPDATE
目的
UPDATE 文は、表またはビューの 1 つ以上の行の 1 つ以上の列の値を変更す
るために使用します。
構文
UPDATE
表名
7-440
ページ
SET
SET 節
7-334 ページ
I4GL
ESQL
シノニム
名
7-438
ページ
< カーソル
名>
条件
7-350 ページ
WHERE
ビュー名
7-444
ページ
CURRENT OF
< カーソル
名>
カーソル識別子です。
使用法
表のデータを更新するには、表を所有するか、または表に対する Update ア
クセス権を持っていなければなりません (7-178 ページの GRANT 文を参照し
てください )。ビューのデータを更新するには、必須の Update アクセス権
を持ち、かつビューが、7-332 ページの『ビューによる行の更新』で示して
いる要件を満たしていなければなりません。
WHERE 節を省略すると、ターゲット表のすべての行が更新されます。
DB
ISQL
WHERE 節を省略し、かつ対話モードの場合は、IBM Informix SQL および
DB-Access は、ユーザーがすべての行を変更することを確認するまで、
UPDATE 文を実行しません。ただし、この文がコマンド・ファイルに含ま
れていて、かつ、IBM Informix SQL または DB-Access をコマンド行から実行
している場合は、この文は即時に実行されます。♦
構文 7-331
ビューによる行の更新
ビューによる行の更新
ビューに対する Update アクセス権を持っている場合は、単一表 ビューを介
してデータを更新することができます (7-178 ページの GRANT 文を参照し
てください )。それを行うには、SELECT 文の定義を 1 つの表だけから 選択
し、以下のいずれのエレメントもそれに含めないでください。
!
DISTINCT キーワード
!
GROUP BY 節
!
導出値 ( 仮想列とも呼ばれる )
!
集合値
データ整合性制約を使用すれば、ユーザーが、ビューを定義する SELECT
文に適合しない基礎表の値を更新するのを防止することができます。詳細
については、7-98 ページの CREATE VIEW 文の WITH CHECK OPTION に関す
る説明を参照してください。
基礎表に固有行が含まれている場合でも、ビューには重複行が現れること
がありますので、ビューを介して表を更新するときには細心の注意が必要
です。たとえば、ビューが items 表に定義されていて、order_num および
total_price 列だけが含まれている場合に、同じ注文の 2 つの品目が同じ合
計価格を持っていれば、ビューには重複行が含まれます。この場合、この
2 つの重複合計価格値のいずれかを更新する場合、どちらの品目価格が更
新されたか判別できません。
トランザクションなしデータベースの行の更新
トランザクションなしデータベースの行を更新する場合は、更新した行を
復元するための明示的なアクションを実行しなければなりません。たとえ
ば、UPDATE 文がいくつかの行を更新した後で失敗した場合は、正常に更新
された行は表に残ります。失敗した更新を自動的に復旧させることはでき
ません。
7-332 IBM Informix SQL リファレンス・ガイド
トランザクション付きデータベースの行の更新
トランザクション付きデータベースの行の更新
トランザクション付きデータベースの行を更新し、トランザクションを使
用する場合は、ROLLBACK WORK 文を使用して更新を元に戻すことができ
ます。更新の前に BEGIN WORK 文を実行せず、更新が失敗した場合は、更
新の開始以降に行われたすべてのデータベースの変更が、データベース・
サーバーによって自動的にロールバックされます。
ANSI
ANSI 準拠データベースの行を更新する場合は、トランザクションは暗黙的
であり、すべてのデータベース変更がトランザクションの内部で行われま
す。この場合、UPDATE 文が失敗したら、ROLLBACK WORK 文を使用して更
新を元に戻すことができます。♦
ロックに関する考慮事項
IBM Informix OnLine データベース・サーバーを使用している場合、更新す
る行を選択すると、更新プロセスは更新ロックを獲得します。更新ロック
を使用すれば、他のプロセスは、更新する行を読み取る ( または、共有 す
る ) ことができますが、更新または削除することはできません。更新を行
う直前に、更新プロセスは共有ロックを排他ロックに促進 します。排他
ロックは、アンロックされるまで、他のプロセスが行の内容を読み取った
り修正したりできないようにします。
IBM Informix OnLine では、
行またはページに対して一度に 1 つの更新ロック
しか使用できません ( ロックの型は、CREATE TABLE または ALTER TABLE 文
で選択したロック・モードに応じて異なります )。
更新プロセスは、
他のプロ
セスからの共有ロックを持つ行やページに対する更新ロックを獲得できま
すが、ユーザーは、
他のプロセスがそれをアンロックするまで、更新ロックを
共有から排他へ促進することはできません ( 更新は行われません )。
単一の更新によって影響を受ける行が非常に多い場合は、同時ロックの最
大数として設定している限度を超えることがあります。このような状態に
なった場合は、UPDATE 文当たりのトランザクション数を縮小するか、また
はページ (IBM Informix OnLine データベース・サーバーのみ ) または表全体
をロックしてからこの文を実行することができます。
SE
UPDATE 文を実行すると、表の個々の行が自動的にロックされます。この
機能は、IBM Informix SE で実行される選択プロセスが行の排他ロックに遭う
可能性を増やします。その結果、処理中の並行性が削減される場合があり
ます。♦
構文 7-333
SET 節
SET 節
SET
節
,
<列
名>
=
式
( サブセット )
7-335 ページ
(
SELECT
文
( サブセット )
7-335 ページ
,
,
,
<列
名>
(
)
)
=
(
*
I4GL
表名
7-440
ページ
.*
ビュー名
7-444
ページ
.*
シノニム名
7-438
.*
)
式
( サブセット )
7-335 ページ
(
SELECT
文
( サブセット )
7-335 ページ
)
I4GL
< レコード.*
変数 >
ページ
*
< 表名 > のすべての列を更新することを示します。
< 列名 >
更新する列を指名します。SERIAL データ型の列を更新するこ
とはできません。
< レコード
変数 >
4GL プログラム・レコードに含まれている値で列を更新する
ことを示します。
SET 節は、更新する列を識別し、各列に値を割り当てます。この節は、単
一の列と単一の式をペアにしたり、複数の列をリストしてそれらを対応す
る式と等しくなるように設定します。
7-334 IBM Informix SQL リファレンス・ガイド
SET 節
SET 節によるすべての列の選択
I4GL
< シノニム名 >、< 表名 >、< ビュー名 >、または < レコード変数 > に .*
拡張子を使用して、更新するすべての列を選択することができます。♦
SET 節で使用できる式のサブセット
集計関数で構成された式を SET 節で使用することはできません。構文と使
用法の詳しい説明については、7-375 ページの式のセグメントを参照してく
ださい。
SET 節で使用できる SELECT 文のサブセット
SET 節で使用した SELECT 文は、行内の情報の 複数列 を戻すことができま
す。ただし、SELECT 文は、表内の情報の 複数行 を戻すことはできません。
構文と使用法の詳しい説明については、7-263 ページの SELECT 文を参照し
てください。
単一列と単一式のペア
任意の数の単一列、単一式のペアを UPDATE 文にインクルードすることが
できます。
次の例は、単一列と単一式のペアによる SET 節のフォームを示しています。
図 7-136
単一列と単一式のペアによる SET 節
UPDATE customer
SET address1 = "1111 Alder Court",
city = "Palo Alto",
zipcode = "94301"
WHERE customer_num = 103
UPDATE orders
SET ship_charge =
(SELECT SUM(total_price) * .07
FROM items
WHERE orders.order_num = items.order_num)
WHERE orders.order_num = 1001
UPDATE stock
SET unit_price = unit_price * 1.07
構文 7-335
SET 節
複数式と等しい複数列
SET 節には、更新する一連の列をリストするための次の 2 つのオプション
が用意されています。
!
各列を明示的にリストし、すべての列をコンマで区切り、小括弧で
囲む。
!
アスタリスク表記 (*) を使用して < 表名 > 内のすべての列を暗黙的
にリストする。
SET 節を完了するには、各列を明示的にリストし、すべての列をコンマで
区切り、小括弧で囲まなければなりません。式リストには、SQL 副照会を
インクルードすることができます。この副照会は、明示的または暗黙的に
指名された列の数が、等号の後の式 ( 複数の場合もある ) によって作成され
た値の数と等しい場合に限り、複数値の単一行を戻します。
次の例は、複数列と複数式がペアになった SET 節のフォームを示していま
す。
図 7-137
複数列と複数式のペアによる SET 節
UPDATE customer
SET (fname, lname) = ("John", "Doe")
WHERE customer_num = 101
UPDATE manufact
SET * = ("HNT", "Hunter")
WHERE manu_code = "ANZ"
UPDATE items
SET (stock_num, manu_code, quantity) =
( (SELECT stock_num, manu_code FROM stock
WHERE description = "baseball"), 2)
WHERE item_num = 1 AND order_num = 1001
UPDATE table1
SET (col1, col2, col3) =
((SELECT MIN (ship_charge),
MAX (ship_charge) FROM orders),
"07/01/1990")
WHERE col4 = 1001
7-336 IBM Informix SQL リファレンス・ガイド
SET 節
I4GL
IBM Informix 4GL は、暗黙アスタリスク表記 (*) の代替方式 < 表名 .*> を提
供します。IBM Informix 4GL は、SET 節を完了する式のリストを作成するた
めの 2 番目のオプションも提供します。< レコード変数 >.* 表記で、4GL レ
コード変数に含まれた値のフル セットと等しくなるようにリスト列を設定
することができます。
4GL UPDATE 文が構文ルールに準拠している限り、上記の追加エレメントを
この文の他の SET 節オプションと結合することができます。SERIAL 列が含
まれている表内のすべての列を更新したい場合は、SERIAL 列を更新できな
くても、SET 節のレコード変数フォームを使用することができます。4GL
は、SET 節にレコード変数を含む UPDATE 文を実行する場合、< レコード変
数 >.* によって作成された式リスト内のすべての SERIAL 列とそれに対応す
る値を自動的にスキップします。♦
次の 4GL 例は、このフォームの SET 節を示しています。
図 7-138
IBM Informix 4GL における SET 節内のレコード変数の例
DEFINE
p_cust RECORD LIKE customer.*
tmp_cust RECORD LIKE customer.*
LET upd_stmt = "SELECT * FROM customer ",
"WHERE customer_num = ? FOR UPDATE"
PREPARE upd_prep from upd_stmt
DECLARE upd_cur cursor for upd_prep
{ . . . Prompt here for p_cust search criteria. }
OPEN upd_cur USING p_cust.customer_num
FETCH upd_cur INTO p_cust.*
IF STATUS = NOTFOUND THEN
ERROR "No entry for customer number ", p_cust.customer_num, "."
ELSE
LET tmp_cust.* = p_cust.* { saves current values in case }
{ user aborts the update
}
{ . . . Prompt here for new customer table values. }
LET int_flag = false
INPUT BY NAME p_cust.fname thru p_cust.phone
WITHOUT DEFAULTS
IF NOT int_flag THEN
{ User did not press Interrupt key. }
UPDATE customer SET customer.* = p_cust.*
構文 7-337
WHERE 節
ELSE { int_flag is true: user pressed INTERRUPT key }
LET int_flag = false
LET p_cust.* = tmp_cust.*
ERROR "Update cancelled."
END IF { int_flag test}
END IF { status = notfound on upd_cur }
WHERE 節
WHERE 節は、更新する行を限定できるようにします。WHERE 節を省略す
ると、表内のすべての行が更新されます。
WHERE 節は標準の検索条件からなっています。( 詳細については、7-263
ページの SELECT 文を参照してください。) 次の例は、UPDATE 文内の
WHERE 条件を示しています。この例の文は、customer 表の各行に含まれた
3 つの列 (state、zipcode、および phone) を更新します。この表には、
new_address という名前の新規アドレスの表に、対応する項目をもってい
ます。
図 7-139
UPDATE 文内での WHERE 条件の使用
UPDATE customer
SET (state, zipcode, phone) =
(SELECT state, zipcode, phone FROM new_address
WHERE new_address.cust_num =
customer.cust_num)
WHERE customer.cust_num IN
(SELECT cust_num FROM new_address)
7-338 IBM Informix SQL リファレンス・ガイド
WHERE CURRENT OF 節
WHERE CURRENT OF 節
I4GL
ESQL
CURRENT OF キーワードを使用して、カーソルのアクティブ・セットの現
在行を更新することができます。ただし、その行に集合がインクルードさ
れている場合は、カーソルで行を更新することはできません。CURRENT OF
節で指定されたカーソルには、列名のみを含めることができます。UPDATE
文はカーソルを次の行へ進めないため、現在行の位置は未変更のままです。
FOR UPDATE キーワードで作成されたカーソルに UPDATE 文を関連付けれ
ば、CURRENT OF キーワードの効果を制限することができます。(7-108 ペー
ジの DECLARE 文を参照してください。) 更新する列を指定せずにカーソル
を作成した場合は、後続の UPDATE...WHERE CURRENT OF 文の任意の列を更
新できます。ただし、カーソルを作成した DECLARE 文が、FOR UPDATE 節
に 1 つ以上の列を指定している場合は、後続の UPDATE...WHERE CURRENT
OF 文の列のみの更新に制限されます。DECLARE 文の FOR UPDATE 節で列を
指定することの利点は、速度です。DECLARE 文に列が指定されている場
合、IBM Informix SE および IBM Informix OnLine は、通常、より迅速に更新を
行うことができます。♦
次の IBM Informix 4GL 例は、
WHERE 節の WHERE CURRENT OF フォームを示し
ています。この例では、10 % のディスカウントを受ける顧客について更新を
実行します。構文解析を 1 回しか実行しないようにするために、
UPDATE 文が
WHILE ループの外部で PREPARE 文によって処理されます。
( 詳細について
は、7-221 ページの PREPARE 文を参照してください。)
図 7-140
IBM Informix 4GL プログラムにおける WHERE 節の WHERE CURRENT OF フォーム
の例
PREPARE sel_stmt FROM
"SELECT * FROM customer ",
"WHERE cust_num between ? and ? FOR UPDATE"
DECLARE x CURSOR FOR sel_stmt
OPEN x USING low, high
PREPARE u FROM
"UPDATE customer SET discount = 0.1",
"WHERE CURRENT OF x"
WHILE TRUE
FETCH x INTO r_cust.*
IF STATUS = NOTFOUND THEN
EXIT WHILE
END IF
LET ptext = "Update ", r_cust.fname CLIPPED, " ",
構文 7-339
参考資料
r_cust.lname CLIPPED, "?"
PROMPT ptext FOR CHAR yn
IF yn = "y" THEN
EXECUTE u
END IF
END WHILE
CLOSE x
ヒント : UPDATE カーソルを使用すれば、UPDATE 文では行えない更新を
実行することができます。UPDATE カーソルは、FOR UPDATE キーワードで
宣言された SELECT 文に関連付けられた順カーソルです。UPDATE カーソル
の詳細については、7-112 ページを参照してください。
参考資料
本書では、DECLARE、INSERT、OPEN、および SELECT 文を参照してくださ
い。
IBM Informix SQL チュートリアル・ガイド では、UPDATE 文の説明を参照して
ください。
7-340 IBM Informix SQL リファレンス・ガイド
UPDATE STATISTICS
UPDATE STATISTICS
目的
UPDATE STATISTICS 文は、検索ストラテジーとストアード・プロシージャー
を最適化するために使用される、システム・カタログ表のデータを更新す
るために使用します。
構文
+
UPDATE STATISTICS
FOR TABLE
表名
7-440
ページ
シノニム名
7-438
ページ
FOR PROCEDURE
プロシー
ジャー名
7-429 ページ
使用法
UPDATE STATISTICS 文を出すと、IBM Informix OnLine は、検索ストラテジー
を最適化するために使用される systables、syscolumns、および sysindexes
システム・カタログ表内のデータを再計算します。データベース・サー
バーはこの統計データを自動的には更新しません。UPDATE STATISTICS 文を
出すと、更新プロセスがトリガーされます。
構文 7-341
統計データの更新時期
UPDATE STATISTICS を使用することによっても、sysprocplan システム・カ
タログ表のプロシージャーに関する最適化実行計画を更新することができ
ます。あるプロシージャーで参照されたいずれかのオブジェクトが変更さ
れた場合は、そのプロシージャーが実行されるたびに、データベース・
サーバーがその実行計画を最適化します。プロシージャーを実行する前に、
UPDATE STATISTICS 文を使用してプロシージャーを最適化すると、実行時
間が節約できて、有効な場合があります。
UPDATE STATISTICS 文には現行データベースが必要です。FOR TABLE 節また
は FOR PROCEDURE 節を省略すると、現行データベース内のすべての表と
プロシージャーに関する統計データが更新されます。
表名を指定せずに FOR TABLE キーワードを使用すると、現行データベース
内のすべての表に関する統計データが更新されます。プロシージャー名を
指定せずに FOR PROCEDURE キーワードを使用すると、現行データベース
内のすべてのストアード・プロシージャーに関する統計データが更新され
ます。
現行データベースの外部にある表またはプロシージャーに関する最適化統
計データは更新できません。
SE
UPDATE STATISTICS 文を出すと、IBM Informix SE は、検索ストラテジーを最
適化するために使用される、systables システム・カタログ表のデータを再
計算します。♦
統計データの更新時期
システム・カタログ統計の更新は、表に対して大幅な修正を行うとき、ま
たは 1 つ以上のプロシージャーによって使用される表に変更を加え、かつ
実行時のプロシージャーの再最適化をデータベース・サーバーに実行させ
たくないときに行います。
ユーザーのアプリケーションが原因で特定の表に大きなばらつきがある場
合は、照会の効率を改善するために、UPDATE STATISTICS 文を使用して、シ
ステム・カタログ表を定期的に更新する必要があります。
参考資料
IBM Informix SQL チュートリアル・ガイド では、UPDATE STATISTICS の説明を
参照してください。
7-342 IBM Informix SQL リファレンス・ガイド
WHENEVER
WHENEVER
目的
WHENEVER 文は、他の SQL 文を実行しているときに発生するエラーと警告
をトラップするために使用します。
構文
I4GL
ESQL
WHENEVER
SQLERROR
CONTINUE
NOT FOUND
+
GO TO
< ラベル >
GOTO
:< ラベル >
+
SQLWARNING
I4GL
WARNING
STOP
I4GL
E/CO
CALL
< 関数名 >
E/CO
ERROR
PERFORM
< パラグラフ名 >
I4GL
ANY
< 関数名 >
エラーまたは警告条件が発生したときに呼び出される埋め込
み言語関数または IBM Informix 4GL 関数の名前です。
< ラベル >
エラーまたは警告条件が発生したときにプログラムが制御を
転送する先の文ラベルです。ラベルが符号なし整数であれ
ば、文は ANSI 準拠構文に従います。ラベルが符号なし整数
以外の識別子であれば、文は Informix の拡張機能です。
< パラグラフ COBOL パラグラフの名前です。
名>
構文 7-343
使用法
使用法
WHENEVER 文の使用は、すべての SQL 文の後にエラー検査ルーチンを入れ
るのと同じことです。エラーや警告を探すためにユーザーのプログラムで
WHENEVER 文を使用しない場合にエラーが発生したら、プログラムの実行
が停止します。
WHENEVER 文の範囲は、ソース・モジュール内の文の格納場所から、同一
ソース・モジュール内の同一例外条件 (SQLERROR、SQLWARNING、など )
を持つ WHENEVER 文までです。ソース・モジュールに他の WHENEVER 文
が含まれていない場合は、文は、プログラムまたはモジュールが終了する
まで有効です。
たとえば、次の ESQL/C プログラムは 3 つの WHENEVER 文を持ち、そのう
ちの 2 つは WHENEVER SQLERROR 文です。行 6 では、CONTINUE キーワー
ドが指定されています。行 10 では、STOP が SQLERROR と一緒に使用され
ます。行 6 の後で、かつ行 10 の前で発生したエラーは、無視されます。行
10 の後で、かつプログラムの残りの場合は、発生したすべての SQL エラー
はプログラムを終了させます。
図 7-141
WHENEVER SQLERROR をリセットする ESQL/C プログラム
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
main()
{
long char_num;
$ DATABASE test;
$ WHENEVER SQLERROR CONTINUE;
printf("\n\nGoing to try first insert\n\n");
$ INSERT INTO test_color VALUES ("green");
$ WHENEVER NOT FOUND CONTINUE;
$ WHENEVER SQLERROR STOP;
printf("\n\nGoing to try second insert\n\n");
$ INSERT INTO test_color VALUES ("blue");
$ CLOSE DATABASE;
printf("\n\nProgram over\n\n");
}
7-344 IBM Informix SQL リファレンス・ガイド
SQLERROR キーワード
SQLERROR キーワード
SQLERROR キーワードを使用する場合は、失敗した SQL 文は、すべて
WHENEVER 文の指示に従って処理されます。sqlcode 変数がゼロより小さい
と、エラーが発生します。各製品で使用される sqlcode 変数の仕様が次に表
にリストされています。
4GL
ESQL/C
ESQL/COBOL
SQLCA.SQLCODE
STATUS
sqlca.sqlcode
SQLCODE
SQLCODE OF SQLCA
次の文では、SQL エラーが発生するたびに、それを無視します。
WHENEVER SQLERROR CONTINUE
WHENEVER SQLERROR 文をプログラムで使用しない場合で、かつ、コンパ
イル時に、そのプログラムがアクセスするデータベースが ANSI 準拠でなけ
れば、WHENEVER SQLERROR のデフォルトは STOP になります。
ANSI
I4GL
WHENEVER SQLERROR 文をプログラムで使用しない場合で、かつ、コンパ
イル時に、そのプログラムがアクセスするデータベースが ANSI 準拠であれ
ば、WHENEVER SQLERROR のデフォルトは CONTINUE になります。♦
WHENEVER SQLERROR は、SQL 文の後のエラーの検査をするほか、Screen
I/O 文および VALIDATE 文の後のエラー検査も行います。♦
ANY オプション
I4GL
ANY オプション
ANY キーワードを使用すると、式の評価後に status 変数が設定されます。
この設定は、変数が SQL 文、Screen I/O 文、または VALIDATE 文の外部に
あっても行われます。♦
SQLWARNING キーワード
SQLWARNING キーワードを使用すると、警告を生成するすべての SQL 文
が、WHENEVER SQLWARNING 文によって指示されたアクションを実行しま
す。警告が出ると、SQLAWARN レコードの先頭のフィールドが W に設定さ
れます。
構文 7-345
NOT FOUND キーワード
次の文は、警告条件が発生するたびに実行を停止させます。
WHENEVER SQLWARNING STOP
NOT FOUND キーワード
NOT FOUND キーワードを使用すると、SELECT および FETCH 文は、他の
SQL 文と異なる方法で処理されます。NOT FOUND キーワードは次の場合を
検査します。
!
FETCH 文がアクティブ・セットの先頭行または最終行を越えて行
を取得しようとする場合
!
SELECT 文が行を戻さない場合
いずれの場合も、sqlcode 変数は 100 に設定されます。各 IBM Informix 製品
における sqlcode 変数の名前については、7-345 ページの『SQLERROR キー
ワード』を参照してください。
次の文は、NOT FOUND 条件が発生するたびに no_rows 関数を呼び出しま
す。
WHENEVER NOT FOUND CALL no_rows
I4GL
NOT FOUND と NOTFOUND は、どちらも同じ条件を示しますが、互いに代
替使用することはできません。NOTFOUND (1 語 ) は状態変数に使用し、
NOT FOUND (2 語 ) は WHENEVER 文と一緒に使用します。♦
WARNING キーワード
I4GL
WARNING は SQLWARNING. のシノニムです。♦
ERROR キーワード
I4GL
ERROR は SQLERROR. のシノニムです。♦
E/CO
GOTO キーワード
GOTO 節は、ラベルで示された文に制御を転送するために使用します。GO
TO キーワードは GOTO のシノニムです。
7-346 IBM Informix SQL リファレンス・ガイド
GOTO キーワード
I4GL
GOTO キーワードの後に指定されたラベルは、WHENEVER 文と同じ
FUNCTION、REPORT、または MAIN プログラム・ブロックに入っていなけ
ればなりません。♦
たとえば、次の IBM Informix 4GL コードの WHENEVER 文は、NOT FOUND 条
件が発生するたびに missing: というラベルの文に制御を転送します。
FUNCTION query_data()
...
FETCH FIRST a_curs INTO p_customer.*
WHENEVER NOT FOUND GO TO :missing
...
LABEL missing:
MESSAGE "No customers found."
SLEEP 3
MESSAGE ""
END FUNCTION
I4GL
モジュールに複数のプログラム・ブロックが含まれている場合は、エラー
条件を再定義しなければならないことがあります。たとえば、モジュール
に 3 つの関数が含まれていて、最初の関数に、WHENEVER...GOTO 文とそれ
に対応する LABEL 文がインクルードされていると仮定します。コンパイル
が最初の関数から次の関数へ移動したとき、エラー条件は引き続きそのラ
ベルを参照します。しかし、ラベルはもう定義されていません。コンパイ
ラーが SQL 文を読み取ったときに、エラー条件 ( たとえば、WHENEVER
ERROR CONTINUE に対する ) が再定義されていないと、コンパイル・エ
ラーが発生します。
別の WHENEVER 文を出してエラー条件をリセットすることもできれば、同
じラベル名を持つラベル付き文を各関数に指定することもでき、また CALL
節を使用して別個の関数を呼び出すこともできます。♦
ESQL
プログラムに複数の関数が含まれている場合は、エラー条件を再定義しな
ければならないことがあります。たとえば、モジュールに 3 つの関数が含
まれていて、最初の関数に、WHENEVER...GOTO 文とそれに対応するラベル
付き文がインクルードされていると仮定します。コンパイルが最初の関数
から次の関数へ移動したとき、エラー条件は引き続きそのラベルを参照し
ます。しかし、ラベルはもう定義されていません。コンパイラーが SQL 文
を読み取ったときに、エラー条件 ( たとえば、WHENEVER SQLERROR
CONTINUE に対する ) が再定義されていないと、コンパイル・エラーが発生
します。
別の WHENEVER 文を出してエラー条件をリセットすることもできれば、同
じラベル名を持つラベル付き文を各関数に指定することもでき、また CALL
節を使用して別個の関数を呼び出すこともできます。♦
構文 7-347
CALL 節
CALL 節
CALL 節は、名前付き関数に制御を転送するために使用します。関数名の後
に小括弧を付けないでください。変数を関数に渡すことはできません。
次の文は、プログラムがエラー条件を検出した場合に、error_recovery と
いう関数を実行します。
WHENEVER SQLERROR CALL error_recovery
CALL キーワードを使用してストアード・プロシージャーの名前を指定する
ことはできません。ストアード・プロシージャーを呼び出したい場合は、
CALL 節を使用して、EXECUTE PROCEDURE 文が入っている関数を実行して
ください。
CONTINUE キーワード
CONTINUE キーワードは、プログラムにアクションをとらないように指示
するために使用します。このキーワードを使用して、前に指定したオプ
ションをオフにすることができます。
STOP キーワード
STOP キーワードは、プログラムを即時に終了するために使用します。次の
文は、データベース・サーバーが警告を出したときに、プログラム実行を
終了します。
WHENEVER SQLWARNING STOP
参考資料
本書では、EXECUTE PROCEDURE および FETCH 文を参照してください。
IBM Informix 4GL Reference Manual では、CALL、DEFER、FOREACH、GOTO、
IF、および LABEL 文を参照してください。
埋め込み言語製品のユーザー・マニュアルでは、エラー検査に関する章を
参照してください。
7-348 IBM Informix SQL リファレンス・ガイド
セグメント
セグメント
セグメントは、構文図から抽出された構文のエレメントです。分かりやす
くするためと使いやすくするために各セグメントを別々に説明します。
下記のセグメントは複数の文で共通に使用されるもので、次のセクション
で収集されます。
!
条件
!
制約名
!
データベース名
!
データ型
!
DATETIME フィールド修飾子
!
式
!
識別子
!
インデックス名
!
INTERVAL フィールド修飾子
!
リテラル DATETIME
!
リテラル INTERVAL
!
リテラル番号
!
プロシージャー名
!
引用符付きストリング
!
関係演算子
!
シノニム名
!
表名
!
ビュー名
構文 7-349
条件
条件
目的
条件セグメントは、データが特定の資格を満たしているかどうかを判別す
るために使用します。条件セグメントは、次のように使用できます。
!
ALTER TABLE または CREATE TABLE 文でチェック制約として
!
WHERE 節内の DELETE 文で
!
WHERE 節および HAVING 節の中の SELECT 文で
!
WHERE 節の中の UPDATE 文で
!
SPL を使用している場合、IF 文で
!
SPL を使用している場合、WHILE 文で
構文
AND
OR
比較条件
7-351
ページ
NOT
副照会の条件
7-360
ページ
使用法
条件とは、1 つ以上の検索条件の集合であり、オプションで、論理演算子
AND または OR によって接続されます。検索条件は以下のカテゴリーに入
ります。
!
比較条件 ( フィルターまたは論理式とも呼ばれます )
!
副照会を持つ条件
7-350 IBM Informix SQL リファレンス・ガイド
条件に対する制限
条件に対する制限
条件を SELECT 文の HAVING 節または副照会の HAVING 節で使用する場合
は、その条件には集計関数のみを含めることができます。DELETE、
SELECT、または UPDATE 文の WHERE 節の一部である比較条件に、集計関
数を使用することはできません。
NOT 演算子オプション
条件を NOT キーワードで始めると、NOT が満たす条件が偽である場合にの
みテストが真になります。NOT が満たす条件が不明 ( 決定に NULL を使用 )
であれば、NOT 演算子は効果を持ちません。次の真理値表は NOT の効果を
示しています。文字 T は真の条件を表し、F は偽の条件を表し、? は不明の
条件を表します。算術演算子を使用する式の一部が NULL であれば、不明
の値が示されます。
NOT
T
F
?
F
T
?
比較条件 ( 論理式 )
5 種類の比較条件があります。つまり、関係演算子、BETWEEN、IN、
ISNULL、および LIKE と MATCHES です。比較条件は単一の真または偽の結
果に評価されるので、比較条件はしばしば論理式と呼ばれます。各比較条
件の構文が次の図で要約されており、詳しい説明が図の後に続いています。
構文 7-351
比較条件 ( 論理式 )
関係演算子
7-434
ページ
式
7-375
ページ
式
7-375
ページ
式
7-375
ページ
BETWEEN
NOT
式
7-375
ページ
+
式
7-375
ページ
,
式
7-375
ページ
リテラル
番号
7-427
ページ
リテラル
日時
7-421
ページ
リテラル
間隔
7-424
ページ
引用符付き
ストリング
7-431
ページ
(
IN
AND
NOT
)
TODAY
USER
CURRENT
表名
7-440
ページ
.
ビュー名
7-444
ページ
.
シノニム
名
7-438
ページ
..
OL
SITENAME
DBSERVERNAME
< 列名 >
IS
NULL
NOT
LIKE
< 列名 >
表名
7-440
ページ
.
ビュー名
7-444
ページ
.
シノニム名
..
7-438
日時修飾子
7-373
ページ
NOT
+
MATCHES
ページ
7-352 IBM Informix SQL リファレンス・ガイド
引用符付き
ストリング
7-431
ページ
ESCAPE
"< 文字 (CHAR) >"
比較条件 ( 論理式 )
関係演算子条件
式
7-375 ページ
関係演算子
7-434 ページ
式
7-375 ページ
関係演算子条件の例を次に示します。
図 7-142
関係演算子条件の例
city[1,3] = "San"
o.order_date > "6/12/86"
WEEKDAY(paid_date) = WEEKDAY(CURRENT-31 UNITS day)
YEAR(ship_date) < YEAR (TODAY)
quantity <= 3
customer_num <> 105
customer_num != 105
ある行に対していずれかの式が NULL であれば、その条件は偽に評価され
ます。たとえば、paid_date が NULL 値であれば、その行を検索するために
次のどの文も使用することはできません。
図 7-143
NULL 値を偽に評価する関係演算子条件の例
SELECT customer_num, order_date FROM orders
WHERE paid_date = ""
SELECT customer_num, order_date FROM orders
WHERE NOT PAID !=""
次の例に示されているように、IS NULL 条件は NULL 値を検出します。IS
NULL 条件については、後のセクションで詳しく説明します。
図 7-144
IS NULL 条件の例
SELECT customer_num, order_date FROM orders
WHERE paid_date IS NULL
構文 7-353
比較条件 ( 論理式 )
BETWEEN 条件
式
7-375 ページ
BETWEEN
式
7-375 ページ
AND
式
7-375 ページ
NOT
BETWEEN テストが真であるためには、BETWEEN キーワードの左側にある
式の値が、BETWEEN キーワードの右側にある 2 つの式の値の包括的範囲に
入っていなければなりません。NULL 値はこの条件を満たしません。この
範囲を定義する式には NULL を使用することはできません。
BETWEEN 条件の例を次に示します。
図 7-145
BETWEEN 条件の例
order_date BETWEEN "6/1/90" and "9/7/90"
zipcode NOT BETWEEN "94100" and "94199"
EXTEND(call_dtime, DAY TO DAY) BETWEEN
(CURRENT - INTERVAL(7) DAY TO DAY) AND CURRENT
lead_time BETWEEN INTERVAL (1) DAY TO DAY
AND INTERVAL (4) DAY TO DAY
unit_price BETWEEN loprice AND hiprice
7-354 IBM Informix SQL リファレンス・ガイド
比較条件 ( 論理式 )
IN 条件
,
式
7-375 ページ
(
IN
NOT
リテラル
番号
7-427 ページ
)
リテラル
日時
7-421 ページ
リテラル
間隔
7-424 ページ
引用符付き
ストリング
7-431 ページ
TODAY
USER
CURRENT
日時
修飾子
7-373
ページ
OL
SITENAME
DBSERVERNAME
IN 条件は、IN 語の左側にある式が項目のリストにインクルードされている
場合に満たされます。NOT オプションは、式が項目のリストに含まれてい
ない場合に満たされる検索条件を生成します。NULL 値はこの条件を満た
しません。
IN 条件の例を次に示します。
図 7-146
IN 条件の例
WHERE state IN ("CA", "WA", "OR")
WHERE manu_code IN ("HRO", "HSK")
WHERE user_id NOT IN (USER)
WHERE order_date NOT IN (TODAY)
I4GL
ESQL
TODAY は実行時に評価されます。CURRENT は、単一の SELECT の場合に、
カーソルをオープンしたとき、または照会を実行したときに評価されま
す。♦
構文 7-355
比較条件 ( 論理式 )
USER 関数を使用する場合は、大文字小文字の区別に注意してください。こ
の関数は、minnie と Minnie を異なる値として受け取ります。
IS NULL 条件
IS NULL 条件は、NULL 値が存在しているかどうかの検査を行います。その
構文は次のとおりです。
< 列名 >
表名
7-440
ページ
.
ビュー名
7-444
ページ
.
シノニム
名
7-438
ページ
.
< 別名 >
.
IS
NULL
NOT
< 別名 >
列が含まれている表の別名です。
< 列名 >
検査対象列の名前です。
IS NULL 条件が満たされるのは、列に NULL 値が含まれている場合です。IS
NOT NULL オプションを使用する場合にこの条件が満たされるのは、列に非
NULL 値が含まれているときです。次の例は IS NULL 条件を示しています。
WHERE paid_date IS NULL
7-356 IBM Informix SQL リファレンス・ガイド
比較条件 ( 論理式 )
LIKE および MATCHES 条件
LIKE または MATCHES 条件は、一致する文字ストリングをテストします。
このテストの構文は次のとおりです。
< 列名 >
表名
7-440
ページ
ビュー名
7-444
ページ
シノニム
名
7-438
ページ
< 別名 >
.
LIKE
NOT
+
引用符付き
ストリング
7-431
ページ
ESCAPE
"< 文字 (CHAR) >"
MATCHES
.
.
.
< 別名 >
列が含まれている表の別名です。
< 文字 >
引用符で囲まれた単一文字です。
< 列名 >
列の名前です。
検索条件が満たされるのは、左側の列の値が、引用符付きストリングに
よって指定されたパターンと一致するときです。ストリングにワイルド
カード文字を使用することができます。NULL 値はこの条件を満たしませ
ん。
引用符付きストリングでリテラル引用符と一致させるために二重引用符 (")
のみを使用できます。ESCAPE キーワードは使用できません。"""" と書けば、
他の任意のパターンと突き合わせる際に、引用符文字を ESCAPE 文字とし
て使用することができます。
NOT オプション
NOT オプションを使用すれば、左側の列が非 NULL 値を含み、引用符付き
ストリングによって指定されたパターンと一致しないときに、検索条件を
満足することができます。たとえば、次の条件は、lname 列内の文字
Baxter で始まるすべての行を除外します。
WHERE lname NOT LIKE "Baxter%"
WHERE lname NOT MATCHES "Baxter*"
構文 7-357
比較条件 ( 論理式 )
LIKE オプション
LIKE を使用する場合は、次のワイルドカード文字を引用符付きストリング
で使用することができます。
%
% 記号はゼロ以上の文字と一致します。
_
アンダースコアーは任意の単一文字と一致します。
\
円記号は、次の文字の特別の意味を削除します (\% または \_
と書いて、% または _ と突き合わせるために使用します )。
円記号をエスケープ文字として使用することは、ANSI 準拠 SQL の Informix
機能拡張です。
次の条件は、“tennis” というストリングを単独で、またはより長いストリン
グ ( たとえば、“tennis ball” または “tabletennis paddle”) の一部として、テス
トします。
WHERE description LIKE "%tennis%"
次の条件は、アンダースコアーが含まれているすべての記述をテストしま
す。アンダースコアーはワイルドカード文字であるため、円記号が必要で
す。
WHERE description LIKE "%\_%"
MATCHES オプション
MATCHES キーワードを使用する場合は、次のワイルドカード文字を引用符
付きストリングで使用することができます。
*
アスタリスク記号は、ゼロ以上の文字と一致します。
?
疑問符は任意の単一文字と一致します。
[...]
大括弧の中の文字は、[a-z] などの文字範囲を含め、囲まれた
任意の文字と一致します。脱字記号は、大括弧の中の先頭文
字として (^) が付いているもので、リストされていない任意
の文字と一致します。つまり、[^abc] は、a、b、または c の
いずれでもない文字と一致します。
\
円記号は、次の文字の特別の意味を削除します (\* または \?
と書いて、* または ? と突き合わせるために使用します )。
7-358 IBM Informix SQL リファレンス・ガイド
比較条件 ( 論理式 )
次の条件は、“tennis” というストリングを単独で、またはより長いストリン
グ ( たとえば、“tennis ball” または “tabletennis paddle”) の一部として、テス
トします。
WHERE description MATCHES "*tennis*"
次の条件は “Frank” および “frank” という名前で真です。
WHERE fname MATCHES "[Ff]rank"
次の条件は、“F” または “f” のいずれかで始まるすべての名前で真です。
WHERE fname MATCHES "[Ff]*"
LIKE での ESCAPE
ESCAPE 節を使用すれば、アンダースコアー (_) またはパーセント記号 (%)
を引用符付きストリングにインクルードして、それらがワイルドカードと
解釈されないようにすることができます。z をエスケープ文字として使用す
る場合は、ストリング内の文字 z_ は 文字 _ を表します。同様に、文字 z%
は文字 % を表します。最終的に、ストリング内の文字 zz は文字 z を表しま
す。次の文は、company 列にアンダースコアーが含まれている行を
customer 表から取り出します。
SELECT * FROM customer
WHERE company LIKE "%z_%" ESCAPE "z"
MATCHES での ESCAPE
ESCAPE 節を使用すれば、疑問符 (?)、アスタリスク (*)、および左または右
大括弧 ([]) を引用符付きストリングにインクルードして、それらがワイル
ドカードと解釈されないようにすることができます。z をエスケープ文字と
して使用する場合は、ストリング内の文字 z? は文字 ? を表します。同様に、
文字 z* は文字 * を表します。最終的に、ストリング内の文字 zz は文字 z を
表します。次の文は、company 列に疑問符文字が含まれている行を
customer 表から取り出します。
SELECT * FROM customer
WHERE company LIKE "*z?*" ESCAPE "z"
構文 7-359
副照会での条件
副照会での条件
条件内で SELECT 分を使用することができます。この方法は副照会と呼ば
れます。SELECT 文で副照会を使用して、以下のことを行うことができま
す。
!
式と他の SELECT 文の結果を比較する
!
式が他の SELECT 文の結果にインクルードされているかどうかを判
別する
!
他の SELECT 文によっていずれかの行が選択されたかどうかを調べ
る
副照会が、外部 SELECT 文によって評価される現在行に依存している場合
があります。この場合、副照会は相互関連副照会になります。
副照会条件には 3 種類があります。それぞれの副照会条件について、構文
と例を示します。
副照会で使用できる SELECT のサブセット
副照会は、使用されるコンテキストに応じて、単一値、無値、または値の
セットを戻すことができます。副照会が値を戻す場合は、単一列のみを選
択する必要があります。副照会が単に行 ( 複数の場合もある ) の存在を調べ
るだけの場合は、任意の数の行または列を選択することができます。副照
会に ORDER BY 節を含めることはできません。SELECT 文のすべての構文が
7-263 ページに示されています。
IN 副照会
式
7-375
ページ
IN
NOT
(
SELECT
( サブセット
7-360
ページ
)
IN 副照会条件は、副照会によって選択された 1 つ以上の値と式の値が一致
する場合に真になります。副照会は 1 つの列しか戻してはなりませんが、
複数の行を戻すことができます。IN キーワードは =ANY シーケンスと同等
です。NOT IN キーワードは !=ALL シーケンスと同等です。7-362 ページの
ALL/ANY/SOME セクションを参照してください。
次の条件は、野球グラブが含まれない注文の注文番号を検出します
(stock_num =1)。
7-360 IBM Informix SQL リファレンス・ガイド
副照会での条件
図 7-147
IN 副照会の例
WHERE order_num NOT IN
(SELECT order_num FROM items WHERE stock_num = 1)
IN 副照会は行の存在をテストするので、副照会結果の重複行はメインの照
会の結果に影響を与えません。したがって、UNIQUE または DISTINCT キー
ワードを副照会に含めても、照会結果に影響を与えません。ただし、重複
のテストを行わないと、照会の実行に必要な時間が削減されることがあり
ます。
EXISTS 副照会
EXISTS
(
SELECT
( サブセット )
7-360
ページ
)
NOT
EXISTS 副照会条件は、副照会が行を戻した場合に真と評価されます。
EXISTS 副照会では、1 つ以上の列を戻すことができます。副照会には常に、
メイン照会内の表列への参照が含まれています。集計関数を EXISTS 副照会
で使用する場合は、常に少なくとも 1 つの行を戻します。
SELECT 文を EXISTS 副照会付きで使用した次の例は、注文を受けたことが
ない ( したがって、items 表にリストされていない ) すべての項目の在庫番
号とメーカー・コードを戻します。この SELECT 文では EXISTS 副照会を使
用するのが適切です。それは、副照会を使用して items の stock_num と
manu_code の両方をテストするからです。
図 7-148
EXISTS 副照会の例
SELECT stock_num, manu_code FROM stock
WHERE NOT EXISTS (SELECT stock_num, manu_code FROM items
WHERE stock.stock_num = items.stock_num AND
stock.manu_code = items.manu_code)
上の例は、特定の列値ではなく、行全体をテストしているため、この副照
会では、列名の代わりに、SELECT * を使用することもできます。
構文 7-361
副照会での条件
ALL/ANY/SOME 副照会
式
7-375 ページ
関係
演算子
7-434 ページ
(
SELECT
( サブセット )
7-360 ページ
)
ALL
ANY
SOME
ALL
副照会から戻されたすべての値に関する比較が真である場合
に、検索条件が真であることを示すキーワードです。副照会
が値を戻さない場合は、条件は真になります。
ANY
戻された値の少なくとも 1 つに関する比較が真である場合
に、検索条件が真であることを示すキーワードです。副照会
が値を戻さない場合は、検索条件は偽になります。
SOME
ANY の別名です。
次の例の最初の条件は、各 total_price が、注文番号 1023 のすべての品目の
合計価格より大きいかどうかをテストします。2 番目の条件は、MAX 集計
関数を使用して同じ結果を出します。
図 7-149
ALL 副照会および同等の集合副照会の例
total_price > ALL (SELECT total_price FROM items
WHERE order_num = 1023)
total_price > (SELECT MAX(total_price) FROM items
WHERE order_num = 1023)
次の条件は、合計価格が注文番号 1023 の少なくとも 1 つの品目の合計価格
より大きいときに真になります。最初の条件は ANY キーワードを使用し、
2 番目の条件は MIN 集計関数を使用します。
図 7-150
ANY 副照会および同等の集合副照会の例
total_price > ANY (SELECT total_price FROM items
WHERE order_num = 1023)
total_price > (SELECT MIN(total_price) FROM items
WHERE order_num = 1023)
7-362 IBM Informix SQL リファレンス・ガイド
AND または OR を持つ条件
NOT キーワードを ANY 副照会付きで使用すると、式がどの副照会値につい
ても真でないかどうかがテストされます。たとえば、次の条件は、
total_price 式が、選択したどの値よりも大きくないときに真になります。
つまり、total_price が注文番号 1023 のどの合計価格よりも大きくないとき
に真になります。
図 7-151
ANY 副照会での NOT キーワードの例
NOT total_price > ANY (SELECT total_price FROM items
WHERE order_num = 1023)
ANY、ALL、または SOME キーワードの省略
副照会が正確に 1 つの値だけを戻すことが分かっている場合は、その副照
会で ANY、ALL、または SOME キーワードを省略することができます。
ANY、ALL、または SOME キーワードを省略し、副照会が複数の値を戻した
場合は、エラーになります。次の例の副照会は集計関数を使用しているの
で、1 行しか戻しません。
SELECT order_num FROM items
WHERE stock_num = 9 AND quantity =
(SELECT MAX(quantity) FROM items WHERE stock_num = 9)
AND または OR を持つ条件
単純条件を論理演算子 AND または OR と結合することができます。次の
SELECT 文には、WHERE 節における複合条件の例が含まれています。
図 7-152
単純条件と AND または OR との結合
SELECT customer_num, order_date FROM orders
WHERE paid_date > "1/1/90" OR paid_date IS NULL
SELECT order_num, total_price FROM items
WHERE total_price > 200.00 AND manu_code LIKE "H%"
SELECT lname, customer_num FROM customer
WHERE zipcode BETWEEN "93500" AND "95700"
OR state NOT IN ("CA", "WA", "OR")
構文 7-363
AND または OR を持つ条件
次の真理値表は、AND および OR 演算子の効果を示しています。文字 T は
真の条件を表し、F は偽の条件を表し、? は不明値を表します。不明値は、
論理演算子を使用する式の一部が NULL の場合に生じます。
AND
T
F
?
OR
T
F
?
T
F
?
T
F
?
F
F
F
?
F
?
T
F
?
T
T
T
T
F
?
T
?
?
論理式が UNKNOWN と評価した場合は、この条件は満たされません。
WHERE 節内での次の条件について考えます。
WHERE ship_charge/ship_weight < 5
AND order_num = 1023
order_num =1023 である行は、ship_weight が NULL である行です。
ship_weight が NULL であるため、ship_charge/ship_weight も NULL です。
したがって、ship_charge/ship_weight < 5 の真理値は UNKNOWN です。
order_num =1023 が TRUE であるため、AND 表は条件全体の真理値が
UNKNOWN であることを示しています。したがって、この行は選択されま
せん。この条件が、AND ではなく、OR を使用した場合は、この条件は真に
なります。
7-364 IBM Informix SQL リファレンス・ガイド
制約名
制約名
目的
制約名構文は、構文ダイアグラムで制約名を参照するときに必ず使用され
ます。制約名セグメントは次の文に現れます。
!
ALTER TABLE
!
CREATE TABLE
!
SET CONSTRAINTS
構文
< 所有者 >.
OL
識別子
7-403
ページ
< データベース >
<@ サーバー>
< データベース > 制約が含まれたデータベースの名前です。
< 所有者 >
制約の所有者のユーザー名です。ANSI 標準準拠のデータベー
スを使用する場合は、自分が所有していない制約に対して
owner. 規則を使用しなければなりません。
< サーバー >
< データベース > が常駐する IBM Informix OnLine データベー
ス・サーバーの名前です。アットマーク (@) は、データベー
ス・サーバー名を示すために使用しなければならないリテラ
ル文字です。
使用法
制約の実際の名前は SQL 識別子です。
表を作成する場合、制約の <. 名前 > はデータベース内で固有でなければな
りません。
構文 7-365
使用法
ANSI
表を作成する場合、< 所有者 . 名前 > 条件はデータベース内で固有でなけ
ればなりません。
< 所有者 . 名前 > には大文字小文字の区別があります。詳細については、
7-442 ページの ANSI 準拠データベースにおける大文字小文字の区別の説明
を参照してください。♦
7-366 IBM Informix SQL リファレンス・ガイド
データベース名
データベース名
目的
データベース名構文は、構文ダイアグラムでデータベース名を参照すると
きに必ず使用されます。データベース名セグメントは次の文で使用されま
す。
!
CREATE DATABASE
!
DATABASE
!
DROP DATABASE
!
ROLLFORWARD DATABASE
!
START DATABASE
構文
識別子
7-403
ページ
OL
OL
@
"<//DB
I4GL
ESQL
SE
<DB 名 >
<DB サー
バー名 >
サーバー名 /DB 名 >"
< 変数名 >
"<//DB
サーバー名 / ディレクトリー・
パス /DB 名 >"
データベースそれ自身の名前です。
構文 7-367
使用法
<DB サーバー名 > データベースが常駐するデータベース・サーバーの名前で
す。
< ディレクト
リー・パス >
.dbs ディレクトリーの親ディレクトリーへのデータベー
ス・ディレクトリーのパスです。
< 変数名 >
データベースの名前が含まれている、プログラム変数また
はホスト変数です。
使用法
単純データベース名は SQL 識別子です ( 7-403 ページを参照 )。データベー
スを作成する場合、データベースに割り当てる名前は最高 18 文字にするこ
とができます。データベース名には大文字小文字の区別はありません。
次の例はデータベース仕様を示しています。
empinfo@personnel
<@DB サーバー名 > オプション
データベース・サーバー名を使用する場合は、名前と @ との間にスペース
を入れないでください。たとえば、次の文は、training データベース・
サーバーの stores5 データベースに有効です。
DATABASE stores5@training
データベース・サーバー名を指定すれば、他のデータベース・サーバー上
のデータベースを自分の現行データベースとして選択することができます。
<DB サーバー名 > を使用して現行データベース・サーバーを指名すること
ができます。ただし、これは余分の情報になります。
<//DB サーバー名 /DB 名 > オプション
代替指名方式を使用する場合は、次の例に示されているように、引用符、
スラッシュ、および名前の間にスペースを入れないでください。
DATABASE "//training/stores5"
7-368 IBM Informix SQL リファレンス・ガイド
< 変数名 > オプション
<@DB サーバー名 > オプションの場合と同様に、データベース・サーバー
名を指定すれば、他のデータベース・サーバー上のデータベースを自分の
現行データベースとして選択することができます。ローカル・データベー
スを指名するには、<DB サーバ名 > を <DB 名 > と一緒に使用します。
< 変数名 > オプション
I4GL
ESQL
I4GL
SE
I4GL
ESQL
データベースの名前を保持するために、4GL または埋め込み言語プログラ
ム内で変数を使用することができます。♦
データベース名を関数または MAIN プログラム・ブロック内に保持するた
めに、変数を使用することができます。データベース名を保持するために
変数を使用できないのは、DATABASE 文を使用して、LIKE データベース列
が定義されているグローバル変数を定義する場合です。♦
現行ディレクトリーにも、DBPATH 環境変数によって指定されたディレク
トリーにも常駐していないデータベースを指定したい場合は、DATABASE
キーワードの後ろに、データベースの絶対パス名 (.dbs 拡張子を除く ) に評
価されるプログラム変数を指定する必要があります。♦
<//DB サーバー名 / ディレクトリー・パス /DB 名 >
オプション
SE
INET
IBM Informix NET を使用する場合は、別のデータベース・サーバー上のデー
タベースを指定することができます。引用符、スラッシュ、および名前の
間にスペースを入れないでください。次のデータベース名は、business
データベース・サーバーに常駐する stores5 データベースを記述していま
す。
//business/u/acctng/demo/stores5
♦
構文 7-369
データ型
データ型
目的
データ型セグメントは、列または値のデータ型を指定しなければならない
ときは必ず使用します。データ型セグメントは次の文で使用されます。
!
ALTER TABLE
!
CREATE PROCEDURE
!
CREATE TABLE
構文
7-370 IBM Informix SQL リファレンス・ガイド
構文
CHAR
(
CHARACTER
)
< サイズ >
(1)
+
DATE
+
DATETIME
DATETIME フィールド修飾子 7-373 ページ
DECIMAL
(
DEC
)
< 精度 >
, < 小数点
16
NUMERIC
以下桁数 >
FLOAT
< 浮動 >
< 精度 >
(
DOUBLE PRECISION
)
INTEGER
INT
+
INTERVAL
+
INTERVAL フィールド修飾子 7-419 ページ
MONEY
(
)
< 精度 >
,2
16
, スケール
+
SERIAL
(1)
(< 開始 >)
+
SMALLFLOAT
REAL
SMALLINT
OL
+
TEXT
IN
BYTE
TABLE
<BLOB 領域 >
OL
+
VARCHAR
(
)
< 最大 >
,
< 予約 >
,0
構文 7-371
使用法
<BLOB 領域 >
すでに存在している BLOB 領域の名前です。
< 浮動精度 >
1 ~ 14 の整数です。< 浮動精度 > は無視されます。
< 最大 >
VARCHAR 最大可能長です。
< 精度 >
10 進数型または金額 (MONEY) 型の有効数字の総数です。1
~ 16 の整数です。
< 予約 >
実際のデータが < 予約 > より短い場合でも、VARCHAR 用に
予約されているスペースの量です。
< 小数点以下
桁数 >
小数点の右側の桁数です。
< サイズ >
列内の文字数です。
< 開始 >
SERIAL 列内の値の開始番号です。
使用法
詳細については、第 3 章、『データ型』のすべてのデータ型の説明を参照し
てください。
7-372 IBM Informix SQL リファレンス・ガイド
DATETIME フィールド修飾子
DATETIME フィールド修飾子
目的
DATETIME フィールド修飾子は、DATETIME 列または値に最大および最小時
間単位を指定します。DATETIME フィールド修飾子は次のセグメントで使
用します。
!
データ型
!
式 ( 定数式の )
構文
YEAR
MONTH
TO YEAR
DAY
TO MONTH
HOUR
TO DAY
MINUTE
TO HOUR
SECOND
TO MINUTE
FRACTION
TO SECOND
TO FRACTION
(3)
(< 桁数 >)
< 桁数 >
小数部を何桁の精度で測定するかを示す、1 ~ 5 桁の単一整数
です。
構文 7-373
使用法
使用法
最初の DATETIME 値に対して最大単位を指定します。TO 語の後に、その値
に対する最小単位を指定します。これらのキーワードは、以下の値が
DATETIME オブジェクトに使用されることを意味します。
YEAR
A.D. 1 ~ 9999 の数字の年です。
MONTH
1 ~ 12 の数字の月です。
DAY
その月に該当する 1 ~ 31 の数字の日です。
HOUR
0 ( 真夜中 ) ~ 23 の数字の時間です。
MINUTE
0 ~ 59 の数字の分です。
SECOND
0 ~ 59 の数字の秒です。
FRACTION
最高 5 桁の 10 進数で表した秒の小数部です。デフォルトの小
数点以下桁数は 3 桁です (1/1000 秒 )。
DATETIME 修飾子の例を次に示します。
図 7-153
DATETIME 修飾子の例
DAY TO MINUTE
YEAR TO MINUTE
DAY TO FRACTION(4)
MONTH TO MONTH
7-374 IBM Informix SQL リファレンス・ガイド
式
式
式とは、データベースまたはデータベース・サーバーに含まれている、ま
たはそこから派生したデータの 1 つ以上の断片です。式セグメントは、次
の文とセグメントで使用されます。
!
SELECT
!
条件セグメント内の DELETE
!
条件セグメント内の UPDATE
!
SPL 式
構文 7-375
構文
構文
+
*
/
| |
列式
7-377
ページ
_
+
定数式
7-380
ページ
関数式
7-387
ページ
集合式
7-263
ページ
< 変数名 >
(
< 変数名 >
式
)
値が含まれているプログラム変数またはホスト変数の名前で
す。
使用法
いくつかの式を結合するには、それらを加算、減算、乗算、および除算の
算術演算子で接続します。
集計関数を副照会で使用するのでない限り、WHERE 節の一部ある条件内で
集計式を使用することはできません。
7-376 IBM Informix SQL リファレンス・ガイド
連結演算子
連結演算子
連結演算子 (||) を使用して 2 つの式を連結することができます。たとえば、
次は、いくつかの可能な連結式の組み合わせを示したものです。最初の例
は、zipcode 列を lname 列の先頭の 3 文字と連結します。2 番目の例は、.dbg
接尾辞を file_variable というホスト変数の内容に連結します。3 番目の例
は、TODAY 関数によって戻された値と Date ストリングを連結します。
lname[1,3] || zipcode
$file_variable || ".dbg"
"Date:" || TODAY
ESQL 専用文では連結演算子は使用できません。ESQL 専用文は次のとおり
です。
ALLOCATE DESCRIPTOR
FETCH
CLOSE
FLUSH
DEALLOCATE DESCRIPTOR
FREE
DECLARE
GET DESCRIPTOR
DESCRIBE
OPEN
EXECUTE
PREPARE
EXECUTE IMMEDIATE
PUT
構文 7-377
列式
列式
構文の構文は次のとおりです。
< 列名 >
表名
7-440 ページ
.
< 別名 >
.
I4GL
+
<[ 最初、最後 ]>
ROWID
@
ビュー名
7-444 ページ
.
シノニム名
7-438 ページ
.
< 別名 >
SELECT および FROM 節を除く、任意の節の SELECT 文で使用
されます。これは FROM 節で設定された表の代替名です。
< 列名 >
選択する列の名前です。
< 最初 >
列の先頭文字の位置です (CHAR、VARCHAR、または TEXT)。
< 最後 >
選択する部分の最後の文字の位置です。
列式のいくつかの例を次に示します。
図 7-154
列式の例
company
items.price
cat_advert [1,15]
必要に応じ、表名または別名を使用して、同じ名前を持つが、異なる表に
含まれている、列を見分けます。たとえば、次の SELECT 文は、customer
および orders 表の customer_num を使用して、列名の前に表名を入れます。
7-378 IBM Informix SQL リファレンス・ガイド
列式
図 7-155
同じ名前の複数列を見分けるための表名および別名の使用
SELECT * FROM customer, orders
WHERE customer.customer_num = orders.customer_num
SELECT * FROM customer c, orders o
WHERE c.customer_num = o.customer_num
文字列での文字部分列の使用
文字部分列を CHAR、VARCHAR、および TEXT 列で使用することができま
す。文字部分列は、式に含まれている開始および終了文字位置を示します。
たとえば、customer 表の lname 列の値が Greenburg であれば、次の式は burg
の値に評価されます。
fname[6,9]
行 ID の使用
表の各行と関連する行 ID を行のプロパティーとして使用することができま
す。行 ID は、基本的には、非表示列です。行 ID は各行ごとに固有ですが、
必ずしも順次ではありません。
SE
行 ID は順次であり、各表の 1 から始まります。♦
次の例は、SELECT 文での ROWID キーワードの使用を示しています。
図 7-156
SELECT 文での ROWID キーワードの使用
SELECT *, ROWID FROM customer
SELECT fname, ROWID FROM customer
ORDER BY ROWID
アットマークの使用
I4GL
プログラム変数が列と同じ名前を持っている場合は、列目の前にアット
マーク (@) を付けなければなりません。列名を持つ表名、ビュー名、また
は別名をインクルードする場合は、@ 符号は不要です。♦
次の例は、@ 符号を前に付けた列式を示しています。
構文 7-379
定数式
図 7-157
@ 符号を前に付けた列式の例
SELECT @fname, @lname INTO fname, lname FROM customer
WHERE customer_num = 119
SELECT stock_num, manu_code FROM stock
WHERE @stock_num >= stock_num
INSERT INTO customer (@fname, @lname) VALUES (fname,lname)
定数式
定数式の構文は次のとおりです。
引用符付き
ストリング
7-431 ページ
USER
OL
+
SITENAME
DBSERVERNAME
リテラル番号
7-427 ページ
+
TODAY
CURRENT
DATETIME フィールド
修飾子
7-373 ページ
リテラル DATETIME 7-421 ページ
リテラル間隔 7-424 ページ
<n>
UNITS
< 日時単位 >
< 日時単位 > 間隔精度を指定するために使用される単位の 1 つです。つま
り、YEAR、MONTH、DAY、HOUR、MINUTE、SECOND、また
は FRACTION です。
<n>
整数リテラル数値です。
定数式の例を次に示します。
7-380 IBM Informix SQL リファレンス・ガイド
定数式
図 7-158
定数式の例
DBSERVERNAME
TODAY
"His first name is"
CURRENT YEAR TO DAY
INTERVAL (4 10:05) DAY TO MINUTE
DATETIME (4 10:05) DAY TO MINUTE
5 UNITS YEAR
式としての引用符付きストリング
式としての引用符付きストリングの例を次に示します。
図 7-159
式としての引用符付きストリングの例
SELECT "The first name is ", fname FROM customer
INSERT INTO manufact VALUES ("SPS", "SuperSport")
UPDATE cust_calls SET res_dtime = "1990-1-1 10:45"
WHERE customer_num = 120 AND call_code = "B"
USER 関数
USER 関数は、現行ユーザー、つまり、プロセスを実行している人のログイ
ン名を含むストリングを戻します。
次の文は、USER 関数の使用方法を示しています。
図 7-160
USER 関数の例
INSERT INTO cust_calls VALUES
(221,CURRENT,USER,"B","Decimal point off", NULL, NULL)
SELECT * FROM cust_calls WHERE user_id = USER
UPDATE cust_calls SET user_id = USER WHERE customer_num = 220
構文 7-381
定数式
USER 関数は、ユーザー ID の大文字小文字を変更しません。式で USER を使
用し、現在のユーザーが Robertm であるとすると、USER 関数は robertm
ではなく、Robertm を戻します。ユーザーを列のデフォルト値として指定
した場合は、列は CHARACTER または VARCHAR 型であり、また少なくとも
8 文字の長さでなければなりません。
ANSI
ANSI 準拠データベースの場合、所有者名を引用符で囲まないと、表所有者
の名前は大文字で格納されます。USER キーワードを条件の一部として使用
する場合は、格納したユーザー名の大文字小文字と、USER 関数によって戻
された値の大文字小文字が一致していなければなりません。♦
SITENAME および DBSERVERNAME 関数
SITENAME および DBSERVERNAME 関数は、現行のデータベースが常駐する
IBM Informix OnLine ファイルの tbconfig ファイルに定義された、データ
ベース・サーバー名を戻します。この 2 つの関数名は同義です。DBSERVERNAME 関数を使用して、表の格納場所の決定、表への情報の入力、およ
び表からの情報の抽出を行うことができます。DBSERVERNAME を単純文字
フィールドに挿入したり、それを列のデフォルト値として使用したりでき
ます。DBSERVERNAME を列のデフォルト値として指定した場合は、列は
CHARACTER または VARCHAR 型で、かつ少なくとも 18 文字の長さでなけ
ればなりません。
次の例では、最初の文は、customer 表が常駐するデータベース・サーバー
の名前を戻します。WHERE 節では照会が制限されていないため、表内のす
べての行の DBSERVERNAME を戻します。DISTINCT キーワードを SELECT
節に追加すると、照会は DBSERVERNAME を 1 度だけ戻します。2 番目の文
は、現行のサイト名が入っている行を表に追加します。3 番目の文は、
site_col に現行システムのサイト名を持つ、すべての行を戻します。最後の
文は、customer 表の会社名を現行システムの名前に変更します。
図 7-161
式としての DBSERVERNAME の例
SELECT DBSERVERNAME FROM customer
INSERT INTO host_tab VALUES ("1", DBSERVERNAME)
SELECT * FROM host_tab WHERE site_col = DBSERVERNAME
UPDATE customer SET company = DBSERVERNAME
WHERE customer_num = 120
7-382 IBM Informix SQL リファレンス・ガイド
定数式
式としてのリテラル番号
式としてのリテラル番号の例を次に示します。
図 7-162
式としてのリテラル番号の例
INSERT INTO items VALUES (4, 35, 52, "HRO", 12, 4.00)
INSERT INTO acreage VALUES (4, 5.2e4)
SELECT unit_price + 5 FROM stock
SELECT -1 * balance FROM accounts
TODAY 関数
TODAY 関数は、DATE 型としてシステム日付を戻します。TODAY を列のデ
フォルト値として指定する場合は、その列は DATE 型でなければなりませ
ん。
次の文は、INSERT、UPDATE、または SELECT 文での TODAY 関数の使用法を
示したものです。
図 7-163
式としての TODAY 関数の例
UPDATE orders (order_date) SET order_date = TODAY
WHERE order_num = 1005
INSERT INTO orders VALUES
(0, TODAY, 120, NULL, N, "1AUE217", NULL, NULL, NULL, NULL)
SELECT * FROM orders WHERE ship_date = TODAY
CURRENT 関数
CURRENT 関数は、現行インスタントの日時と一緒に DATETIME 値を戻しま
す。
CURRENT
DATETIME フィールド
修飾子 7-373
ページ
構文 7-383
定数式
日時 (DATETIME) 型修飾子を指定しないと、デフォルトの修飾子は YEAR
TO FRACTION(3) になります。CURRENT 関数は、リテラル DATETIME( 7-421
ページを参照 ) を使用できる任意のコンテキストで使用できます。
CURRENT を列のデフォルト値として指定する場合は、その列は DATETIME
型で、かつ CURRENT の修飾子が列の修飾子と一致していなければなりま
せん。単一の文の中で CURRENT キーワードを複数個指定すると、各呼び出
し点で同じ値が戻されることがあります。各実行のたびに、CURRENT 関数
が明確な値を提供してくれているのかどうか信頼できなくなります。
戻された値は、システム・クロックから受け取られます。
CURRENT 関数は、文に指定された物理的な順序で実行されないことがあり
ます。文の実行の開始点、終了点、特定の時点などをマークするために
CURRENT 関数を使用しないでください。
使用しているプラットフォームに、現在時刻を秒単位以下の精度で戻すシ
ステム呼び出しが備えられていない場合は、CURRENT 関数は FRACTION
フィールドについてゼロの値を戻します。
次の例では、最初の文は CURRENT 関数を WHERE 条件で使用します。2 番
目の文は CURRENT 関数を DAY 関数の入力として使用します。最後の照会
は、call_dtime 値が 1990 の始めから現行インスタントまでの範囲に入る行
を選択します。
図 7-164
式としての CURRENT 関数の使用
DELETE FROM cust_calls WHERE
res_dtime < CURRENT YEAR TO MINUTE
SELECT * FROM orders WHERE DAY(ord_date) < DAY(CURRENT)
SELECT * FROM cust_calls WHERE call_dtime
BETWEEN "1990-1-1 00:00:00" AND CURRENT
7-384 IBM Informix SQL リファレンス・ガイド
定数式
式としてのリテラル DATETIME
式としてのリテラル DATETIME の例を次に示します。
図 7-165
式としてのリテラル DATETIME の使用
SELECT DATETIME (1991-12-6) YEAR TO DAY FROM customer
UPDATE cust_calls SET res_dtime = DATETIME (1990-07-07 10:40)
YEAR TO MINUTE
WHERE customer_num = 110
AND call_dtime = DATETIME (1990-07-07 10:24) YEAR TO MINUTE
SELECT * FROM cust_calls
WHERE call_dtime
= DATETIME (1995-12-25 00:00:00) YEAR TO SECOND
式としてのリテラル INTERVAL
式としてのリテラル INTERVAL の例を次に示します。
図 7-166
式としてのリテラル INTERVAL の使用
INSERT INTO manufact VALUES ("CAT", "Catwalk Sports",
INTERVAL (16) DAY TO DAY)
SELECT lead_time + INTERVAL (5) DAY TO DAY FROM manufact
上の例の 2 番目の文は、manufact 表から選択した lead_time の各値に 5 日を
追加しています。
構文 7-385
定数式
UNITS キーワード
UNITS キーワードを使用すれば、単一間隔の表示、特定の間隔値または日
時値の増加 / 削減などを行うことができます。UNITS キーワードでは、次の
構文を使用します。
<n> UNITS
< 日時単位 >
< 日時単位 > 間隔精度を指定するために使用される単位の 1 つです。つま
り、YEAR、MONTH、DAY、HOUR、MINUTE、SECOND、また
は FRACTION です ( 単位が YEAR または式が年月間隔の場合。
それ以外の場合は、日時間隔になります )。
<n>
選択した日時単位と比較できるリテラル数値です ( たとえ
ば、DAY の場合は 2 桁 )。
<n> が整数でなければ、使用時に、最も近い整数に切り捨てられます。<n>
の値は、選択した日時単位として適切なものでなければなりません。たと
えば、“2001-10-31 00:00” に 1 か月を加えると、11 月 31 日になります。11
月は 30 日しかないため、<n> の値は適切でなく、エラーが戻されます。
次の例では、最初の SELECT 文は、UNITS キーワードを使用して、5 日だけ
増やしたすべてのメーカー・リードタイムを選択します。2 番目の SELECT
文は、31 日以上前に受けた電話呼び出しをすべて検出します。WHERE 節の
式が 99 ( 最大日数 ) より大きな値を戻した場合は、その照会は失敗します。
最後の文は、ANZA メーカーのリードタイムを 2 日増やします。
図 7-167
式としての UNITS キーワードの使用
SELECT lead_time + 5 UNITS DAY FROM manufact
SELECT * FROM cust_calls
WHERE (TODAY - call_dtime) > 30 UNITS DAY
UPDATE manufact SET lead_time = 2 UNITS DAY + lead_time
WHERE manu_code = "ANZ"
7-386 IBM Informix SQL リファレンス・ガイド
関数式
関数式
関数式は引数を取ります。関数式の構文は次のとおりです。
+
(
DAY
< 日付 /
日時式 >
)
MONTH
WEEKDAY
YEAR
(
DATE
)
, < 最初 >
MDY
(
LENGTH
,
< 月整数式 >
< 日整数式 >
< 日付 /
日時式 >
(
)
< 日付 /
日時式 >
(
EXTEND
< 非日付式 >
,
TO < 最後 >
)
< 年整数式 >
)
引用符付きストリング
7-431 ページ
I4GL
ESQL
< 変数名 >
< 列名 >
表名
7-440 ページ
(
HEX
ROUND
(
式
7-375
ページ
.
)
< 整数式 >
)
,
< 桁数 >
,0
TRUNC
(
式
7-375
ページ
)
, < 桁数 >
,0
構文 7-387
関数式
< 日付 / 日時式 >
7-375 ページに定義されている式で、DATE または
DATETIME 値に評価されます。
< 日整数式 >
7-375 ページに定義されている式で、当該月に該当する
整数 1 ~ 28、29、30、または 31 に評価されます。
< 桁数 >
式を何桁に丸めるかを示す +32 ~ -32 の整数です。
< 最初 >
DATETIME 値のラージ修飾子です。
< 整数式 >
7-375 ページに定義されている式で、整数に変換できま
す。
< 最後 >
DATETIME 値のスモール修飾子です。
< 月整数式 >
7-375 ページに定義されている式で、月に該当する 1 ~
12 の整数に評価されます。
< 非日付式 >
7-375 ページに定義されている式で、DATE データ型に変
換できる、CHARACTER、DATETIME、または INTEGER 値
に評価されます。
< 変数名 >
長さが評価されるプログラム変数またはホスト変数で
す。
< 年整数式 >
7-375 ページに定義されている式で、1 ~ 9999 の 4 桁の
整数に評価されます。
関数式は、次の 3 つの関数ファミリーからなっています。
時刻関数
長さ関数
変換関数
DATE()
LENGTH()
HEX()
DAY()
ROUND()
EXTEND()
TRUNC()
MDY()
MONTH()
WEEKDAY()
YEAR()
関数式のいくつかの例を次に示します。
7-388 IBM Informix SQL リファレンス・ガイド
関数式
図 7-168
関数式の例
EXTEND (call_dtime, YEAR TO SECOND)
MDY (12, 7, 1900 + cur_yr)
DATE (365/2)
LENGTH ("abc") + LENGTH(pvar)
HEX(customer_num)
HEX(LENGTH(123))
DAY、MONTH、WEEKDAY、および YEAR 関数
以下に示すとおり、これらの 4 つの関数の構文はすべて同じです。
+
DAY
(
< 日付 /
日時式 >
)
MONTH
WEEKDAY
YEAR
< 日付 / 日時 7-375 ページに定義されている式で、DATE または DATETIME
式>
値に評価されます。
DAY 関数
DAY 関数は、日を表す整数を戻します。たとえば、次の WHERE 節は、
DAY 関数を CURRENT 関数と一緒に使用して、列値と現在の日を比較しま
す。
WHERE DAY(order_date) > DAY(CURRENT)
MONTH 関数
MONTH 関数は、その DATE 型または DATETIME 引数の月部分と対応する整
数を戻します。たとえば、次の照会は、注文を受けた月を示す数値 (1 ~
12) を戻します。
SELECT order_num, MONTH(order_date) FROM orders
構文 7-389
関数式
WEEKDAY 関数
WEEKDAY 関数は、曜日を表す整数を戻します。ゼロは日曜日を表し、1 は
月曜日を表します。たとえば、次の照会は、現在日と同じ曜日に支払が
あったすべての注文をリストします。
SELECT * FROM orders
WHERE WEEKDAY(paid_date) = WEEKDAY(CURRENT)
YEAR 関数
YEAR 関数は、年を表す 4 桁の整数を戻します。次の照会は、ship_date が
現在年の年初以前の注文をリストします。
SELECT order_num, customer_num FROM orders
WHERE year(ship_date) < YEAR(TODAY)
同様に、DATE 値は単純なカレンダー日付であるため、< 最後 > 修飾子が
DAY より小さな INTERVAL 値で DATE 値を加算または減算することはできま
せん。このような場合は、DATE 値を DATETIME 値に変換してください。
DATE 関数
DATE 関数は、ユーザーがそれを呼び出すときに使用した文字式に対応する
DATE 型値を戻します。DATE 関数の構文は次のとおりです。
+
DATE
(
< 非日付式 >
)
< 非日付式 > 7-375 ページに定義されている式で、DATE データ型に変換で
きる CHARACTER、DATETIME、または INTEGER 値に評価さ
れます。
引数は、DATE 値 ( 通常、CHAR、DATETIME、または INTEGER 値 ) に変換で
きる任意の式にすることができます。たとえば、次の 2 つの WHERE 節は同
じ目的を持っています。つまり、ストリングを日付に変換することです。
WHERE order_date < DATE("12/31/90")
WHERE order_date
<
DATE(365)
7-390 IBM Informix SQL リファレンス・ガイド
関数式
EXTEND 関数
EXTEND 関数は、DATETIME または DATE 値の精度を調整します。その構文
は次のとおりです。
+
EXTEND
(
< 日付 /
日時式 >
)
,
< 最初 > TO < 最後 >
< 日付 / 日時式 > 7-375 ページに定義されている式で、DATE または
DATETIME 値に評価されます。
< 最初 >
結果の中の最初のフィールドを指定する修飾子です。こ
の修飾子は、< 最初 > が < 最後 > より大きい場合、7-373
ページに定義されている任意の DATETIME 修飾子にするこ
とができます。
< 最後 >
結果の中の最後のフィールドを指定する修飾子です。
この式は、DATE 値の引用符付きストリング表現であってはなりません。
< 最初 > および < 最後 > 修飾子を指定しないと、デフォルト修飾子は
YEAR TO FRACTION(3) になります。
修飾子で指定されていないフィールドが式に含まれていれば、不要な
フィールドは廃棄されます。
式の中のフィールドより大きな ( つまり、より重要な ) フィールドが < 最
初 > 修飾子によって指定されていれば、CURRENT 関数によって戻された値
が新規フィールドに入力されます。< 最後 > 修飾子が式の中のフィールド
より小さな ( つまり、より重要でない ) フィールドを指定している場合は、
新規フィールドには定数値が入力されます。欠落した MONTH または DAY
フィールドには 1 が入力され、欠落した HOUR から FRACTION までの
フィールドには 0 が入力されます。
次の例で、最初の EXTEND 呼び出しは YEAR TO SECOND の call_dtime 列値
に評価されます。2 番目の例は、リテラル DATETIME を拡張して、それから
間隔を減算できるようにします。必ずしもすべての修飾子が同じではない
INTERVAL 値に DATETIME 値を加算したり、INTERVAL 値から INTERVAL 値
を減算したりする場合は、DATETIME 値を指定して EXTEND 関数を使用す
る必要があります。
構文 7-391
関数式
図 7-169
EXTEND 関数の例
EXTEND (call_dtime, YEAR TO SECOND)
EXTEND (DATETIME (1989-8-1) YEAR TO DAY, YEAR TO MINUTE)
- INTERVAL (720) MINUTE (3) TO MINUTE
MDY 関数
MDY 関数は、月、日、および年を表す整数に評価される 3 つの式を使用し
て、DATE 型値を戻します。MDY の構文は次のとおりです。
+
MDY
(
< 月整数式 >
,
< 日整数式 >
,
< 年整数式 >
)
< 日整数式 > 7-375 ページに定義されている式で、当該月に該当する整数 1
~ 28、29、30、または 31 に評価されます。
< 月整数式 > 7-375 ページに定義されている式で、月に該当する 1 ~ 12 の
整数に評価されます。
< 年整数式 > 7-375 ページに定義されている式で、4 桁の整数に評価されま
す。
最初の式は、月の数値 (1 ~ 12) を表す整数に評価されます。
2 番目の式は、日の数値 ( その月に該当する 1 ~ 28、29、30、または 31) を
表す整数に評価されます。
3 番目の式は、年を表す 4 桁の整数に評価されます。3 番目の式では、2 桁
の省略形は使用できません。次の UPDATE 文は、注文番号 8052 に関連する
paid_date を現在月の初日と等しくなるように設定します。
UPDATE orders SET paid_date = MDY(MONTH(TODAY), 1, YEAR(TODAY))
WHERE po_num = "8052"
7-392 IBM Informix SQL リファレンス・ガイド
関数式
LENGTH 関数
LENGTH 関数は、末尾スペースを含まない文字列の長さを戻します。TEXT
または BYTE 列では、LENGTH 関数は列に含まれたバイトの総数を戻しま
す。
+
LENGTH
引用符付き
ストリング
7-431 ページ
(
I4GL
ESQL
)
< 変数名 >
< 列名 >
表名
7-440 ページ
.
< 列名 >
列の名前です。
< 変数名 >
文字ストリングが含まれているプログラム変数またはホスト
変数です。
LENGTH 関数では 1 つの引数しか使用できません。ただし、次の例に示され
ているように、式内でいくつかの LENGTH 値を結合することができます。
SELECT customer_num, LENGTH(fname) + LENGTH(lname)
LENGTH("How many bytes is this?")
FROM customer WHERE LENGTH(company) > 10
I4GL
ESQL
LENGTH 関数を使用して、文字変数の長さを戻すことができます。♦
HEX 関数
HEX 関数は、整数式の 16 進数エンコードを戻します。
HEX
< 整数式 >
(
< 整数式 >
)
7-375 ページに定義されている式で、整数に変換できます。
次の SELECT 文は、HEX 関数のいくつかの使用例を示しています。
SELECT HEX(customer_num), HEX(zipcode), HEX(ROWID),
HEX(LENGTH(fname)) FROM customer
構文 7-393
関数式
次の例は、orders 表に含まれている各列のデータ型と列長を 16 進形式で表
示します。MONEY および DECIMAL 列については、最下位ビットとその次
に低いビットから小数点以下桁数と精度を決定することができます。
VARCHAR 列については、最下位ビットとその次に低いビットから最大領域
と最小領域を決定することができます。( エンコードされた情報の詳細につ
いては、2-13 ページの『SYSCOLUMNS』を参照してください。)
SELECT colname, HEX(coltype), HEX(collength)
FROM syscolumns C, systables T
WHERE C.tabid = T.tabid AND T.tabname = "orders"
次の例は、現行データベースのすべての表とそれに対応する表領域番号を
16 進形式でリストします。この例は特に有用です。なぜならば、16 進数の
2 つの最上位ビットが DB 領域番号を構成していて、かつそれを使用して、
tbcheck 出力の表を識別するからです。
SELECT tabname, HEX(partnum) FROM systables
次の例に示されているように、式内でいくつかの HEX 値を結合することが
できます。
SELECT HEX(order_num + 1) FROM orders
ROUND 関数
ROUND 関数は式の丸め値を戻します。
ROUND
(
式
7-375
ページ
)
,< 桁数 >
,0
< 桁数 >
式を何桁に丸めるかを示す +32 ~ -32 の整数です。
式は数値であるか、または数値に変換できるものでなければなりません。
7-394 IBM Informix SQL リファレンス・ガイド
関数式
桁数の指示を省略すると、値はゼロの桁または 1 の桁に丸められます。正
の桁値は小数点の右側を丸めることを示し、負の桁値は小数点の左側を丸
めることを示します。
式:
24536.8746
ROUND (24536.8746, -2) = 24500.00
ROUND (24536.8746, 0) = 24537.00
-2 0 2
ROUND (24536.8746, 2) = 24536.87
SELECT order_num , ROUND(total_price) FROM items
WHERE ROUND(total_price) = 124.00
ROUND 関数の引数として MONEY データ型を使用し、ゼロの桁へ丸めると、
値は .00 と表示されます。たとえば、次の SELECT 文は、INTEGER 値と
MONEY 値を丸めます。この文は、items の各行ごとに 125 と丸めた価格を
xxx.00 形式で表示します。
SELECT ROUND(125.46), ROUND(total_price) FROM items
TRUNC 関数
TRUNC 関数は、数値式の切り捨てられた値を戻します。
TRUNC
(
式
7-375
ページ
)
,
< 桁数 >
,0
< 桁数 >
式を何桁に切り捨てるかを示す +32 ~ -32 の整数です。
式は、数値であるか、または数値式に変換できる形式でなければなりませ
ん。桁数の指示を省略すると、値はゼロの桁または 1 の桁に切り捨てられ
ます。正の桁値は小数点の右側を切り捨てることを示し、負の桁値は小数
点の左側を切り捨てることを示します。
式:
24536.8746
TRUNC (24536.8746, -2) =24500
TRUNC (24536.8746, 0) = 24536
TRUNC (24536.8746, 2) = 24536.87
-2 0 2
構文 7-395
関数式
TRUNC 関数の引数として MONEY データ型を使用し、ゼロの桁へ切り捨て
ると、.00 桁が除去されます。たとえば、次の SELECT 文は、MONEY 値と
INTEGER 値を切り捨てます。この文は、items の各行ごとに 125 と切り捨て
た価格を xxx 形式で表示します。
SELECT TRUNC(125.46), TRUNC(total_price) FROM items
7-396 IBM Informix SQL リファレンス・ガイド
集計式
集計式
集計式は、集計関数を使用して、選択したデータベース・データを要約し
ます。
集計関数式の構文は次のとおりです。
COUNT (*)
(
AVG
DISTINCT
MAX
< 列名 >
表名
7-440
ページ
UNIQUE
MIN
)
.
SUM
COUNT
AVG
MAX
式
( サブセット )
7-398 ページ
(
)
ALL
MIN
SUM
< 列名 >
列の名前です。
< 最初 >
DATETIME 値のラージ修飾子です。
< 最後 >
DATETIME 値のスモール修飾子です。
集計関数は照会した行のセット 1 つにつき 1 つの値を戻します。SELECT 文
における集計関数の例を次に示します。
図 7-170
SELECT 文における集計関数の例
SELECT sum(total_price) FROM items WHERE order_num = 1013
SELECT COUNT(*) FROM orders WHERE order_num = 1001
SELECT MAX(LENGTH(fname) + LENGTH(lname)) FROM customer
構文 7-397
集計式
集計式で使用できる式のサブセット
集計関数の引数そのものに集計関数を含めることはできません。たとえば、
MAX(AVG(order_num)) を使用することはできません。集計関数が副照会に
含まれていない限り、それを WHERE 節で使用することはできません。集計
関数を BYTE または TEXT 列に使用することはできません。式の詳細な構文
については、7-375 ページを参照してください。
行セットにおける重複のインクルードと除外
DISTINCT キーワードは、指定された列の固有値にのみ関数を適用させま
す。UNIQUE キーワードは、DISTINCT キーワードの同義語です。
ALL キーワードは、DISTINCT キーワードと対応するものです。ALL キー
ワードを指定すると、指定された列または式から選択されたすべての値
( すべての重複値も含む ) が計算に使用されます。
COUNT(*) キーワード
COUNT (*) キーワードは、WHERE 節を満たす行の数を戻します。次の照会
は在庫中の Hero 製品の数量を検索します。
SELECT COUNT(*) FROM stock WHERE manu_code = "HRO"
SELECT 文に GROUP BY 節が含まれている場合は、COUNT(*) キーワードは
各グループ内の値の数を反映しています。たとえば、次の文はファースト
ネームでグループ化されています。同じ名前が複数回現れた場合は行が選
択されます。
SELECT fname, COUNT(*) FROM customer
GROUP BY fname
WHERE COUNT(*) > 1
1 つ以上の行の値が NULL であれば、WHERE 節でカウント内の NULL 列を
明示的に省略していない限り、COUNT(*) キーワードには NULL 列がインク
ルードされます。
7-398 IBM Informix SQL リファレンス・ガイド
集計式
AVG キーワード
AVG キーワードは、指定された列または式に含まれているすべての値の平
均値を戻します。AVG キーワードは数値列にしか適用できません。
DISTINCT キーワードを使用した場合、平均値は、指定された列または式内
の明確な値のみを対象にして算出されます。次の照会は、ヘルメットの平
均価格を検索します。
SELECT AVG(unit_price) FROM stock WHERE stock_num = 110
すべてのヘルメットの単価が異なるため、DISTINCT キーワードを使用して
も、この照会では効果がありません。
指定された列のすべての値が NULL である場合を除き、NULL は無視され
ます。すべての列値が NULL であれば、AVG キーワードはその列について
NULL を戻します。
MAX キーワード
MAX キーワードは、指定された列または式に含まれている最大値を戻しま
す。DISTINCT キーワードを使用しても、結果が変更されることはありませ
ん。次の照会は、在庫中の最も高価な、しかしまだ注文を受けていない品
目を検索します。
SELECT MAX(unit_price) FROM stock
WHERE NOT EXISTS (SELECT * FROM items
WHERE stock.stock_num = items.stock_num AND
stock.manu_code = items.manu_code)
指定された列のすべての値が NULL である場合を除き、NULL は無視され
ます。すべての列値が NULL であれば、MAX キーワードはその列について
NULL を戻します。
MIN キーワード
MIN キーワードは、列または式内で最も低い値を戻します。DISTINCT を使
用しても、結果が変更されることはありません。
SELECT MIN(unit_price) FROM stock
指定された列のすべての値が NULL である場合を除き、NULL は無視され
ます。すべての列値が NULL であれば、MIN キーワードはその列について
NULL を戻します。
構文 7-399
集計式
SUM キーワード
SUM キーワードは、指定された列または式に含まれているすべての値の合
計を戻します。DISTINCT キーワードを使用した場合、合計は、指定された
列または式内の明確な値のみを対象にして算出されます。
SELECT SUM(total_price) FROM items WHERE order_num = 1013
指定された列のすべての値が NULL である場合を除き、NULL は無視され
ます。すべての列値が NULL であれば、SUM キーワードはその列について
NULL を戻します。
SUM キーワードは文字列では使用できません。
COUNT キーワード
COUNT キーワードは、列または式内の異なる値の数を戻します。COUNT 関
数が NULL を検出すると、それらは無視されます。
SELECT COUNT (DISTINCT item_num) FROM items
指定された列のすべての値が NULL である場合を除き、NULL は無視され
ます。すべての列値が NULL であれば、COUNT キーワードはその列につい
てゼロを戻します。
集計関数の動作の要約
次の表は、集計関数のアクションを要約したものです。次のような照会が
構築されているとします。
SELECT a_number FROM testtable WHERE a_number < 10
この場合は、次の値が戻されます。
a_number
2
2
2
3
3
4
(null)
7-400 IBM Informix SQL リファレンス・ガイド
集計式
また、リストされた各関数ごとにそれぞれ以下の結果が生じます。
関数
結果
COUNT(*)
7
AVG
2.67
AVG (DISTINCT)
3
MAX
4
MAX(DISTINCT)
4
MIN
2
MIN(DISTINCT)
2
SUM
16
SUM(DISTINCT)
9
COUNT(DISTINCT)
3
たとえば、次の照会は値 3 を戻します。
SELECT AVG(DISTINCT a_number) FROM testtable WHERE a_number < 10
集計関数によるエラー検査
I4GL
ESQL
集計関数は、常に、1 つの行を戻します。行を選択しないと、集計関数は
NULL を戻します。COUNT (*) キーワードを使用して、行が選択されている
かどうかを判別でき、また、標識変数を使用して、選択された行が空であ
るかどうかを判別できます。カーソルを集計関数に関連付けて、ある行を
取り出すと、常に 1 つの行が戻されます。このため、最初の取り出しで、
データの終わりを示す 100 が sqlcode 変数に戻されることはありません。♦
構文 7-401
式での算術演算子の使用
式での算術演算子の使用
式と算術演算子を結合して複雑な式を作成することができます。集計関数
を使用する式と列式を結合することはできません。次の例では、算術演算
子を使用しています。
図 7-171
算術演算子の例
quantity * total_price
price * 2 doubleprice
COUNT(*) + 2
算術式で使用するいずれかの値が NULL であれば、式全体の値が NULL に
なります。たとえば、次の照会について考えます。
SELECT order_num, ship_charge/ship_weight FROM orders
WHERE order_num = 1023
ship_charge または ship_weight のいずれかが NULL であれば、戻される
ship_charge/ship_weight 式の値も NULL になります。
ship_charge/ship_weight 式を条件に使用すると、その真理値は不明になり
ます。
DATETIME 値を 1 つ以上の INTERVAL 値と結合する場合は、INTERVAL 値の
すべてのフィールドが DATETIME 値に入っていなければなりません。暗黙
的な EXTEND 関数は実行されません。また、YEAR ~ MONTH 間隔を DAY ~
SECOND 間隔と一緒に使用することもできません。
7-402 IBM Informix SQL リファレンス・ガイド
識別子
識別子
目的
識別子セグメントは、データベースの名前を指定するために、次のセグメ
ントで使用します。
!
制約名
!
データベース名
!
インデックス名
!
シノニム名
!
表名
!
ビュー名
!
プロシージャー名
構文
< 文字 >
< 文字 >
< 桁数 >
< アンダー
スコアー>
< 桁数 >
0 ~ 9 の整数です。
< 文字 >
a から Z までの大文字または小文字です。
< アンダー
スコアー >
アンダースコアー (_) 文字です。
構文 7-403
使用法
使用法
識別子には最高 18 文字を含めることができます。
アプリケーション開発支援ツールの予約語を識別子として宣言しないでく
ださい。
ヒント : エラーを起こした文とは関係がないと考えられるエラー・メッ
セージが出た場合は、その文で予約語を識別子として使用していないかど
うか調べてください。
7-404 IBM Informix SQL リファレンス・ガイド
使用法
以下のリストは、すべての ANSI 予約語を示しています。これらの予約語の
いずれかを識別子として使用し、実行時またはコンパイル時に、
DBANSIWARN を設定するか、または -ansi フラグを指定すると、警告が出
ます。
all
and
any
as
asc
authorization
avg
begin
between
by
char
character
check
close
cobol
commit
continue
count
create
current
cursor
dec
decimal
declare
delete
desc
distinct
double
end
escape
exec
exists
fetch
float
for
found
from
go
goto
group
having
in
indicator
insert
int
integer
into
is
language
like
max
min
module
not
null
numeric
of
on
open
option
or
order
pascal
pli
precision
primary
procedure
privileges
public
real
rollback
schema
section
select
set
smallint
some
sql
sqlcode
sqlerror
sum
table
to
union
unique
update
user
values
view
whenever
where
with
work
構文 7-405
潜在的なあいまいさと構文エラー
潜在的なあいまいさと構文エラー
現在は、ほとんどすべての単語を SQL 識別子として使用できますが、構文
上のあいまいさが生じる可能性があります。あいまいな文は、望ましい結
果を出さないことがあります。このセクションでは、潜在的な落とし穴の
いくつかとその回避策について概説します。
列名としての関数の使用
最初の 2 つの例は、SELECT 文で関数を列名として使用するための回避策を
示しています。この方式は、集計関数 (AVG、COUNT、MAX、MIN、SUM)、
LENGTH 関数、時刻関数 (DATE、DAY、MDY、MONTH、WEEKDAY、YEAR)、
および日時関数 (CURRENT および EXTEND) に適用されます。
このように avg を列名として使用すると、データベース・サーバーが avg
を、列名としてではなく、集計関数と解釈するので、次の文は失敗します。
SELECT avg FROM mytab -- fails
この回避策は、表名を列名にインクルードして、あいまいさを除去してい
ます。
SELECT mytab.avg FROM mytab
TODAY、CURRENT、または USER キーワードを列名として使用すると、次
の例に示されているように、あいまいさが生じる可能性があります。
CREATE TABLE mytab (user char(10),
CURRENT DATETIME HOUR TO SECOND,TODAY DATE)
INSERT INTO mytab VALUES("josh","11:30:30","1/22/89")
SELECT user,current,today FROM mytab
データベース・サーバーは、SELECT 文の user、current、および today を
SQL 関数 USER、CURRENT、および TODAY と解釈します。したがって、
SELECT 文は、josh、11:30:30、1/22/89 を戻さないで、現行ユーザー名、現在
時刻、および現在日付を戻します。
7-406 IBM Informix SQL リファレンス・ガイド
列名としての関数の使用
表の実際の列を選択合したい場合は、SELECT 文を次の 2 つのいずれかの方
法で書く必要があります。
SELECT mytab.user, mytab.current, mytab.today FROM mytab;
または
$SELECT * FROM mytab;
列名としてのキーワードの使用
SELECT 文や他の SQL 文でキーワードを列名として使用するための特定の回
避策があります。場合によっては、複数の回避策があります。
列名としての ALL、DISTINCT、または UNIQUE の使用
最初の 2 つの例は、ALL ( または DISTINCT または UNIQUE) キーワードを
SELECT 文で使用するための回避策を示しています。
このように all を列名として使用すると、データベース・サーバーが all を、
列名としてではなく、キーワードと解釈するので、次の文は失敗します。
SELECT all FROM mytab -- fails
この例は、ALL キーワードを列名 all と一緒に使用するための回避策を示し
ています。
SELECT ALL all FROM mytab
次の例は、CREATE TABLE 文で UNIQUE または DISTINCT キーワードを列名
として使用するための 2 つの回避策を示しています。
このように unique を列名として使用すると、データベース・サーバーが
unique を、列名としてではなく、キーワードと解釈するので、次の文は失
敗します。
CREATE TABLE mytab (unique INTEGER) -- fails
次の回避策は 2 つの SQL 文を使用します。最初の文は mycol 列を作成し、2
番目の文は mycol 列を unique に名前変更します。
CREATE TABLE mytab (mycol INTEGER)
RENAME COLUMN mytab.mycol TO unique
構文 7-407
列名としての関数の使用
次の回避策も 2 つの SQL 文を使用します。最初の文は mycol 列を作成し、2
番目の文は表を変更し、unique 列を追加し、mycol 列を削除します。
CREATE TABLE mytab (mycol INTEGER)
ALTER TABLE mytab
ADD (unique integer)
DROP (mycol)
列名としての INTERVAL または DATETIME の使用
次の例は、SELECT 文で INTERVAL ( または DATETIME) キーワードを列名と
して使用するための 2 つの回避策を示しています。
このように interval を列名として使用すると、データベース・サーバーが
interval をキーワードと解釈し、その後に INTERVAL 修飾子が続くものと見
なすため、次の文は失敗します。
SELECT interval FROM mytab -- fails
次の回避策は、列名と一緒に表名を指定して、あいまいさを除去していま
す。
SELECT mytab.interval FROM mytab;
もう 1 つの回避策は、次のように、表名に所有者名をインクルードします。
SELECT josh.mytab.interval FROM josh.mytab;
7-408 IBM Informix SQL リファレンス・ガイド
表名としてのキーワードの使用
列名としての行 ID の使用
どの表も rowid という仮想列を持っています。あいまいになるのを回避す
るために、rowid を列名として使用しないでください。次のアクションは
エラーを起こします。
!
rowid という名前の列を持つ表またはビューを作成する
!
rowid という名前の列を追加して表を変更する
!
列の名前を rowid に変更する
ただし、rowid という用語は表名として使用できます。例を示します。
CREATE TABLE rowid (column INTEGER,
date DATE, char CHAR(20))
表名としてのキーワードの使用
次の例は、STATISTICS または OUTER キーワードを表名として使用する場合
の所有者命名に関する回避策を示しています。この回避策は、STATISTICS
または OUTER をビュー名またはシノニムとして使用する場合にも適用され
ます。
このように statistics を表名として使用すると、データベース・サーバーが
それを、UPDATE 文の中の表名としてではなく、UPDATE STATISTICS 構文の
一部と解釈するため、次の文は失敗します。
UPDATE STATISTICS SET mycol = 10
この例は、あいまいになるのを回避するために、表名と共に所有者名を指
定する、回避策を示しています。
UPDATE josh.statistics SET mycol = 10
このように outer を表名として使用すると、データベース・サーバーが
outer を、外部結合を実行するためのキーワードと解釈するので、次の文は
失敗します。
SELECT mycol FROM outer -- fails
この回避策は所有者命名を使用して、あいまいになるのを回避しています。
SELECT mycol FROM josh.outer
構文 7-409
キーワード AS を使用する回避策
キーワード AS を使用する回避策
場合によっては、文があいまいでなく構文が正しくても、データベース・
サーバーが構文エラーを戻すことがあります。上述のとおり、このような
数多くの状況における既存の構文上の回避策を示しました。キーワード AS
を使用して、例外状況に対する回避策を講ずることができます。
キーワード AS は、列ラベルまたは表の別名の前で使用できます。キーワー
ド AS は、SQL に対する Informix の拡張機能です。
これは列ラベルをキーワード AS と共に使用する構文です。
column-name AS display-label FROM table-name
これは表の別名をキーワード AS と共に使用する構文です。
SELECT select-list FROM table-name AS table-alias
AS を列ラベルと共に使用
次の回避策の例では、列ラベルをキーワード AS と共に使用します。最初の
例のペアは、キーワード UNITS ( または YEAR、MONTH、DAY、HOUR、
MINUTE、SECOND、または FRACTION) を列ラベルとして使用する方法を示
しています。
このように units を列名として使用すると、データベース・サーバーがそれ
を mycol という列の DATETIME 修飾子と解釈するので、次の文は失敗しま
す。
SELECT mycol units FROM mytab
この文は、キーワード AS をインクルードする回避策を使用します。
$SELECT mycol AS units FROM mytab;
次の例は、キーワード AS または FROM を列ラベルとして使用する方法を示
しています。
このように as を列ラベルとして使用すると、データベース・サーバーが
from を識別するための as を列ラベルと解釈し、この結果、必須の FROM 節
を見つけなくなるので、次の文は失敗します。
SELECT mycol as from mytab -- 失敗
7-410 IBM Informix SQL リファレンス・ガイド
キーワード AS を使用する回避策
この文は、キーワード AS を反復する、回避策を使用します。
SELECT mycol AS as from mytab
このように from を列名として使用すると、データベース・サーバーが最初
の from の後に表名が続くものと見なすので、次の文は失敗します。
SELECT mycol from FROM mytab -- 失敗
この回避策は、キーワード AS を使用して、最初の from を列ラベルとして
識別します。
SELECT mycol AS from FROM mytab
AS を表の別名と共に使用
次の回避策の例では、表の別名と共にキーワード AS を使用します。最初の
例は、キーワード ORDER ( または FOR、GROUP、HAVING、INTO、UNION、
WITH、CREATE、GRANT、または WHERE) を表の別名として使用する方法
を示しています。
このように order を表の別名として使用すると、データベース・サーバー
が order を ORDER BY 節の一部と解釈するので、次の文は失敗します。
SELECT * FROM mytab order -- 失敗
この回避策は、キーワード AS を使用して、order を表の別名として識別し
ます。
SELECT * FROM mytab AS order;
次の例のペアは、キーワード WITH を表の別名として使用する方法を示し
ています。
このように with を表の別名として使用すると、データベース・サーバーが
キーワードを WITH CHECK OPTION 構文の一部と解釈するので、次の文は失
敗します。
SELECT * FROM mytab with -- 失敗
この回避策は、キーワード AS を使用して、with を表の別名として識別しま
す。
$SELECT * FROM mytab AS with;
次の例のペアは、キーワード CREAT ( または GRANT) を表の別名として使
用する方法を示しています。
構文 7-411
カーソル名としてのキーワードの取り出し
このように create を表の別名として使用すると、データベース・サーバー
がキーワードを、表、シノニム、ビューなどのエンティティーを作成する
ための構文の一部と解釈するので、次の文は失敗します。
$SELECT * FROM mytab create -- 失敗
この回避策は、キーワード AS を使用して、create を表の別名として識別し
ます。
$SELECT * FROM mytab AS create;
カーソル名としてのキーワードの取り出し
SQL プログラムでキーワードを識別子として使用する場合に発生する構文
上のあいまいさについて、回避策がないという状況が時々見られることが
あります。
次の例では、プリプロセッサーが構文をスクロール・カーソルに関連する
ものと解釈し、next の後にカーソル名が続くものと見なすので、FETCH 文
は構文エラーになります。この状態は、キーワード NEXT、PREVIOUS、
PRIOR、FIRST、LAST、CURRENT、RELATIVE、または ABSOLUTE をカーソ
ル名として使用すると必ず発生します。
$DECLARE next CURSOR FOR
SELECT customer_num, lname FROM customer;
$
OPEN next;
$FETCH next INTO $cnum, $lname;
プロシージャー変数名としてのキーワードの使用
以下のいずれかのキーワードをプロシージャー内の変数識別子として使用
すると、あいまいな構文が作成されることがあります。
CURRENT
OFF
DATETIME
ON
GLOBAL
PROCEDURE
INTERVAL
SELECT
NULL
7-412 IBM Informix SQL リファレンス・ガイド
プロシージャー変数名としてのキーワードの使用
CURRENT、DATETIME、INTERVAL、および NULL の INSERT での使
用
CURRENT、DATETIME、INTERVAL、または NULL キーワードをプロシー
ジャーの名前として使用し、それを INSERT 文で使用すると、文の構文が混
乱します。これに対する回避策はありません。
たとえば、日時の値を列に挿入するときに <datetime> という変数を定義す
ると、構文エラーになります。この例を次に示します。
CREATE PROCEDURE problem()
.
.
.
DEFINE null INT;
LET null = 3;
INSERT INTO tab VALUES (null); -- エラー。3 ではなく NULL を挿入
条件での NULL および SELECT の使用
名前 <null> または <select> を持つ変数を定義した場合に、IN キーワードを
使用する条件でそれを使用すると、あいまいになります。次の例は、問題
の原因となる 3 つの条件を IF 文、SELECT 文の SELECT 節、および WHILE 条
件で示しています。
図 7-172
変数名としての <select> および <null> の使用
CREATE PROCEDURE problem()
.
.
.
DEINE x,y,select, null, INT;
DEFINE pfname CHAR[15];
LET x = 3; LET select = 300;
LET null = 1;
IF x IN (select, 10, 12) THEN LET y = 1; -- problem if
IF x IN (1, 2, 4) THEN
SELECT customer_num, fname INTO y, pfname FROM customer
WHERE customer IN (select , 301 , 302, 303); -- problem in
WHILE x IN (null, 2) -- problem while
.
.
.
END WHILE;
構文 7-413
プロシージャー変数名としてのキーワードの使用
変数 <select> を IN リストで使用することができます。ただし、この変数が
リストの先頭エレメントでないことが前提です。たとえば、次の例は、回
避策を使用して、図 7-172 の IF 文を訂正します。
IF x IN (10, select, 12) THEN LET y = 1; -- problem if
<null> を変数名として使用し、それを IN 条件で使用するための回避策はあ
りません。
トレースでの <on>、<off>、または <procedure> の使用
<on>、<off>、または <procedure> というプロシージャー変数を定義し、そ
れを TRACE 文で使用しようとしても、これらの変数の値はトレースされま
せん。それどころか、TRACE ON、TRACE OFF、または TRACE PROCEDURE
文が実行されます。これらの変数の値をトレースするには、それらをより
複雑な式にしてください。図 7-173 はあいまいな構文と回避策を示してい
ます。
図 7-173
TRACE での <on>、<off>、および <procedure> のあいまいな使用と明確な使用
DEFINE on, off, procedure INT;
TRACE
TRACE
TRACE
TRACE
on;
0+ on;
off;
""||off;
-- あいまい
-- ok
-- あいまい
-- ok
TRACE procedure;-- あいまい
TRACE 0+procedure;-- ok
変数名としての GLOBAL の使用
変数を <global> の名前で定義しようとすると、定義操作は失敗します。
図 7-173 に示されている構文は、グローバル変数を定義する構文と矛盾し
ます。これに対する回避策はありません。
図 7-174
<global> のあいまいな使用
DEFINE global INT; -- 失敗 ;
7-414 IBM Informix SQL リファレンス・ガイド
カーソル名としての EXECUTE、SELECT、または WITH の使用
カーソル名としての EXECUTE、SELECT、または WITH
の使用
EXECUTE、SELECT、または WITH キーワードをカーソルの名前として使用
しないでください。FOREACH 文でこれらのキーワードのいずれかをカーソ
ル名として使用すると、カーソル名は FOREACH 文のキーワードと解釈され
ます。これに対する回避策はありません。
たとえば、次の文は機能しません。
DEFINE execute INT;
FOREACH execute FOR SELECT col1 -- エラー。FOREACH EXECUTE と解釈
PROCEDURE
INTO var1 FROM tab1; --
WHILE および FOR 文での SELECT 文
SELECT 文を WHILE または FOR ループで使用するときに、それを小括弧で
囲む必要がある場合は、BEGIN...END ブロック内に SELECT 文全体を囲って
ください。たとえば、次の例の場合、最初の WHILE 文の SELECT 文はプロ
シージャー var1 の呼び出しと解釈されます。2 番目の WHILE 文は正しく解
釈されます。
DEFINE var1, var2 INT;
WHILE var2 = var1
(SELECT col1 INTO var3 FROM TAB -- エラー。call var 1 () に見える
UNION
SELECT co2 FROM tab2;
END WHILE
WHILE var2 = var1
BEGIN
(SELECT col1 INTO var3 FROM TAB -- ok syntax
UNION
SELECT co2 FROM tab2;
END
END WHILE
構文 7-415
ON EXCEPTION 文での SET キーワード
ON EXCEPTION 文での SET キーワード
キーワード SET で始まる文を ON EXCEPTION 文の中で使用する場合は、そ
れを BEGIN...END ブロックの中に入れてください。この種の文には、次の
ものがあります。
SET CONSTRAINTS
SET LOCK MODE
SET DEBUG FILE
SET LOG
SET EXPLAIN
SET OPTIMIZATION
SET ISOLATION
ON EXCEPTION IN (-107)
SET LOCK MODE TO WAIT; -- エラー。
「Lock」という値はない
END EXCEPTION
ON EXCEPTION IN (-107)
BEGIN
SET LOCK MODE TO WAIT; -- ok
END
END EXCEPTION
参考資料
IBM Informix SQL チュートリアル・ガイド では、所有者命名の説明を参照して
ください。
7-416 IBM Informix SQL リファレンス・ガイド
インデックス名
インデックス名
目的
インデックス名セグメントは、構文図でインデックス名を参照するときに
必ず使用されます。インデックス名セグメントは次の文に現れます。
!
ALTER INDEX
!
CREATE INDEX
!
DROP INDEX
構文
OL
< 所有者 >.
.
識別子
7-403
ページ
;
< データベース >
@ <DB サーバー名 >
< データベース >
インデックスが常駐するデータベースの名前です。
<DB サーバー名 > データベース が常駐する IBM Informix OnLine データ
ベース・サーバーの名前です。アットマーク (@) は、
データベース・サーバー名を示すために使用しなけれ
ばならないリテラル文字です。
< 所有者 >
インデックスの所有者のユーザー名です。ANSI 標準準
拠のデータベースを使用する場合は、自分が所有して
いないインデックスに対して owner. 規則を使用しなけ
ればなりません。
使用法
インデックスの実際の名前は SQL 識別子です。
インデックスを作成する場合、< 名前 > はデータベース内で固有でなけれ
ばなりません。
構文 7-417
使用法
ANSI
< 所有者 . 名 > は大文字小文字の区別があります。詳細については、7-442
ページの ANSI 準拠データベースにおける大文字と小文字の区別の説明を参
照してください。♦
7-418 IBM Informix SQL リファレンス・ガイド
INTERVAL フィールド修飾子
INTERVAL フィールド修飾子
目的
INTERVAL フィールド修飾子は、INTERVAL 値の単位を指定するために使用
します。INTERVAL フィールド修飾子はデータ型セグメントで使用されま
す。
構文
YEAR
(<y 精度 >)
TO YEAR
(4)
MONTH
(< 精度 >)
TO MONTH
(2)
DAY
(< 精度 >)
TO DAY
(2)
HOUR
(< 精度 >)
TO HOUR
(2)
MINUTE
(< 精度 >)
TO MINUTE
(2)
SECOND
(< 精度 >)
TO SECOND
(2)
FRACTION
TO FRACTION
(<f 精度 >)
(3)
構文 7-419
使用法
<f 精度 >
小数部フィールドで使用できる最大桁数です。デフォルトは
3 、最大は 5 です。
< 精度 >
間隔が保持できる月、日、時間、または分の最大数の桁数で
す。デフォルトは 2 、最大は 9 です。
<y 精度 >
間隔が保持できる年の最大数の桁数です。デフォルトは 4 、
最大は 9 です。
使用法
次の 2 つの INTERVAL データ型の例は、どちらも YEAR TO MONTH 型です。
最初の例は、年フィールドの精度を 3 としているので、最高 999 年と 11 か
月の間隔を保持できます。2 番目の例は、年フィールドでデフォルトの精
度を使用するので、最高 9,999 年と 11 か月の間隔を保持できます。
YEAR (3) TO MONTH
YEAR TO MONTH
値に 1 つのフィールドしか含めたくない場合は、最初の修飾子と最後の修
飾子が同じになります。たとえば、まる 1 年の間隔は、最高 99,999 年に対
して、YEAR TO YEAR または YEAR (5) TO YEAR として修飾されます。
次の例は、INTERVAL 修飾子のいくつかの形式を示しています。
図 7-175
INTERVAL 修飾子の例
YEAR(5) TO MONTH
DAY (5) TO FRACTION(2)
DAY TO DAY
FRACTION TO FRACTION (4)
参考資料
本書では、算術演算および関係演算における INTERVAL データの使用法に
ついて、3-24 ページの『DATE、DATETIME、および INTERVAL を使用した
演算の範囲』を参照してください。
7-420 IBM Informix SQL リファレンス・ガイド
リテラル DATETIME
リテラル DATETIME
目的
リテラル DATETIME セグメントは、DATETIME 値として使用されます。リテ
ラル DATETIME セグメントは、次の文およびセグメントで使用されます。
!
INSERT 文
!
SELECT 文
!
UPDATE 文
!
条件セグメント
!
式セグメント
構文 7-421
構文
構文
(
DATETIME
DATETIME
フィールド修飾子
7-373 ページ
)
10 進数
(NUMERIC)
型日付
10 進数
<yyyy>
<mo>
<dd>
< スペース >
<hh>
:
<mi>
:
<ss>
.
<f>
<yyyy>
最高 4 桁の年です。2 桁を使用する場合は、年の先頭部分と
して 19 が想定されます ( たとえば、1993)。
<mo>
最高 2 桁の月です。
<dd>
最高 2 桁の日です。
< スペース > 文字どおり、スペース・キーを押して作成されるスペースで
す。
<hh>
最高 2 桁の時間です。
7-422 IBM Informix SQL リファレンス・ガイド
使用法
<mi>
最高 2 桁の分です。
<ss>
最高 2 桁の秒です。
<f>
最高 5 桁の秒の小数部です。INTERVAL 修飾子の小数部部分
に指定された精度によって決まります。
使用法
リテラル DATETIME 値の例を次に示します。
図 7-176
リテラル DATETIME 値の例
DATETIME (89-3-6) YEAR TO DAY
DATETIME (09:55:30.825) HOUR TO FRACTION
DATETIME (92-5) YEAR TO MONTH
次に、EXTEND 関数で使用したリテラル DATETIME 値の例を示します。
EXTEND (DATETIME (1989-8-1) YEAR TO DAY, YEAR TO MINUTE)
- INTERVAL (720) MINUTE (3) TO MINUTE
構文 7-423
リテラル INTERVAL
リテラル INTERVAL
目的
リテラル INTERVAL セグメントは、次の文およびセグメントで使用されま
す。
!
INSERT 文
!
UPDATE 文
!
条件セグメント
!
式セグメント
7-424 IBM Informix SQL リファレンス・ガイド
構文
構文
(
INTERVAL
)
10 進数
INTERVAL
フィールド修飾子
7-419 ページ
10 進数
<yyyy>
<mo>
<dd>
< スペース >
<hh>
:
<mi>
:
<ss>
.
<f>
<yyyy>
年の数です。許容最大桁数は 4 です。ただし、これが先頭の
フィールドであり、かつ、精度の指定が INTERVAL フィール
ド修飾子による指定と異なる場合を除きます。
<mo>
月の数です。許容最大桁数は 2 です。ただし、これが先頭の
フィールドであり、かつ、精度の指定が INTERVAL フィール
ド修飾子による指定と異なる場合を除きます。
<dd>
日の数です。許容最大桁数は 2 です。ただし、これが先頭の
フィールドであり、かつ、精度の指定が INTERVAL フィール
ド修飾子による指定と異なる場合を除きます。
< スペース > 文字どおり、スペース・キーを押して作成されるスペースで
す。
構文 7-425
使用法
<hh>
時間の数です。許容最大桁数は 2 です。ただし、これが先頭
のフィールドであり、かつ、精度の指定が INTERVAL フィー
ルド修飾子による指定と異なる場合を除きます。
<mi>
分の数です。許容最大桁数は 2 です。ただし、これが先頭の
フィールドであり、かつ、精度の指定が INTERVAL フィール
ド修飾子による指定と異なる場合を除きます。
<ss>
秒の数です。許容最大桁数は 2 です。ただし、これが先頭の
フィールドであり、かつ、精度の指定が INTERVAL フィール
ド修飾子による指定と異なる場合を除きます。
<f>
最高 5 桁の秒の小数部です。INTERVAL フィールド修飾子の
小数部部分に指定された精度によって決まります。
使用法
リテラル INTERVAL 値の例を次に示します。
図 7-177
リテラル INTERVAL 値の例
INTERVAL (3-6) YEAR TO MONTH
INTERVAL (09:55:30.825) HOUR TO FRACTION
INTERVAL (40 5) DAY TO HOUR
7-426 IBM Informix SQL リファレンス・ガイド
リテラル番号
リテラル番号
目的
リテラル番号は定数で、整数番号または非整数 ( 浮動 ) 番号のいずれかで
す。リテラル番号セグメントは、次の文とセグメントで使用されます。
!
INSERT 文
!
UPDATE 文
!
条件セグメント
!
式セグメント
構文
< 桁数 >
.
+
-
< 桁数 >
.
< 桁数 >
< 桁数 >
E
< 桁数 >
0 ~ 9 の整数です。
使用法
リテラル番号には埋め込みコンマは含まれていません。小数点を示すため
にコンマを使用することはできません。リテラル番号の前に正符号または
負符号を付けることができます。整数には小数点は含まれていません。整
数の例を次に示します。
10
-27
25567
構文 7-427
使用法
浮動および 10 進数値には、小数点や指数表現が含まれています。浮動およ
び 10 進数値の例を次に示します。
123.456
1.23456e2
123456.0e-3
リテラル番号を MONEY 値として使用する場合は、その前に金額 (MONEY)
型記号を付けたり、コンマを入れたりしないでください。
7-428 IBM Informix SQL リファレンス・ガイド
プロシージャー名
プロシージャー名
目的
プロシージャー名セグメントは、構文図でプロシージャー名を参照すると
きに必ず使用されます。プロシージャー名セグメントは次の文に現れます。
!
CREATE PROCEDURE
!
DROP PROCEDURE
!
EXECUTE PROCEDURE
構文
OL
< 所有者 >.
.
識別子
7-403
ページ
;
< データベース >
@ <DB サーバー名 >
< データベース >
プロシージャーが常駐するデータベースの名前です。
<DB サーバー名 >
データベース が常駐する IBM Informix OnLine データ
ベース・サーバーの名前です。アットマーク (@) は、
データベース・サーバー名を示すために使用しなけれ
ばならないリテラル文字です。
< 所有者 >
プロシージャーの所有者のユーザー名です。ANSI 準拠
データベースを使用する場合は、自分が所有していな
いプロシージャーに対して owner. 規則を使用しなけれ
ばなりません。
使用法
プロシージャーの実際の名前は SQL 識別子です。
プロシージャーを作成する場合、プロシージャーの < 名前 > はデータベー
ス内で固有でなければなりません。
構文 7-429
使用法
ANSI
プロシージャーを作成する場合、< 所有者 . 名前 > 条件はデータベース内
で固有でなければなりません。
< 所有者 . 名前 > には大文字小文字の区別があります。詳細については、
7-442 ページの ANSI 準拠データベースにおける大文字小文字の区別の説明
を参照してください。♦
同一名を持つプロシージャーおよび SQL 関数
同じ名前のプロシージャーを SQL 関数として作成し、その名前をユー
ザー・プロシージャー内のプロシージャー名として明示的に定義すると、
その名前による呼び出しはすべてそのプロシージャーに対して行われます。
つまり、そのプロシージャーが定義されている文ブロック内でシステム関
数を使用することはできません。
たとえば、次のプロシージャーは、2 つの length 関数を使用します。プロ
シージャーが初めて length 関数を呼び出すとき、その関数は LENGTH とい
う SQL 関数です。プロシージャーによる 2 回目の length 関数呼び出しは、
length がプロシージャーとして定義されている BEGIN...END ブロック内で
行われます。length の 2 回目の呼び出しでは、実際に、length というユー
ザー作成プロシージャーが使用されます。
CREATE PROCEDURE test_len()
RETURNING INT, INT;
DEFINE c INT;
DEFINE d INT;
LET c = (SELECT length(fname) FROM customer
WHERE customer_num = 101);
BEGIN
DEFINE length PROCEDURE;
LET d = length(5);
END
RETURN c, d;
END PROCEDURE;
7-430 IBM Informix SQL リファレンス・ガイド
引用符付きストリング
引用符付きストリング
目的
引用符付きストリング・セグメントは、次の文とセグメントで使用されま
す。
!
INSERT 文
!
SELECT 文
!
条件セグメント
!
式セグメント ( 定数式の )
構文
"
"
< 文字 >
'
""
'
< 文字 >
"
< 文字 >
ASCII 文字です。
使用法
定数は単一行に書かなければなりません。つまり、埋め込み改行は使用で
きません。
構文 7-431
ストリングでの引用符の使用
ストリングでの引用符の使用
二重引用符で区切られたストリング定数では、一重引用符は特別の意味を
持っていません。同様に、一重引用符で区切られたストリングでは、二重
引用符は特別の意味を持っていません。たとえば、次のストリングは有効
です。
"Nancy’s puppy jumped the fence"
'Billy told his kitten, "no!"'
ストリング中に二重引用符をインクルードするには、次のストリングに示
されているように、二重引用符の前に別の二重引用符を付けます。
"Enter ""y"" to select this row"
ストリングとしての DATETIME および INTERVAL 値
DATETIME および INTERVAL データを、
「リテラル DATETIME」および「リ
テラル INTERVAL」セグメント ( それぞれ、7-421 ページおよび 7-424 ペー
ジを参照 ) に記述されている形式で入力することもできれば、引用符付き
ストリングとして入力することもできます。文字ストリングとして入力さ
れた有効リテラルは、自動的に DATETIME または INTERVAL 値に変換され
ます。次の INSERT 文は、引用符付きストリングを使用して INTERVAL およ
び DATETIME データを入力します。
INSERT INTO cust_calls(call_dtime) VALUES ("1992-5-4 10:12:11")
INSERT INTO manufact(lead_time) VALUES ("14")
引用符付きストリングの値のフォーマットは、列の修飾子によって指定さ
れているフォーマットと正確に一致しなければなりません。上例の最初の
文の場合、INSERT 文を有効にするには、call_dtime を YEAR TO MINUTE 修
飾子で定義する必要があります。
条件における LIKE および MATCHES
条件に LIKE または MATCHES キーワードが含まれている引用符付きストリ
ングには、ワイルドカード文字をインクルードすることができます。ワイ
ルドカード文字の使用法について詳しくは、7-350 ページの「条件」セグメ
ントを参照してください。
7-432 IBM Informix SQL リファレンス・ガイド
引用符付きストリングとしての値の挿入
引用符付きストリングとしての値の挿入
引用符付きストリングである値を挿入する場合は、以下の規則を守ってく
ださい。
!
CHAR、VARCHAR、DATE、DATETIME、および INTERVAL 値を引用符
で囲みます。
!
DATE 値を mm/dd/yyy フォーマットで設定するか、またはそれが設
定済みであれば、DBSET によって指定されているフォーマットで設
定します。
!
PREPARE を除くすべての文では、引用符付きストリングの最大長
は 256 バイトです。PREPARE 文での引用符付きストリングの最大
長は 2048 バイトです。
!
10 進数値を持つ数字には小数点が含まれていなければなりません。
10 進数値標識としてコンマを使用することはできません。
!
MONEY データの前にドル記号を付けたり、コンマをインクルード
したりしてはなりません。
!
列が NULL 値を受け入れる場合にのみ、NULL をプレースホルダー
としてインクルードすることができます。
構文 7-433
関係演算子
関係演算子
目的
関係演算子は、2 つの式を定量的に比較するために使用します。関係演算
子セグメントは条件セグメントで使用されます。
構文
関係演算子は次の形式を取ります。
<
<=
>
=
>=
<>
!=
<
より小。
<=
より小か等しい。
>
より大。
=
等しい。
>=
より大か等しい。
<>
等しくない。
!=
等しくない。
使用法
DATE および DATETIME 式の場合は、より大 は時間的に後のことを意味しま
す。
7-434 IBM Informix SQL リファレンス・ガイド
使用法
INTERVAL 式の場合は、より大 は時間の範囲がより広いことを意味します。
文字式の場合は、より大 は、ASCII 照合順序で後 であることを意味します。
この場合、小文字が大文字の後になり、どちらも数字の後になります。下
図は、7 ビット ASCII 照合順序を示したものです。
数字
文字
数字
文字
数字
文字
0
^@
43
+
86
V
1
^A
44
,
87
W
2
^B
45
-
88
X
3
^C
46
.
89
Y
4
^D
47
/
90
Z
5
^E
48
0
91
[
6
^F
49
1
92
\
7
^G
50
2
93
]
8
^H
51
3
94
^
9
^I
52
4
95
_
10
^J
53
5
96
`
11
^K
54
6
97
a
12
^L
55
7
98
b
13
^M
56
8
99
c
14
^N
57
9
100
d
15
^O
58
:
101
e
16
^P
59
;
102
f
17
^Q
60
<
103
g
18
^R
61
=
104
h
19
^S
62
>
105
i
(3 の 1)
構文 7-435
使用法
数字
文字
数字
文字
数字
文字
20
^T
63
?
106
j
21
^U
64
@
107
k
22
^V
65
A
108
l
23
^W
66
B
109
m
24
^X
67
C
110
n
25
^Y
68
D
111
o
26
^Z
69
E
112
p
27
esc
70
F
113
q
28
^\
71
G
114
r
29
^]
72
H
115
s
30
^^
73
I
116
t
31
^_
74
J
117
u
75
K
118
v
32
33
!
76
L
119
w
34
"
77
M
120
x
35
#
78
N
121
y
36
$
79
O
122
z
37
%
80
P
123
{
38
&
81
Q
124
|
39
'
82
R
125
}
40
(
83
S
126
~
(3 の 2)
7-436 IBM Informix SQL リファレンス・ガイド
使用法
数字
文字
数字
文字
数字
文字
41
)
84
T
127
del
42
*
85
U
^X = CTRL-X
(3 の 3)
構文 7-437
シノニム名
シノニム名
目的
シノニム名セグメントは、構文図でシノニム名を参照するときに必ず使用
されます。プロシージャー名セグメントは次の文に現れます。
!
CREATE AUDIT
!
CREATE INDEX
!
CREATE SYNONYM
!
CREATE VIEW
!
DELETE
!
DROP AUDIT
!
DROP SYNONYM
!
DROP TABLE
!
DROP VIEW
!
INSERT
!
LOCK TABLE
!
RECOVER TABLE
!
RENAME COLUMN
!
REVOKE
!
SELECT
!
UNLOCK TABLE
!
UPDATE
!
UPDATE STATISTICS
7-438 IBM Informix SQL リファレンス・ガイド
構文
構文
識別子
7-403
ページ
OL
< 所有者 >.
.
;
< データベース >
@ <DB サーバー名 >
< データベース > シノニムが常駐するデータベースの名前です。
<DB サーバー名 > データベース が常駐する IBM Informix OnLine データ
ベース・サーバーの名前です。アットマーク (@) は、
データベース・サーバー名を示すために使用しなけれ
ばならないリテラル文字です。
< 所有者 >
シノニムの所有者のユーザー名です。ANSI 準拠 データ
ベースを使用する場合は、自分が所有していないシノ
ニムに対して owner. 規則を使用しなければなりません。
使用法
シノニムの実際の名前は SQL 識別子です。
シノニムを作成する場合、シノニムの < 名前 > はデータベース内で固有で
なければなりません。
ANSI
シノニムを作成する場合、< 所有者 . 名前 > 条件はデータベース内で固有
でなければなりません。
< 所有者 . 名前 > には大文字小文字の区別があります。詳細については、
7-442 ページの ANSI 準拠データベースにおける大文字と小文字の区別の説
明を参照してください。♦
構文 7-439
表名
表名
目的
表名セグメントは、表の名前を指定するために次の文で使用します。
!
ALTER TABLE
!
CREATE AUDIT
!
CREATE INDEX
!
CREATE SYNONYM
!
CREATE TABLE
!
DELETE
!
DROP AUDIT
!
DROP TABLE
!
GRANT
!
INSERT
!
LOCK TABLE
!
RECOVER TABLE
!
RENAME COLUMN
!
REVOKE
!
SELECT
!
UNLOCK TABLE
!
UPDATE
!
UPDATE STATISTICS
7-440 IBM Informix SQL リファレンス・ガイド
構文
構文
OL
< 所有者 >.
.
識別子
7-403
ページ
+
:
< データベース >
@ <DB サーバー名 >
< データベース >
表が常駐するデータベースの名前です。
<DB サーバー名 > データベース が常駐する IBM Informix OnLine データ
ベース・サーバーの名前です。アットマーク (@) は、
データベース・サーバー名を示すために使用しなけれ
ばならないリテラル文字です。
< 所有者 >
表の所有者のユーザー名です。ANSI 準拠データベース
を使用する場合は、自分が所有していない表に対して
owner. 規則を使用しなければなりません。
使用法
次の例は表仕様を示しています。
empinfo@personnel:emp_names
表を作成または名前変更する場合は、表の < 名前 > がデータベース内で固
有であることを確認してください。
ANSI
表を作成または名前変更する場合は、< 所有者 > と < 名前 > の組み合わせ
がデータベース内で固有であることを確認してください。
ANSI 準拠データベースでは、所有者でない限り、表名に < 所有者 >. がイ
ンクルードされていなければなりません。システム・カタログ表の場合は、
所有者は informix です。♦
構文 7-441
ANSI 準拠データベースにおける大文字と小文字の区別
ANSI 準拠データベースにおける大文字と小文字の区
別
ANSI
所有者名が引用符で囲まれていない限り、データベース・サーバーは、所
有者名を大文字にシフトしてから文を実行します。所有者名を入力したと
おりに読み込みたい場合は、名前の所有者部分を引用符で囲んでください。
たとえば、次の最初の文で示されている名前 cathl は、CATHL にシフト
アップされてから使用され、一方、2 番目の文内の名前 nancy はシフト
アップされません。
SELECT * FROM cathl.customer
SELECT * FROM "nancy".customer
暗黙所有者を大文字にした表を作成しても問題はなく、所有者の実際のロ
グイン名も大文字になります。たとえば、ユーザーが BROWN であり、次
の文でビューを作成すると仮定とします。
CREATE VIEW newcust AS
SELECT fname, lname FROM customer WHERE state = "NJ"
ユーザー BROWN は、ビュー上で次の SELECT 文を実行できます。
SELECT * FROM brown.newcust
SELECT * FROM newcust
SELECT * FROM systables WHERE tabname = newcust
AND owner = USER
この例の最初の照会で、データベース・サーバーは自動的に brown をシフ
トアップしてから SELECT 文を実行します。2 番目の照会で、データベー
ス・サーバーは、すでにシフトアップされている所有者名 BROWN を戻し
ます。3 番目の照会で、USER は、格納されているログイン名 ( この場合は、
大文字 ) を戻します。
ユーザーが nancy で、次の文を使用すると、ビューには名前 NANCY.njcust
が表示されます。
CREATE VIEW nancy.njcust AS
SELECT fname, lname FROM customer WHERE state = "NJ"
ユーザーが nancy で、次の文を使用すると、ビューには名前 nancy.njcust
が表示されます。
CREATE VIEW "nancy".njcust AS
SELECT fname, lname FROM customer WHERE state = "NJ"
7-442 IBM Informix SQL リファレンス・ガイド
参考資料
次の SELECT 文は、名前 NANCY.njcust と、nancy.njcust の実際の所有者名と
表名を突き合わせようとするので、この文は失敗します。
SELECT * FROM nancy.njcust
♦
参考資料
IBM Informix SQL チュートリアル・ガイド では、所有者命名の説明を参照して
ください。
構文 7-443
ビュー名
ビュー名
目的
ビュー名セグメントは、ビューの名前を指定するために次の文で使用しま
す。
!
CREATE SYNONYM
!
CREATE VIEW
!
DELETE
!
DROP VIEW
!
GRANT
!
INSERT
!
REVOKE
!
SELECT
!
UPDATE
構文
OL
+
< 所有者 >.
.
:
< データベース >
@ <DB サーバー名 >
7-444 IBM Informix SQL リファレンス・ガイド
識別子
7-403
ページ
使用法
< データベース >
ビューが常駐するデータベースの名前です。
<DB サーバー名 > データベース が常駐する IBM Informix OnLine データ
ベース・サーバーの名前です。アットマーク (@) は、
データベース・サーバー名を示すために使用しなけれ
ばならないリテラル文字です。
< 所有者 >
ビューの所有者のユーザー名です。ANSI 準拠データ
ベースを使用する場合は、自分が所有していない
ビューに対して owner. 規則を使用しなければなりませ
ん。
使用法
プレフィックス < 所有者 .> はオプションです。しかし、それを使用する
と、データベース・サーバーは < 所有者 > の正当性を調べません。ビュー
を作成する場合は、ビューの < 名前 > は、データベースにすでに存在して
いるすべての表、シノニム、およびビューで固有でなければなりません。
ANSI
ビューを作成する場合は、ビューの < 所有者 . ビュー名 > は、データベー
スにすでに存在しているすべての表、シノニム、およびビューで固有でな
ければなりません。
< 所有者 . 名 > には大文字と小文字の区別があります。詳細については、
7-442 ページの ANSI 準拠データベースにおける大文字小文字の区別の説明
を参照してください。♦
参考資料
IBM Informix SQL チュートリアル・ガイド では、ビューおよびセキュリティー
の説明を参照してください。
構文 7-445
参考資料
7-446 IBM Informix SQL リファレンス・ガイド
ストアード・プロシー
ジャーおよび SPL
概要 .
.
.
. .
.
.
.
.
.
.
.
第
.
.
.
.
.
.
.
. 8-5
ストアード・プロシージャーと SPL の概要 .
ストアード・プロシージャーの機能 . .
SQL とストアード・プロシージャーの関係
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 8-5
. 8-6
. 8-6
ストアード・プロシージャーの作成と使用 . . . . . . . .
DB-Access の使用によるプロシージャーの作成 . . . . . .
埋め込み言語製品の使用によるプロシージャーの作成 . . . .
プロシージャーのコメント化とドキュメント化 . . . . . .
コンパイル時エラーの診断 . . . . . . . . . . . .
DB-Access の使用によるプロシージャー内の構文エラーの検出
埋め込み言語製品の使用によるプロシージャー内の構文エラー
の検出 . . . . . . . . . . . . . . .
コンパイル時警告の表示 . . . . . . . . . . . . .
テキストまたはマニュアルの生成 . . . . . . . . . .
プロシージャー・テキストの表示 . . . . . . . . .
プロシージャー・マニュアルの表示 . . . . . . . .
プロシージャーの実行 . . . . . . . . . . . . .
プロシージャーのデバッグ . . . . . . . . . . . .
プロシージャーの再作成 . . . . . . . . . . . . .
8-7
8-7
8-8
8-8
8-9
8-9
ストアード・プロシージャーに対するアクセス権 . . .
作成時のアクセス権 . . . . . . . . . . .
実行時のアクセス権 . . . . . . . . . . .
アクセス権と所有者アクセス権付きプロシージャー .
アクセス権と DBA アクセス権付きプロシージャー .
アクセス権と入れ子にしたプロシージャー . . .
アクセス権の取り消し . . . . . . . . . .
8-16
8-17
8-17
8-17
8-18
8-19
8-19
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
8-9
8-10
8-11
8-11
8-11
8-11
8-14
8-16
8
章
変数と式 . . . . . . . . .
変数 . . . . . . . . .
変数のフォーマット. . . .
広域変数と局所変数. . . .
変数の定義 . . . . . .
変数のデータ型 . . . . .
変数の範囲 . . . . . .
変数 / キーワードのあいまいさ
式 . . . . . . . . . .
変数への値の割り当て . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
プログラムの流れの制御 . . . . . . . . . . . . .
分岐 . . . . . . . . . . . . . . . . . .
ループ . . . . . . . . . . . . . . . . . .
関数処理 . . . . . . . . . . . . . . . . .
プロシージャー内でのプロシージャーの呼び出し . . . .
プロシージャー内からのオペレーティング・システム・コマン
ドの実行 . . . . . . . . . . . . . .
プロシージャーの再帰呼び出し . . . . . . . . .
プロシージャーとの情報のやり取り . .
結果の戻り . . . . . . . .
戻り値の指定. . . . . . .
値の戻り . . . . . . . .
プロシージャーからの複数値の戻り
例外処理 . . . . . . . . .
エラーのトラップと復旧 . . .
ON EXCEPTION 文の制御範囲 . .
ユーザー生成の例外 . . . . .
SQL エラーのシミュレート. .
入れ子コードを終了するための
SPL 文の構文
CALL .
CONTINUE
DEFINE .
EXIT .
FOR . .
FOREACH
IF . .
.8-19
.8-19
.8-20
.8-20
.8-20
.8-21
.8-21
.8-22
.8-23
.8-25
.8-25
.8-26
.8-26
.8-28
.8-28
.8-28
.8-29
. . . . . . . . .8-29
. . . . . . . . .8-29
. . . . . . . . .8-29
. . . . . . . . .8-30
. . . . . . . . .8-30
. .
. .
. .
. .
. .
RAISE
. . .
. . .
. . .
. . .
. . .
EXCEPTION
. . .
. . .
. . .
. . .
. . .
の使用.
.
.
.
.
.
.
.8-32
.8-32
.8-33
.8-34
.8-34
.8-35
. . . . . . . . . . . . . . . . . .8-36
. . . . . . . . . . . . . . . . . .8-37
. . . . . . . . . . . . . . . . . .8-40
. . . . . . . . . . . . . . . . . .8-41
. . . . . . . . . . . . . . . . . .8-49
. . . . . . . . . . . . . . . . . .8-51
. . . . . . . . . . . . . . . . . .8-55
. . . . . . . . . . . . . . . . . .8-59
8-2 IBM Informix SQL リファレンス・ガイド
LET . . . . . . . . . . . . . . . . . . .
ON EXCEPTION . . . . . . . . . . . . . . . .
RAISE EXCEPTION . . . . . . . . . . . . . . .
RETURN . . . . . . . . . . . . . . . . . .
SYSTEM . . . . . . . . . . . . . . . . . .
TRACE
. . . . . . . . . . . . . . . . . .
WHILE . . . . . . . . . . . . . . . . . . .
8-63
8-66
8-72
8-74
8-77
8-79
8-83
ストアード・プロシージャーおよび SPL
8-3
8-4 IBM Informix SQL リファレンス・ガイド
概要
ストアード・プロシージャーは、SQL 動作の制御に使用できる有効なツー
ルです。この章では、SQL と Informix ストアード・プロシージャー言語
(SPL) を使用してストアード・プロシージャーを作成する手順を説明しま
す。その作成方法を学ぶための援助として、実用的なストアード・プロ
シージャーのサンプルが示されています。
各 SPL 文の構文が、本章の末尾に記載されています。各文の構文には、使
用上の注意とその文の例が示されています。
ストアード・プロシージャーと SPL の概要
SQL の場合、ストアード・プロシージャーはユーザー定義の関数です。
データベースに対する RESOURCE アクセス権を持つユーザーは、だれでも
ストアード・プロシージャーを作成することができます。ストアード・プ
ロシージャーを作成すると、そのストアード・プロシージャーは、データ
ベースのオブジェクトとして実行可能フォーマットでデータベースに格納
されます。ストアード・プロシージャーを使用すれば、SQL で実行できるす
べての関数を実行できるほか、SQL 単独で実行できる関数を拡張することもで
きます。
ストアード・プロシージャーは、SQL および SPL 文を使用して作成します。
SPL 文は、CREATE PROCEDURE および CREATE PROCEDURE FROM 文の中で
しか使用できません。これらの文は、DB-Access および埋め込み言語製品で
使用できます。
ストアード・プロシージャーおよび SPL 8-5
ストアード・プロシージャーの機能
ストアード・プロシージャーの機能
ストアード・プロシージャーを使用して広範囲の目的を達成することがで
きます。たとえば、データベース・パフォーマンスの改善、アプリケー
ション作成の単純化、データ・アクセスの制限またはモニターなどです。
ストアード・プロシージャーは実行可能フォーマットで格納されるため、
それを使用すれば、頻繁に反復されるタスクを実行してパフォーマンスを
改善することができます。直接的な SQL コードではなく、ストアード・プ
ロシージャーを使用することで、構文解析、妥当性検査、および照会の最
適化の反復操作をバイパスすることができます。
ストアード・プロシージャーはデータベースのオブジェクトであるため、
ストアード・プロシージャーは、データベースで稼働するすべてのアプリ
ケーションで使用できます。複数のアプリケーションが同一ストアード・
プロシージャーを使用できるため、アプリケーションの開発時間が短縮さ
れます。
DBA アクセス権を持っていないユーザーでも DBA アクセス権を使用して実
行できる、ストアード・プロシージャーを作成することができるので、
データベースのデータへのアクセスを制限したり制御したりできます。あ
るいは、ストアード・プロシージャーは、どのユーザーが特定の表または
データにアクセスするかをモニターすることもできます。
SQL とストアード・プロシージャーの関係
ストアード・プロシージャーを使用して、SQL のデータ操作文に値を指定
することができます。たとえば、これらの値を表に挿入したり、照会での
条件の一部、または UPDATE 文の一部として使用したりできます。
あるいは、ストアード・プロシージャーを使用して、SQL 文を非表示にす
ることもできます。ストアード・プロシージャーをインプリメントすれば、
データベース・ユーザーのタスクを単純化することができます。すべての
ユーザーに SQL の使用法を学ばせなくても、 1 人の熟練した SQL ユーザーが
ストアード・プロシージャーを作成して SQL の動作をカプセル化し、他の
ユーザーにプロシージャーがデータベースに格納されていることを知らせ
れば、これらのユーザーはそのストアード・プロシージャーを実行するこ
とができます。
8-6 IBM Informix SQL リファレンス・ガイド
ストアード・プロシージャーの作成と使用
ストアード・プロシージャーの作成と使用
ストアード・プロシージャーを作成するには、プロシージャーの一部とし
て実行したい SQL 文を CREATE PROCEDURE 文の文ブロックの中に挿入しま
す。SPL 文を使用して、プロシージャー内の操作の流れを制御します。こ
れらの追加の文には、IF、FOR、その他があり、それについての説明が本章
の末尾に記載されています。CREATE PROCEDURE および CREATE
PROCEDURE FROM 文の説明は、第 7 章、
『構文』にあります。
DB-Access の使用によるプロシージャーの作成
DB-Access を使用してストアード・プロシージャーを作成するには、文ブ
ロックの文の一部であるすべての文を含め、CREATE PROCEDURE 文を出し
ます。たとえば、顧客アドレスを読み取るプロシージャーを作成するには、
図 8-1 に示されているような文を使用することができます。
図 8-1
顧客表から読み取るプロシージャー
CREATE PROCEDURE read_address (lastname CHAR(15)) -- one argument
RETURNING CHAR(15), CHAR(15), CHAR(20), CHAR(15),CHAR(2), CHAR(5); -- 6 items
DEFINE
DEFINE
DEFINE
DEFINE
p_lname,p_fname, p_city CHAR(15); --define each procedure variable
p_add CHAR(20);
p_state CHAR(2);
p_zip CHAR(5);
SELECT fname, address1, city, state, zipcode
INTO p_fname, p_add, p_city, p_state, p_zip
FROM customer
WHERE lname = lastname;
RETURN p_fname, lastname, p_add, p_city, p_state, p_zip; --6 items
END PROCEDURE
DOCUMENT "This procedure takes the last name of a customer as", --brief description
"its only argument. It returns the full name and address of",
"the customer."
WITH LISTING IN "/acctng/test/listfile" -- compile-time warnings go here
; -- end of the procedure read_address
ストアード・プロシージャーおよび SPL 8-7
埋め込み言語製品の使用によるプロシージャーの作成
埋め込み言語製品の使用によるプロシージャーの作成
埋め込み言語製品を使用してストアード・プロシージャーを作成するには、
CREATE PROCEDURE 文のテキストをファイルに入れます。CREATE
PROCEDURE FROM 文を使用し、そのファイルを参照してプロシージャーを
コンパイルします。たとえば、顧客名を読み取るためのプロシージャーを
作成するには、図 8-1 に示されているような文を使用して、それをファイ
ルに格納することができます。ファイルの名前が read_add_source であれ
ば、次の文が read_address プロシージャーをコンパイルします。
CREATE PROCEDURE FROM "read_add_source";
図 8-2 は、上の SQL 文を ESQL/C プログラムで示したものです。
図 8-2
read_address プロシージャーを ESQL/C プログラムでコンパイルして格納する SQL 文
/* This program creates whatever procedure is in *
* the file "read_add_source".
*/
#include <stdio.h>
$include sqlca;
$include sqlda;
$include datetime;
/* Program to create a procedure from the pwd */
main()
{
$ database play;
$create procedure from "read_add_source";
}
プロシージャーのコメント化とドキュメント化
図 8-1 の read_address には、コメントと DOCUMENT 節がインクルードされ
ています。コメントはプロシージャーのテキストに組み込まれています。
二重ハイフン (--) の後の文字はコメントと見なされます。二重ハイフンは、
行の先頭または中間でも使用できます。
プロシージャーの別個の要約をインクルードするには、DOCUMENT 節を使
用します。DOCUMENT 節のデータを取り出すには、sysprocbody システム・
カタログ表を照会します。DOCUMENT 節の読み取りについて詳しくは、本
章で後述する「プロシージャー・マニュアルの表示」セクションを参照し
てください。
8-8 IBM Informix SQL リファレンス・ガイド
コンパイル時エラーの診断
コンパイル時エラーの診断
CREATE PROCEDURE または CREATE PROCEDURE FROM 文を出した場合、プ
ロシージャーの本体に構文エラーが含まれていると、文は失敗します。
データベース・サーバーはプロシージャーのテキストの処理を停止し、エ
ラーの位置を戻します。
DB-Access の使用によるプロシージャー内の構文エラーの検出
DB-Access を使用して作成したプロシージャーに構文エラーが含まれている
と、QUERY-LANGUAGE メニューの Modify オプションを選択したときに、
カーソルが問題の構文を指します。
埋め込み言語製品の使用によるプロシージャー内の構文エラー
の検出
埋め込み言語製品を使用して作成したプロシージャーに構文エラーが含ま
れていると、CREATE PROCEDURE 文は失敗します。データベース・サー
バーは、SQLCA の SQLCODE フィールドを負の数値に設定し、SQLERRD 配
列の 5 番目のエレメントをファイル・オフセット文字に設定します。各製
品の SQLCA フィールドが、次の表に示されています。
ESQL/C
ESQL/COBOL
sqlca.sqlcode SQLCODE
SQLCODE OF SQLCA
sqlca.sqlerrd[4]
SQLERRD[5] OF SQLCA
図 8-3 は、プロシージャー作成時に発生する構文エラーのトラップ方法を
示したものです。この図は、エラーが発生したファイルへのオフセットの
表示方法も示しています。
ストアード・プロシージャーおよび SPL 8-9
コンパイル時警告の表示
図 8-3
ESQL/C の使用によるプロシージャー作成の失敗の検査
#include <stdio.h>
$include sqlca;
$include sqlda;
$include datetime;
/* Program to create a procedure from procfile in pwd */
main()
{
long char_num;
$ database play;
$create procedure from "procfile";
if (sqlca.sqlcode != 0 )
{
printf("\nSqlca.sqlcode = %ld\n", sqlca.sqlcode);
char_num = sqlca.sqlerrd[4];
printf("\nError in creating read_address. Check character position %ld\n",
char_num);
図 8-3 では、CREATE PROCEDURE FROM 文が失敗すると、プログラムは、構
文エラーが検出された文字位置に加え、メッセージも表示します。
コンパイル時警告の表示
データベース・サーバーが潜在的な問題を検出したのに、プロシージャー
が構文上正しい場合は、リスト・ファイルに警告が入ります。このリスト
を使用してプロシージャーの潜在的な問題を確認してから、それを実行す
ることができます。
プロシージャーに関するコンパイル時警告のリストを取得するには、次の
例に示されているように、CREATE PROCEDURE 文の WITH LISTING IN 節を
使用します。
CREATE PROCEDURE read_address (lastname CHAR(15)) -- one argument
RETURNING CHAR(15), CHAR(15), CHAR(20), CHAR(15), CHAR(2), CHAR(5); -- 6 items
.
.
.
WITH LISTING IN "/acctng/test/listfile" -- compile-time warnings go here
; -- end of the procedure read_address
IBM Informix STAR または IBM Informix NET を使用している場合は、リスト・
ファイルは、データベースが常駐するマシン上に作成されます。このファ
イルの絶対パス名とファイル名を指定すれば、このファイルは指定の場所
に作成されます。リスト・ファイルの相対パス名を指定すれば、ファイル
はそのマシン上のホーム・ディレクトリーに作成されます。( ホーム・ディ
レクトリーがない場合は、ファイルはルート・ディレクトリーに作成され
ます。)
8-10 IBM Informix SQL リファレンス・ガイド
テキストまたはマニュアルの生成
プロシージャーを作成したら、WITH LISTING IN 節に指定されているファイ
ルを表示して、その中の警告を見ることができます。
テキストまたはマニュアルの生成
プロシージャーを作成すると、そのプロシージャーは sysprocbody システ
ム・カタログ表に格納されます。sysprocbody システム・カタログ表には、
実行可能プロシージャーのほか、オリジナルの CREATE PROCEDURE 文のテ
キストとマニュアル・テキストも含まれています。
プロシージャー・テキストの表示
プロシージャーのテキストを生成するには、sysprocbody システム・カタロ
グ表からデータ列を選択します。次の SELECT 文は read_address プロシー
ジャー・テキストを読み取ります。
SELECT data FROM informix.sysprocbody
WHERE datakey = "T" -- find text lines
AND
procid = (SELECT procid FROM informix.sysprocedure
WHERE informix.sysprocedure.procname = "read_address")
プロシージャー・マニュアルの表示
プロシージャーのマニュアル・テキストのみを表示したい場合は、次の
SELECT 文を使用してマニュアル・ストリングを読み取ることができます。
マニュアル行は、CREATE PROCEDURE 文の DOCUMENT 節のマニュアル行で
す。
SELECT data FROM informix.sysprocbody
WHERE datakey = "D" -- find documentation lines
AND
procid = (SELECT procid FROM informix.sysprocedures
WHERE informix.sysprocedure.procname = "read_address")
プロシージャーの実行
プロシージャーを実行するには 3 つの方法があります。SQL 文 EXECUTE
PROCEDURE を使用することもできるし、LET または CALL SPL 文のいずれ
かを使用することもできます。
ストアード・プロシージャーおよび SPL
8-11
プロシージャーの実行
プロシージャーを実行するには EXECUTE PROCEDURE 文を使用します。
read_address プロシージャーを使用して “Putnum” という顧客のフルネーム
とアドレスを確認するには、次の文を使用します。
EXECUTE PROCEDURE read_address ("Putnum");
read_address プロシージャーは値を戻すので、あるプロシージャーを埋め
込み言語プログラムまたは他のプロシージャーから実行する場合は、ホス
ト変数を指定して INTO を使用して、データを受け取る必要があります。た
とえば、ESQL/C プログラムで read_address プロシージャーを実行するに
は、図 8-4 に示されているコード・セグメントを使用します。
図 8-4
ESQL/C の使用によるプロシージャーの実行
#include <stdio.h>
$include sqlca;
$include sqlda;
$include datetime;
/* Program to execute a procedure in the database named "play" */
main()
{
$ char lname[16], fname[16], address[21];
$ char city[16], state[3], zip[6];
$ database play;
$EXECUTE PROCEDURE read_address ("Putnum")
INTO $lname, $fname, $address, $city, $state, $zip;
if (sqlca.sqlcode != 0 )
printf("\nFailure on execute");
}
別のプロシージャーの中のプロシージャーを実行する場合は、CALL または
LET 文を使用してそのプロシージャーを実行することができます。
read_address プロシージャーを持つ CALL 文を使用するには、図 8-5 に示さ
れているコードを使用することができます。
8-12 IBM Informix SQL リファレンス・ガイド
プロシージャーの実行
図 8-5
CALL 文による他のプロシージャー内のプロシージャーの呼び出し
CREATE PROCEDURE address_list ()
DEFINE p_lname, p_fname, p_city CHAR(15);
DEFINE p_add CHAR(20);
DEFINE p_state CHAR(2);
DEFINE p_zip CHAR(5);
.
.
.
CALL read_address ("Putnum") RETURNING p_fname, p_lname,
p_add, p_city, p_state, p_zip;
.
.
.
-- use the returned data some way
END PROCEDURE;
図 8-6 は、プロシージャー呼び出しを介してプロシージャー変数に値を割
り当てるために LET 文を使用する例を示したものです。
図 8-6
LET 文によるプロシージャー呼び出しからの値の割り当て
CREATE PROCEDURE address_list ()
DEFINE p_lname, p_fname, p_city CHAR(15);
DEFINE p_add CHAR(20);
DEFINE p_state CHAR(2);
DEFINE p_zip CHAR(5);
.
.
.
LET p_fname, p_lname,p_add, p_city, p_state, p_zip = read_address ("Putnum");
.
.
.
-- use the returned data some way
END PROCEDURE;
ストアード・プロシージャーおよび SPL
8-13
プロシージャーのデバッグ
プロシージャーのデバッグ
プロシージャーを正常に作成して実行した場合に、論理エラーが発生する
ことがあります。論理エラーがプロシージャーに含まれている場合は、
TRACE 文を使用してエラーを検出することができます。次のプロシー
ジャー・エンティティー値をトレースすることができます。
!
変数
!
プロシージャー引数
!
戻り値
!
SQL エラー・コード
!
ISAM エラー・コード
トレースされた値のリストを生成するには、まず、SQL 文の SET DEBUG
FILE を使用して、トレース出力を入れるファイルを命名します。プロシー
ジャーを作成するときに、TRACE 文をそのフォームの 1 つにインクルード
します。
TRACE 出力のフォームを指定するには、次の 3 つの方法があります。
TRACE ON
SQL 文以外のすべての文をトレースします。変数の内容は、
使用する前に出力されます。プロシージャー呼び出しと戻り
値もトレースされます。
TRACE
PROCEDURE
プロシージャー呼び出しと戻り値のみをトレースします。
TRACE 式
リテラルまたは式を出力します。必要な場合は、式の値を計
算してからファイルに送信します。
図 8-7 は、あるバージョンの read_address プロシージャーで TRACE 文を使
用する方法を示したものです。この例で示したいくつかの SPL 文について
は説明していませんが、この例全体に目を通すと、TRACE 文がプロシー
ジャー実行のモニターに役立つことが分かります。
8-14 IBM Informix SQL リファレンス・ガイド
プロシージャーのデバッグ
図 8-7
TRACE 文によるプロシージャー実行のモニター
CREATE PROCEDURE read_many (lastname CHAR(15))
RETURNING CHAR(15), CHAR(15), CHAR(20), CHAR(15),CHAR(2), CHAR(5);
DEFINE
DEFINE
DEFINE
DEFINE
DEFINE
p_lname,p_fname, p_city CHAR(15);
p_add CHAR(20);
p_state CHAR(2);
p_zip CHAR(5);
lcount, i INT;
LET lcount = 1;
TRACE ON; -- Every expression will be traced from here on
TRACE "Foreach starts";
-- A trace statement with a literal
FOREACH
SELECT fname, lname, address1, city, state, zipcode
INTO p_fname, p_lname, p_add, p_city, p_state, p_zip
FROM customer
WHERE lname = lastname
RETURN p_fname, p_lname, p_add, p_city, p_state, p_zip WITH RESUME;
LET lcount = lcount + 1; -- count of returned addresses
END FOREACH;
TRACE "Loop starts"; -- Another literal
FOR i IN (1 TO 5)
BEGIN
RETURN i , i+1, i*i, i/i, i-1,i with resume;
END
END FOR;
END PROCEDURE
;
トレースされたプロシージャーを実行するたびに、SET DEBUG FILE 文を使
用してユーザー指定のファイルに項目が追加されます。デバッグ項目を見
るには、任意のテキスト・エディターを使用して出力ファイルを表示して
ください。
次のリストは、図 8-7 のプロシージャーによって生成された出力の一部を
示しています。トレースされたそれぞれの文の次に、その内容を説明して
います。
TRACE ON
エコーイングされた TRACE ON 文。
TRACE Foreach starts
トレースされた式。この場合は、リテラル・
ストリング Foreach starts。
start select cursor
FOREACH ループを処理するためにカーソル
がオープンされていることの通知。
ストアード・プロシージャーおよび SPL
8-15
プロシージャーの再作成
select cursor iteration
SELECT カーソルの各反復の開始を知らせ
る通知。
expression:(+lcount, 1)
実行された式 (lcount+1) は 2 に評価されます。
let lcount = 2
各 LET 文が値でエコーイングされます。
プロシージャーの再作成
プロシージャーがデータベースに含まれている場合は、DROP PROCEDURE
文を使用してそれを明示的に削除しないと、同じ名前を持つ他のプロシー
ジャーを作成することはできません。プロシージャーをデバッグし、同じ
プロシージャー名で再度 CREATE PROCEDURE 文を使用しようとすると、既
存のプロシージャーをデータベースから削除しない限り、その文は失敗し
ます。
ストアード・プロシージャーに対するアクセス
権
プロシージャーには 2 つの型があります。つまり、DBA アクセス権付きプ
ロシ-ジャーと所有者アクセス権付きプロシージャーです。プロシー
ジャーの作成者は、そのプロシージャーの型を決定します。プロシー
ジャーの型は、そのプロシージャーを実行するユーザーのアクセス権に影
響を与えます。
プロシージャーは、それが作成されたデータベースに常駐します。それは
データベース・オブジェクトであるため、ユーザーにはプロシージャーの
作成と実行を行うための特定のアクセス権が必要です。DBA アクセス権付
きプロシージャーの場合、GRANT SQL 文を使用して、プロシージャーに対
する EXECUTE アクセス権を他のユーザーに付与することができます。
所有者アクセス権付きプロシージャーの場合は、GRANT 文を使用して、プ
ロシージャーによって参照されるオブジェクトに対するアクセス権もユー
ザーに付与する必要があります ( それらのオブジェクトがプロシージャー
の所有者によって所有されておらず、かつ、プロシージャー所有者が WITH
GRANT OPTION 文によってアクセス権を付与されていない場合 )。
8-16 IBM Informix SQL リファレンス・ガイド
作成時のアクセス権
作成時のアクセス権
表やビューの場合と同様に、プロシージャーを作成するには、データベー
スに対する RESOURCE アクセス権が必要です。プロシージャーの作成時に
は、他のデータベース・オブジェクト ( 表、ビュー、など ) の存在は検査さ
れません。
デフォルトでは、所有者アクセス権付きプロシージャーを作成すると、
PUBLIC は EXECUTE アクセス権を取得します。DBA プロシージャーを作成
すると、デフォルトで、所有者と、DBA 状態を持つ他のユーザーだけが
EXECUTE アクセス権を取得します。
ANSI 準拠データベースでは、デフォルトで、所有者と、DBA 状態を持つ他
のユーザーだけが、DBA アクセス権付きプロシージャーと所有者アクセス
権付きプロシージャーの両方に対する EXECUTE アクセス権を取得します。
実行時のアクセス権
プロシージャーの所有者、DBA 状態を持つユーザー、または EXECUTE ア
クセス権を持つユーザーはプロシージャーを実行できます。データベー
ス・サーバーは、デフォルトで、プロシージャーを実行するユーザーが実
行時の基礎オブジェクトに対する正しいアクセス権を持っているかどうか
を調べます。
あるプロシージャーを実行するユーザーは、そのプロシージャーが実行さ
れている間、データベースに対する RESOURCE アクセス権を付与されま
す。
アクセス権と所有者アクセス権付きプロシージャー
所有者アクセス権付きプロシージャーを実行すると、被参照側オブジェク
トの存在が検査されます。また、プロシージャーを実行すると、被参照側
オブジェクトに対するアクセス権も検査されます。
ストアード・プロシージャーおよび SPL
8-17
実行時のアクセス権
プロシージャーを実行するすべてのユーザーは、プロシージャーの所有者
から適切なアクセス権を付与されていなければなりません。自分が所有す
るオブジェクトのみを参照するプロシージャーを実行する場合は、アクセ
ス権の競合は発生しません。被参照側オブジェクトを所有していないとき
に、SELECT 文と CREATE TABLE 文が含まれているプロシージャーを実行す
る場合、エラーを発生させないでプロシージャーを実行するためには
Select アクセス権を持っていなければなりません。あるいは、プロシー
ジャーの所有者が WITH GRANT OPTION 文で適切なアクセス権を付与されて
いなければなりません。図 8-7 の場合、プロシージャーの所有者は、WITH
GRANT オプションで SELECT アクセス権を付与されていなければなりませ
ん。GRANT 文を使用して、自分が所有するプロシージャーに対する
EXECUTE アクセス権を他のユーザーに付与する場合は、自分が所有し、
かつプロシージャーで参照されるオブジェクトに対するすべての適切なア
クセス権を暗黙的に付与します。
プロシージャーの実行中に作成される非修飾オブジェクトは、プロシー
ジャーを実行するユーザーではなく、プロシージャーの所有者によって所
有されます。たとえば、所有者アクセス権付きストアード・プロシー
ジャーの中の次の行は、2 つの表を作成します。このプロシージャーを
tony が所有していて、ユーザー marty がそのプロシージャーを実行する場
合、最初の表 gargantuan は tony によって所有されます。2 番目の表 tiny
は、libby によって所有されます。
CREATE PROCEDURE tryit()
.
.
.
CREATE TABLE gargantuan (col1 INT, col2 INT, col3 INT);
CREATE TABLE libby.tiny (col1 INT, col2 INT, col3 INT);
END PROCEDURE
アクセス権と DBA アクセス権付きプロシージャー
DBA アクセス権付きプロシージャーを実行するとき、プロシージャーを実
行するユーザーは、プロシージャーを実行している間、DBA のアクセス権
を所有します。DBA アクセス権付きプロシージャーは、まず、現行ユー
ザーが DBA アクセス権を付与されているものとして機能し、次に手動でプ
ロシージャーの各文を実行し、最後に、DBA アクセス権を取り消します。
DBA プロシージャーの実行中に作成されたオブジェクトは、プロシー
ジャーのデータ定義文で所有者を別のユーザーに明示的に指定していない
限り、プロシージャーを実行するユーザーによって所有されます。
8-18 IBM Informix SQL リファレンス・ガイド
アクセス権の取り消し
DBA または DBA アクセス権を持つユーザーだけが、DBA アクセス権付きプ
ロシージャーを作成できます。
アクセス権と入れ子にしたプロシージャー
DBA アクセス権付き状態は、呼び出し先プロシージャーによって継承され
ません。DBA アクセス権付きプロシージャーが所有者アクセス権付きプロ
シージャーを実行する場合、所有者アクセス権付きプロシージャーは、
DBA プロシージャーとして実行されません。所有者アクセス権付きプロ
シージャーは、DBA アクセス権付きプロシージャーを呼び出し、DBA アク
セス権付きプロシージャー内の文は、任意の DBA アクセス権付きプロシー
ジャー内と同じように実行されます。
アクセス権の取り消し
プロシージャーの所有者は、ユーザーから EXECUTE アクセス権を取り消
すことができます。あるユーザーがプロシージャーに対する EXECUTE ア
クセス権を失うと、そのユーザーによって EXECUTE アクセス権を付与さ
れたすべてのユーザーからも EXECUTE アクセス権が取り消されます。
変数と式
このセクションでは、SPL の変数を定義し、使用する方法について説明し
ます。SPL 式と SQL 式の違いについても、このセクションで説明します。
変数
ストアード・プロシージャーで変数を使用するには、いくつかの方法があ
ります。変数は、データベース照会または他の SQL 文の、定数が必要な任
意の場所で使用できます。SPL 文で変数を使用して、値の割り当てと計算、
照会から戻された行の数の把握、ループの実行、その他のタスクの処理な
どを行うことができます。
変数の値はメモリーに保持されます。したがって、その変数はデータベー
ス・オブジェクトではありません。このため、トランザクションをロール
バックしても、プロシージャー変数の値は復元されません。
ストアード・プロシージャーおよび SPL
8-19
変数
変数のフォーマット
変数は SQL 識別子のルールに従います。( 識別子の構文と注意事項につい
ては、7-403 ページを参照してください。) 変数の定義が済んだら、必要に
応じ、それをプロシージャーの任意の場所で使用することができます。
埋め込み言語製品を使用する場合は、変数を特殊記号で開始する必要はあ
りません ( 埋め込み言語製品のホスト変数とは異なります )。
広域変数と局所変数
変数は、局所にも広域にも定義できます。デフォルトでは、変数は局所で
す。この両者の違いについて、概要を示します。
局所
局所変数は、それが定義されているプロシージャーの中でし
か使用できません。コンパイル時にデフォルト値を局所変数
に割り当てることはできません。
広域
広域変数は、同じデータベースの同じユーザー・セッション
によって実行される他のプロシージャーで使用できます。広
域変数の値はメモリーに格納されます。広域環境は、特定の
データベース・サーバーの特定のセッション内で実行される
すべてのプロシージャー、たとえば、埋め込み言語プログラ
ムによって実行されるすべてのプロシージャー、または
DB-Access セッションで実行されるすべてのプロシージャーが
使用するメモリーです。セッションが終了すると、変数の値
は消失します。
広域変数には、コンパイル時にデフォルト値を割り当てる必
要があります。
広域変数の最初の定義は、変数を広域環境に挿入します。異
なるプロシージャーにおける同じ変数の後続の定義は、単に
変数を広域環境にバインドするだけです。
変数の定義
変数の定義は DEFINE 文を使用して行います。ある変数をプロシージャーの
引数リストにリストする場合、その変数は暗黙的に定義されますので、そ
れを DEFINE 文で正式に定義する必要はありません。変数に値 (NULL もあ
る ) を割り当てないと、それを使用することはできません。
8-20 IBM Informix SQL リファレンス・ガイド
変数
変数のデータ型
変数は、データベース表内の列で使用できる任意のデータ型 (ただし、
SERIAL を除く ) として定義できます。次の例は、定義済みプロシージャー
変数のいくつかのケースを示しています。
DEFINE x INT;
DEFINE name CHAR(15);
DEFINE this_day DATETIME YEAR TO DAY ;
ある変数を TEXT または BYTE データ用に定義すると、その変数には実際の
データは含まれません。その代わり、その変数はそのデータを指すポイン
ターとして働きます。ただし、このプロシージャー変数は、他の任意のプ
ロシージャー変数と同じように使用されます。TEXT または BYTE 変数を定
義するときは、REFERENCES という語 ( これらの変数にデータが含まれてい
ないことを強調する ) を使用しなければなりませんが、単にデータを参照
するだけにします。次の例は、TEXT および BYTE 変数の定義を示していま
す。
DEFINE ttt REFERENCES TEXT;
DEFINE bbb REFERENCES BYTE;
変数の範囲
変数は、それが定義されている文ブロックの中で有効です。変数は、その
文ブロック内に入れ子になっている文ブロックの中ででも有効です。ただ
し、それが同じ名前の変数の再定義によってマスクされている場合を除き
ます。
図 8-8 のプロシージャーの先頭部分では、整変数 x、y、および z が定義さ
れ、初期化されます。BEGIN および END 文は、整変数 x および q、および
CHAR 変数 z が定義されている入れ子文ブロックにマークします。入れ子ブ
ロック内では、再定義された変数 x がオリジナルの変数 x をマスクします。
END 文が終了すると、入れ子ブロックの終わりがマークされ、x のオリジ
ナルの値が再度使用可能になります。
図 8-8
入れ子文ブロックによる変数のマスキング
CREATE PROCEDURE scope()
DEFINE x,y,z INT;
LET x = 5; LET y = 10;
LET z = x + y; --z is 15
BEGIN
DEFINE x, q INT; DEFINE z CHAR(5);
LET x = 100;
ストアード・プロシージャーおよび SPL
8-21
変数
LET q = x + y; -- q = 110
LET z = "silly"; -- z receives a character value
END
LET y = x; -- y is now 5
LET x = z; -- z is now 15, not "silly"
END PROCEDURE
変数 / キーワードのあいまいさ
変数をキーワードとして定義すると、あいまいさが発生することがありま
す。識別子に関する次のルールは、変数、プロシージャー名、およびシス
テム関数名のあいまいさを回避するのに役立ちます。
!
定義済み変数が最も高い優先順位を取る。
!
DEFINE 文で定義されたプロシージャーが、SQL 関数よりも優先順
位が高い。
!
SQL 関数は、既存のプロシージャーよりも優先順位が高いが、プロ
シージャーとして識別されない (DEFINE 文を使用 )。
場合によっては、変数の名前を変更しなければならないことがあります。
たとえば、集計関数の名前である count や max を定義することはできませ
ん。あいまいな使用が発生する可能性があるキーワードを、7-403 ページの
『識別子』に示しています。
変数と列名
列名の場合と同じ識別子をプロシージャー変数に対して使用すると、デー
タベース・サーバーは、その識別子のインスタンスを変数であると見なし
ます。識別子を列名として使用するには、列名を表名で修飾してください。
次の例では、プロシージャー変数 lname が列名と同じです。次の SELECT
文では、customer.lname が列名であり、lname が変数名です。
CREATE PROCEDURE table_test()
DEFINE lname CHAR(15);
LET lname = "Miller";
SELECT customer.lname FROM customer INTO lname
WHERE customer_num = 502.
.
.
.
8-22 IBM Informix SQL リファレンス・ガイド
式
変数と SQL 関数
SQL 関数の場合と同じ識別子をプロシージャー変数に対して使用すると、
データベース・サーバーは、識別子のインスタンスを変数であると見なし、
SQL 関数の使用を認めません。変数が定義されているコード・ブロック内
では SQL 関数を使用できません。次の例は、user という変数が定義されて
いるプロシージャー内のブロックを示しています。この定義は、
BEGIN...END ブロック内での USER 関数の使用を認めません。
CREATE PROCEDURE user_test()
DEFINE name CHAR(10);
DEFINE name2 CHAR(10);
LET name = user; -- the SQL function
BEGIN
DEFINE user CHAR(15); -- disables user function
LET user = "Miller";
LET name = user; -- assigns "Miller" to variable name
END
.
.
.
LET name2 = user; -- SQL function again
プロシージャー名と SQL 関数
プロシージャー名と SQL 関数名間のあいまいさについては、7-429 ページの
『プロシージャー名』を参照してください。
式
集合式を除く、任意の SQL 式をストアード・プロシージャーで使用するこ
とができます。SQL 式の全構文と注意事項が、7-375 ページに示されていま
す。
SQL 式を使用できるだけでなく、プロシージャーによって式として、また
は式の一部として、戻されたプロシージャー変数と値も使用することがで
きます。
ストアード・プロシージャーおよび SPL
8-23
式
SPL 式
式セグメント
7-375
ページ
| |
+
*
< プロシー
ジャー変数名 >
(
/
)
SPL 式
,
プロシー
ジャー名
7-429 ページ
SPL
式
(
< 呼び出し先
変数 >
)
=
< 呼び出し先 呼び出し先プロシージャーによって使用される 1 つの引数の
変数 >
名前です。
< プロシー
ジャー
変数名 >
プロシージャーで定義されている有効変数の名前です。
代表的な SPL 式のいくつかの例を次に示します。
var1
var1 + var2 + 5
read_address("Miller")
read_address(lastname = "Miller")
get_duedate(acct_num) + 10 UNITS DAY
fname || ""|| lname
"(415)" || get_phonenum(cust_name)
8-24 IBM Informix SQL リファレンス・ガイド
プログラムの流れの制御
変数への値の割り当て
プロシージャー変数に値を割り当てるには、次の 4 つの方法があります。
!
LET 文を使用する
!
SELECT...INTO 文を使用する
!
CALL 文を RETURNING 節が入ったプロシージャーと一緒に使用する
!
EXECUTE PROCEDURE...INTO 文を使用する
LET 文を使用して、1 つ以上の変数に値を割り当てます。次の例は、LET 文
のいくつかの形式を示しています。
LET a = b + a;
LET a, b = c, d;
LET a, b = (SELECT fname, lname FROM customer
WHERE customer_num = 101);
LET a, b = read_name(101);
SELECT 文を使用して、データベースから変数に直接、値を割り当てます。
次の例の文は、上例の 3 番目の LET 文と同じタスクを実行します。
SELECT fname, lname into a, b FROM customer
WHERE customer_num = 101
CALL または EXECUTE PROCEDURE 文を使用して、プロシージャーによって
戻された値を 1 つ以上のプロシージャー変数に割り当てます。次の例の 2
つの文は、read_address プロシージャーから取り出したフルアドレスを指
定のプロシージャー変数に戻します。
EXECUTE PROCEDURE read_address("Smith")
INTO p_fname, p_lname, p_add, p_city, p_state, p_zip;
CALL read_address("Smith")
RETURNING p_fname, p_lname, p_add, p_city, p_state, p_zip;
プログラムの流れの制御
SPL には、ストアード・プロシージャーの流れを制御できるようにしたり、
実行時に取得したデータに基づいて意思決定を行えるようにするいくつか
の文が含まれています。これらのプログラムの流れを制御する文について
は、本章のこのセクションの概要説明を参照してください。それらの構文
と詳しい説明は、8-36 ページの『SPL 文の構文』を参照してください。
ストアード・プロシージャーおよび SPL
8-25
分岐
分岐
IF 文を使用して、ストアード・プロシージャーに論理分岐を形成します。
IF 文は、まず、条件を評価し、条件が真であれば、この文の THEN 部分に
含まれている文ブロックが実行されます。条件が真でなければ、実行は次の
文へ移ります。ただし、ELSE 節または ELIF (else if) 節が IF 文にインクルー
ドされている場合を除きます。図 8-9 は、IF 文の 1 つの例を示しています。
図 8-9
IF 文の使用
CREATE PROCEDURE str_compare (str1 CHAR(20), str2 CHAR(20))
RETURNING INT;
DEFINE result INT;
IF str1 > str2 THEN
result = 1;
ELIF str2 > str1 THEN
result = -1;
ELSE
result = 0;
END IF
RETURN result;
END PROCEDURE -- str_compare
ループ
SPL には、3 つのループ・メソッドがあり、それらは次のいずれかの文で実
行されます。
FOR
制御ループを開始します。終了が保証されます。
FOREACH
複数の行をデータベースから選択して操作できるようにしま
す。カーソルを暗黙的に宣言してオープンします。
WHILE
ループを開始します。終了は保証されません。
8-26 IBM Informix SQL リファレンス・ガイド
ループ
ループから出るには 4 つの方法があり、それらは次のいずれかの文で実行
されます。
CONTINUE
現在の識別済みループに残っている文をスキップし、その
ループの次の反復を開始します。
EXIT
現在の識別済みループを終了します。実行は、ループの後の
最初の文から再開されます。
RETURN
プロシージャーを終了します。戻り値が指定されている場合
は、終了後にその値が戻されます。
RAISE EXCEP- ループの本体で例外がトラップ ( キャッチ ) されなかった場
TION
合に、ループを終了します。
これらの文の構文と使用について詳しくは、8-36 ページの『SPL 文の構文』
を参照してください。
ストアード・プロシージャーおよび SPL
8-27
関数処理
関数処理
あるプロシージャー内から他のプロシージャーを呼び出したり、オペレー
ティング・システム・コマンドを実行したりできます。
プロシージャー内でのプロシージャーの呼び出し
CALL 文または SQL 文 EXECUTE PROCEDURE を使用して、あるプロシー
ジャーから他のプロシージャーを実行します。図 8-10 は、CALL 文を使用
して read_name プロシージャーを呼び出しています。
図 8-10
CALL 文によるプロシージャーの呼び出し
CREATE PROCEDURE call_test()
RETURNING CHAR(15), CHAR(15);
DEFINE fname, lname CHAR(15);
CALL read_name("Putnum") RETURNING fname, lname;
IF fname = "Eileen" THEN RETURN "Jessica", lname;
ELSE RETURN fname, lname;
END IF
END PROCEDURE
プロシージャー内からのオペレーティング・システム・コマン
ドの実行
SYSTEM 文を使用して、プロシージャー内からシステム呼び出しを実行し
ます。図 8-11 は、echo コマンドの呼び出しを示しています。
図 8-11
SYSTEM 文によるプロシージャーからのシステム呼び出し
CREATE DBA PROCEDURE delete_customer(cnum INT)
DEFINE username CHAR(8);
DELETE FROM customer
WHERE customer_num = cnum;
IF username = "acctclrk" THEN
SYSTEM "echo 'Delete from customer by acctclrk' >> /mis/records/updates" ;
END IF
END PROCEDURE -- delete_customer
8-28 IBM Informix SQL リファレンス・ガイド
プロシージャーとの情報のやり取り
プロシージャーの再帰呼び出し
プロシージャーは自分自身を呼び出すことができます。プロシージャーを
再帰的に呼び出す場合の制限はありません。
プロシージャーとの情報のやり取り
プロシージャーを作成するとき、引数リストを指定してプロシージャーに
情報を渡すかどうかを決定します。プロシージャーに必要な各情報ごとに、
1 つの引数とその引数のデータ型を指定します。
たとえば、プロシージャーに単一の整数情報を渡す必要がある場合は、次
のようなプロシージャー・ヘッディングを指定することができます。
CREATE PROCEDURE safe_delete(cnum INT)
結果の戻り
1 つ以上の値を戻すプロシージャーには、情報の転送を行うための 2 行の
コードが含まれていなければなりません。戻すデータ型を記述し、値を明
示的に戻す必要があります。
戻り値の指定
プロシージャーの名前と入力パラメーターを指定したらすぐに、戻す必要
がある各値のデータ型を指定した RETURNING 節をインクルードする必要が
あります。次の例は、入力として 1 つの整数を必要とし、1 つの整数と 1 つ
の 10 バイト文字値を戻すプロシージャーのヘッダー ( 名前、パラメー
ター、および RETURNING 節 ) を示したものです。
CREATE PROCEDURE get_call(cnum INT)
RETURNING INT, CHAR(10);
ストアード・プロシージャーおよび SPL
8-29
結果の戻り
値の戻り
RETURNING 節を使用して、戻す値の型を指定したら、プロシージャーの任
意のポイントで RETURN 文を使用して、RETURNING 節にリストされている
ものと同じ番号とデータ型を戻すことができます。次の例は、get_call プロ
シージャーから情報を戻す方法を示したものです。
CREATE PROCEDURE get_call(cnum INT)
RETURNING INT, CHAR(10);
DEFINE ncalls INT, o_name CHAR(10);
.
.
.
RETURN ncalls, o_name;
.
.
.
END PROCEDURE
プロシージャーからの複数値の戻り
データベースから複数値を戻す選択をプロシージャーで実行する場合や、
ループ内から値を戻す場合は、RETURN 文で WITH RESUME キーワードを使
用する必要があります。RETURN...WITH RESUME 文を使用すると、値 ( 複数
の場合もある ) が呼び出し側プログラムまたはプロシージャーに戻されま
す。呼び出し側プログラムがこの値を受け取ると、RETURN...WITH RESUME
文のすぐ後の文に実行が戻ります。
図 8-12 は、カーソル的プロシージャーの例です。この例では、FOREACH
ループと FOR ループから値が戻されます。このプロシージャーには
FOREACH ループが含まれているため、これはカーソル的プロシージャーと
呼ばれます。
8-30 IBM Informix SQL リファレンス・ガイド
結果の戻り
図 8-12
FOREACH ループと FOR ループから値を戻すプロシージャー
CREATE PROCEDURE read_many (lastname CHAR(15))
RETURNING CHAR(15), CHAR(15), CHAR(20), CHAR(15),CHAR(2),
CHAR(5);
DEFINE
DEFINE
DEFINE
DEFINE
DEFINE
DEFINE
p_lname,p_fname, p_city CHAR(15);
p_add CHAR(20);
p_state CHAR(2);
p_zip CHAR(5);
lcount INT ;
i INT ;
LET lcount = 0;
TRACE ON;
CREATE VIEW myview AS SELECT * FROM customer;
TRACE "Foreach starts";
FOREACH
SELECT fname, lname, address1, city, state, zipcode
INTO p_fname, p_lname, p_add, p_city, p_state, p_zip
FROM customer
WHERE lname = lastname
RETURN p_fname, p_lname, p_add, p_city, p_state, p_zip WITH RESUME;
LET lcount = lcount +1;
END FOREACH;
FOR i IN (1 TO 5)
BEGIN
RETURN "a", "b", "c", "d", "e" WITH RESUME;
END
END FOR;
END PROCEDURE
このプロシージャーを実行すると、指定されたラストネームを持つ各人物
の名前とアドレスが戻されます。このほか、文字のシーケンスも戻されま
す。呼び出し側プロシージャーまたは呼び出し側プログラムは、複数の戻
り値を必要とするため、カーソルまたは FOREACH 文を使用して複数の戻り
値を処理しなければなりません。
ストアード・プロシージャーおよび SPL
8-31
例外処理
例外処理
データベース・サーバーからプロシージャーに戻された、またはプロシー
ジャーによって引き起こされたすべての例外 ( またはエラー ) を、ON
EXCEPTION 文を使用してトラップすることができます。RAISE EXCEPTION
文を使用すれば、プロシージャー内で例外を生成することができます。
エラーのトラップと復旧
ON EXCEPTION 文は、すべてのエラーをトラップするためのメカニズムを備
えています。
エラーをトラップするには、文のグループを文ブロックに入れ、その文ブ
ロックの前に ON EXCEPTION 文を付けます。ON EXCEPTION 文の後のブロッ
クでエラーが発生した場合は、復旧アクションを取ることができます。
図 8-13 は、BEGIN...END ブロック内の ON EXCEPTION 文の例を示したもので
す。
図 8-13
BEGIN...END ブロック内の ON EXCEPTION 文
BEGIN
DEFINE c INT;
ON EXCEPTION IN
(
-206, -- table does not exist
-217 -- column does not exist
) SET err_num
IF err_num = -206 THEN
CREATE TABLE t (c INT);
iNSERT INTO t VALUES (10);
-- continue after the insert statement
ELSE
ALTER TABLE t ADD(d INT);
LET c = (SELECT d FROM t);
-- continue after the select statement.
END IF
END EXCEPTION WITH RESUME
INSERT INTO t VALUES (10);
-- will fail if t does not exist
LET c = (SELECT d FROM t);
END
-- will fail if d does not exist
8-32 IBM Informix SQL リファレンス・ガイド
ON EXCEPTION 文の制御範囲
エラーが発生すると、SPL インタープリターは、エラーをトラップする最
深部の ON EXCEPTION 宣言を検索します。ただし、エラーをトラップした
後、最初に行うアクションは、エラーのリセットです。エラー・アクショ
ン・コードの実行が完了し、実行された ON EXCEPTION 宣言に WITH
RESUME キーワードがインクルードされていると、エラーを生成した文の
次の 文の実行が自動的に再開されます。ON EXCEPTION 宣言に WITH
RESUME キーワードがインクルードされていないと、現行ブロックの実行
は完了します。
ON EXCEPTION 文の制御範囲
ON EXCEPTION 文が有効な文ブロックは、ON EXCEPTION 文の後の文ブロッ
ク、その文ブロックに入れ子になったすべての文ブロック、および ON
EXCEPTION 文の後のすべての文ブロックです。この文は、ON EXCEPTION
文が含まれた文ブロックでは 無効 です。
図 8-14 の疑似コードは、プロシージャー内で例外が有効になる場合を示し
ています。つまり、示されているいずれかのブロックで 201 エラーが発生
すると、a201 というラベルが付いたアクションが行われます。
図 8-14
ON EXCEPTION 文がプロシージャー内で有効になる場合を示す疑似コード
CREATE PROCEDURE scope()
DEFINE i INT;
.
.
.
BEGIN -- begin statement block
.
.
.
ON EXCEPTION IN (201)
-- do action a201
END EXCEPTION
BEGIN -- statement block aa
-- do action, a201 valid
END
BEGIN -- statement block bb
-- do action, a201 valid
END
WHILE i < 10
-- do something, a201 is
END WHILE
A
here
here
valid here
ストアード・プロシージャーおよび SPL
8-33
ユーザー生成の例外
END
BEGIN -- begin statement block B
-- do something
-- a201 is NOT valid here
END
END PROCEDURE
ユーザー生成の例外
次の疑似コード例に示されているように、RAISE EXCEPTION 文を使用して
ユーザー独自のエラーを生成することができます。この例では、ON
EXCEPTION 文が、2 つの変数 esql および eisam を使用して、データベース・
サーバーによって戻されたエラー番号を保持しています。エラーが発生し、
SQL エラー番号が -206 であれば、IF 節で定義されたアクションが取られま
す。それ以外のいずれかの SQL エラーが発生した場合は、このエラーが
BEGIN...END ブロックから取り出され、このブロックが含まれているブロッ
クに渡されます。
BEGIN
ON EXCEPTION SET esql, eisam -- trap all errors
IF esql = -206 THEN
-- table not found
-- recover somehow
ELSE
RAISE exception esql, eisam ; -- pass the error up
END IF
END EXCEPTION
-- do something
END
SQL エラーのシミュレート
次の例に示されているように、SQL エラーをシミュレートするためにエ
ラーを生成することができます。ここでは、ユーザーが pault であれば、こ
のユーザーが実際に UPDATE アクセス権を持っている場合でも、ストアー
ド・プロシージャーは、このユーザーがそのアクセス権を持っていない場
合と同様に機能します。
BEGIN
IF user = "pault" THEN
RAISE EXCEPTION -273;
END IF
END
8-34 IBM Informix SQL リファレンス・ガイド
-- deny Paul update privilege
ユーザー生成の例外
入れ子コードを終了するための RAISE EXCEPTION の使用
図 8-15 に示されているように、RAISE EXCEPTION 文を使用して深い入れ子
から抜け出ることができます。最深部の条件が真であれば (aa が負であれ
ば )、例外が発生し、実行がこのブロックの END の次にあるコードにジャ
ンプします。この場合、実行は TRACE 文にジャンプします。
図 8-15
RAISE EXCEPTION 文による入れ子ループからの抜け出し
BEGIN
ON EXCEPTION IN (1)
END EXCEPTION WITH RESUME -- do nothing significant (cont)
BEGIN
FOR i IN (1 TO 1000)
FOREACH select ..INTO aa FROM t
IF aa < 0 THEN
RAISE EXCEPTION 1 ;
-- emergency exit
END IF
END FOREACH
END FOR
RETURN 1;
END
--do something;
-- emergency exit to
-- this statement.
TRACE "Negative value returned"
RETURN -10;
END
BEGIN...END ブロックが単一の 文であることを忘れないでください。エ
ラーがブロック内のどこかで発生し、トラップがブロックの外部で行われ
た場合は、実行の再開時に、ブロックの残りがスキップされ、次の文から
実行が再開されます。
このエラーのためのトラップがブロック内のどこかで入れ子になっている
場合を除き、エラー条件は呼び出しが含まれているブロックに戻され、さ
らにそのブロックが入っているすべてのブロックに戻されます。エラーを
処理するように設定された ON EXCEPTION 文がない場合は、プロシー
ジャーの実行が停止し、そのプロシージャーを実行しているプログラムま
たはプロシージャーに対するエラーが作成されます。
ストアード・プロシージャーおよび SPL
8-35
SPL 文の構文
SPL 文の構文
この章の残りの部分では、SPL の文について説明します。各文の構文と使
用法が、例と一緒に示されています。構文ダイアグラムで使用される記号
の説明については、13 ページの『構文規則』を参照してください。
8-36 IBM Informix SQL リファレンス・ガイド
CALL
CALL
目的
CALL 文は、ストアード・プロシージャー内から特定のプロシージャーを実
行するために使用します。
構文
CALL
プロシー
ジャー名
7-429
ページ
(
)
;
,
引数
,
RETURNING
< プロシー
ジャー変数 >
引数
< パラメー
ター名 >
SPL
式
8-23 ページ
=
SELECT
文
( サブセット )
8-38 ページ
< パラメー
ター名 >
その CREATE PROCEDURE 文によって定義されたパラメーター
の名前です。
< プロシー
ジャー
変数 >
その CREATE PROCEDURE 文によって定義された変数の名前で
す。
使用法
CALL 文は、procedure name というプロシージャーを起動します。CALL 文
は、EXECUTE PROCEDURE 文と同じ動作をします。ただし、前者はスト
アード・プロシージャー内からしか使用できません。
ストアード・プロシージャーおよび SPL
8-37
引数の指定
引数の指定
呼び出し先プロシージャーが予期する数より多くの引数が CALL 文に含ま
れていると、エラーが戻されます。
呼び出し先プロシージャーが予期する数より少ない引数が CALL 文で指定
されていると、それらの引数は欠落していると見なされます。デフォルト
値が指定されていれば、欠落した引数は、対応するデフォルト値に初期化
されます。( 7-59 ページの CREATE PROCEDURE を参照してください。) この
初期化は、プロシージャー本体内の最初の実行可能文の前で行われます。
引数が欠落していて、デフォルト値が指定されていない場合は、それらの
引数は UNDEFINED の値に初期化されます。UNDEFINED の値を持つ変数を
使用しようとすると、エラーになります。
プロシージャー引数は、名前または位置でプロシージャー引数パラメー
ターに結合されますが、名前と位置の両方では結合されません。つまり、
parameter name = 構文は、1 つの CALL 文で指定されたすべての引数に使用
するか、またはどの引数にも使用しないかのいずれかです。
たとえば、次の両方のプロシージャー呼び出しは、文字引数 t、n、および
d をこの順序で必要とするプロシージャーに対して有効です。
CALL add_col (t="customer", d ="integer", n = "newint");
CALL add_col("customer","newint","integer");
プロシージャー引数で使用できる SELECT のサブセッ
ト
SELECT 文が正しい型と長さの値を正確に 1 つ戻す限り、それをプロシー
ジャーの引数として使用できます。( 詳細については、7-263 ページ以降の
SELECT 文に関する説明を参照してください。)
8-38 IBM Informix SQL リファレンス・ガイド
呼び出し先プロシージャーからの入力の受け取り
呼び出し先プロシージャーからの入力の受け取り
RETURNING 節は、プロシージャー呼び出しからの戻り値を受け取る < プロ
シージャー変数 > を指定します。RETURNING 節を省略した場合は、呼び出
し先プロシージャーは値を戻してはなりません。
次の例は、2 つのプロシージャー呼び出しを示しています。1 つは、値が戻
されないプロシージャー呼び出し (no_args) であり、他の 1 つは、3 つの値
が戻されるプロシージャー呼び出し (yes_args) です。3 つの整変数は、
yes_args からの戻り値を受け取るように定義されています。
CREATE PROCEDURE not_much()
DEFINE i, j, k INT;
CALL no_args (10,20);
CALL yes_args (5) RETURNING i, j, k;
END PROCEDURE
参考資料
本書では、EXECUTE PROCEDURE 文を参照してください。
ストアード・プロシージャーおよび SPL
8-39
CONTINUE
CONTINUE
目的
CONTINUE 文は、識別された型の最深部ループの次回反復を開始するため
に使用します。
構文
CONTINUE
FOR
;
WHILE
FOREACH
使用法
CONTINUE 文が見つかると、示された型の最深部ループ内に残っている文
がスキップされます。実行は、次回反復のループのトップから続けられま
す。たとえば、次のプロシージャーの場合、値 3 ~ 15 が testtable 表に挿入
されます。値 3 ~ 9 および 13 ~ 15 もプロセスに戻されます。値 11 は戻さ
れません。その理由は、CONTINUE FOR 文に到達し、RETURN i WITH
RESUME 文がスキップされるからです。
CREATE PROCEDURE loop_skip()
RETURNING INT;
DEFINE i INT;
.
.
.
FOR i IN (3 TO 15 STEP 2)
INSERT INTO testtable values(i, null, null);
IF i = 11
CONTINUE FOR;
END IF;
RETURN i WITH RESUME;
END FOR;
END PROCEDURE;
CONTINUE 文は、示されたループが見つからない場合にエラーを生成しま
す。
8-40 IBM Informix SQL リファレンス・ガイド
DEFINE
DEFINE
目的
DEFINE 文は、プロシージャーで使用される変数を宣言し、それらの変数に
データ型を割り当てるために使用します。
構文
,
DEFINE
< 変数
名>
GLOBAL
SQL データ型
( サブセット )
8-42 ページ
OL
REFERENCES
デフォルト
値
DEFAULT
;
DEFAULT
NULL
BYTE
TEXT
,
SQL データ型
( サブセット )
8-42 ページ
< 変数
名>
OL
BYTE
REFERENCES
TEXT
表名
7-440 ページ
LIKE
.
<列>
シノニム名
7-438 ページ
ビュー名
7-444 ページ
PROCEDURE
<列>
表内の列の名前です。
< 変数名 >
定義するプロシージャー変数の名前です。
ストアード・プロシージャーおよび SPL
8-41
使用法
デフォルト
値
リテラル番号
7-427 ページ
引用符付きストリング
7-431 ページ
リテラル時間隔 (INTERVAL)
型
7-424 ページ
リテラル日時 (DATETIME)
型
7-421 ページ
CURRENT
7-383 ページ
DATETIME
フィールド
修飾子
7-373 ページ
USER
TODAY
NULL
OL
DBSERVERNAME
SITENAME
使用法
DEFINE 文は実行可能文ではありません。DEFINE 文は、プロシージャー・
ヘッダーの後で、かつ他の文の前に置かなければなりません。変数は、そ
れが定義されている文ブロック内の任意の場所で使用できます。つまり、
定義された変数の範囲はそれが定義されている文ブロックです。
SQL データ型サブセット
SQL データ型サブセットには、SERIAL、TEXT、および BYTE 以外のすべて
の SQL データ型が含まれます。
8-42 IBM Informix SQL リファレンス・ガイド
TEXT および BYTE 変数の定義
TEXT および BYTE 変数の定義
TEXT および BYTE 変数を使用するには、REFERENCES キーワードを使用し
ます。TEXT および BYTE 変数には実際のデータは含まれておらず、単に
データを指すポインターが含まれているだけです。REFERENCES キーワー
ドは、プロシージャー変数が単なるポインターであることを示す注意書き
です。TEXT および BYTE データ型の使用法は、他の変数の場合とまったく
同じです。
再宣言または再定義
同一文ブロック内で同一変数を 2 回定義すると、エラーになります。変数
を入れ子ブロック内で再定義することができます。この場合、変数は一時
的に外部宣言を非表示にします。次の例はエラーを起こします。
CREATE PROCEDURE example1()
DEFINE n INT; DEFINE j INT;
DEFINE n CHAR (1); -- redefinition produces an error
.
.
.
次の再宣言は使用できます。入れ子にした文ブロック内では、n は文字変
数です。ブロックの外部では、n は整変数です。
CREATE PROCEDURE example2()
DEFINE n INT; DEFINE j INT;
.
.
.
BEGIN
DEFINE n CHAR (1); -- character n masks integer variable
locally
.
.
.
END
ストアード・プロシージャーおよび SPL
8-43
広域変数の宣言
広域変数の宣言
GLOBAL 修飾子は、GLOBAL キーワードの後の変数リストが他のプロシー
ジャーで使用可能であることを示します。これらの変数の型は、広域環境
の変数の型と一致していなければなりません。広域環境は、特定のセッ
ション (DB-Access セッションまたは埋め込み言語プログラム・セッション )
内で実行されるすべてのプロシージャーが使用するメモリーです。広域変
数の値はメモリーに格納されます。
広域変数は、現行セッションで実行されている各プロシージャー間で共有
されます。広域変数はデータベースには保存されないため、現行セッショ
ンがクローズすると、広域変数は消失します。
広域変数は、リモート・データベース・サーバーで実行される各プロシー
ジャー間では共有されません。広域プロシージャー変数は、データベー
ス・サーバーとアプリケーション開発支援ツール間では共有されません。
広域変数の最初の宣言により、広域環境に変数が設定されます。後続の広
域宣言では、単に変数と広域環境のバインドだけが行われ、その時点での
変数の値が設定されます。次の 2 つのプロシージャー例 proc1 と proc2 につ
いて考えます。どちらのプロシージャーも、次のように、広域変数 gl_out
を定義しています。
CREATE PROCEDURE proc1()
.
.
.
DEFINE GLOBAL gl_out INT DEFAULT 13;
.
.
.
LET gl_out = gl_out + 1;
END PROCEDURE;
CREATE PROCEDURE proc2()
.
.
.
DEFINE GLOBAL gl_out INT DEFAULT 23;
DEFINE tmp INT;
.
.
.
LET tmp = gl_out
.
.
.
END PROCEDURE;
8-44 IBM Informix SQL リファレンス・ガイド
広域変数の宣言
まず、proc1 が呼び出され、gl_out が 13 に設定され、次に 14 に増えます。
その後で proc2 が呼び出されると、gl_out の値がすでに定義済みであるこ
とが分かり、デフォルト値 23 は適用されません。次に、proc2 は、既存の
値 14 を tmp に割り当てます。proc2 が最初に呼び出されたとすれば、
gl_out は 23 に設定されたはずであり、また 23 が tmp に割り当てられたは
ずです。後で proc1 を呼び出しても、デフォルト値 13 は適用されません。
デフォルト値の指定
リテラル値または NULL 値 を広域変数のデフォルト値として指定すること
ができます。また、SQL 関数呼び出しを使用してデフォルト値を指定する
こともできます。次のプロシージャーは、SITENAME 関数を使用してデ
フォルト値を指定しています。このプロシージャーは、BYTE 広域変数も指
定しています。
CREATE PROCEDURE gl_def()
DEFINE GLOBAL gl_site CHAR(18) DEFAULT SITENAME;
DEFINE GLOBAL gl_byte REFERENCES BYTE DEFAULT NULL;
.
.
.
END PROCEDURE
SITENAME または DBSERVERNAME
SITENAME または DBSERVERNAME によって戻された値をデフォルトとして
使用する場合は、変数を少なくとも 18 文字の CHAR または VARCHAR 値に
しなければなりません。
USER
USER をデフォルトとして使用する場合は、変数を少なくとも 8 文字の
CHAR または VARCHAR 値にしなければなりません。
ストアード・プロシージャーおよび SPL
8-45
広域変数の宣言
CURRENT
CURRENT をデフォルトとして使用する場合は、変数を DATETIME 値にしな
ければなりません。変数が YEAR TO FRACTION キーワードで修飾されてい
る場合は、修飾子のない CURRENT を使用することができます。変数が他の
修飾子のセットを使用する場合は、CURRENT をデフォルト値として使用す
るときに同じ修飾子を提供する必要があります。たとえば、次の DEFINE
文は、修飾子を持つ DATETIME 値を定義し、一致する修飾子を持つ
CURRENT を使用しています。
DEFINE GLOBAL d_var DATETIME YEAR TO MONTH
DEFAULT CURRENT YEAR TO MONTH;
TODAY
TODAY をデフォルトとして使用する場合は、変数を DATE 値にしなければ
なりません。
TEXT および BYTE
TEXT または BYTE 変数に使用できるデフォルト値は NULL だけです。たと
えば、次のプロシージャーは TEXT 型の l_blob 広域変数呼び出しを定義し
ます。
CREATE PROCEDURE use_text()
DEFINE i INT;
DEFINE GLOBAL l_blob REFERENCES TEXT DEFAULT NULL;
END PROCEDURE
広域変数の宣言
非広域 ( 局所 ) 変数では、デフォルトを使用できません。次の例は、代表的
な局所変数の定義を示しています。
CREATE PROCEDURE def_ex()
DEFINE i INT;
DEFINE word CHAR(15);
DEFINE b_day DATE;
DEFINE c_name LIKE customer.fname;
DEFINE b_text REFERENCES TEXT ;
END PROCEDURE
8-46 IBM Informix SQL リファレンス・ガイド
広域変数の宣言
LIKE 列の変数の宣言
LIKE 節を使用する場合、< 変数名 > は、< 表 > の < 列 > の型と同じ型とし
て定義されます。LIKE データベース列として定義された変数の型は実行時
に解決されます。したがって、< 列 > と < 表 > は、コンパイル時になくて
も構いません。
PROCEDURE 型としての変数の宣言
PROCEDURE 型は、現行の範囲で、< 変数名 > がユーザー定義のプロシー
ジャー呼び出しであり、SQL 関数呼び出しでも、システム関数呼び出しで
もないことを示します。たとえば、次の文は、length をプロシージャーと
して定義し、SQL LENGTH 関数としては定義していません。このため、文ブ
ロックの範囲内で SQL LENGTH 関数を使用することはできません。このよ
うな定義を使用するのは、次の例に示されているように、length の名前を
持つプロシージャーを作成してから、それを定義して他のプロシージャー
で使用する場合です。
DEFINE length PROCEDURE;
.
.
.
LET x = length (a,b,c)
集計関数 (SUM、MAX、MIN、AVG、COUNT) に類似した名前を持つプロシー
ジャー、または extend の名前を持つプロシージャーを作成する場合は、そ
のプロシージャー名を所有者名で修飾してください。
BYTE および TEXT データの変数の宣言
REFERENCES キーワードは、< 変数名 > が BYTE または TEXT 値ではなく、
BYTE または TEXT 値を指すポインターであることを示します。この変数は、
それ自体にデータが含まれているように使用します。
次の例は、BYTE 局所変数を定義します。
CREATE PROCEDURE use_blob()
DEFINE i INT;
DEFINE l_blob REFERENCES BYTE;
END PROCEDURE --use_blob
ストアード・プロシージャーおよび SPL
8-47
広域変数の宣言
TEXT または BYTE 型の変数をプロシージャーに渡すと、データがデータ
ベース・サーバーに渡され、ルート DB 領域に格納されます。ユーザーは、
そのデータが入っているファイルの格納場所や名前を知っている必要はあ
りません。BYTE または TEXT 操作で必要になるのは、プロシージャーに定
義した BYTE または TEXT 変数の名前だけです。
8-48 IBM Informix SQL リファレンス・ガイド
EXIT
EXIT
目的
EXIT 文は、FOR、FOREACH、または WHILE ループの実行を停止するために
使用します。
構文
FOR
EXIT
;
WHILE
FOREACH
使用法
EXIT 文は、指定された型 (WHILE、FOR、または FOREACH) の最深部ループ
を終了させます。実行は、ループの外部の最初の文から再開されます。
EXIT 文が指定のループを検出できなければ、この文は失敗します。
すべてのループの外部で使用すると、EXIT 文はエラーを生成します。
次の例では、EXIT FOR 文が使用されます。FOR ループでは、j が 6 になった
ときに、WHILE ループの IF 条件 i = 5 が真になります。FOR ループの実行が
停止し、実行は、FOR ループ外部の次の文、この場合は、END PROCEDURE
文から続行されます。したがってこの例では、j が 6 と等しくなったときに
プロシージャーが終了します。
CREATE PROCEDURE ex_cont_ex()
DEFINE i,s,j, INT;
FOR j = 1 TO 20
IF j > 10 THEN
CONTINUE FOR;
END IF
LET i,s = j,0;
WHILE i > 0
LET i = i -1;
ストアード・プロシージャーおよび SPL
8-49
使用法
IF i = 5 THEN
EXIT FOR;
END IF
END WHILE
END FOR
END PROCEDURE
8-50 IBM Informix SQL リファレンス・ガイド
FOR
FOR
目的
FOR 文は、ループの終了を保証したい場合に制御 ( 確定 ) ループを開始する
ために使用します。FOR 文は、式または範囲演算子を使用して、ループの
有限反復回数を設定します。
構文
,
FOR
< 変数名 >
IN
(
< 左式 >
< 右式 >
TO
)
文
ブロック
7-64 ページ
END
FOR
;
< インクリ
メント式 >
STEP
,
<式>
=
< 左式 >
< 右式 >
TO
STEP
< インクリ
メント式 >
<式>
数値または文字値です。< 式 > のデータ型は < 変数名 > の
データ型と一致していなければなりません。SELECT 文の出
力を < 式 > として使用することができます。
< インクリ
メント式 >
変数名をインクリメントさせる正または負の量。インクリメ
ント式をゼロに評価することはできません。
ストアード・プロシージャーおよび SPL
8-51
使用法
< 左式 >
ある範囲の先頭の式です。左式は < 変数名 > のデータ型と一
致していなければなりません。
< 右式 >
ある範囲の末尾の式です。
< 変数名 >
すでに定義されていて、この文ブロックの中で有効な変数で
す。
使用法
すべての式を計算してから、FOR 文の実行が開始されます。1 つ以上の式が
変数で、それらの値がループ中に変更されても、その変更はループの反復
には影響を与えません。
FOR ループが終了するのは、< 変数名 > が、式リストまたは範囲の各エレ
メントの値を連続して受け取ったとき、または EXIT FOR 文を検出したとき
です。
FOR 文の本体内の割り当てで、< 変数名 > を修正しようとすると、エラー
が生成されます。
TO キーワードの使用による範囲の定義
TO キーワードは範囲演算子を暗黙指定します。つまり、範囲は < 左式 > と
< 右式 > によって定義され、インクリメントの数は、STEP < インクリメン
ト式 > オプションで暗黙的に設定されます。TO キーワードを使用する場合
は、< 変数 > が INT または SMALLINT データ型でなければなりません。次
の例は、2 つの同等な FOR 文を示しています。どちらも TO キーワードを使
用して範囲を定義します。最初の文は IN キーワードを使用し、2 番目の文
は等号 (=) を使用しています。どちらの文もループを 5 回実行させます。
FOR index_var IN (12 to 21 STEP 2)
-- statement block
END FOR
FOR index_var = 12 TO 21 STEP 2
-- statement block
END FOR
8-52 IBM Informix SQL リファレンス・ガイド
使用法
STEP オプションを省略すると、< 右式 > が < 左式 > より小さい場合に、<
インクリメント式 > に -1 の値が与えられ、< 右式 > が < 左式 > より大き
い場合に、+1 の値が与えられます。< インクリメント式 > を指定する場合
は、< 右式 > が < 左式 > より小さければ、その値は負であり、< 右式 > が
< 左式 > より大きければ、その値は正でなければなりません。次の例の 2
つの文は同等です。最初の文では、STEP インクリメントが明示的に指定さ
れています。2 番目の文では、STEP インクリメントが暗黙的に 1 になって
います。
FOR index IN (12 to 21 STEP 1)
-- statement block
END FOR
FOR index = 12 TO 21
-- statement block
END FOR
< 変数名 > の値は、< 左式 > の値に初期化されます。後続の反復では、<
インクリメント式 > が < 変数名 > の値に追加され、< 変数名 > の値がまだ
< 左式 > と < 右式 > の間にあるかどうかを判別するための検査が行われま
す。両者の間にある場合は、次の反復が行われます。そうでない場合は、
ループが終了するか、または、他の範囲が指定されている場合は、変数が、
次の範囲の最初のエレメントの値を取ります。
単一の FOR 文における複数範囲の指定
次の例は、各方向ごとに異なるインクリメント値を使用して、ループを前
方および後方にトラバースする文を示しています。
FOR index_var IN (15 to 21 STEP 2, 21 to 15 STEP -3)
-- statement body
END FOR
範囲としての式リストの使用
< 変数名 > の値は、指定された最初の < 式 > の値に初期化されます。後続
の反復では、< 変数名 > は、次の < 式 > の値を取ります。リストの最後の
式を使用すると、ループは停止します。
IN リストで範囲演算子が使用されていない限り、IN リストの式は数値に限
定されません。次の例は、文字式リストを使用しています。
FOR c IN ("hello", (SELECT name FROM t), "world", v1, v2)
INSERT INTO t VALUES (c);
END FOR
ストアード・プロシージャーおよび SPL
8-53
使用法
次の FOR 文は、数値式リストの使用を示しています。
FOR index IN (15,16,17,18,19,20,21)
-- statement block
END FOR
同一 FOR 文内での範囲と式リストの混合
< 変数名 > が INT または SMALLINT 値であれば、範囲と式リストを同一
FOR 文内で混合することができます。次の例は、整変数を使用した混合を
示しています。式リストの値には、SELECT 文からの戻り値、整変数と定数
の合計、p_get_int というプロシージャーから戻された値、および整定数が
含まれています。
CREATE PROCEDURE for_ex ()
DEFINE i, j INT;
LET j = 10;
FOR i IN (1 TO 20, (SELECT c1 FROM tab WHERE id = 1),
j+20 to j-20, p_get_int(99),98,90 to 80 step -2)
INSERT INTO tab VALUES (i);
END FOR
END PROCEDURE
8-54 IBM Informix SQL リファレンス・ガイド
FOREACH
FOREACH
目的
FOREACH ループは、複数の行を選択したり操作したりするために使用しま
す。
構文
SELECT...INTO
文
8-57 ページ
FOREACH
< カー
ソル
名>
文ブロック
7-64
ページ
END
FOREACH
;
WITH HOLD
FOR
WITH HOLD
EXECUTE
PROCEDURE
プロシー
ジャー名
7-429
ページ
(
)
,
INTO
< 変数
名>
,
< 変数
名>
SPL 式 ( サブ
セット )
8-58 ページ
=
< カーソル名 > SELECT... INTO 文の名前として指定する識別子です。
< 変数名 >
プロシージャー変数の名前です。
ストアード・プロシージャーおよび SPL
8-55
使用法
使用法
FOREACH ループは、プロシージャー的にはカーソルの使用と同じです。
FOREACH 文を実行すると、データベース・サーバーは次のアクションを取
ります。
1.
カーソルを宣言して、暗黙的にオープンする。
2.
FOREACH ループ内に含まれている照会から最初の行を取得するか、
または呼び出し先プロシージャーから最初の値のセットを取得す
る。
3.
変数リストの各変数に、SELECT 文または呼び出し先プロシー
ジャーによって作成されたアクティブ・セットの対応値を割り当て
る。
4.
文ブロックを実行する。
5.
各反復ごとに SELECT 文または呼び出し先プロシージャーから次の
行を取り出す。ステップ 3 を繰り返す。
6.
SELECT 文または呼び出し先プロシージャーを満足する行がなくな
ると、ループを終了する。ループが終了したら、暗黙的なカーソル
をクローズする。
文ブロックには追加の FOREACH 文を含めることができるので、カーソルを
入れ子にすることができます。入れ子にできるカーソルの数には制限はあ
りません。
複数の行または値のセットを戻すプロシージャーは、カーソル的プロシー
ジャー と呼ばれます。
次のプロシージャーは、FOREACH 文の 3 つの型、つまり、SELECT...INTO 節
を持つもの、明示的に指定されたカーソルを持つもの、およびプロシー
ジャー呼び出しを持つものを示しています。
8-56 IBM Informix SQL リファレンス・ガイド
SELECT...INTO 文の使用
CREATE PROCEDURE foreach_ex()
DEFINE i, j INT;
FOREACH SELECT c1 INTO i FROM tab order by 1
INSERT INTO tab2 VALUES (i);
END FOREACH
FOREACH cur1 FOR SELECT c2, c3 INTO i, j FROM tab
IF j > 100 THEN
DELETE FROM tab WHERE CURRENT OF cur1;
CONTINUE FOREACH;
END IF
UPDATE tab SET c2 = c2 + 10 WHERE CURRENT OF cur1;
END FOREACH
FOREACH EXECUTE PROCEDURE bar(10,20) INTO i
INSERT INTO tab2 VALUES (i);
END FOREACH
END PROCEDURE -- foreach_ex
SELECT カーソルは、以下のいずれかの条件が発生するとクローズされま
す。
!
カーソルによって行が戻されなくなった。
!
カーソルが HOLD 仕様を持たない SELECT カーソルであり、
COMMIT または ROLLBACK 文を使用してトランザクションを完了
した。
!
制御を FOREACH 文の外部に渡す EXIT 文が実行された。
!
FOREACH 文の本体の中でトラップされない例外が発生した。( 8-66
ページの ON EXCEPTION 文を参照。)
!
このカーソル的プロシージャー (FOREACH ループ内の ) を実行して
いる呼び出し側プロシージャーのカーソルが、何らかの理由でク
ローズされた。
SELECT...INTO 文の使用
FOREACH 文の中の SELECT 文には INTO 節がインクルードされていなけれ
ばなりません。UNION および ORDER BY 節もインクルードすることができ
ます。INTO TEMP 節を使用することはできません。SELECT 文の構文は、7263 ページに示されています。
変数リストの各変数の型とカウント数は、SELECT...INTO 文によって戻され
たそれぞれの値と一致しなければなりません。
ストアード・プロシージャーおよび SPL
8-57
FOREACH ループでのプロシージャーの呼び出し
HOLD カーソル
WITH HOLD キーワードは、トランザクションがクローズ ( コミットまたは
ロールバック ) されても、カーソルをオープン状態にしておくことを指定
します。
カーソル名で示された行の更新または削除
< カーソル名 > の現在行を更新または削除するには、WHERE CURRENT OF
< カーソル名 > 節を使用します。
FOREACH ループでのプロシージャーの呼び出し
呼び出し先プロシージャーはゼロまたはそれ以上の値を戻すことができま
す。
変数リストの各変数の型とカウント数は、呼び出し先プロシージャーに
よって戻されたそれぞれの値と一致しなければなりません。
プロシージャー・パラメーターで使用できる式のサブセット
任意の SPL 式をプロシージャー・パラメーターとして使用することができ
ます。副照会またはプロシージャー呼び出しを使用する場合は、その副照
会またはプロシージャーは、該当する型とサイズの単一値を戻さなければ
なりません。SPL 式の構文について詳しくは、8-23 ページを参照してくだ
さい。
8-58 IBM Informix SQL リファレンス・ガイド
IF
IF
目的
IF 文は、プロシージャー内に分岐を作成するために使用します。
構文
IF
条件
7-350
ページ
THEN
ELIF
条件
7-350
ページ
END IF
;
IF 文リスト
8-61 ページ
THEN
IF 文リスト
8-61 ページ
ELSE
IF 文リスト
8-61 ページ
使用法
IF 節で指定した条件が評価されます。結果が真であれば、THEN キーワード
の後の文が実行されます。結果が偽で、ELIF 節がある場合は、ELIF 節の後
の文が実行されます。ELIF 節がないか、または ELIF 節の条件が真でなけれ
ば、ELIF キーワードの後の文が実行されます。
次の例では、プロシージャーが、ELIF 節と ELSE 節の両方を持つ IF 文を使
用しています。IF 文は、2 つのストリングを比較し、1 を表示して、アル
ファベット順で最初のストリングが 2 番目のストリングの前に来ることを
示すか、または -1 を表示して、アルファベット順で最初のストリングが 2
番目のストリングの後に来ることを示します。両方のストリングが同じで
あれば、ゼロが戻されます。
ストアード・プロシージャーおよび SPL
8-59
使用法
CREATE PROCEDURE str_compare (str1 CHAR(20), str2 CHAR(20))
RETURNING INT;
DEFINE result INT;
IF str1 > str2 then
result =1;
ELIF str2 > str1 THEN
result = -1;
ELSE
result = 0;
END IF
RETURN result;
END PROCEDURE -- str_compare
ELIF 節
ELIF 節は、評価する 1 つ以上の追加条件を指定するために使用します。
ELIF 節を指定し、IF 条件が偽であれば、ELIF 条件が評価されます。ELIF 条
件が真であれば、ELIF 節の後の文が実行されます。
ELSE 節
ELSE 節が実行されるのは、前の真の条件が IF 節またはどの ELIF 節にも含
まれていない場合です。
IF 文の条件
IF 文の条件は、WHILE 文の条件の場合と同様に評価されます。
条件に含まれているすべての式は NULL に評価され、この条件は自動的に
真でなくなります。特に、
1.
式 x が NULL に評価されます。したがって、x は当然真でなくなり
ます。さらに、not (x) も真ではありません。
2.
x が真になる演算子は IS NULL 演算子のみです。つまり、x IS NULL
は真であり、x IS NOT NULL は真ではありません。
条件内の式が UNKNOWN 値を持っていれば ( 未初期化変数を使用したた
め )、即時エラーになります。文は終了し、例外が発生します。
8-60 IBM Informix SQL リファレンス・ガイド
使用法
IF 文リスト
BEGIN
文ブロック
7-64 ページ
END
CALL 文
8-37 ページ
CONTINUE 文
8-40 ページ
EXIT 文
8-49 ページ
FOR 文
8-51 ページ
FOREACH 文
8-55 ページ
IF 文
8-59 ページ
LET 文
8-63 ページ
RAISE EXCEPTION
文
8-72 ページ
RETURN 文
8-74 ページ
SYSTEM 文
8-77 ページ
TRACE 文
8-79 ページ
WHILE 文
8-83 ページ
SQL 文
ストアード・プロシージャーおよび SPL
8-61
使用法
IF 文で使用できる SQL 文のサブセット
以下のリストに示された文を除く、文ブロックの任意の SQL 文を使用する
ことができます。
!
CHECK TABLE
!
CLOSE DATABASE
!
CREATE DATABASE
!
CREATE PROCEDURE
!
DATABASE
!
INFO
!
LOAD
!
OUTPUT
!
REPAIR TABLE
!
ROLLFORWARD DATABASE
!
START DATABASE
!
UNLOAD
SELECT 文を使用できるのは、INTO TEMP 節を使用して、SELECT 文の結果
を一時表に挿入する場合だけです。
8-62 IBM Informix SQL リファレンス・ガイド
LET
LET
目的
LET 文は、値を変数に割り当てるために使用します。また、LET 文を使用
して、プロシージャー内でプロシージャーを呼び出し、戻り値を変数に割
り当てることもできます。
構文
,
,
LET
< 変数名 >
,
=
プロシー
ジャー名
7-429 ページ
(
< 呼び出し
先変数 >
=
SPL
式
8-23 ページ
)
;
,
SPL
式
8-23 ページ
< 呼び出し先 呼び出し先プロシージャーのプロシージャー変数です。
変数 >
< 変数名 >
プロシージャー変数です。
使用法
値を単一変数に割り当てる場合、それは単純代入 と呼ばれます。値を複数
の変数に割り当てる場合、それは複合代入 と呼ばれます。
実行時には、SPL 式 の値が最初に計算されます。可能な場合は、計算結果
の値が < 変数名 > の型に変換されて、割り当てが行われます。変換が可能
でなければ、エラーが生成され、< 変数名 > の値が未定義になります。
ストアード・プロシージャーおよび SPL
8-63
使用法
複合代入は複数の式を複数の変数に割り当てます。式リストの 式 のカウン
ト数と型は、変数リストの対応する変数のカウント数と型に一致していな
ければなりません。
次の例は、値をプロシージャー変数に割り当てるいくつかの LET 文を示し
ています。
LET
LET
LET
LET
LET
LET
a
= c + d ;
a,b = c,d ;
expire_dt = end_dt + 7 UNITS DAY;
name = "Brunhilda";
sname = DBSERVERNAME;
this_day = TODAY;
複数の値を使用して他の値に作用させることはできません。たとえば、次
の文は無効です。
LET a,b = (c,d) + (10,15); -- ILLEGAL EXPRESSION
LET 文での SELECT 文の使用
LET 文で SELECT 文を使用することは、プロシージャーで SELECT...INTO <
プロシージャー変数 > 文を使用することと同じです。SELECT 文を使用し
て、= 演算子の左側の 1 つ以上の値に値を割り当てることができます。次の
例は、LET 文で SELECT 文を使用しています。
LET a,b = (SELECT c1,c2 FROM t WHERE id = 1);
LET a,b,c = (SELECT c1,c2 FROM t WHERE id = 1), 15;
SELECT 文を使用して、複数の値を他の値に作用させることはできません。
たとえば、次のコードは無効です。
LET a,b = (SELECT c1,c2 FROM t) + (10,15); -- ILLEGAL CODE
LET 文は SELECT...INTO 文と同等であるため、このプロシージャーの次の 2
つの文は同じ結果を出します。
CREATE PROCEDURE proof()
DEFINE a, b, c, d INT;
LET a,b = (SELECT c1,c2 FROM t WHERE id = 1);
SELECT c1, c2 INTO c, d FROM t WHERE id = 1
END PROCEDURE
SELECT 文が複数の行を戻す場合は、SELECT 文を FOREACH ループで囲む必
要があります。
8-64 IBM Informix SQL リファレンス・ガイド
使用法
LET 文でのプロシージャーの呼び出し
LET 文でプロシージャーを呼び出し、戻り値を変数に割り当てることがで
きます。LET 文にプロシージャー呼び出しがインクルードされていると、
この文は指定されたプロシージャーを起動します。プロシージャーが引数
のデフォルト値を持っていない場合は、LET 文のプロシージャーに必要な
すべての引数を指定してください。
< 変数名 > = 構文を呼び出し先プロシージャーのいずれかのパラメーター
に使用する場合は、それをすべてのパラメーターに使用する必要がありま
す。
< 変数名 > は、プロシージャー呼び出しからの戻り値を受け取ります。プ
ロシージャーは、複数の値を < 変数名 > のリストに戻すことができます。
複数の行を戻すプロシージャーは FOREACH ループで囲む必要があります。
次の例は、プロシージャー呼び出しを含む 2 つの有効な LET 文を示してい
ます。3 番目の LET 文は無効です。なぜならば、この文は 2 つのプロシー
ジャーの出力を加算して、2 つの変数 a および b に割り当てようとするから
です。この LET 文は、簡単に 2 つの有効な LET 文に分割できます。
LET a, b, c = proc1(name = "grok", age = 17);
LET a, b, c = 7, proc ('orange', 'green');
LET a, b = proc1() + proc2(); -- ILLEGAL CODE
ストアード・プロシージャーおよび SPL
8-65
ON EXCEPTION
ON EXCEPTION
目的
ON EXCEPTION 文は、特定のエラーまたはエラーのセットに対して取るアク
ションを指定するために使用します。
構文
文
ブロック
7-64 ページ
ON EXCEPTION
,
IN
SET
<SQL
エラー
変数 >
(
END EXCEPTION
;
< エラー
番号 >
)
WITH RESUME
,
<ISAM
エラー
変数 >
,
< エラー・
データ
変数 >
< エラー・
データ
変数 >
SQL エラーによって戻されたストリングが入っているリテラ
ル・ストリングまたは変数です。
< エラー
番号 >
SQL エラー番号、または RAISE EXCEPTION 文によって作成さ
れたエラー番号で、トラップの対象になります。
<ISAM エラー 発生した例外の ISAM エラー番号を受け取る整変数です。
変数 >
<SQL エラー 発生した例外の SQL エラー番号を受け取る整変数です。
変数 >
8-66 IBM Informix SQL リファレンス・ガイド
使用法
使用法
ON EXCEPTION 文は、RAISE EXCEPTION 文と組み合わさって、SPL のための
エラー・トラッピングと復旧メカニズムを提供します。ON EXCEPTION 文
は、プロシージャー実行時にトラップするエラーのリストを定義し、ト
ラップをトリガーするときに取るアクション ( 文ブロック内で ) を指定しま
す。IN 節を省略すると、すべてのエラーがトラップされます。
1 つの文ブロック内で複数の ON EXCEPTION 文を使用することができます。
ON EXCEPTION 文の範囲は、ON EXCEPTION 文の後の文ブロック、その文ブ
ロック内に入れ子にされたすべての文ブロック、および ON EXCEPTION 文
の後のすべての文ブロックです。
トラップする例外は、システム定義例外の場合も、ユーザー定義例外の場
合もあります。
例外をトラップすると、エラー状態がクリアされます。
ISAM エラーを受け取る変数を指定し、付随する ISAM エラーが発生しな
かった場合は、その変数にゼロが戻されます。戻されたエラー・テキスト
を受け取る変数を指定し、それがなかった場合は、その変数に空のストリ
ングが入れられます。
ストアード・プロシージャーおよび SPL
8-67
使用法
ON EXCEPTION 文の配置
ON EXCEPTION 文は宣言文であり、実行可能文ではありません。このため、
プロシージャーのすべての実行可能文の前と、すべての DEFINE 文の後で、
ON EXCEPTION 文を使用する必要があります。
次の例は、ON EXCEPTION 文の正しい配置を示しています。ON EXCEPTION
文は、DEFINE 文の後で、かつプロシージャーの本体の前で使用されます。
このプロシージャーは、値のセットを表に挿入します。表がない場合は、
表が作成され、値が挿入されます。この挿入の後、プロシージャーは、表
内の行の総数も戻します。
CREATE PROCEDURE add_salesperson(last CHAR(15),
first CHAR(15))
RETURNING INT;
DEFINE x INT;
ON EXCEPTION IN (-206) -- If no table was found, create one
CREATE TABLE emp_list
(lname CHAR(15),fname CHAR(15), tele CHAR(12);
INSERT INTO emp_list VALUES -- and insert values
(last, first, "800-555-1234");
END EXCEPTION WITH RESUME
INSERT INTO emp_list VALUES (last, first, "800-555-1234")
LET x = SELECT count(*) FROM emp_list;
RETURN x;
END PROCEDURE;
エラーが発生すると、データベース・サーバーは、特定のエラー・コード
をトラップする ON EXCEPTION 文の最後の宣言を検索します。これは、IN
節にエラー番号を持つ ON EXCEPTION 文の場合もあれば、IN 節を持たない
ON EXCEPTION 文の場合もあります。関連のある ON EXCEPTION 文がなけれ
ば、エラー・コードが呼び出し側 ( プロシージャー、アプリケーション、
または対話型ユーザー ) に戻され、実行が打ち切られます。
8-68 IBM Informix SQL リファレンス・ガイド
IN 節を使用した特定の例外のトラップ
次の例は、同じエラー番号を持つ 2 つの ON EXCEPTION 文を使用しますの
で、エラー番号 691 を 2 つの異なるレベルのネスティングでトラップする
ことができます。
CREATE PROCEDURE delete_cust (cnum INT)
ON EXCEPTION IN (-691)
-- children exist
BEGIN -- Begin-end is necessary so that other DELETEs
-- don't get caught in here.
ON EXCEPTION IN (-691)
DELETE FROM another_child WHERE num = cnum;
DELETE FROM orders WHERE customer_num = cnum;
END EXCEPTION -- for 691
DELETE FROM orders WHERE customer_num = cnum;
END
DELETE FROM cust_calls WHERE customer_num = cnum;
DELETE FROM customer WHERE customer_num = cnum;
END EXCEPTION
DELETE FROM customer WHERE customer_num = cnum;
END PROCEDURE
IN 節を使用した特定の例外のトラップ
トラップがトリガーされるのは、SQL エラー・コードまたは ISAM エラー・
コードのいずれかが、< エラー番号 > のリストの例外コードと一致した場
合です。リストの検索は、左から開始され、最初の一致で停止します。
IN 節を持たない ON EXCEPTION 文と、
IN 節を持つ 1 つ以上の ON EXCEPTION
文の組み合わせを使用して、デフォルトのトラッピング状態をセット アッ
プすることができます。たとえば、以下の例の文シーケンスは、次のよう
な最終結果を得ます。つまり、「エラーのテスト。エラー -210、-211、また
は -212 の場合は、アクション A を実行してください。-300 の場合は、アク
ション B を実行してください。その他のエラーの場合は、アクション C を
実行してください。」
ストアード・プロシージャーおよび SPL
8-69
SET 節でのエラー情報の受け取り
CREATE PROCEDURE ex_test ()
.
.
.
ON EXCEPTION
SET error_num
-- action C
END EXCEPTION
ON EXCEPTION IN (-300)
-- action B
END EXCEPTION
ON EXCEPTION IN (-210, -211, -212)
SET error_num
-- action A
END EXCEPTION
.
.
.
SET 節でのエラー情報の受け取り
SET 節を使用している場合に、例外が発生すると、SQL エラー番号と ( オプ
ションで ) ISAM コードが、SET 節で指定された変数に挿入されます。
< エラー・データ変数 > を指定した場合は、データベース・サーバーに
よって戻されたすべてのエラー・テキストが < エラー・データ変数 > に入
れられます。エラー・テキストには、問題の表や列名などの情報が含まれ
ます。
WITH RESUME キーワードを持つプロシージャーの強制
続行
8-68 ページの例は、WITH RESUME キーワードを使用して、ON EXCEPTION
文の文ブロックの後で、実行を LET x = SELECT COUNT(*) FROM emp_list 文
( エラーを起こした行の後の行 ) から続行することを示しています。このプ
ロシージャーの場合、これは、エラーが発生しても、販売員名のカウント
数が表示されることを意味します。
8-70 IBM Informix SQL リファレンス・ガイド
WITH RESUME キーワードを持つプロシージャーの強制続行
例外発生後のプロシージャー実行の継続
WITH RESUME キーワードを ON EXCEPTION 文にインクルードしていない
と、例外が発生した後、次に実行される文は、以下のとおり、ON
EXCEPTION 文の配置によって異なります。
!
BEGIN および END キーワードを持つ ON EXCEPTION 文が文ブロック
に含まれている場合は、その BEGIN...END ブロックの後の最初の文
( それがある場合 ) から実行が再開されます。つまり、ON
XCEPTION 文の範囲の後から実行が再開されます。
!
ON EXCEPTION 文がループ (FOR、WHILE、FOREACH) に含まれてい
る場合は、ループの残りがスキップされ、ループの次の反復から実
行が再開されます。
!
ON EXCEPTION 文がいずれの文またはブロックにも含まれておら
ず、プロシージャー自体にのみ含まれている場合は、引数を指定し
ていない RETURN 文を実行して、プロシージャーが終了します。つ
まり、プロシージャーが正常終了状態を値なしで戻します。
ON EXCEPTION 文ブロック内でのエラー
無限ループを発生させないようにするために、エラー・トラップの文ブ
ロックを実行しているときにエラーが発生した場合、別のトラップの検索
には現行のトラップはインクルードされていません。
ストアード・プロシージャーおよび SPL
8-71
RAISE EXCEPTION
RAISE EXCEPTION
目的
RAISE EXCEPTION 文は、エラーの生成をシミュレートするために使用しま
す。
構文
RAISE EXCEPTION
;
<SQL
エラー >
,
<ISAM
エラー >
,
< エラー・
テキスト >
< エラー・
テキスト >
SQL エラーによって戻されたストリングが含まれている、
引用符付きストリングまたは変数です。
<ISAM エラー > 有効な ISAM エラー番号である整数値に評価される、SPL 式
です。
<SQL エラー > 有効な SQL エラー番号である整数値に評価される、SPL 式
です。
使用法
RAISE EXCEPTION 文を使用してエラーをシミュレートします。生成された
エラーは、ON EXCEPTION 文によってトラップすることができます。
<ISAM エラー > 式を省略すると、例外が発生したときに、ISAM エラー・
コードがゼロに設定されます。( エラー・テキスト・フィールドを使用した
い場合に、ISAM エラー番号部分を指定していないと、<ISAM エラー > がゼ
ロに設定されることがあります。) たとえば、次の文はエラー番号 99999 を
発生し、指定したテキストを戻します。
RAISE EXCEPTION -99999, 0, "You broke the rules";
8-72 IBM Informix SQL リファレンス・ガイド
使用法
発生する例外は、システム定義例外の場合も、ユーザー定義例外の場合も
あります。
次の例では、a の値が負であれば、例外 99999 が発生します。例外 99999 を
トラップする ON EXCEPTION 文がこのコードのどこかに含まれているべき
です。
FOREACH SELECT c1 INTO a FROM t
IF a < 0 THEN
RAISE EXCEPTION 99999-- emergency exit
END IF
END FOREACH
例外の範囲と互換性についての詳細は、ON EXCEPTION 文を参照してくださ
い。
ストアード・プロシージャーおよび SPL
8-73
RETURN
RETURN
目的
RETURN 文は、プロシージャーが呼び出し側モジュールに戻す値を指定す
るために使用します。
構文
;
RETURN
,
SPL
式
8-23 ページ
WITH RESUME
使用法
RETURN 文は、ゼロまたはそれ以上の値を呼び出し側プロセスに戻します。
プロシージャーのすべての RETURN 文は、そのプロシージャーを定義した
CREATE PROCEDURE 文の RETURNING 節と整合していなければなりません。
RETURN 文 ( 存在している場合 ) の値の数と型が、CREATE PROCEDURE 文の
RETURNING 節にリストされている数と型に一致していなければなりませ
ん。1 つ以上の値を RETURNING 節に指定している場合でも、値を戻さない
ようにすることができます。式を持たない RETURN 文を使用しているが、
呼び出し側のプロシージャーまたはプログラムが 1 つ以上の戻り値を必要
とする場合、その指定は、必要な数の NULL 値を呼び出し側プログラムに
戻すことと同じです。
8-74 IBM Informix SQL リファレンス・ガイド
WITH RESUME キーワード
次の例では、プロシージャーに 2 つの受け入れ可能な RETURN 文がインク
ルードされています。このプロシージャーを呼び出すプログラムは、値が
戻されていないかどうかを検査し、それに応じたアクションを取る必要が
あります。
CREATE PROCEDURE two_returns (stockno INT)
RETURNING CHAR (15);
DEFINE des CHAR(15);
ON EXCEPTION (-272) -- if user doesn’t have select privs...
RETURN;
-- return no values.
END EXCEPTION;
SELECT DISTINCT descript INTO des FROM stock
WHERE stocknum = stockno;
RETURN des;
END PROCEDURE
式を持たない RETURN 文は、値を戻さないで終了します。
WITH RESUME キーワード
RETURN 文を実行した後で WITH RESUME キーワードを使用すると、このプ
ロシージャーの次回の呼び出し ( 次の FETCH または FOREACH 文で ) は、
RETURN 文の次の文から開始されます。プロシージャーが RETURN WITH
RESUME 文を実行する場合は、呼び出し側のプロシージャーまたはプログ
ラムの FOREACH ループからそれを呼び出す必要があります。
ESQL
プロシージャーが RETURN WITH RESUME 文を実行する場合は、埋め込み言
語で書かれたアプリケーションの FETCH 文を使用して、それを呼び出すこ
とができます。♦
次の例は、他のプロシージャーから呼び出すことができるカーソル的プロ
シージャーを示しています。RETURN i WITH RESUME 文が各値を呼び出し側
プロシージャーに戻した後、次回に sequence を呼び出すと、sequence の次
の行が実行されます。backwards が 0 と等しければ、呼び出し側プロシー
ジャーには値が戻されず、sequence の実行は停止します。
ストアード・プロシージャーおよび SPL
8-75
WITH RESUME キーワード
CREATE PROCEDURE sequence (limit INT, backwards INT)
RETURNING INT;
DEFINE i INT;
FOR i IN (1 TO limit)
RETURN i WITH RESUME;
END FOR
IF backwards = 0 THEN
RETURN;
END IF
FOR i IN (limit TO 1)
RETURN i WITH RESUME;
END IF
END PROCEDURE -- sequence
8-76 IBM Informix SQL リファレンス・ガイド
SYSTEM
SYSTEM
目的
SYSTEM 文は、オペレーティング・システム・コマンドをプロシージャー
内から実行できるようにするために使用します。
構文
SYSTEM
"
< 文字式 >
"
;
< 文字変数 >
< 文字式 >
ユーザー実行可能オペレーティング・システム・コマンドで
ある任意の式です。
< 文字
変数 >
有効なオペレーティング・システム・コマンドが含まれてい
る変数です。
使用法
提供された < 式 > が文字式でなければ、< 式 > が文字式に変換されてか
ら、オペレーティング・システム・コマンドが作成されます。完全な文字
式がオペレーティング・システムに渡され、オペレーティング・システ
ム・コマンドとして実行されます。
SYSTEM 文で指定したオペレーティング・システム・コマンドは、バック
グラウンドでは実行できません。データベース・サーバーは、オペレー
ティング・システムがコマンドの実行を完了するのを待って、次のプロ
シージャー文へ進みます。
プロシージャーは、コマンドによって戻された値 ( 複数の場合もある ) を使
用することはできません。
オペレーティング・システム・コマンドが失敗した場合、つまり、オペ
レーティング・システムがコマンドの非ゼロ状態を戻した場合は、例外が
発生し、戻されたオペレーティング・システム状態には、ISAM エラー・
コードと、該当する SQL エラー・コードが示されます。
ストアード・プロシージャーおよび SPL
8-77
使用法
SYSTEM 文が含まれた DBA アクセス権付きストアード・プロシージャーと
所有者アクセス権付きストアード・プロシージャーの場合、オペレーティ
ング・システム・コマンドは、プロシージャーを実行するユーザーの権限
で実行されます。
次の例は、SYSTEM 文の使用法を示したものです。
CREATE PROCEDURE sensitive_update()
.
.
.
LET mailcall = "mail headhoncho < alert"
-- code that evaluates if operator tries to execute a
certain
-- command, then send email to system administrator
SYSTEM mailcall
.
.
.
END PROCEDURE -- sensitive_update
その他の文の場合と同様に、二重パイプ記号 (||) を使用して、次のように、
式と SYSTEM 文を連結することができます。
CREATE PROCEDURE sensitive_update2()
.
.
.
-- code that evaluates if operator tries to execute a
certain
-- command, then send email to system administrator
SYSTEM "mail -s violation" ||user1 || " " ||
user2 || " < violation_file"
.
.
.
END PROCEDURE
8-78 IBM Informix SQL リファレンス・ガイド
TRACE
TRACE
目的
TRACE 文は、デバッグ出力の生成を制御するために使用します。
構文
ON
TRACE
;
OFF
PROCEDURE
SPL
式
8-23 ページ
使用法
TRACE 文は、SET DEBUG FILE 文によって指定されたファイルに送信する出
力を生成します。
トレースは、次のすべての項目の現行値を出力します。
!
変数
!
プロシージャー引数
!
戻り値
!
SQL エラー・コード
!
ISAM エラー・コード
実行された各 TRACE 文の出力は別々の行に示されます。
出力を入れるための DEBUG ファイルを最初に指定せずに TRACE 文を使用
すると、エラーが生成されます。
ストアード・プロシージャーおよび SPL
8-79
使用法
トレース 状態 は、呼び出し先プロシージャーによって継承されます。つま
り、呼び出し先 プロシージャーは、呼び出し側プロシージャーと同じト
レース状態 (ON、OFF、または PROCEDURE) を取ります。呼び出し先プロ
シージャーは独自のトレース状態を設定することができますが、その状態
は呼び出し側プロシージャーへは戻されません。
STAR
INET
トレース状態は、リモート・データベース・サーバーで実行されるプロ
シージャーによっては継承されません。♦
TRACE ON
ON キーワードを指定すると、すべての文がトレースされます。変数の値
( 式などの ) は、使用する前に出力されます。トレースを ON に切り替える
ことは、プロシージャー呼び出しとプロシージャー本体の文の両方をト
レースすることを意味します。
TRACE OFF
OFF キーワードを指定すると、すべてのトレースがオフに切り替わります。
TRACE PROCEDURE
PROCEDURE キーワードを指定すると、プロシージャー呼び出しと戻り値の
みがトレースされ、プロシージャーの本体はトレースされません。
式の出力
引用符付きストリングまたは式を持つ TRACE 文を使用して、出力ファイル
の値やコメントを表示することができます。式がリテラル式でなければ、
式を評価してから出力ファイルに書き込みます。
先にプロシージャーで TRACE OFF 文を使用した場合でも、式を持つ TRACE
文を使用することができます。ただし、SET DEBUG 文を使用してトレース
出力ファイルを設定しておく必要があります。
8-80 IBM Informix SQL リファレンス・ガイド
使用法
次の例は、式を持つ TRACE 文を使用しています。
CREATE PROCEDURE tracing ()
DEFINE i INT;
BEGIN
ON EXCEPTION IN (1)
END EXCEPTION; -- do nothing
TRACE OFF;
SET DEBUG FILE TO "/tmp/foo.trace";
TRACE "Forloop starts";
FOR i IN (1 TO 1000)
BEGIN
TRACE "FOREACH starts";
FOREACH SELECT...INTO a FROM t
IF <some condition> THEN
RAISE EXCEPTION 1
-- emergency exit
END IF
END FOREACH
-- return some value
END
END FOR
-- do something
END;
END PROCEUDRE
次の例は、追加の TRACE 文を示しています。
CREATE PROCEDURE testproc()
DEFINE i INT;
TRACE OFF;
SET DEBUG FILE TO "/tmp/test.trace";
TRACE 'Entering foo';
TRACE PROCEDURE;
LET i = testtoo();
TRACE ON;
LET i = i + 1;
TRACE OFF;
TRACE 'i+1 = ' || i+1;
TRACE 'Exiting testproc';
SET DEBUG FILE TO "/tmp/test2.trace";
END PROCEDURE;
ストアード・プロシージャーおよび SPL
8-81
トレース出力の表示
トレース出力の表示
トレース出力を見るには、エディターまたはユーティリティーを使用して
ファイルの内容を表示するか、または読み取ります。
8-82 IBM Informix SQL リファレンス・ガイド
WHILE
WHILE
目的
WHILE 文は、プロシージャー内で不確定ループを設定するために使用しま
す。
構文
WHILE
条件
7-350 ページ
文ブロック
7-64 ページ
END WHILE
;
使用法
条件は、ループの開始時に 1 回評価されます。それ以降、条件は、各反復
の開始時に評価されます。文ブロックは、条件が真である限り実行されま
す。ループが終了するのは、条件が真でないと評価されたときです。
条件に含まれているすべての式が NULL と評価された場合は、ユーザーが
明示的に IS NULL 条件をテストしていない限り、条件が自動的に真でなく
なります。
未初期化変数を参照したために、条件内の式に UNKNOWN 値が含まれてい
る場合は、即時エラーになります。この場合は、ループが終了し、例外が
発生します。
CREATE PROCEDURE simp_while()
DEFINE i INT;
DEFINE pf_name CHAR(15);
WHILE EXISTS (SELECT fname INTO pf_name FROM customer
WHERE customer_num > 400)
DELETE FROM customer WHERE id_2 = 2;
END WHILE
LET i = 1;
WHILE i < 10
INSERT INTO tab_2 VALUES (i);
LET i = i +1;
END WHILE;
END PROCEDURE;
ストアード・プロシージャーおよび SPL
8-83
使用法
8-84 IBM Informix SQL リファレンス・ガイド
付録
特記事項
本書は米国 IBM が提供する製品およびサービスについて作成
したものであり、本書に記載の製品、サービス、または機能が
日本においては提供されない場合があります。日本で利用可能
な製品、サービス、および機能については、日本 IBM の営業
担当員にお尋ねください。本書で IBM 製品、プログラム、ま
たはサービスに言及していても、その IBM 製品、プログラム、
またはサービスのみが使用可能であることを意味するものでは
ありません。これらに代えて、IBM の知的所有権を侵害するこ
とのない、機能的に同等の製品、プログラム、またはサービス
を使用することができます。ただし、IBM 以外の製品とプログ
ラムの操作またはサービスの評価および検証は、お客様の責任
で行っていただきます。
IBM は、本書に記載されている内容に関して特許権 ( 特許出願
中のものを含む ) を保有している場合があります。本書の提供
は、お客様にこれらの特許権について実施権を許諾することを
意味するものではありません。実施権についてのお問い合わせ
は、書面にて下記宛先にお送りください。
〒 106-0032 東京都港区六本木 3 -2-31
IBM World Trade Asia Corporation
Licensing
A
以下の保証は、国または地域の法律に沿わない場合は、適用されません。
IBM およびその直接または間接の子会社は、本書を特定物として現存するままの状
態で提供し、商品性の保証、特定目的適合性の保証および法律上の瑕疵担保責任を
含むすべての明示もしくは黙示の保証責任を負わないものとします。国または地
域によっては、法律の強行規定により、保証責任の制限が禁じられる場合、
強行規定の制限を受けるものとします。
本書は定期的に見直され、必要な変更 ( たとえば、技術的に不適切な記述
や誤植など ) は本書の次版に組み込まれます。IBM は予告なしに、随時、
この文書に記載されている製品またはプログラムに対して、改良または変
更を行うことがあります。
本書において IBM 以外の Web サイトに言及している場合がありますが、便
宜のため記載しただけであり、決してそれらの Web サイトを推奨するもの
ではありません。それらの Web サイトにある資料は、この IBM 製品の資料
の一部ではありません。それらの Web サイトは、お客様の責任でご使用く
ださい。
IBM は、お客様が提供するいかなる情報も、お客様に対してなんら義務も
負うことのない、自ら適切と信ずる方法で、使用もしくは配布することが
できるものとします。
本プログラムのライセンス保持者で、(i) 独自に作成したプログラムとその
他のプログラム(本プログラムを含む)との間での情報交換、および (ii) 交
換された情報の相互利用を可能にすることを目的として、本プログラムに
関する情報を必要とする方は、下記に連絡してください。
IBM Corporation
J46A/G4
555 Bailey Avenue
San Jose, CA 95141-1003
U.S.A.
本プログラムに関する上記の情報は、適切な使用条件の下で使用すること
ができますが、有償の場合もあります。
本書で説明されているライセンス・プログラムまたはその他のライセンス
資料は、IBM 所定のプログラム契約の契約条項、IBM プログラムのご使用
条件、またはそれと同等の条項に基づいて、IBM より提供されます。
A-2 IBM Informix SQL リファレンス・ガイド
この文書に含まれるいかなるパフォーマンス・データも、管理環境下で決
定されたものです。そのため、他の操作環境で得られた結果は、異なる可
能性があります。一部の測定が、開発レベルのシステムで行われた可能性
がありますが、その測定値が、一般に利用可能なシステムのものと同じで
ある保証はありません。さらに、一部の測定値が、推定値である可能性が
あります。実際の結果は、異なる可能性があります。お客様は、お客様の
特定の環境に適したデータを確かめる必要があります。
IBM 以外の製品に関する情報は、その製品の供給者、出版物、もしくはそ
の他の公に利用可能なソースから入手したものです。IBM は、それらの製
品のテストは行っておりません。したがって、他社製品に関する実行性、
互換性、またはその他の要求については確証できません。IBM 以外の製品
の性能に関する質問は、それらの製品の供給者にお願いします。
IBM の将来の方向または意向に関する記述については、予告なしに変更ま
たは撤回される場合があり、単に目標を示しているものです。
表示されている IBM の価格は IBM が小売り価格として提示しているもの
で、現行価格であり、通知なしに変更されるものです。卸価格は、異なる
場合があります。
本書には、日常の業務処理で用いられるデータや報告書の例が含まれてい
ます。より具体性を与えるために、それらの例には、個人、企業、ブラン
ド、あるいは製品などの名前が含まれている場合があります。これらの名
称はすべて架空のものであり、名称や住所が類似する企業が実在している
としても、それは偶然にすぎません。
特記事項
A-3
著作権使用許諾 :
本書には、様々なオペレーティング・プラットフォームでのプログラミン
グ手法を例示するサンプル・アプリケーション・プログラムがソース言語
で掲載されています。お客様は、サンプル・プログラムが書かれているオ
ペレーティング・プラットフォームのアプリケーション・プログラミン
グ・インターフェースに準拠したアプリケーション・プログラムの開発、
使用、販売、配布を目的として、いかなる形式においても、IBM に対価を
支払うことなくこれを複製し、改変し、配布することができます。このサ
ンプル・プログラムは、あらゆる条件下における完全なテストを経ていま
せん。従って IBM は、これらのサンプル・プログラムについて信頼性、利
便性もしくは機能性があることをほのめかしたり、保証することはできま
せん。お客様は、IBM のアプリケーション・プログラミング・インター
フェースに準拠したアプリケーション・プログラムの開発、使用、販売、
配布を目的として、いかなる形式においても、IBM に対価を支払うことな
くこれを複製し、改変し、配布することができます。
それぞれの複製物、サンプル・プログラムのいかなる部分、またはすべて
の派生した創作物には、次のように、著作権表示を入れていただく必要が
あります。
© ( お客様の会社名 ) ( 西暦年 ). このコードの一部は、IBM Corp. の
サンプル・プログラムから取られています。
© Copyright IBM Corp. ( 年を入れる ). All rights reserved.
この情報をソフトコピーでご覧になっている場合は、写真やカラーの図表
は表示されない場合があります。
A-4 IBM Informix SQL リファレンス・ガイド
商標
商標
AIX; DB2; DB2 Universal Database; Distributed Relational Database
Architecture; NUMA-Q; OS/2, OS/390, および OS/400; IBM Informix®;
C-ISAM®; Foundation.2000TM; IBM Informix® 4GL; IBM Informix® DataBlade®
Module; Client SDKTM; CloudscapeTM; CloudsyncTM; IBM Informix® Connect;
IBM Informix® Driver for JDBC; Dynamic ConnectTM; IBM Informix® Dynamic
Scalable ArchitectureTM (DSA); IBM Informix® Dynamic ServerTM; IBM Informix®
Enterprise Gateway Manager (Enterprise Gateway Manager); IBM Informix®
Extended Parallel ServerTM; i.Financial ServicesTM; J/FoundationTM; MaxConnectTM;
Object TranslatorTM; Red Brick Decision ServerTM; IBM Informix® SE;
IBM Informix® SQL; InformiXMLTM; RedBack®; SystemBuilderTM; U2TM;
UniData®; UniVerse®; wintegrate® は、IBM Coporation の商標です。
Java およびすべての Java 関連の商標およびロゴは、Sun Microsystems, Inc.
の米国およびその他の国における商標または登録商標です。
Windows、Windows NT および Excel は、Microsoft Corporation の米国および
その他の国における商標です。
UNIX は、The Open Group がライセンスしている米国およびその他の国にお
ける登録商標です。
本書で使用しているその他の会社名、製品名およびサービス名はそれぞれ
各社の商標または登録商標です。
特記事項
A-5
商標
A-6 IBM Informix SQL リファレンス・ガイド
用語集
用語集
アーカイブ
(archiving)
あるデータベースのすべてのデータとインデックスを、その
データベースの格納メディアから新規のメディア ( 通常、テー
プまたは物理デバイス ) にコピーすること。
アクセス・モー
ド (access
mode)
オープン・ファイルに対する読み取りアクセスおよび書き込み
アクセスを決定するオープン・ファイルの状態。
アクセス権
(access
privileges)
データベース・ユーザーが特定のデータベース、表、または列
で実行する許可を与えられた動作の型。Informix データベー
ス・サーバーは、システム・ファイルに対するオペレーティン
グ・システムのアクセス権とは独立した、独自のデータベー
ス・アクセス権のセットを持っている。
アクセス権
(permission)
一部のオペレーティング・システムでは、ファイルやディレク
トリーにアクセスする権限を指す。
アクセス権
(privilege)
データベースの内容を使用または変更する権限。
アクセス方法
(access
method)
格納域から行を取得したり、格納域に行を挿入したりするため
に使用されるプロシージャー。SET EXPLAIN 文では、アクセ
ス方法は、照会における表アクセスの型を指す。たとえば、
INDEX PATH に対する SEQUENTIAL SCAN。
アクティブ・
セット (active
set)
カーソルに関連する照会を満足する行のコレクション。
アプリケーショ
ン・ツール・プ
ロセス
(application
tool process)
ユーザー・インターフェースを提供し、データベース・サーバーまたは
IBM Informix NET 製品のいずれかと通信するプロセス。
アプリケーショ
ン・プログラム
(application
program)
1 つ以上のデータベース管理タスクを実行するファイル、または論理的に
関連するファイルのセット。
アプリケーショ
ン・プロダク
ティビティー・
ツール
(application
productivity
tools)
アプリケーションの作成に使用されるツール ( フォームやレポート )。
アプリケーショ
ン開発支援ツー
ル
(application
development
tool)
開発者がデータベースの作成や管理のために使用する IBM Informix SQL、
IBM Informix 4GL、および IBM Informix ESQL などのソフトウェアを指す用
語。このソフトウェアを使用すれば、ユーザーは、指示やデータをデータ
ベース・サーバーに送ったり、データベース・サーバーから情報を受け
取ったりできる。アプリケーション開発支援ツールは、「フロントエンド」
と呼ばれることもある。
アンロック
(unlock)
ロックされたオブジェクト ( データベース、表、ページ、または行 ) を解放
すること。たとえば、ある表をロックすると、他のユーザーは、その表が
ロックされている間、表内の行の追加、削除、更新、または表示 ( 排他
ロックの場合 ) を行うことができない。ユーザーまたはプログラムがその
表をアンロックすると、他のユーザーは再度アクセスを許可される。
一意キー
(unique key)
「主キー (primary key)」を参照。
一意性制約
(unique
constraint)
列または列のセット内の各項目に一意な値が含まれていることを指定する。
一時的
(temporary)
プログラム実行が終了したとき、またはオンライン・セッションが終了し
たときに削除される任意のファイル、インデックス、または表の属性。
2 IBM Informix SQL リファレンス・ガイド
印刷可能文字
(printable
character)
端末またはプリンターに表示できる文字。A-Z、a-z、0-9、および句読点が
含まれる。「制御文字 (control character)」を参照。
インストール
(installation)
ソフトウェアをいずれかの磁気媒体 ( テープ、カートリッジ、フロッピー・
ディスクなど ) からコンピューターにロードし、それを使用できるように
準備すること。
インタープリ
ター
(interpreter)
一度に 1 つずつ文を読み取り、デコードし、実行するプログラム。イン
デックス (index) データの行を指すポインターが入っているファイル。イン
デックスは、行の整列を高速化し、データベース照会のパフォーマンスを
最適化することができる。
インデックスの
クラスター化
(cluster an
index)
特定のインデックスに従って、表の物理データを変更すること。
ウィンドウ
(window)
画面上の長方形の領域。そこでは、バックグラウンド・プログラムのコン
テキストを残さないでアクションを取ることができる。打ち切る (abort) ア
クティブ・プロセスが完了する前にそれに割り込むこと。データの状態は、
プロセスを開始する前の状態と同じでない場合がある。
エクステント
(extent)
IBM Informix OnLine の表領域に割り当てられたディスク領域の連続したセ
グメント。プログラマーは、表の初期エクステント・サイズも、表に割り
当てられたすべての後続エクステントのサイズも指定することができる。
エラー・トラッ
ピング (error
trapping)
実行時エラーを予想し、それに対応するプログラム内のコード。
エラー・メッ
セージ (error
message)
画面に表示された、またはファイルに書き込まれたメッセージで、アク
ションの失敗または不正な仕様のいずれかを記述している。各エラーは指
定番号 ( 通常は負 ) によって識別される。
エラー・ログ
(error log)
プログラムが実行されるたびにエラー情報を受け取るファイル。
オープン
(open)
リソースを利用できるにすること。たとえば、ファイルをアクセスするた
めの準備、カーソルの活動化、ウィンドウの開始など。
用語集
3
大文字と小文字
の区別 (case
sensitivity)
大文字と小文字の区別をする条件。IBM Informix プログラムを実行する場
合は注意が必要である。特定のコマンドとそのオプションは大文字と小文
字を区別する。つまり、それらは大文字と小文字で示された同じ文字に対
して異なる反応を示す。
オフセット
(offset)
ディスク上のチャンクの物理的位置を指定するために、IBM Informix
OnLine で使用される用語。オフセットは、チャンクを開始する前に、指定
されたデバイス ( つまり、指定されたディスク・パーティション ) にインデ
ントされる KB 数である。1 つのオフセットの許容最大値は 2 テラバイトで
ある。
カーソル
(cursor)
行グループと関連付けられた識別子。概念上は、現在行を指すポインター。
カーソルは、SELECT 文で使用したり ( カーソルを照会によって戻された
行に関連付ける )、INSERT 文で使用したり ( カーソルをバッファーに関連
付けて、複数行をグループとして挿入する ) できる。SELECT カーソルは、
行情報の順次のみの抽出 ( 通常カーソル ) または非順次抽出 ( スクロール・
カーソル ) のために宣言される。さらに、SELECT カーソルを、更新 ( 更新
済み行や削除済み行に対する制御ロックを開始する ) または保留 ( トラン
ザクションが完了してもカーソルをクローズしない ) のために宣言するこ
ともできる。ESQL/C および ESQL/COBOL においては、カーソルを動的に
することができる。つまり、カーソルを識別子または文字 / ストリング変
数にすることができる。「カーソル」という用語は、ビデオ端末の位置標識
も表す。
カーソルのク
ローズ (close
a cursor)
照会から取得した行のアクティブ・セットとカーソルの間の関連を削除す
ること。
カーネル
(kernel)
各プロセスを制御し、リソースの割り当てを制御する UNIX オペレーティ
ング・システムの一部。
階層
(hierarchy)
ツリー状になったデータ構造体で、一部のデータ・グループが他のデー
タ・グループの下に付き、(1) 1 つのグループのみ ( ルート と呼ぶ ) が最高
位に位置し、(2) ルート 以外の各グループは自分より高位の 1 つのグループ
のみに関連している。
外部キー
(foreign key)
表の一意または主キーを参照する列または列のセット。すべての外部キー
列に非 NULL 値が含まれている場合は、外部キー列のすべての項目と一致
する項目が一意または主列に含まれていなければならない。
4 IBM Informix SQL リファレンス・ガイド
外部結合
(outer join)
照会における主表と従表の非対称結合。それにより、結合制限は従表また
は「外部表」にのみ適用される。主表の行は結合を考慮せずに抽出される
が、外部表から取得した行は、結合条件も満たした場合にのみインクルー
ドされる。外部表から取得した行と一致しない主表の行は、外部表の行で
はなく、NULL の行を受け取る。
外部表
(external
table)
現行データベースに入っていないデータベース表。
仮数
(mantissa)
浮動小数点数の有効数字。通常、0 と 1 の間の数字で表される。
仮想列
(virtual
column)
データベースに格納されていない情報の導出列。たとえば、SELECT 文で
仮想列を作成するには、単一列を算術的に操作する ( たとえば、既存の値
に定数を掛ける ) か、複数列を結合する ( たとえば、2 つの列の値を加算す
る )。
環境変数
(environment
variable)
割り当て済み値を持つ変数で、オペレーティング・システムによって管理
され、すべてのシステムで使用される。
関係
(relation)
「表 (table)」を参照。
関数
(function)
「プログラム・ブロック (program block)」を参照。
キー (key)
データの行を見つけるために使用される情報の断片。キーは、検索する情
報の断片を定義するほか、表の情報を処理する順序も定義する。たとえば、
last_name 列を customer 表に索引付けすることにより、特定の顧客を見つけ
出したり、それらの顧客を、ラストネームのアルファベット順、または逆
順に処理したりできる。
キーワード
(keyword)
プログラムにとって意味がある単語。たとえば、SELECT という語は、
データベース照会に関連する SQL のキーワードである。
記述子
(descriptor)
引用符付きストリングまたは埋め込み変数で、割り当て済みシステム記述
子領域または sqlda 構造体を識別する。記述子は、IBM Informix 4GL および
IBM Informix 埋め込み言語製品により、SQL 文管理に使用される。
「識別子
(identifier)」を参照。
用語集
5
行 (row)
データベース表内の単一のエンティティーに関する情報の関連項目のグ
ループ。たとえば顧客情報の表の場合、行には、単一の顧客に関する情報
が入っている。行は「レコード (record)」または「タプル (tuple)」とも呼ば
れる。( スクリーン・フォームでは、行 が画面上の行を指すこともある。)
強制常駐
(forced
residency)
UNIX が IBM Informix OnLine 共有メモリー・セグメントをメモリー内に常
駐させることを強制実行するオプションで、UNIX がこれらのセグメント
からディスクにスワッピングするのを防止する。( このオプションは、すべ
ての UNIX システムで利用できるわけではない。)
共有メモリー
(shared
memory)
複数のプロセスがメモリー内の共通データ領域にアクセスできるようにす
る。各プロセスごとにディスクから共通データを再読み取りする必要がな
いため、ディスク 入出力 が減り、パフォーマンスが向上する。
共有ロック
(shared lock)
同一オブジェクトに対して複数のプロセスが獲得できるロック。共有ロッ
クは、複数ユーザーによるより大きな並行性を考慮に入れている。した
がって、2 人のユーザーが 1 つの行に対してロックを掛けている場合、3 人
目のユーザーは、両方のユーザー ( 最初のユーザーだけでなく ) そのロック
を解放するまでその行の内容を変更できない。共有ロック・ストラテジー
は、DIRTY READ を除くすべてのプロセス排他設定レベルで使用される。
局所変数
(local
variable)
自分が定義されているモジュールでのみ意味がある変数。「変数 (variable)」
および「参照範囲 (scope of reference)」を参照。
区切り記号
(delimiter)
入力フィールドの境界、または列や行の終端記号。フォーム仕様では、
フィールド区切り記号は大括弧 ([ ]) で、フィールドのサイズを決定する。
一部のファイルや PREPARE 文で処理したオブジェクトには、それぞれ文
の間にセミコロン (;) が必要。
組み込み SQL
(embedded SQL)
ホスト言語内に配置される SQL 文。Informix は、C および COBOL の SQL
をサポートする。
クライアント
(client)
ファイル・サーバーまたはデータベース・サーバーのリソースを使用する
ネットワーク上のコンピューター。
クライアント /
サーバー・アー
キテクチャ
(client/server
architecture)
ユーザー・インターフェースとデータベース・サーバーがネットワーク上
の別個のノードまたはプラットフォームに常駐できるようにするハード
ウェアおよびソフトウェア設計。
6 IBM Informix SQL リファレンス・ガイド
クライアント /
サーバー処理
(client/server
processing)
関連するコンピューターの処理能力を利用して、アプリケーションをネッ
トワーク上の複数のコンピューターで稼働できるようにする機能。
警告 (warning)
データベース・サーバーまたはコンパイラーによって検出された状態で、
構文が正しくないか、または問題の発生が考えられること。警告は、必ず
しも実行するコードの機能に影響を与えるわけではない。
結合 (join)
複数の表から取得した情報を、何らかの情報の共通ドメインに基づいて組
み合わせること。ある表から取得した行が他の表から取得した行と結合さ
れるのは、対応する行の情報が結合基準を満たしたときである。たとえば、
customer_number 列が、customer 表と orders 表の両方に存在する場合は、
customer_number に基づいて、各 customer 行と、関連するすべての orders 行
を結合する照会を構築することができる。「デカルト (Cartesian product)」お
よび「外部結合 (outer join)」を参照。
現在行
(current row)
最後に取得した、照会のアクティブ・セットの行。
広域変数
(global
variable)
プログラム内の任意のモジュールまたは関数からアクセスできる値を持つ
変数。「変数 (variable)」および「参照範囲 (scope of reference)」を参照。
高可用性 (high
availability)
システムがデータの障害や消失に抵抗できること。高可用性には、高速復
旧やミラーリングなどの機能が含まれる。「フォールト・トレランス ( 耐故
障性 ) (fault tolerance)」と呼ばれる場合もある。
更新記録
(audit trail)
IBM Informix SE データベース・サーバーの表に対するすべての変更の履
歴。
更新記録ログ
(audit trail
log)
表に対するすべての変更の履歴が入っているファイル。アーカイブ・デー
タベースから始まり、更新記録ログは、IBM Informix SE データベース・
サーバーの表に対する後続のすべての変更を再構築することができます。
更新前イメージ
(before-image)
変更を加える前の行、ページ、またはその他の項目のイメージ。
更新ロック
(update lock)
SELECT...FOR UPDATE 中に獲得される増進可能なロック。更新ロックは、
実際に更新が行われるまで共有ロックのように動作する。更新が行われる
と、排他ロックになる。更新ロックは、あるオブジェクトに対して一度に
1 つの更新ロックしか獲得できないという点で、共有ロックとは異なる。
用語集
7
構成ファイル
(configuration
file)
構成データが入っているファイルで、IBM Informix OnLine が初期化時に使
用する。構成ファイルは、次のように指定される。$INFORMIXDIR/etc/$TBCONFIG. 定数 (constant) 変化しないデータ要素または値。
高速復旧 (fast
recovery)
IBM Informix OnLine が、任意の時点で、オフラインから静止モードへの動
作モードの変更をインプリメントする自動的なフォールト・トレラント機
能。高速復旧の目的は、システム障害が発生した場合に、最小限の作業ロ
スで OnLine を物理的および論理的一貫性を持つ状態に戻すことである。
固定長文字
(fixchar)
IBM Informix ESQL/C プログラムで提供される文字データ型。文字ストリン
グの長さが固定で、必要な場合はブランクでパッドされ、NULL 終端子は
付かない。
コマンド・ファ
イル (command
file)
1 つ以上の文またはコマンド ( たとえば、SQL 文やプログラミング・コード
のシーケンスなど ) を含むシステム・ファイル。
コメント
(comment)
プログラム・ファイル、レポート仕様、またはスクリーン・フォームの中
の情報で、コンピューターによって処理はされないが、プログラムをド
キュメント化する。コメントであることを示すために、シャープ記号 (#)、
ブレース ({ })、アスタリスク (*) などの特殊文字を使用する。
コンパイル時エ
ラー (compiletime errors)
プログラム・ソース・コードを実行可能フォームに変換するときに発生す
るエラー。「実行時エラー (run-time errors)」を参照。
サーバー番号
(server
number)
データベース管理者が、初期化時に IBM Informix OnLine に割り当てる 0 ~
255 の一意な番号。同一マシン上に複数の IBM Informix OnLine データベー
ス・サーバーがインストールされている場合は、それぞれのデータベー
ス・サーバーは一意な番号を持っていなければなりません。
サーバー名
(server name)
データベース管理者が、初期化時に IBM Informix OnLine に割り当てる一意
な名前。外部表やデータベースを識別するにはデータベース・サーバー名
を使用する。
差分アーカイブ
(incremental
archiving)
IBM Informix OnLine における 3 レベルのアーカイブ・システムで、最後の
アーカイブ以降に変更されたデータ部分のみをアーカイブすることができ
るオプションを提供する。
8 IBM Informix SQL リファレンス・ガイド
参照制約
(referential
constraint)
1 つの表内の列間の関係、またはいくつかの表間の関係を定義する。参照
制約は、被参照列と参照列間の 1 対多の関係を持っている。被参照列は、
主キーまたは一意性制約の一部でなければならない。参照列は NULL 値を
含むことができるが、すべての列が非 NULL である場合、参照列内のすべ
ての非 NULL 値は、被参照列内の値と一致しなければならない。参照列は
「外部キー」とも呼ばれる。
参照範囲
(scope of
reference)
識別子が適用され、アクセスが可能なプログラムの部分。範囲サイズには、
ローカル ( 識別子は単一プログラム・ブロック内でのみ適用される )、モ
ジュラー ( 識別子は単一モジュール全体を通して適用される )、およびグ
ローバル ( 識別子はプログラム全体を通して適用される ) の 3 つがある。識
別子は、前もって宣言しておかないと参照できません。たとえば、モ
ジュール識別子は、それを宣言したモジュール内の文が出てくるまで参照
できません。
残余ページ
(remainder
page)
単一行から取得したデータで埋められた追加ページ。IBM Informix OnLine
は、行のデータを初期ページに収容できないときに残余ページを使用する。
残余ページは、必要に応じ、追加されるか埋められる。オリジナルのペー
ジ項目には、残余ページを指すポインターが含まれている。
「ホーム・ペー
ジ (home page)」を参照。
式
(expression)
単純な数字または英字定数から、より複雑な一連の値、関数、引用符付き
ストリング、演算子、およびキーワードに至るすべてのもの。ブール
(BOOLEAN) 式には、論理演算子 (>、<、=、!=、IS NULL、など ) が含まれ
ていて、TRUE、FALSE、または UNKNOWN として評価される。算術式に
は、演算子 (+、-、¥、/、など ) が含まれていて、数値として評価される。
識別子
(identifier)
文字、数字、およびアンダースコアー (_) のシーケンスで、データベース、
表、列、スクリーン・フォーム、プログラム変数、カーソル、関数、イン
デックス、ウィンドウ、メニュー、シノニム、別名、ビュー、PREPARE 文
で処理したオブジェクト、制約、レポート、またはプロシージャー名の名
前を表す。
シグナル
(signal)
2 つのプロセス間の通信手段として使用される特殊文字または文字のセッ
ト。たとえば、ユーザーまたはプログラムがプロセス実行の割り込みまた
は一時停止を行いたいときに、シグナルが送信されます。「割り込み
(interrupt)」を参照。
システム・カタ
ログ (system
catalog)
データベース自体に関する情報が入っている DATABASE 文。たとえば、
データベース内の表または列の名前、表内の行の数、インデックスおよび
データベース・アクセス権に関する情報、などが入っている。
用語集
9
システム記述子
領域 (system
descriptor
area)
SQL で使用される記述子で、動的 SQL 文で使用されるデータベース列また
はホスト変数に関する記述情報が入っている。システム記述子領域は、
ESQL/C および ESQL/COBOL で使用することができる。
システム呼出し
(system call)
オペレーティング・システムによって提供される関数を呼び出すこと。
実行 (execute)
プログラムまたは指示のセットを行動に移すこと。
実行可能ファイ
ル (executable
file)
プログラムとして実行できるコンパイル済みのコードが入っているバイナ
リー・ファイル。UNIX シェル・スクリプトまたは DOS バッチ・ファイル
を指す場合もある。
実行時エラー
(run-time
errors)
プログラム実行時に発生するエラーのこと。
「コンパイル時エラー (compiletime errors)」を参照。
実行時環境
(run-time
environment)
プログラム実行時に使用できるハードウェアおよびオペレーティング・シ
ステム・サービス。
シノニム
(synonym)
表に割り当てられた名前で、その表のオリジナルの名前に代わって使用さ
れる。シノニムは、オリジナルの表名を置き換えるものではなく、代わり
に、その表の別名として機能する。
射影
(projection)
一意な行を保持する単一表の列から垂直方向サブセットを取ること。射影
は、SELECT 文の SELECT 節に含まれている選択リストを介して行われ、
表内の一部の列とすべての行を戻す。「選択 (selection)」および「結合
(join)」を参照。
集計関数
(aggregate
functions)
表の 1 つ以上の行に含まれている列の値に基づいて、単一値を戻す関数。
たとえば、照会またはレポートにおける式の総数、合計、平均、最大、ま
たは最小。集計関数は、「集合関数」または「算術関数」と呼ばれることも
ある。
主キー
(primary key)
表内の各行を一意的に識別する列または列のセットから取得した情報。主
キーは「一意キー (unique key)」とも呼ばれる。
主キー制約
(primary key
constraint)
列または列のセット内の各項目に非 NULL の一意な値が含まれていること
を指定する。
出力 (output)
コンピューターが、照会やレポート要求などに応じて作成する結果。
10 IBM Informix SQL リファレンス・ガイド
主表 (dominant
table)
「外部結合 (outer join)」を参照。
照会 (query)
特定の基準に合致するデータを抽出するための要求。
小数点以下桁数
(scale)
DECIMAL 表記における小数点の右側の桁数。数値 1437.2350 の小数点以下
桁数は 4 である ( 小数点の右側が 4 桁 )。「精度 (precision)」を参照。
状態変数
(status
variable)
プログラム実行のある局面の状態を示すプログラム変数。状態変数は、し
ばしば、エラー番号を格納したり、エラーの発生を示すフラグとして機能
する。
初期化
(initialize)
開始値を割り当てること。
所有者アクセス
権付き (ownerprivileged)
ユーザーに関連するアクセス権ではなく、オブジェクトの所有者に保持さ
せるアクセス権を指す用語。
スキーマ
(schema)
データベースまたは表の構造体のリスト。表のスキーマは、列の名前、そ
のデータ型および長さ ( 該当する場合 )、インデックス機能、その他表の構
造体に関する情報などをリストする。
スクリーン・
フォーム
(screen form)
端末の画面上に表示されるデータ入力フォーム。ユーザーは、フォーム上
のブランク部分にデータを入力する。
スタック
(stack)
プログラムが使用するデータ要素の一時記憶域用に予約されているメモ
リー領域。( 複数のスタックが存在することもある。) スタックは、通常、
関数に渡す引数など、プログラムに直接使用できるデータを保持している。
項目は、挿入されている順序と逆の順序でスタックから削除される。「プッ
シュ (push)」および「ポップ (pop)」を参照。
スタック演算子
(stack
operator)
プログラムがスタックの値を操作できるようにする演算子。
ストアード・プ
ロシージャー
(stored
procedure)
Informix プログラムにおいて、SQL 文と一緒に使用される関数を指す用語。
ストアード・プロシージャーは、SQL および SPL 文を使用して作成され
る。このプロシージャーは、実行可能フォームでデータベースに格納され
る。
用語集
11
ストアード・プ
ロシージャー言
語 (Stored
Procedure
Language)
Informix によって開発された、ストアード・プロシージャーで使用するた
めの言語。
ストリング
(string)
単一の単位として操作される文字のセット ( 通常、英数字 )。ストリング
は、単語 (‘‘Smith’’ など )、番号を表す数字のセット (‘‘19543’’ など )、また
はその他の任意の文字のコレクションからなっている。ストリングは、通
常、単一引用符または二重引用符で囲まれている。また、IBM Informix
ESQL/C プログラムで、データ型としても使用できる。この場合、文字ス
トリングは、末尾ブランクが除去され、NULL で終了している。
制御文字
(control
character)
特定のコンテキストに現れて、制御機能 ( たとえば、カーソルの移動や
データの読み取りを行う場合にデバイスを制御する操作 ) を開始、変更、
または停止する文字。プログラムにおいては、CTRL キーと他のキーを一
緒に使用して、何らかのプログラミング・アクション ( たとえば、CTRLW を入力して IBM Informix 製品のオンライン・ヘルプを取得する ) を行う
ことができる。制御文字は「制御キー」と呼ばれることもある。「印刷可能
文字 (printable character)」を参照。
精度
(precision)
実数の有効数字の合計数 ( 小数点の左側と右側の両方 )。たとえば、数字
1437.2305 の精度は 8 である。「小数点以下桁数 (scale)」を参照。
制約
(constraint)
どの種類のデータを表に挿入できるか、または更新できるかを制限するこ
と。
「チェック制約 (check constraint)」、
「主キー制約 (primary key constraint)」
、
「参照制約 (referential constraint)」
、および「一意性制約 (unique constraint)」
も参照。
セマフォー
(semaphore)
ユーザー・プロセスをウェイクさせるシグナルを出す UNIX 通信デバイス。
セルフ結合
(self-join)
表とそれ自身の結合。セルフ結合は、表が SELECT 文 ( いくつかの異なる
別名を持つ ) で複数回使用され、それ自身と結合されたときに行われます。
宣言文
(declarative
statement)
オブジェクトの記述または定義 ( たとえば、プログラム変数の定義 ) を行う
プログラム言語文。「プロシージャー文 (procedural statement)」を参照。
選択
(selection)
特定の条件を満たす単一表の行の水平方向サブセットを指す用語。選択は、
SELECT 文の WHERE 節を介して行われ、表内の一部の行とすべての列を
戻す。「射影 (projection)」および「結合 (join)」を参照。
12 IBM Informix SQL リファレンス・ガイド
ソース・ファイ
ル (source
file)
コンパイル済みプログラムを生成するためのソースとして使用する指示
(ASCII テキストでの ) が入っているファイル。
属性
(attribute)
スクリーン・フォームのフィールドのデータを表示または検証するメソッ
ドの修飾子。
タイムアウト
(timeout)
要求側プロセスのロック待機時間が、指定された最大時間制限を超えたた
めに、ロック要求が打ち切られる時点。IBM Informix OnLine では、プログ
ラム開発者は、SET LOCK MODE 文を使用して時間制限を設定することが
できる。データベース管理者は、複数の IBM Informix STAR システム間で、
操作のための時間制限を設定する。
対話型
(interactive)
ユーザーからの入力を受け入れ、処理し、出力を画面、ファイル、または
プリンターに作成するプログラム。
タプル (tuple)
「行 (row)」を参照。
単一選択
(singleton
select)
単一行を戻す SELECT 文。
チェック制約
(check
constraint)
INSERT または UPDATE 文を実行しているときに、データを表列に割り当
てるために満たさなければならない条件。チェック制約は検索条件を使用
して定義される。
チェックポイン
ト
(checkpoint)
IBM Informix OnLine 操作時における、ディスク上のページと共有メモ
リー・バッファー・プール内のページが同期化された時点のこと。チェッ
クポイントは、論理ログに書き込まれた特殊なレコードによってマークさ
れる。
チャンク
(chunk)
IBM Informix OnLine 用の連続した大容量のディスク・スペース・セクショ
ン。チャンクは、UNIX ディスク・パーティションと対応できる。指定さ
れたチャンクのセットは、DB 領域または BLOB 領域を定義する。
直列化可能トラ
ンザクション
(serializable
transactions)
「反復読込み (REPEATABLE READ)」を参照。
用語集 13
データ型 (data
type)
表変数またはプログラム変数の各列に割り当てられた記述子で、その表変
数またはプログラム変数に保持させるデータの型。Informix データ型には、
SMALLINT、INTEGER、SERIAL、SMALLFLOAT、FLOAT、DECIMAL、
MONEY、DATE、DATETIME、INTERVAL、CHAR、VARCHAR、TEXT、
および BYTE がある。
データ整合性
(data
integrity)
複数のユーザーが同一データを同時に変更しようとした場合に、データ破
壊が起こらないようにするプロセス。データ整合性の制御には、ロックと
トランザクション処理が使用される。
データベース
(database)
特定の組織に有用な、または特定の目的に使用される情報のコレクション (
表に含まれている )。
データベース・
アプリケーショ
ン (database
application)
特定のデータ操作およびレポート作成タスクを実行するために、データ
ベース管理技法を適用するプログラム。
データベース・
サーバー・プロ
セス (database
server
process)
実際にデータベース・ファイルを操作するデータベース管理システムの部
分。このプロセスは、SQL 文をデータベース・アプリケーションから受け
取り、構文解析し、データへのアプローチを最適化し、データベースから
データを取得し、データをアプリケーションに戻す。データベース・サー
バーは「バックエンド」または「データベース・エンジン」とも呼ばれる。
データベース・
ディクショナ
リー (database
dictionary)
データベースの構造を記録するためにデータベース管理プログラムが使用
する表のコレクション。データベースに関する情報はデータベース・ディ
クショナリーで管理される。データベース・ディクショナリーは「デー
タ・ディクショナリー」または「システム・カタログ」とも呼ばれる。
データベース管
理システム
(database
management
system (DBMS))
アプリケーション開発支援ツールおよびデータベース・サーバーを含め、
データベースの作成および管理に必要なすべてのコンポーネント。
データベース管
理者 (Database
Administrator
(DBA))
データベースの内容と使用に責任を持つ個人。データベースのクローズ
(close a database) データベースの「現行」状態を解放すること。一時点では
1 つの現行データベースしか存在できない。
データベースの
復元 (restore
a database)
「データベースの復旧 (recover a database)」を参照。
14 IBM Informix SQL リファレンス・ガイド
データベースの
復旧 (recover
a database)
システム障害または他の破壊イベントが発生した後に、データベースを以
前の状態に復元すること。復旧では、データベースがクラッシュ直前の状
態に復元される。これは「データの復元 (data restore)」とも呼ばれる。
ディスク構成
(disk
configuration)
ディスクの空間の構成。ディスク入出力 (disk I/O) メモリーとディスク間で
データの転送を行うプロセス。
デカルト積
(Cartesian
product)
あるセットの各メンバーと他のセットの各メンバーをペアにしたセット。
デカルト積は、表の間の結合条件を指定しない場合に、複数表照会を行っ
た結果作成される。「結合 (join)」を参照。
デッドロック
(deadlock)
各プロセスが他のプロセスによるロックの保持を待機しているため、複数
のプロセスが先へ進めない状態。IBM Informix OnLine は、デッドロック状
態の発生の可能性をモニターし、それを防止するために、デッドロックに
なると予想されるロック要求出したプロセスにエラー・メッセージを送信
する。複数システムにまたがる分散照会では、IBM Informix STAR がデッド
ロックを制御している。「複数サイト・デッドロック (multisite deadlock)」
を参照。
デバッガー
(debugger)
プログラムを分析し、プログラム・ロジックのエラーを検出し、突き止め
るソフトウェア製品。IBM Informix 4GL Interactive Debugger は 4GL ソース
言語デバッガーで、プログラム・ロジックのトレース、定義済みポイント
での実行の停止など、広範囲にわたるプログラミング・ツールをサポート
している。「ブレークポイント (breakpoint)」および「トレース・ポイント
(tracepoint)」を参照。
デバッグ・ファ
イル (debug
file)
デバッグ用の出力を受け取るファイル。デフォルト (default) ユーザーがア
クションを明示的に指定しなかった場合のプログラムの動作方法。
デフォルト値
(default
value)
明示的な値を指定しなかった場合に列に挿入される値。デフォルト値を列
に割り当てるには、ALTER TABLE および CREATE TABLE 文を使用する。
動作モード
(operating
mode)
IBM Informix OnLine の操作状態を指す用語。動作モードには、オフライン、
静止、オンライン、シャットダウン、および復旧の 5 つのモードがある。
動的文
(dynamic
statements)
プログラムの作成時ではなく、プログラムの実行時に作成される SQL 文。
動的文の作成には、IBM Informix 4GL および IBM Informix 埋め込み言語製
品の PREPARE 文が使用される。
用語集 15
トランザクショ
ン
(transaction)
単一の作業単位として扱われる 1 つ以上の SQL 文のコレクション。トラン
ザクション内のいずれかの文が失敗すると、トランザクション全体がロー
ルバック ( キャンセル ) されることがある。トランザクションが正常終了す
ると、作業はコミットされ、トランザクションで行われたデータベースに
対するすべての変更が受け入れられる。
トランザクショ
ン・ログ
(transaction
log)
「論理ログ (logical log)」を参照。トレース (trace) プログラム変数、引数、
式、などの値の実行リストをストアード・プロシージャーで保持すること。
トレース・ポイ
ント
(tracepoint)
デバッガーによって指定された名前付きオブジェクトで、プログラマーは、
それを文、プログラム・ブロック、または変数に関連付けることができる。
トレース・ポイントに達すると、デバッガーは、関連付けられた文、プロ
グラム・ブロック、または変数に関する情報を表示し、プログラマーに
よって指定されたすべてのオプション・コマンドを実行する。トレース・
ポイントが有効になるようにしておかなければならない。「デバッガー
(debugger)」を参照。
入力 (input)
外部ソースから ( たとえば、キーボード、ファイル、または他のプログラ
ム ) から受け取り、プログラムによって処理される情報。
排他アクセス
(exclusive
access)
ユーザーが情報に対する独占的なアクセス権を持っていること。他のユー
ザーは、データベースまたは表を使用できない。
排他レベル
(level of
isolation)
「プロセス排他設定 (process isolation)」を参照。
排他ロック
(exclusive
lock)
単一のプロセスがオブジェクト ( 行、ページ、表、またはデータベース ) に
掛けるロックで、他のプロセスはこのオブジェクトに対していかなる種類
のロックも取得することはできない。バイト (byte) ストレージの単位。1 つ
の文字とほぼ対応している。K バイトは 1024 バイト。M バイトは 106 バイ
ト。(BYTE と大文字で示されている場合は、Informix データ型を指す。)
配列 (array)
同一型の項目のセット。配列の個々のメンバーは「エレメント」と呼ばれ、
通常、配列内のエレメントの位置を示す整引数によって区別される。Informix 配列は、最高 3 次元にすることができる。
16 IBM Informix SQL リファレンス・ガイド
破損したイン
デックス
(corrupted
index)
表と正確に対応しないインデックス。
破損したデータ
ベース
(corrupted
database)
表やインデックスに不完全または無効なデータが含まれたデータベース。
パターン
(pattern)
識別可能なまたは繰り返し可能な一連の文字または記号。
バックアップ
(backup)
コンピューター障害やその他の事故の発生に備えて、コンピューター・
ファイルを他のデバイスに複写して既存の作業を保存すること。
パッドする
(pad)
行、ストリング、またはフィールドの先頭または末尾の空の場所を埋める
こと。通常、スペースまたはブランクが使用される。
バッファー
(buffer)
プログラムが一時的にデータを格納するコンピューター・メモリーの部分。
一般に、データは、バッファーに読み込まれたり、バッファーからディス
クに書き込まれる。
バッファー付き
ログ (buffered
log)
トランザクションがいつコミットまたはロールバックされるかに関係なく、
バッファーがいっぱいになるまでトランザクションをメモリー・バッ
ファーに保持する。IBM Informix OnLine ではこのオプションが用意されて
いるので、これを利用すればディスク書き込み回数が減り操作が速くなる。
パラメーター
(parameter)
指定されたアプリケーションの定数値に与えられる変数。一般にサブルー
チンでは、パラメーターは、そのルーチンに渡された引数値を使用する。
反転表示
(highlight)
画面上の場所をマークする長方形の逆転表示域。反転表示は、しばしば、
メニュー上の現行オプションまたは編集セッションでの現行文字を示す。
端末が強調表示を行えない場合は、しばしば現行オプションが不等号括弧
内に表示され、現行文字はにはアンダーラインが示される。
引数
(argument)
関数、ルーチン、またはコマンドに渡される値。
ビュー (view)
データベースの内容を示す動的に制御されたピクチャーで、これを使用し
て、ユーザーがどの情報を見たいか、操作したいかを判別することができ
る。ビューは、指定された SELECT 文に基づいて仮想表を表す。
用語集 17
表 (table)
長方形のデータの配列で、各行が単一のエンティティーを記述し、各列に
は、各記述カテゴリーごとの値が含まれている。たとえば、表には、顧客
の名前やアドレスを含めることができる。それぞれの行は、異なる顧客に
対応し、列は名前とアドレス項目に対応している。表は「関係」とも呼ば
れる。
表示フィールド
(display
field)
データを画面上のどこに表示するかを示すために、スクリーン・フォーム
で使用される。表示フィールドは、通常、表の列と関連付けられている。
表示ラベル
(display
label)
照会での列または式の一時的な名前。
表領域
(tblspace)
IBM Informix OnLine において、表に割り当てられたエクステントの論理コ
レクション。ブール型 (Boolean) 論理値 TRUE (1)、FALSE (0)、または
UNKNOWN (NULL 値が関係している場合 ) を取ることができる変数または
式。
ファイル
(file)
システム上に一緒に格納した関連情報のコレクション。たとえば、レター
またはレポート内の語、コンピューター・プログラム、またはデータのリ
スト。
ファイル・サー
バー (file
server)
ディスクのセットを管理し、ストレージ・サービスをネットワーク上のコ
ンピューターに提供するネットワーク・ノード。
ファイルのク
ローズ (close
a file)
ファイルとプログラムの間の関連を解放すること。
ファイル名の拡
張子 (filename
extension)
ピリオドの後にあるファイル名の一部。たとえば、DB-Access は拡張子 .sql
をコマンド・ファイルに追加します。
フォーム仕様
(form
specification)
フォームの外観と実行方法を記述する指示が入っているシステム・ファイ
ル。フォーム仕様は、前もってコンパイルしておかないと使用できない。
フォールト・ト
レランス ( 耐故
障性 ) (fault
tolerance)
「高可用性 (high availability)」を参照。
18 IBM Informix SQL リファレンス・ガイド
複合インデック
ス (composite
index)
表の複数の列について構築されるインデックス。複合インデックスによっ
て要求される整列は、最初の命名列では変化が最も少なく、最後の命名列
では変化が最も多い。
複合結合
(composite
join)
各表の複数列間の関係に基づく、2 つの表の結合。
副照会
(subquery)
他の SQL 文の一部として埋め込まれている照会。たとえば、INSERT 文に、
VALUES 節を含めるのではなく、SELECT 文が挿入済み値を提供する副照
会を含めることができる。また、UPDATE 文に、SELECT 文が更新値を提
供する副照会を含めることもできる。あるいは、SELECT 文に、2 番目の
SELECT 文が最初の SELECT 文の WHERE 節の修飾条件を提供する副照会
を含めることもできる。(CREATE VIEW 文または UNIONS を参照している
場合を除き、副照会は、常に小括弧で区切られる。)
複数サイト・
デッドロック
(multisite
deadlock)
複数の IBM Informix STAR システムにまたがって分散照会を行ったために
各プロセスで発生したデッドロック。
増進可能なロッ
ク (promotable
lock)
共有ロックから排他ロックへ変更できるロック。「更新ロック (update lock)」
を参照。
プッシュ
(push)
値をメモリー内のスタックに配置すること。「スタック (stack)」および
「ポップ (pop)」を参照。
フッター
(footer)
「ページ・トレーラー (page trailer)」を参照。
物理ログ
(physical log)
最後のチェックポイント以降に変更されたすべてのページの前イメージが
入っている、IBM Informix OnLine のディスク領域を割り当てたもの。
浮動小数点数
(floatingpoint number)
精度が固定され ( 合計桁数 )、小数点以下桁数 ( 小数点の右側の桁数 ) が未
定義である数字。割り当て値を表すために、小数点は「浮動」である。
フラグ (flag)
コマンド行オプションの 1 つで、UNIX では、通常、マイナス記号 (-) で示
される。たとえば、DB-Access では、-e フラグが画面への入力をエコーイ
ングする。
用語集 19
プリプロセッ
サー
(preprocessor)
高水準プログラムを取り入れ、C や Micro Focus COBOL/2 などの、標準の
言語コンパイラーがコンパイルできるコードを作成するプログラム。
ブレークポイン
ト
(breakpoint)
デバッガーによって指定された名前付きオブジェクト。プログラマーはこ
のオブジェクトを文、プログラム・ブロック、変数、または論理条件と関
連付けることができる。ブレークポイントに達すると、プログラム実行が
一時停止するので、プログラマーは、プログラム変数の現行値や実行ス
タックを調べたり、オプションで、その時点でデバッガー・コマンドを実
行したりできる。ブレークポイントが有効になるようにしておかなければ
ならない。「デバッガー (debugger)」を参照。
プログラム・ブ
ロック
(program
block)
特定のタスクを実行する文の名前付きコレクション。プログラム・コード
の単位。4GL では、MAIN、FUNCTION、REPORT、または GLOBALS セク
ションを指す。プログラム・ブロックは、「関数 (function)」、「プロシー
ジャー (procedure)」、
「ディビジョン (division)」
、または「ルーチン
(routine)」とも呼ばれる ( ただしこれらの用語は、言語によって、微妙な、
しかし明確な意味の違いがある )。
プログラム制御
(program
control)
コンピューターが取るアクションで、ユーザーが取るアクションと対比さ
れる。
プロシージャー
(procedure)
プロシージャー
文 (procedural
statements)
「プログラム・ブロック (program block)」を参照。
各種のアクション ( たとえば、条件が満たされた場合のループや分岐など )
を指定するプログラム言語文。「宣言文 (declarative statement)」を参照。
プロセス
(process)
「データベース・サーバー・プロセス (database server process)」を参照。
プロセス排他設
定 (process
isolation)
複数のユーザーが共通データ、特に、読み取り専用 SQL 要求のロック・ス
トラテジーに関連するデータにアクセスしようとするときに、それらの
ユーザー間でのプロセス独立性のレベル。各種の排他レベルが、主として、
共有ロックを取得し保持する ( または取得し保持できる ) 時間の長さによっ
て区別されている。IBM Informix SE は、変更が不可能な 排他なし (
「DIRTY READ」と呼ばれる ) というレベルを設定している。IBM Informix
OnLine の場合、プログラマーは 4 つの排他レベルから選択することができ
る。「DIRTY READ」、
「COMMITTED READ」
、「CURSOR STABILITY」、お
よび「REPEATABLE READ」を参照。
20 IBM Informix SQL リファレンス・ガイド
プロトコル
(protocol)
コンピューター間の通信を管理するルールのセット。これらのルールは、
フォーマット、タイミング、順序付け、およびエラー制御を管理する。
文 (statement)
単一のアクションを記述したプログラム・コードの行または行のセット (
たとえば、SELECT 文または UPDATE 文 )。
分散オプション
(distributed
option)
複数データベースのデータにアクセスできること。これらのデータベース
は同一ハードウェア上にあっても、コンピューター・ネットワーク上に
あってもよい。( IBM Informix OnLine は複数データベース照会を実行する
ことができる。IBM Informix STAR は複数の OnLine データベース・サー
バー上のデータベースを照会することができる。)
文識別子
(statement
identifier)
PREPARE 文に定義されたデータ構造体を表す埋め込み変数名または SQL
文識別子。これは、IBM Informix 4GL および IBM Informix 埋め込み言語製
品によって SQL 文管理に使用される。
文ブロック
(statement
block)
プログラムのセクションを指す用語。通常、“begin” や “end” 特殊記号で開
始され、終了している。文ブロックは、プログラム変数の最小単位の参照
範囲である。
ページ (page)
IBM Informix OnLine によって使用されるディスクとメモリー・ストレージ
の基本単位。このサイズはポート用に固定されており、ユーザーがそれを
調整することはできない。
ページ・トレー
ラー (page
trailer)
レポートの各ページの最下部に出力される項目 ( たとえば、ページ番号 )。
ページ・トレーラーは「フッター (footer)」とも呼ばれる。「柱」はレポー
トの各ページの最下部に現れる。
ページ・ヘッ
ダー (page
header)
レポートの各ページの最上部に出力される項目 ( たとえば、タイトルや日
付 )。
「欄外見出し」はレポートの各ページの最上部に現れる。
並列性
(concurrency)
2 つ以上のプロセスが同一のデータベースを同時にアクセスできること。
ヘッダー
(header)
別名 (alias)
「ページ・ヘッダー (page header)」を参照。
照会における表の一時的な代替名。通常、複雑な副照会で使用され、セル
フ結合には必須である。フォーム仕様ファイルまたは任意の SQL 照会で
は、別名 は、より複雑な表名 ( たとえば、owner.table name) の代わりに使用
される単一語の代替名を指す。
用語集 21
ヘルプ・メッ
セージ (help
message)
対話型プログラムのユーザーを援助するために、自動的に、またはユー
ザーの要求に応じて表示されるオンライン・テキスト。これらのメッセー
ジはヘルプ・ファイルに格納される。
変数
(variable)
メモリー内の格納場所を示す識別子で、プログラムの実行中に変更できる
値を持つプログラム・オブジェクトの値を格納している。
ホーム・サー
バー (home
server)
IBM Informix STAR システムのネットワークを介した分散照会で現行データ
ベースがアクセスする最初のデータベース・サーバー。
ホーム・ページ
(home page)
データ行の先頭バイトが入っているページ。データ行がそのオリジナルの
格納域をはみ出しても、ホーム・ページは変更されない。ホーム・ページ
には、データ行の新規格納場所を指す正方向ポインターが含まれている。
「残余ページ (remainder page)」を参照。
ポインター
(pointer)
当該データまたは変数のメモリー内のアドレスを指定する数字。
ホスト変数
(host
variable)
文で参照される C または COBOL プログラム変数。ホスト変数は、その前
に付いたドル記号 ($) またはコロン (:) によって識別される。
ポップ (pop)
メモリー内のスタックから値を削除すること。
「スタック (stack)」および
「プッシュ (push)」を参照。
マクロ (macro)
指示のセットに与えられた名前で、この名前が参照されるたびにコン
ピューターが実行される。
ミラーリング
(mirroring)
同一データを 2 つのチャンクに同時に格納すること。1 つのチャンクが失敗
しても、データは引き続き、ミラーリングされたペアのもう一方のチャン
クで使用することができる。このオプションは、IBM Informix OnLine で提
供される。
メッセージ・ロ
グ (message
log) IBM
Informix
OnLine
が、重要なイベント、たとえば、チェックポイント、ログ・ファイルの埋
め込み、復旧データ、エラーなどを記録するために保持している UNIX
ファイル。
メニュー
(menu)
コンピューターに実行させるコマンドを選択するための画面表示。
22 IBM Informix SQL リファレンス・ガイド
モジュール
(module)
モジュール変数
(module
variable)
単一のシステム・ファイルに常駐するプログラムの一部。各ファイルは 1
つのモジュールを表す。複数のプログラムをまとめて単一のモジュールに
常駐させることもできるし、それらをいくつかのモジュールに収容して、
それぞれに特定の関数または目的を実行させることもできます。
同一モジュール内の任意のプログラム・ブロックから参照できるが、他の
モジュールからは参照できない値を持つ変数。
「変数 (variable)」および
「参照範囲 (scope of reference)」を参照。
モノクロ
(monochrome)
1 つの色しか表示できないモニターを示す用語。
ユーザー・イン
ターフェース
(user
interface)
ユーザーが入力した情報に基づいて、入力をプロンプトで要求し、出力を
表示することにより、ユーザーと通信するプログラムの一部。代表的な
ユーザー・インターフェースには、メニュー、プロンプト、スクリーン・
フォーム、およびオンライン・ヘルプ・メッセージがある。
予約語
(reserved
word)
言語やプログラムの他のコンテキストで使用すると、必ず警告またはエ
ラー・メッセージが出る文またはコマンドの中の単語。
ライブラリー
(library)
プリコンパイルされた関数またはルーチンのコレクションで、特定の種類
のアプリケーションに共通なタスクを実行するためのもの。ユーザーの製
品には、ユーザーのプログラムから呼び出すことができるライブラリー関
数またはルーチンがインクルードされている場合がある。
ラッチ (latch)
ユーザー・プロセスが共有メモリーの項目を修正しようとするときに、
IBM Informix OnLine がそれを調整するために使用する。
リテラル
(literal) 文字定数。たとえば、PICTURE 属性のフォーマット・ストリングで
は、A、#、および X 以外のすべての文字がリテラルである。なぜならば、
それらの文字は、フォーマット・ストリングに現れたとおりに表示される
からである。
リレーショナ
ル・データベー
ス (relational
database)
データを格納するために表構造体を使用するデータベース。表間の関係は、
ユーザーがデータベースにアクセスするときに論理的に指定され、データ
構造体そのものには作成されない ( 他の一部のデータベース・システムと
は異なる )。
リンク (link)
別個にコンパイルされたプログラム・モジュールを 1 つの実行可能プログ
ラムに結合するプロセス。
ルーチン
(routine)
「プログラム・ブロック (program block)」を参照。
用語集
23
ルート DB 領域
(root dbspace)
IBM Informix OnLine システムの初期 DB 領域。すべてのデータに加え、
ルート DB 領域にはすべてのシステム管理表も含まれている。
例外
(exception)
データベース・サーバーによって戻されたエラー、またはストアード・プ
ロシージャー文によって開始された状態を指す。
レコード
(record)
「行 (row)」を参照。
列 (column)
表のすべての行に存在する特定タイプの情報を含むデータ要素。列も、画
面またはウィンドウ内の位置を参照できる。
レポート・ライ
ター (report
writer)
ユーザーがレポート作成言語を使用してレポートの体裁を記述するプログ
ラム ( たとえば、ACE)。次に、レポート・ライターはこのレポート仕様を
実行可能レポートにコンパイルすることができる。
レポート仕様
(report
specification) レポートの記述が含まれているファイルまたはプログラム・
セグメント。レポートは、レポート作成言語で記述される。
連結
(concatenate)
2 番目のストリングを最初のストリングの末尾に追加したときに作成され
る文字ストリングを形成すること。
連結演算子
(concatenation
operator)
2 つのストリングを結合したことを示すために式で使用される 2 つのパイプ
記号 (||) からなる記号表記。
ロールバック
(roll back)
データベースに対するアクションまたは一連のアクションを逆転させるこ
と。データベースは、文が実行される前の状態に戻される。
「トランザク
ション (transaction)」を参照。
ロールフォワー
ド (roll
forward)
データベースを最新の状態にすること。このプロセスは、通常、システ
ム・クラッシュまたはその他の障害が発生した後にデータベースが復旧し
た ときに行われる。IBM Informix SE では、データベースのアーカイブ・コ
ピーがディスクに復元され、データベースが障害発生直前のポイントに
ロールフォワードされる。IBM Informix OnLine では、データベースのアー
カイブ・コピーがディスクに復元され、論理ログ・レコードが障害発生直
前のポイントにロールフォワードされる。
ロウ・デバイス
(raw device)
キャラクター・スペシャル・デバイスとして定義されていて、マウントさ
れない UNIX ディスク・パーティション。
ログイン
(login)
自分自身をコンピューターに識別させること。
24 IBM Informix SQL リファレンス・ガイド
ロック
(locking)
各並行プロセス間で対話の矛盾が発生しないようにするために、オブジェ
クト ( データベース、表、ページ、または行 ) へのアクセスを一時的に制限
すること。ロックは、排他モード ( 読み取りアクセスと書き込みアクセス
の両方を 1 人のユーザーに制限する )、または共有モード ( 他のユーザーに
も読み取り専用アクセスを許可する ) のいずれかである。また、共有モー
ドで開始されるが、行が実際に変更されると、排他モードにアップグレー
ドされる更新ロックもある。
ロック・モード
(lock
mode) すでにロックされたオブジェクトに対するロックを要求するユー
ザーが、(1) ロックを待機しないでエラーを受け取るか、(2) オブジェクト
が解放されるまで待ってロックを受け取るか、または (3) 特定の時間待機し
た後でエラーを受け取るかを設定するオプション (IBM Informix OnLine で
のみ提供されるオプション )。IBM Informix OnLine では、ロック・モード
は、プログラマーが選択する標準のロック単位 ( ページまたは行のいずれ
か ) を指すこともある。
ロック範囲
(locking
granularity)
ロックされるオブジェクトのサイズ。このサイズは、データベース、表、
ページ、または行にすることができる。
論理ログ
(logical log)
ログがアクティブ状態になっていたときにデータベースに対して行ったす
べての変更のレコードを保持するディスク領域の割り当て。論理ログは、
トランザクションのロールバック、システム障害からの復旧、およびアー
カイブからのデータベースの復元を行うために使用される。論理ログは、
「トランザクション・ログ (transaction log)」とも呼ばれる。
ワイルドカード
(wildcard)
ゼロまたはそれ以上の文字の任意のシーケンスまたは任意の単一文字を表
す特殊記号。たとえば、SQL では、アスタリスク (*)、疑問符 (?)、大括弧
([ ])、パーセント記号 (%)、およびアンダースコアー (_) をワイルドカード
文字として使用することができる。(UNIX では、アスタリスク、疑問符、
および大括弧もワイルドカードである。)
割り込み
(interrupt)
現行プロセスを一時的または永続的に停止できる、ユーザーまたは他のプ
ロセスからのシグナル。「シグナル (signal)」を参照。
幻行 (phantom
row)
トランザクションの実行中に、最初、変更または挿入されたが、後でロー
ルバックされた表の行。排他レベルが DIRTY READ であれば、別のプロセ
スが幻行を見ることができる。その他の排他レベルでは、変更されたがコ
ミットされない行を見ることはできない。
従表
(subservient
table)
「外部結合 (outer join)」を参照。
用語集
25
ANSI
American National Standards Institute ( 米国規格協会 ) の頭字語。ANSI は、
SQL 言語のための標準を含め、コンピューター業界のための標準を設定す
る。
ANSI 標準準拠
の (ANSIcompliant)
特定の ANSI パフォーマンス標準に準拠するデータベースを指す用語。
Informix データベースは、ANSI 標準準拠としても、非 ANSI 標準準拠とし
ても作成できる。ANSI 標準準拠データベースは、非 ANSI 標準準拠データ
ベースでは課されない特定の ANSI 要件を課す。たとえば、暗黙的なトラ
ンザクション、必須の所有者名の指定、非バッファー付きログ機能 (IBM
Informix OnLine を使用する場合 ) など。
ASCII
American Standards Committee for Information Interchange ( 情報交換用米国標
準コード ) の頭字語。多くの場合、コンピューターや通信で使用される印
刷可能文字や非印刷可能文字の順序セットを記述するために使用される。
B+ ツリー (B+
tree)
レコード抽出の効率を高めるためにインデックスを編成するメソッドの 1
つ。
BLOB (blobs)
Binary Large Objects ( バイナリー・ラージ・オブジェクト ) の頭字語。
BLOB は、実質的には最大サイズを持たないデータ・オブジェクトである (
理論的には、231 バイトの大きさを持つ )。
BLOB 記述子
(blob
descriptor)
BLOB データをインクルードする行の BLOB 列位置に格納されている 56 バ
イトのポインター。記述子は、BLOB データが格納されている DB 領域ま
たは BLOB 領域 BLOB ページの最初のセグメントを指している。
BLOB ページ
(blobpage)
IBM Informix OnLine の BLOB 領域におけるディスク割り当ての単位。シス
テム管理者が BLOB ページのサイズを決定する。このサイズは、BLOB 領
域ごとに異なる。
BLOB 領域
(blobspace)
IBM Informix OnLine の TEXT および BYTE データを格納するために使用さ
れるチャンクの論理コレクション。
capability
termcap ファイルまたは terminfo ディレクトリーで使用されるコードで、画
面のサイズや画面をクリアするかどうかなどの端末機能を指定する。
COMMIT WORK
トランザクションの開始以降の、データベースに対するすべての変更を受
け入れて、トランザクションを終了すること。
26 IBM Informix SQL リファレンス・ガイド
COMMITTED READ
( 確定読込み )
IBM Informix OnLine で使用できるプロセス排他設定のレベルの 1 つで、
ユーザーは、照会要求を出した時点でコミットされている行のみを表示す
ることができる。つまり、ユーザーは、現在コミットされていないトラン
ザクションの一部として変更された行は表示できない。これは、ANSI 標準
準拠でないデータベースに対する、IBM Informix OnLine 下におけるデフォ
ルトの排他レベルである。
「プロセス排他設定 (process isolation)」を参照。
コンパイル (compile) 指示 ( 高水準言語の ) が入っているファイルを、対応
するマシン・レベル指示が入っているファイルに変換すること。
CURSOR
STABILITY (
カーソル安定性
)
IBM Informix OnLine で使用できるプロセス排他設定のレベルの 1 つで、
データベース・サーバーは、FETCH 文を使用して取り出した行に対して共
用ロックを取得しないと、その行を表示できない。データベース・サー
バーは、FETCH 文を使用して新規行を取り出すための要求を受け取るま
で、ロックを掛けたままにしている。
「プロセス排他設定 (process isolation)」
を参照。
DB モニター
(DB-Monitor)
システム管理者が IBM Informix OnLine データベース・サーバーをモニター
および変更するために使用できる一連の画面を提供するインターフェース。
DB 領域
(dbspace) IBM
Informix
OnLine のディスク領域を表すチャンクの論理コレクション。DB 領域が
UNIX ファイル・システムのディレクトリーと対応していることもある。
たとえば、特定の DB 領域に表を作成することができる。
DBA
Database Administrator ( データベース管理者 ) の頭字語。
DBA アクセス権
付き (DBAprivileged)
実際に DBA アクセス権を持つユーザーによって使用されなくても、DBA
全般に関連するアクセス権を持つことを指す用語。
DIRTY READ( 単
純読込み )
プロセス排他設定の 1 つで、ロックを扱わず、既存のすべての行 ( 現在非
コミット・トランザクションの中から変更できる行でも ) を表示できるよ
うにする。DIRTY READ は、最も低い排他レベル ( まったく排他がない )
である。つまり、IBM Informix SE が通常作動するレベルであり、IBM Informix OnLine のもとでのオプションのレベルである。「プロセス排他設定
(process isolation)」を参照。
DOS エンジン
(DOS engine)
SQL 文の実行を処理する DOS 環境用の IBM Informix データベース製品の部
分。「データベース・サーバー (database server)」も参照。
用語集
27
Esc キー
(escape key)
ほとんどの UNIX および DOS システムで、あるモードを終了し、別のモー
ドを開始するために使用されるキー ( 通常、ESC とマークされる )。多くの
端末では、このキーは、PERFORM および IBM Informix 4GL スクリーン・
フォームに対するデフォルトの ACCEPT キーである ( 照会でテキスト入力
を終了したときに、追加、更新、または削除アクションを示すために使用
される )。
infocmp
UNIX プログラムの 1 つ。これを使用して、terminfo ディレクトリーのファ
イルを表示またはデコンパイルでき、また、コンパイル済みの terminfo 項
目と termcap ファイル内の項目を比較することもできる。
ISAM
Indexed Sequential Access Method ( 索引順次アクセス方法 ) の頭字語。アクセ
ス方法は、より大きな情報のセット ( 表 ) から情報の断片 ( 行 ) を抽出する
方法である。索引順次アクセス方法を使用すれば、情報を特定の順序で検
出したり、特定の情報の断片をインデックスで迅速に見つけ出したりでき
る。
NULL 値 (null
value)
「不明」または「該当せず」を表す値 (NULL はゼロまたはブランクの値と
同じではない )。
PREPARE 文で処
理された文
(prepared
statement)
実行時に作成された文字ストリングをデータベースの要求に変換する SQL
文。この機能を使用すれば、プログラムを修正して再コンパイルすること
なく、プログラムの実行中に要求を作成することができる。
REPEATABLE
READ ( 反復読込
み)
IBM Informix OnLine で使用できるプロセス排他設定レベルの 1 つで、トラ
ンザクションの実行時に読み取られたすべてのデータが他のプロセスに
よって変更されないようにする。REPEATABLE READ のトランザクション
は「直列化可能トランザクション (serializable transactions)」とも呼ばれる。
REPEATABLE READ は、IBM Informix OnLine の場合、ANSI 標準準拠デー
タベースに対してはデフォルトの排他レベルである。
「プロセス排他設定
(process isolation)」を参照。
SPL
Stored Procedure Language ( ストアード・プロシージャー言語 ) の頭字語。
SQL
Structured Query Language ( 構造化照会言語 ) の頭字語。IBM によって開発さ
れ、ANSI によって標準化されたデータベース照会言語。IBM Informix リ
レーショナル・データベース管理製品は、ANSI 標準 SQL に基づいて作成
される。
28 IBM Informix SQL リファレンス・ガイド
SQLCA
SQL CommunicationsArea (SQL 通信域 ) の頭字語。これは、最後に実行され
た SQL 文に関する情報を格納するデータ構造体である。データベース・
サーバーによって SQLCA に戻された結果コードは、IBM Informix 4GL およ
び IBM Informix 埋め込み言語製品によってエラー処理に使用される。
sqlda
SQL DescriptorArea (SQL 記述子領域 ) の頭字語。これは、動的 SQL 文に
よって使用された値に関する記述情報を保持するデータ記述子の配列が
入っている構造体である。これは ESQL/C によって使用することができる。
「記述子 (descriptor)」を参照。
sqlexecd
クライアントからの要求を受け取り、データにアクセスするデータベー
ス・サーバー・プロセスを作成する IBM Informix NET プロセス。
TCP/IP
Transmission Control Protocol/Internet Protocol。DOS、UNIX、およびその他
の環境で使用されているポピュラーなネットワーク。
termcap
共通端末の名前と機能が入っている ASCII ファイル。
terminfo
端末機能のコンパイル済みファイルが入っている階層ディレクトリー構造
体。
tic
terminfo ソース・ファイルまたは、infocmp を使用してデコンパイルされた
terminfo ファイルをコンパイルする UNIX プログラム。「infocmp」を参照。
TLI
Transport Level Interface。ネットワーク・プロトコルから独立したアプリ
ケーション・プログラムが使用するように設計されたインターフェース。
用語集
29
30 IBM Informix SQL リファレンス・ガイド
索引
索引
記号
.dbs 拡張子 7-51, 7-103
.lok 拡張子 7-317
|| 連続演算子 7-377
A
ABSOLUTE キーワード
FETCH で使用 7-158
FETCH での構文 7-155
ACCESS FOR キーワード、
INFO
文 7-190
ADD CONSTRAINT キ ーワ ー
ド、ALTER TABLE での構文 720
ALL キーワード
構文
GRANT 7-182
REVOKE 7-254
SELECT 7-265
UNION 演算子 7-263
式 7-387
使用
GRANT で 7-183
REVOKE 7-255
SELECT 7-266
UNION 演算子 7-293
式 7-398
条件副照会 7-362
副照会の開始 7-281
ALLOCATE DESCRIPTOR 文
構文 7-13
連結演算子 7-377
ALTER INDEX 文
クラスター・インデックス
の削除 7-19
クラスター・インデックス
の作成 7-17
構文 7-17
ALTER TABLE 文
ADD CONSTRAINT 節 7-33
ADD 節 7-22
CHECK 節 7-28
DEFAULT 節 7-23
DROP CONSTRAINT 節 735
DROP 節 7-29
LOCK MODE 節 7-36
MODIFY NEXT SIZE 節 735
PAGE キーワード 7-36
REFERENCES 節 7-27
ROW キーワード 7-36
アクセス権 7-178
一意性制約のルール 7-33
主キー制約のルール 7-34
次のサイズの変更 7-35
表の再クラスター化 7-18
表ロックモードの変更 7-36
列制約の削除 7-35
列制約の追加 7-32
列データ型の変更 7-30
列の削除 7-29
列の追加 7-22
Alter アクセス権 7-183
ALTER キーワード
GRANT で使用 7-183
構文
GRANT 7-178
REVOKE 7-254
使用
REVOKE 7-255
AND キーワード
使用
BETWEEN キーワード
CREATE VIEW での 7100
GRANT 7-186
表示ラベル 7-269
表の別名 7-276
ASC キーワード
構文
CREATE INDEX で の
7-55
SELECT 7-288
7-277
条件セグメント 7-363
条件 セグ メン トの 構文 7-
使用
CREATE INDEX で の
7-57
350
AND 論理演算子 7-363
ANSI 標準準拠
-ansi フラグ 4-7, 7-70, 7-77, 799
行の更新 7-333
表の命名 7-248
レベル -24
ANSI 標準準拠データベース
BEGIN WORK を持つ 7-38
FOR UPDATE が不要 7-112
IBM Informix SE で の使 用
7-54
インデックス命名 7-365, 7417, 7-439
作成、START DATABASE
7-323
説明 7-52
表アクセス権 7-77
プロシージャー命名 7-429
ANY キーワード
WHENEVER 7-345
条件副照会での使用 7-362
副照会の開始 7-281
WHENEVER 7-343
AS キーワード
SELECT 7-265
構文
CREATE VIEW での 798
GRANT 7-178
LOAD 文の要件 7-205
UNLOAD 文に関する考慮
事項 7-327
構文 7-370
ス ト ア ー ド・プ ロ シ ー
ジャー 8-43, 8-47
説明 3-5
使用
ASCII 照合順序 7-435
AVG 関数
式での使用 7-399
式の構文 7-387
B
BEGIN WORK 文
構文 7-37
トラ ンザ クシ ョン 内で の
ロック 7-37
BETWEEN キーワード
構文、条件セグメント 7-351
使用
SELECT 7-277
条件セグメント 7-354
Binary Large Object (BLOB)
影響、検査時の排他 7-314
Bourne シェル、環境変数の設定
方法 4-4
BUFFERED LOG キーワード
CREATE DATABASE での
構文 7-50
CREATE DATABASE での
使用 7-53
BUFFERED キー ワー ド、SET
LOG の構文 7-319
BYTE データ型
BYTE 列の選択 3-6
2 IBM Informix SQL リファレンス・ガイド
C
C シェル、環境変数の設定方法
4-4
CALL キーワード、WHENEVER
文 7-343, 7-348
CALL 文
値の割り当て 8-25
構文 8-37
実行、プロシージャー 8-11
CHAR データ型
INSERT 7-433
構文 7-370
説明 3-6
データ型の変更 3-22
デフォルト値として使用 724, 7-83
CHECK TABLE 文、構文と使用
法 7-39
CHECK キーワード
ALTER TABLE での使用 728
CREATE TABLE での使用
7-90
CLOSE DATABASE 文
クローズの前提条件 7-45
構文 7-45
CLOSE 文
INSERT カーソルのクロー
ズ 7-42
SELECT カーソルの終了 742
構文 7-41
トランザクションの終了に
より影響を受ける
カーソル 7-43
連結演算子 7-377
CLUSTER キーワード
構文
ALTER INDEX 内の 717
CREATE INDEX で の
7-55
使用
CREATE INDEX で の
7-56
使用法
ALTER INDEX での 718
COLUMNS FOR キ ーワ ード、
INFO 文 7-189
COMMIT WORK 文
構文 7-47
COMMITTED READ キ ーワ ー
ド、SET ISOLATION における
構文 7-312
Connect アクセス権 7-180, 7-256
CONNECT キーワード
GRANT 7-180
REVOKE 7-256
CONSTRAINT キーワード
ALTER TABLE での 7-32
CREATE TABLE での 7-84
CONTINUE
キ ーワ ード、
WHENEVER 文 7-343, 7-348
CONTINUE 文
構文 8-40
ループの終了 8-27
COUNT 関数
式での使用 7-398, 7-400
COUNT
キー ワー ド、SET
DESCRIPTOR での使用 7-300
COUNT フィールド
取得、
GET DESCRIPTOR で
コン テン ツを 7172
使用、GET DESCRIPTOR 7174
設定、WHERE 節の値を 7-
298
CREATE AUDIT 文
アーカイブの必要 7-49
更新記録の開始 7-48
構文 7-48
CREATE DATABASE 文
ANSI 準拠 7-52
OnLine でのロギング 7-52
構文 7-50
使用
CREATE SCHEMA SE
7-69
IBM Informix SE 7-53
での使用
PREPARE 7-51
CREATE INDEX 文
暗黙的表ロック 7-56
構文 7-55
使用
ASC キー ワー ドを 使
用した 7-57
CLUSTER キーワード
を使用した 756
CREATE SCHEMA を
使用した 7-69
DESC キーワード を使
用した 7-57
UNIQUE キー ワー ド
を使用した 756
複合インデックス 7-57
CREATE PROCEDURE FROM
文
埋め込み言語 8-8
構文と使用法 7-68
CREATE PROCEDURE 文
CREATE
PROCEDURE
FROM 内 8-8
構文 7-59
使用 8-7
CREATE SCHEMA 文
CREATE シー ケン スを 使
用した 7-70
GRANT を使用した 7-70
構文 7-69
CREATE SYNONYM 文
ANSI 標準準拠の命名法 772
CREATE SCHEMA を使 用
した 7-69
構文 7-71
シノニムに対するアクセス
権 7-71
シノニムのチェーニング 774
ビューのシノニム 7-71
表のシノニム 7-71
CREATE TABLE 文
BLOB データ型を持つ 7-85
CHECK 節 7-90
CREATE SCHEMA を使 用
した 7-69
DEFAULT 節 7-82
IN DB 領域節 7-93
LOCK MODE 節 7-96
REFERENCES 節 7-87
一意性制約のルール 7-87
一時表の作成 7-91
エクステント・サイズの指
定 7-95
構文 7-76
参照制約のルール 7-87
主キー制約のルール 7-87
制約の定義
表レベルでの 7-85
列レベルでの 7-84
データベース表の格納 7-93
表列の指定 7-81
命名規則 7-77
列 NOT NULL の設定 7-25,
7-84
CREATE VIEW 文
CREATE SCHEMA を使 用
した 7-69
SELECT * 表記を使用した
7-99
WITH CHECK OPTION 7索引
3
101
アクセス権 7-99
仮想列 7-100
構文 7-98
列データ型 7-99
CURRENT OF キーワード
構文
DELETE 7-124
UPDATE 7-331
使用
DELETE 7-125
UPDATE 7-339
CURRENT 関数
構文
INSERT 7-197
式 7-380
条件セグメント 7-351
使用
ALTER TABLE での 723
CREATE TABLE で の
7-82
INSERT 7-199
WHERE 条件 7-384
式 7-383
入力、DAY 関 数の 7384
CURRENT キーワード
FETCH で使用 7-158
FETCH での構文 7-155
CURSOR STABILITY キーワー
ド、SET ISOLATION における
構文 7-312
ベース 7-103
SQLAWARN 後 7-103
現行データベースの指定 7102
構文 7-102
デー タベ ース 型の 決定 7102
排他モード 7-104
プログラム変数付き 7-103
DATE 値
DBDATE 環境変数の設定
4-8
DBDATE を使用したヨー
ロッパ形式の指定
4-9
DATE 関数
式での使用 7-390
式の構文 7-387
DATE データ型
DATETIME への変換 3-24
DATE 値の表現 3-28
演算の範囲 3-24
構文 7-370
説明 3-7
DATETIME データ型
DATE お よび INTERVAL
を使用した演算の
範囲 3-24
DATE への変換 3-24
DATETIME
値 およ び
INTERVAL 値 を
持つ 3-27
DATETIME 値の表現 3-28
DBTIME 環境変数の使用 418
D
DATA フィールド
設定、SET DESCRIPTOR に
よる 7-303
説明 6-7, 6-16
DATABASE 文
4GL における LIKE 7-104
DBPATH の 外部 のデー タ
EXTEND 関数 付き 3-26, 327
INSERT 7-433
INTERVAL 値 との 加算 ま
たは減算 3-26
値の操作 3-26
引用 符付 きス トリ ング 7432
構文 3-8, 7-370, 7-422
4 IBM Informix SQL リファレンス・ガイド
式 7-385
式の範囲 3-25
精度とサイズ 3-8
フィールド修飾子 3-8, 7-373
文字ストリング値 3-10
DATETIME フィールド修飾子
セグメント 7-373
DATETIME
フォ ーマ ット、
DBTIME 環境変数を使用した 418
DAY 関数
式の構文 7-387
使用
式 7-389
DAY キーワード
構文
DATETIME デ ータ 型
7-373
INTERVAL デ ータ 型
7-419
使用
DATETIME フ ィー ル
ド修 飾子 7422
DATETIME フ ィー ル
ド修飾子とし
て 3-8
INTERVAL フ ィー ル
ド修 飾子 7425
INTERVAL フ ィー ル
ド修飾子とし
て 3-14
DB 領域
CREATE DATABASE を使
用して選択 7-50
DBA アクセス権付きプロシー
ジャー 8-16
DBA キーワード
GRANT で使用 7-181
REVOKE 7-256
DBANSIWARN 環境変数 4-7, 770, 7-77, 7-99
DBDATE 環境変数 4-8
DBDELIMITER 環境変数 4-9, 7-
の制限 7-290
PREPARE 文で処理された
文でのカーソル 7-
206
DBEDIT 環境変数 4-10
DBFORMAT 環境変数 4-10
DBLANG 環境変数 4-11
dbload ユーティリティー
DBDELIMITER を使用した
フィールド区切り
文字の指定 4-9
DBMENU 環境変数 4-12
DBMONEY 環境変数 4-12
DBNETTYPE 環境変数 4-13
DBPATH 環境変数 4-14, 7-103, 7-
119
カーソル型 7-111
カーソル特性 7-112
カーソルとトランザクショ
ン 7-120
構文 7-108
指定された列の更新 7-117
定義と使用
HOLD カーソル 7-114
INSERT カー ソル 7112, 7-122
SELECT カー ソル 7-
369
DBPRINT 環境変数 4-15
DBREMOTECMD 環境変数 4-16
DBSERVERNAME 関数
サーバー名を戻す 7-382
使用
ALTER TABLE での 7-
112
UPDATE カ ーソ ル 7112, 7-115
順カーソル 7-113
スクロール・カーソル
23
CREATE TABLE で の
7-82
式 7-382
DBSRC 環境変数 4-16
DBTEMP 環境変数 4-17
DBTIME 環境変数 4-18
DEALLOCATE DESCRIPTOR
文
構文 7-106
連結演算子 7-377
DECIMAL データ型
構文 7-370
説明 3-11
データ型の変更 3-22
デフォルト値として使用 724, 7-82
浮動小数点 3-11
DECLARE 文
FOR UPDATE キ ーワー ド
7-112
INSERT カーソルと HOLD
7-123
ORDER BY による SELECT
7-113
連結演算子 7-377
DECLARE 文、SELECT 付き 7272
D E F E R R E D 、S E T
CONSTRAINTS 文 7-294
DEFINE 文
構文 8-41
配置 8-42
Delete アクセス権 7-182
DELETE キーワード
GRANT で使用 7-183
構文
GRANT 7-182
REVOKE 7-254
使用
REVOKE 7-255
DELETE 文
CURRENT OF 節 7-125
アクセス権 7-182
カーソル付き 7-115
構文 7-124
条件セグメント 7-350
トランザクション内 7-124
DELIMITER キーワード
LOAD 7-206
UNLOAD 7-328
DESC キーワード 7-289
構文
CREATE INDEX で の
7-55
SELECT 7-288
使用
CREATE INDEX で の
7-57
SELECT 7-289
DESCRIBE 文
USING SQL DESCRIPTOR
節 7-130
値、SELECT によって戻さ
れた 7-129
関係、GET DESCRIPTOR と
の 7-175
構文 7-127
文型の記述 7-128
連結演算子 7-377
DIRTY READ キーワード、SET
ISOLATION における構文 7-312
DISTINCT キーワード
構文
CREATE INDEX で の
7-55
SELECT 7-265
式 7-387
使用
CREATE INDEX で の
7-56
SELECT 7-266
無効、副照会 7-361
DOCUMENT キーワード
ス ト ア ー ド・プ ロ シ ー
ジャーでの使用 88
DROP AUDIT 文 7-133
DROP CONSTRAINT キー ワー
ド
ALTER TABLE での構文 720
索引
5
ALTER TABLE での使用 735
DROP DATABASE 文 7-134
DROP INDEX 文
構文 7-136
DROP SYNONYM 文 7-139
DROP TABLE 文 7-141
DROP VIEW 文 7-143
DROP キーワード
ALTER TABLE での構文 720
ALTER TABLE での使用 729
EXECUTE ON キーワード
構文
GRANT 7-178
REVOKE 7-252
使用
GRANT 7-184
REVOKE 7-252
EXECUTE PROCEDURE 文
FOREACH 8-55
値の割り当て 8-25
使用 8-11
EXECUTE 文
USING DESCRIPTOR 節 7148
E
ERROR
キ ーワ ード、
WHENEVER 文 7-343, 7-346
ESCAPE キーワード
使用
LIKE キーワード 7-279,
7-359
MATCHES キーワード
7-279, 7-359
WHERE キーワード 7278
条件セグメント 7-357
条件 セグ メン トの 構文 7351
ESQL
SQL 通信領域 5-3
エラー処理 5-3
EXCLUSIVE キーワード
構文
DATABASE 7-102
LOCK TABLE 7-207
使用
DATABASE 7-104
LOCK TABLE 7-208
EXECUTE IMMEDIATE 文
構文と使用法 7-149
制限付きの文型 7-150
連結演算子 7-377
USING SQL DESCRIPTOR
節 7-147
構文 7-144
パラメーター化、文の 7-146
連結演算子 7-377
EXISTS キーワード
条件副照会での使用 7-361
副照会の開始 7-280
EXIT 文
構文 8-49
ループの終了 8-27
EXTEND 関数
DATE、DATETIME、および
INTERVAL 付 き
3-26, 3-27
式の構文 7-387
EXTENT SIZE キーワード 7-95
所 7-159
順カーソル 7-157
スクロール・カーソル 7-157
プログラム配列 7-160
連結演算子 7-377
ロック、更新の 7-161
FIRST キーワード
FETCH で使用 7-157
FETCH での構文 7-155
FLOAT データ型
構文 7-370
説明 3-12
データ型の変更 3-22
デフォルト値として使用 724, 7-82
FLUSH 文
構文 7-164
連結演算子 7-377
FOR TABLE
キ ーワ ード、
UPDATE STATISTICS 7-341
FOR UPDATE キーワード
DECLARE の構文 7-108
UPDATE との関連 7-339
使用
DECLARE 7-112, 7-115,
7-119
列リスト 7-117
FOR キーワード
CONTINUE 8-40
CREATE AUDIT での 7-48
CREATE SYNONYM で の
7-71
F
FETCH 文
CLOSE による影響 7-42
INTO キーワード 7-271
SQLCA による結果の検査
7-163
関係、
GET DESCRIPTOR と
の 7-172
構文 7-155
指定、値のメモリー格納場
6 IBM Informix SQL リファレンス・ガイド
EXIT 8-49
FOR 文
インクリメントの使用 8-52
構文 8-51
式リストの使用 8-53
ス ト ア ー ド・プ ロ シ ー
ジャーでのループ
8-26
複数範囲の指定 8-53
FOREACH キーワード
CONTINUE 文 8-40
EXIT 8-49
FOREACH 文 7-216
構文 8-55
ス ト ア ー ド・プ ロ シ ー
ジャーでのループ
8-26
FOREIGN KEY キーワード
ALTER TABLE での 7-32
CREATE TABLE での 7-85
FRACTION キーワード
構文
DATETIME デ ータ 型
7-373
INTERVAL デ ータ 型
7-419
使用
DATETIME フ ィー ル
ド修 飾子 7-
425
INTERVAL フ ィー ル
ド修飾子とし
て 3-14
FREE 文
カーソルへの影響 7-217
効果、BYTE と TEXT 変数
の 7-170
構文 7-167
連結演算子 7-377
FROM キーワード
構文
PUT 7-234
REVOKE 7-252
SELECT 7-263
使用
PUT 7-239
SELECT 7-274
7-419
使用
GET DESCRIPTOR 文
COUNT キーワード 7-174
構文 7-172
連結演算子 7-377
GOTO
キ ーワ ード、
WHENEVER 文 7-343, 7-346
GRANT 文
CREATE SCHEMA を使 用
した 7-69
構文 7-178
作成、アクセス権連鎖 7-185
データベース・レベル・ア
クセス権 7-180
デフォルトの表アクセス権
DATETIME フ ィー ル
ド修 飾子 7422
DATETIME フ ィー ル
ド修飾子とし
て 3-8
INTERVAL フ ィー ル
ド修 飾子 7425
INTERVAL フ ィー ル
ド修飾子とし
て 3-14
7-184
422
DATETIME フ ィー ル
ド修飾子とし
て 3-8
INTERVAL フ ィー ル
ド修 飾子 7-
INTERVAL デ ータ 型
G
引渡し、付与権の 7-185
ビュ ーで のア クセ ス権 7186
表レベル・アクセス権 7-182
変更、権限授与者 7-186
GROUP BY キーワード
SELECT での構文 7-263
SELECT での使用 7-284
H
HAVING キーワード
SELECT での構文 7-263
SELECT での使用 7-286
HEX 関数、式での使用 7-393
HIGH キーワード 7-321
HOLD カーソル
INSERT カーソルと HOLD
7-123
使用 7-114
Hold カーソル
定義 7-112
HOUR キーワード
構文
DATETIME デ ータ 型
7-373
I
IBM Informix 4GL
SQLCODE の使用 5-5
STATUS 変数 5-5
WHENEVER ERROR 文 7343
IDATA フィールド
X/Open プログラム 7-175
説明 6-8, 6-17
IF 文
NULL 値 8-60
構文 8-59
構文と使用 8-59
if 文
分岐 8-26
ILENGTH フィールド
X/Open プログラム 7-175
説明 6-8, 6-17
IMMEDIATE キーワード、SET
CONSTRAINTS 文 7-294
IN キーワード
構文
CREATE AUDIT で の
7-48
CREATE DATABASE
での 7-50
索引
7
CREATE TABLE で の
7-93
LOCK TABLE 7-207
使用
WHERE キーワード 7278
条件セグメント 7-355
条件副照会 7-360
Index アクセス権 7-183
INDEX キーワード
GRANT で使用 7-183
構文
GRANT 7-182
REVOKE 7-254
使用
REVOKE 7-255
INDEXES FOR キ ーワ ード、
INFO 文 7-189
INDICATOR
キ ーワ ード、
SELECT 7-270
INDICATOR フィールド
設定、SET DESCRIPTOR で
の 7-304
説明 6-7, 6-16
INFO 文
アクセス権と状態の表示 7190
構文 7-188
表、列、およびインデック
スの表示 7-189
Informix
の 拡張 機能 検査、
DBANSIWARN を使用した指定
INSERT INTO キーワード
INSERT 7-192
LOAD 7-206
INSERT カーソル
HOLD 7-123
INSERT 7-194
PUT 7-238
SQLCA 内での CLOSE の結
果 7-42
オープン 7-212
クローズ 7-42
再オープン 7-213
使用 7-112
定義 7-111
Insert カーソル
書込 み、FLUSH でバ ッ
ファー付き行を 7164
INSERT キーワード
GRANT で使用 7-183
構文
GRANT 7-182
REVOKE 7-254
使用
REVOKE 7-255
Insert バッファー
挿入、カーソルで行を 7-194
INSERT バッファー
PUT による行の格納 7-235
挿入された行のカウント 7166, 7-242
定数 値に よる 埋め 込み 7-
4-7
INFORMIXCOB 環境変数 4-20
INFORMIXCOBDIR 環境変数 420
INFORMIXCOBSTORE 環境 変
数 4-21
INFORMIXCOBTYPE 環境変数
4-21
INFORMIXDIR 環境変数 4-22
INFORMIXTERM 環境変数 4-23
Informix、ユーザーと関連する
アクセス権 7-181
237
バッ ファ ーの トリ ガー 7240
INSERT 文
DECLARE 7-108
INSERT カーソルでの使用
7-122
SELECT 7-200
SERIAL 列 7-199
SERIAL 列への値の挿入 318
構文 7-192
8 IBM Informix SQL リファレンス・ガイド
充て ん、PUT で挿 入バ ッ
ファーを 7-235
挿入
カー ソル によ る行 7194
ビューの行 7-193
挿入する値の指定 7-197
動的 SQL 7-200
トランザクションの影響 7195
INTEGER データ型
構文 7-370
説明 3-13
データ型の変更 3-22
デフォルト値として使用 724, 7-82
INTERVAL データ型
DATE お よび DATETIME
を使用した演算の
範囲 3-24
DATETIME 値 との加 算ま
たは減算 3-26
EXTEND 関数 付き 3-26, 327
INSERT 7-433
値の乗算または除算 3-30
引用 符付 きス トリ ング 7432
加算または減算 3-29
構文 7-370, 7-425
式 7-385
式の範囲 3-25
説明 3-13
フィールド区切り文字 3-15
フィールド修飾子、構文 7419
INTERVAL フィールド修飾子
セグメント 7-419
INTO TEMP キーワード
SELECT での構文 7-263
使用
SELECT 7-290
UNION 演算子 7-292
INTO キーワード
SELECT 7-270
構文
FETCH 7-155
SELECT 7-263
使用
FETCH 7-160
SELECT 7-270
IS NOT キーワード、条件セグメ
ントの構文 7-351
IS NULL キーワード 7-278
IS キーワード
WHERE キーワード 7-278
条件セグメント 7-356
ITYPE フィールド
X/Open プログラム 7-175
設定、SET DESCRIPTOR に
よる 7-304
説明 6-8, 6-17
使用
SELECT 7-278
条件セグメント 7-357
条件 セグ メン トの 構文 7351
ワイルドカード文字 7-279
LOAD 文
DBDELIMITER を使用した
フィールド区切り
文字の指定 4-9
DELIMITER 節 7-206
INSERT INTO 節 7-206
LOAD FROM フ ァイ ル 7203
VARCHAR、TEXT、または
BYTE データ型の
ロード 7-205
構文 7-202
データの入力フォーマット
7-204
L
LAST キーワード
FETCH で使用 7-157
FETCH での構文 7-155
LENGTH 関数
式 7-267
式での使用 7-393
式の構文 7-387
LENGTH フィールド
DATETIME
およ び
INTERVAL タ イ
プ 7-304
DECIMAL および MONEY
型 7-304
設定、SET DESCRIPTOR に
よる 7-303
説明 6-7, 6-16
LET 文
値の割り当て 8-25
構文 8-63
実行、プロシージャーの 811
LIKE キーワード
ロードする表の指定 7-206
LOCK MODE キーワード
構文
ALTER TABLE での 7-
M
MATCHES キーワード
構文、条件セグメント 7-351
使用
SELECT 7-278
条件セグメント 7-357
ワイルドカード文字 7-279
MAX 関数
式での使用 7-399
式の構文 7-387
MDY 関数
式の構文 7-387
MIN 関数
式での使用 7-399
式の構文 7-387
MINUTE キーワード
構文
DATETIME デ ータ 型
7-373
使用
DATETIME フ ィー ル
ド修 飾子 7422
20
DATETIME フ ィー ル
ド修飾子とし
て 3-8
INTERVAL フ ィー ル
ド修 飾子 7-
CREATE TABLE で の
7-96
使用
ALTER TABLE での 736
CREATETABLE で の
7-96
LOCK TABLE 文
構文 7-207
トランザクション付きデー
タベース 7-208
トランザクションなしデー
タベース 7-209
LOG IN キーワード、CREATE
DATABASE での構文 7-50
LOW キーワード 7-321
425
INTERVAL フ ィー ル
ド修飾子とし
て 3-14
MODE ANSI キーワード
構文
CREATE DATABASE
での 7-50
START DATABASE 7323
使用
CREATE DATABASE
での 7-53
START DATABASE 7324
索引
9
MODIFY NEXT SIZE キーワー
ド
ALTER TABLE での構文 720
ALTER TABLE での使用 735
MODIFY キーワード
ALTER TABLE での構文 720
ALTER TABLE での使用 730
MONEY 値
DBMONEY 環 境変 数の 設
定 4-12
DBMONEY
を使 用し た
ヨーロッパ形式の
指定 4-13
MONEY データ型
構文 7-370
説明 3-17
データ型の変更 3-22
デフォルト値として使用 724, 7-82
MONTH 関数
式での使用 7-389
式の構文 7-387
MONTH キーワード
構文
DATETIME デ ータ 型
使用
N
NAME フィールド
説明 6-7, 6-16
NEXT SIZE キーワード
CREATE TABLE での使用
7-95
7-419
使用
DATETIME フ ィー ル
ド修 飾子 7422
DATETIME フ ィー ル
ド修飾子とし
て 3-8
INTERVAL フ ィー ル
ド修 飾子 7425
INTERVAL フ ィー ル
ド修飾子とし
LIKE、MATCHES キー
ワード 7-278
条件セグメント 7-357
NOTFOUND キーワード、NOT
FOUND キーワードと対比 7-346
NULL 値
IF 文 8-60
SELECT 内 でチ ェッ ク 7270
GRANT で使用 7-181
NEXT キーワード
FETCH で使用 7-157
FETCH での構文 7-155
NOSORTINDEX 環境変数 4-24
NOT CLUSTER キーワード
ALTER INDEX 内の構文 717
ALTER TABLE での使用 719
NOT FOUND キ ーワ ード、
WHENEVER 文 7-343, 7-346
NOT IN キーワード、条件副照
会 7-360
NOT NULL キーワード
構文
ALTER TABLE での 722
CREATE TABLE で の
7-373
INTERVAL デ ータ 型
7-351
て 3-14
7-81
使用
ALTER TABLE での 730
CREATE TABLE で の
7-84
IS キーワード 7-278
NOT WAIT キー ワー ド、SET
LOCK MODE 7-316
NOT キーワード
構文
BETWEEN キーワード
WHILE 文 8-83
主キーの制限 7-86
ス ト ア ー ド・プ ロ シ ー
ジャーによる暗黙
的な戻し 8-74
デフォルト値としての指定
7-25
NULL キ ーワ ード、プ ロシ ー
ジャー変数としてあいまい 7413
NULLABLE フィールド
説明 6-8, 6-17
O
OF キーワード
DECLARE での使用 7-117
DECLARE の構文 7-108
ON EXCEPTION 文
エラーのトラップ 8-32
構文 8-66
制御範囲 8-33
配置 8-68
ユーザー生成のエラー 8-34
ON キーワード
構文
CREATE INDEX で の
7-55
GRANT 7-178
REVOKE 7-252
7-277
IN キーワード 7-280
条件セグメント 7-350,
10 IBM Informix SQL リファレンス・ガイド
使用
CREATE INDEX で の
7-56
GRANT 7-184
OPEN 文
? パラメーターの値の置換
7-214
7-96
PATH 環境変数 4-28
PERFORM
キ ーワ ード、
WHENEVER 文 7-343
PIPE キーワード、OUTPUT 文 7-
FOREACH の 使用 時期 7-
220
216
FREE 7-217
PRECISION フィールド
GET DESCRIPTOR によ る
INSERT カーソルのオープ
ン 7-212
SELECT ま たは UPDATE
カーソルのオープ
ン 7-211
カー ソル の再 オー プン 7213
構文 7-210
作成、アクティブ・セツト
を 7-211
連結演算子 7-377
OR キーワード
条件 セグ メン トの 構文 7350
使用、条件セグメントで 7363
ORDER BY キーワード
INSERT での制限 7-200
SELECT での構文 7-263
降順 7-289
使用
SELECT 7-288
UNION 演算子 7-292
昇順 7-289
番号による列の選択 7-290
OUTER キー ワー ド、FROM
キーワード SELECT 7-274
OUTPUT 文、構文と使用 7-219
P
PAGE キーワード
ALTER TABLE での使用 736
CREATE TABLE での使用
7-176
設定、SET DESCRIPTOR に
よる 7-304
説明 6-8, 6-17
PREPARE 文
FREE によるリソースの解
放 7-169
SELECT での制限 7-224
構文 7-221
実行 7-144
パフォーマンス効率の向上
7-233
パラメーター化、SQL 識別
子 7-228
複数文テキスト 7-226, 7-231
プレースホルダーとしての
疑問符 (?) 7-222
文識別子の使用 7-222
文のパラメーター化 7-227
有効な文テキスト 7-224
連結演算子 7-377
PREPARE 文で処理された文
DESCRIBE に よる 戻り 値
の記述 7-128
PREPARE 文で処理された
オブジェクトの制
限 7-222
有効な文テキスト 7-224
実行 7-144
PREVIOUS キーワード
FETCH で使用 7-157
FETCH での構文 7-155
PRIMARY KEY キーワード
ALTER TABLE での使用 732
ALTER TABLE 文での 7-25
CREATE TABLE での 7-84,
7-85
PRIOR キーワード
FETCH で使用 7-157
FETCH での構文 7-155
PRIVILEGES FOR キーワード、
INFO 文 7-190
PRIVILEGES キーワード
GRANT で使用 7-183
構文
GRANT 7-182
REVOKE 7-254
使用
REVOKE 7-255
PUBLIC キーワード
構文
GRANT 7-178
REVOKE 7-252
使用
GRANT 7-181
REVOKE 7-254
PUT 文
FLUSH 7-235
行値のソース 7-237
使用、トランザクション内
7-235
連結演算子 7-377
R
RAISE EXCEPTION 文
構文 8-72
ループの終了 8-27
RECOVER TABLE 文
アーカイブ、データベース
を更新記録付きで
7-243
構文 7-243
操作、更新記録ファイル 7244
REFERENCES FOR キ ーワ ー
ド、INFO 文 7-190
References アクセス権
索引
11
INFO 文での表示 7-190
定義 7-183
REFERENCES キーワード
ALTER TABLE での 7-27
CREATE TABLE での 7-87,
7-89
GRANT で使用 7-183
構文
GRANT 7-182
REVOKE 7-254
使用
REVOKE 7-255
RELATIVE キーワード
FETCH で使用 7-158
FETCH での構文 7-155
RENAME COLUMN 文
構文 7-246
制限 7-246
RENAME TABLE 文
ANSI 標準準拠データベー
スの命名 7-248
構文 7-248
REPAIR TABLE 文、構文および
使用 7-250
REPEATABLE READ キーワー
ド、SET ISOLATION における
構文 7-312
Resource アクセス権 7-181
RESOURCE キーワード
GRANT で使用 7-181
REVOKE で使用 7-256
RETURN 文
NULL 値の戻り 8-74
構文 8-74
不十分な値の戻り 8-74
ループの終了 8-27
REVOKE 文
アクセス権必須 7-253
構文 7-252
データベース・レベル・ア
クセス権 7-256
表レベル・アクセス権 7-254
列指定アクセス権 7-256
ROLLBACK WORK 文
425
FOREACH に よる 制限 7260
WHENEVER との使用 7-38,
7-46
構文 7-259
使用、WHENEVER 7-260
ROLLFORWARD DATABASE
文
構文 7-261
排他ロック機能 7-261
ROUND 関数、式での使用 7-394
ROW キーワード
ALTER TABLE での使用 736
CREATE TABLE での使用
7-96
S
SCALE フィールド
GET DESCRIPTOR によ る
7-176
設定、SET DESCRIPTOR に
よる 7-304
説明 6-7, 6-16
SCROLL キーワード
DECLARE での使用 7-113
DECLARE の構文 7-108
SECOND キーワード
構文
DATETIME デ ータ 型
7-373
INTERVAL デ ータ 型
7-419
使用
DATETIME フ ィー ル
ド修 飾子 7422
DATETIME フ ィー ル
ド修飾子とし
て 3-8
INTERVAL フ ィー ル
ド修 飾子 7-
12 IBM Informix SQL リファレンス・ガイド
INTERVAL フ ィー ル
ド修飾子とし
て 3-14
Select アクセス権
定義 7-183
SELECT カーソル
オープン 7-211
再オープン 7-213
終了 7-42
使用 7-112
定義 7-111
SELECT キーワード
GRANT で使用 7-183
構文
GRANT 7-182
REVOKE 7-254
使用
REVOKE 7-255
プロシージャー変数として
あいまい 7-413
SELECT 文
DECLARE 7-108
DESCRIBE に よる 戻り 値
の記述 7-127
FOREACH 8-55
FROM 節 7-274
GROUP BY 節 7-284
HAVING 節 7-286
INSERT 7-200
INTO TEMP 節 7-290
INTO キーワードによる 7159
INTO 節 I4GL、ESQL 7-270
LET 8-64
ORDER BY 節 7-288
SELECT 節 7-265
UNION 演算子 7-292
WHERE 節での表の結合 7282
値の割り当て 8-25
カーソルと DECLARE の関
連付け 7-112
検索した行の ASCII ファイ
ルへの書き込み 7325
構文 7-263
式の使用 7-266
集計関数 7-397
条件セグメント 7-350
ス ト ア ー ド・プ ロ シ ー
ジャーへの引数と
して 8-38
制限、INTO 節による 7-224
選択番号 7-285, 7-290
副照会、WHERE キーワー
ドによる 7-277
リモート照会 7-264
列番号 7-285, 7-290
SERIAL データ型
ALTER TABLE での 7-22
INSERT 7-199
値の挿入 3-18
値のリセット 3-18
構文 7-370
ス ト ア ー ド・プ ロ シ ー
ジャー 8-42
説明 3-17
SET CONSTRAINTS 文、構文お
よび使用 7-294
SET DEBUG FILE TO 文、構文
および使用 7-296
SET DEBUG FILE 文
TRACE 8-79
SET DESCRIPTOR 文
VALUE オプション 7-301
構文 7-298
SET EXPLAIN 文
MERGE JOIN 情報 7-308
SORT SCAN 情報 7-308
オプティマイザー・アクセ
ス・パス 7-307
構文 7-306
出力の解釈 7-306
出力例 7-308
SET ISOLATION 文
構文 7-312
デフ ォル トの デー タベ ー
ス・レベル 7-312
排他の影響 7-314
排他レベルの定義 7-313
SET LOCK MODE 文
カーネル・ロック 7-317
構文 7-316
待ち時間の設定 7-317
SET LOG 文
構文 7-319
バッファー付き 7-319
SET OPTIMIZATION 文、構文お
よび使用 7-321
SET キーワード
UPDATE での構文 7-331
UPDATE での使用 7-334
SHARE
キー ワー ド、LOCK
TABLE での構文 7-207
SITENAME 関数
構文
INSERT 7-197
式 7-380
サーバー名を戻す 7-382
使用
ALTER TABLE での 723
CREATE TABLE で の
7-82
INSERT 7-199
式 7-382
SMALLFLOAT データ型
構文 7-370
説明 3-18
データ型の変更 3-22
SMALLINT データ型
構文 7-370
説明 3-19
データ型の変更 3-22
デフォルト値として使用 724, 7-82
SOME キーワード
条件副照会での使用 7-362
副照会の開始 7-281
SPL
SQL との関連 8-5
流れ制御文 8-25
文構文 8-36
SPL による Resource アクセス権
8-17
SQL
文タイプ 7-9
SQL 通信領域 (SQLCA)
CLOSE 後の結果 7-42
DATABASE の結果 7-102
DBANSIWARN の設定の効
果 4-7
FETCH 後の結果 7-163
PUT 後の結果 7-241
SELECT 後の結果 7-273
結果、DESCRIBE 後の 7-128
結果、FLUSH 後の 7-165
結果、OPEN 後の 7-212
説明 5-3
SQLCA.SQLAWARN (4GL) 5-7
sqlca.sqlcode
ESQL/C の 5-8
SQLCA.SQLCODE (4GL) 5-5
sqlca.sqlerrd
ESQL/C の 5-9
SQLCA.SQLERRD (4GL) 5-6
sqlca.sqlwarn
ESQL/C の 5-10
SQLCODE
OF
SQLCA
(ESQL/COBOL) 5-12
sqlda 構造体
ESQL/C でのシステム記述
子領域 6-5
ESQL/C 内でのポインター
の使用 6-9
ESQL/COBOL での シス テ
ム記述子領域 6-13
sqlda 内のフィールド 6-11
sqlda.h ヘッダー・ファイル
6-10
sqlvar_struct 内のフィール
ド 6-11
構文
DESCRIBE 7-127
EXECUTE 7-144
索引 13
FETCH 7-155
OPEN 7-211
PUT 7-235
使用
DESCRIBE 7-129
FETCH 7-161
OPEN 7-216
PUT 7-239
sqlda.h ヘッダー・ファイル
sqlda 内のフィールド 6-11
sqlvar_struct 内のフィール
ド 6-11
表示 6-10
SQLERRD
OF
SQLCA
(ESQL/COBOL) 5-12
SQLERROR
キ ーワ ード、
WHENEVER 文 7-343
SQLEXEC 環境変数 4-25
SQLRM 環境変数 4-26
SQLRMDIR 環境変数 4-27
SQLWARN
の
SQLWARN
(ESQL/COBOL) 5-14
SQLWARNING キ ーワ ード、
WHENEVER 文 7-345
START DATABASE 文
構文および使用法 7-323
STATUS FOR キーワード、
INFO
文 7-191
STATUS 変数 (4GL) 5-5
STOP キーワード、WHENEVER
文 7-343
STOP キーワード、WHENEVER
文の 7-348
stores5 データベース
call_type 表の列 1-10
catalog 表の列 1-9
cust_calls 表の列 1-10
customer 表の列 1-5
IBM Informix OnLine で の
作成 -7
IBM Informix SE での作成 8
items 表の列 1-6
manufact 表の列 1-11
orders 表の列 1-6
state 表の列 1-11
stock 表の列 1-8
概要 -6
コピー -7
主キーと外部キーの関係 113 ‐ 1-21
説明 1-3
データ値 1-21
表の構造 1-4
マップ 1-11
stores5
デ ータ ベー ス内 の
call_type 表の列 1-10
stores5
デ ータ ベー ス内 の
cust_calls 表の列 1-10
stores5
デ ータ ベー ス内 の
customer 表の列 1-5
stores5 データベース内の items
表の列 1-6
stores5
デ ータ ベー ス内 の
manufact 表の列 1-11
stores5 データベース内の orders
表の列 1-6
stores5 データベース内の stock
表の列 1-8
SUM 関数
式での使用 7-400
式の構文 7-387
SYSTEM 文
構文 8-77
T
TABLE キ ーワ ード、UPDATE
STATISTICS での構文 7-341
TABLES キーワード、INFO 文
7-189
TBCONFIG 環境変数 4-27
tbconfig ファイル、TBCONFIG
を使用した指定 4-28
TEMP TABLE LOG キーワード、
CREATE TABLE での構文 7-76
TEMP キーワード
14 IBM Informix SQL リファレンス・ガイド
SELECT での構文 7-263
SELECT での使用 7-290
TERM 環境変数 4-29
TERMCAP 環境変数 4-30
termcap ファイル
INFORMIXTERM を使用し
た選択 4-24, 4-25
およ び TERMCAP 環境 変
数 4-30
TERMINFO 環境変数 4-30
terminfo ディレクトリー
INFORMIXTERM を使用し
た選択 4-24
および TERMINFO 環境変
数 4-30
TEXT データ型
LOAD 文の要件 7-205
構文 7-370
ス ト ア ー ド・プ ロ シ ー
ジャー 8-43, 8-47
制御文字付き 3-19
説明 3-19
列の選択 3-20
Time 関数
式の構文 7-387
TO CLUSTER キーワード
ALTER INDEX 内の 7-18
TO キーワード
GRANT 7-178
式 7-387
TODAY 関数
構文
INSERT 7-197
式 7-380
条件セグメント 7-351
使用
ALTER TABLE での 723
CREATE TABLE で の
7-82
INSERT 7-199
定数式 7-383
TRACE 文
構文 8-79
ス ト ア ー ド・プ ロ シ ー
ジャーのデバッグ
8-14
TRUNC 関数、式での使用 7-395
TYPE フィールド
SET DESCRIPTOR での 設
定 7-301
X/Open プログラム 7-175
設定、X/Open プログラム 7303
説明 6-7, 6-16
変更、BYTE または TEXT
からの 7-305
フィールド区切り
文字の指定 4-9
DELIMITER 節 7-328
UNLOAD TO フ ァイ ル 7326
VARCHAR、TEXT、または
BYTE 列 のア ン
ロード 7-327
構文 7-325
UNLOCK TABLE 文、構文と使
用 7-329
UPDATE STATISTICS 文
検索ストラテジーの最適化
7-341
U
UNION 演算子
SELECT での構文 7-263
SELECT での使用 7-292
使用上の制限 7-292
UNIQUE キーワード
構文
CREATE INDEX で の
7-55
CREATE TABLE で の
7-84
SELECT 7-265
使用
ALTER TABLE での 732
CREATE INDEX で の
7-56
CREATE TABLE で の
7-85
式 7-397
SELECT 7-266
無効、副照会 7-361
UNITS キーワード
式での使用 7-386
式の構文 7-380
UNLOAD TO ファイル 7-326
UNLOAD 文
DBDELIMITER を使用した
構文 7-341
実行時期 7-342
Update アクセス権
定義 7-183
ビュー 7-332
UPDATE カーソル
UPDATE での使用 7-339
オープン 7-211
使用 7-115
制限付きの文 7-116
定義 7-111
ロックに関する考慮事項 7-
構文 7-331
式の使用 7-336
条件セグメント 7-350
トランザクション 7-332
ビューによる更新 7-332
ロックに関する考慮事項 7333
USER 関数
構文
INSERT 7-197
式 7-380
条件セグメント 7-351
使用
ALTER TABLE での 723
CREATE TABLE で の
7-82
INSERT 7-199
式 7-381
標準準拠による影響 7-382
USING DESCRIPTOR キーワー
ド
DESCRIBE か らの 情報 7129
構文
EXECUTE 7-144
FETCH 7-155
OPEN 7-210
PUT 7-234
116
UPDATE キーワード
GRANT で使用 7-183
構文
GRANT 7-182
REVOKE 7-254
使用
REVOKE 7-255
UPDATE 文
FETCH 7-161
SET キーワード 7-334
UPDATE カーソル 7-115
WHERE CURRENT OF
キーワード 7-339
WHERE キーワード 7-338
カーソルによる更新 7-339
更新する列の制限 7-117
更新のロールバック 7-333
使用
FETCH 7-161
OPEN 7-216
PUT 7-148, 7-239, 7-240
USING SQL DESCRIPTOR キー
ワード
DESCRIBE 7-130
EXECUTE 7-147
USING キーワード 7-146
構文
EXECUTE 7-146
OPEN 7-210
使用
EXECUTE 7-146
OPEN 7-214
索引 15
構文
V
VALUE キーワード
FETCH との関係 7-176
SET DESCRIPTOR での 使
用 7-301
VALUE フィールド
GET DESCRIPTOR での 使
用 7-175
NULL 値が取り出された後
7-177
VALUES キーワード
INSERT の構文 7-192
使用
INSERT 7-197
PUT による効果 7-238
VARCHAR データ型
LOAD 文の要件 7-205
UNLOAD 文に関する考慮
事項 7-327
構文 7-370
説明 3-21
デフォルト値として使用 724, 7-83
W
WAIT キーワード、SET LOCK
MODE 文 7-316
WARNING
キ ーワ ード、
WHENEVER 文 7-343, 7-346
WEEKDAY 関数
式の構文 7-387
WHENEVER 文、構文および使
用法 7-343
WHERE CURRENT OF キ ー
ワード
構文
DELETE 7-124
UPDATE 7-331
使用
UPDATE 7-339
WHERE キーワード
DELETE 7-124
SELECT 7-263
UPDATE 7-331
使用
ALL キーワード 7-281
ANY キーワード 7-281
BETWEEN キーワード
7-277
DELETE 7-125
IN キーワード 7-278
IS キーワード 7-278
LIKE キーワード 7-278
MATCHES キーワード
DECLARE の構文 7-108
WITH LISTING IN キーワード
ス ト ア ー ド・プ ロ シ ー
ジャーでの警告 810
WITH LOG IN キーワード、構文
START DATABASE 7-323
WITH MAX キーワード
COUNT フィールドとの関
係 7-299
WITH NO LOG キーワード
構文
CREATE TABLE で の
7-76
SELECT 7-290
7-278
SOME キ ーワ ード 7-
使用
281
UPDATE 7-338
関係演算子 7-277
副照会での 7-277
設定、項目の記述 7-298
表の結合 7-282
WHILE キーワード
CONTINUE 文 8-40
EXIT 8-49
WHILE 文
NULL 式 8-83
構文 8-83
ス ト ア ー ド・プ ロ シ ー
ジャーでのループ
8-26
WITH APPEND キ ーワ ード、
SET DEBUG FILE TO 文 7-296
WITH CHECK キーワード
CREATE VIEW での構文 798
CREATE VIEW での使用 7101
WITH GRANT キーワード
GRANT での使用 7-185
GRANT の構文 7-178
WITH HOLD キーワード
DECLARE での 使用 7-114,
16 IBM Informix SQL リファレンス・ガイド
7-123
CREATE TABLE で の
7-92
SELECT 7-292
WITH RESUME キ ーワ ード、
RETURN 8-75
WITH キー ワー ド、CREATE
DATABASE での構文 7-50
WITHOUT HEADINGS キ ー
ワード、OUTPUT 文 7-219
X
X/Open 準拠レベル -24
Y
YEAR 関数
式での使用 7-389
式の構文 7-387
YEAR キーワード
構文
DATETIME デ ータ 型
7-373
INTERVAL デ ータ 型
7-419
使用
DATETIME フ ィー ル
ド修 飾子 7422
DATETIME フ ィー ル
ド修飾子とし
て 3-8
INTERVAL フ ィー ル
ド修 飾子 7425
INTERVAL フ ィー ル
ド修飾子とし
て 3-14
あ
アイコン、説明 -14
アクセス権
Alter 7-183
Connect 7-180
CREATE TABLE を使用す
る表のデフォルト
7-77
DBA 7-181
DBA アクセス権付きプロ
シージャー 8-18
Delete 7-183
Index 7-183
INFO 文での表示 7-190
Insert 7-183
Resource 7-181
Update 7-183
アクセス権の競合時 7-179
システム・カタログでエン
コー ドさ れた 230, 2-34
シノニムに対する 7-71
所有者アクセス権付きプロ
シージャー 8-17
ス ト ア ー ド・プ ロ シ ー
ジャーのデフォル
ト 8-17
必要
インデックスの削除 7-
136
データの修正 7-183
ビューの作成 7-186
ビューに対する 7-99
アクティブ・セット
FETCH によるデータの検
索 7-155
OPEN による構成 7-211
アスタリスク (*)
SELECT での使用 7-265
算術演算子 7-376
アットマーク (@)、データベー
ス名 7-367
アンダースコアー (_)、条件セグ
メントのワイルドカード 7-358
い
意見、資料・製品についての -24
一意性制約
削除 7-35
実行 7-79
使用のルール 7-33, 7-86, 7-87
データ型変換 7-31
要件 7-25
列の変更 7-31
一意性制約または主キー制約
データ型変換 7-32
一時表
制約の作成 7-92
一時ファイル、DBTEMP を使用
したディレクトリーの指定 4-17
入れ子にした整列、SELECT 7289
印刷、DBPRINT を使用した印
刷プログラムの指定 4-15
インストール・ディレクトリー、
INFORMIXDIR を使用した指定
4-22
インデックス
DROP INDEX によ る削 除
7-136
一時表 7-291
情報の表示 7-189
制約との共有 7-26, 7-79
命名規則 7-365, 7-417, 7-439
インデックス名セグメント
構文 7-365, 7-429
使用 7-438
引用符付きストリング
構文
INSERT 7-197
式 7-387
条件セグメント 7-351
式 7-380
使用
INSERT 7-433
LIKE、MATCHES キー
ワード 7-278
式 7-381
ワイルドカード 7-432
引用符付きストリング・セグメ
ント
DATETIME、ストリングと
し
て
の
INTERVAL 値 7432
構文 7-431
条件にける LIKE 7-432
え
エディター、DBEDIT を使用し
た指定 4-10
エラー検査
ON EXCEPTION での エ
ラー状態 8-67
sqlca 構造体 (ESQL/C) 5-7
SQLCA データ構造体のサ
マリー表 5-4
SQLCA レコード (4GL) 5-5
SQLCA
レ コー ド
(ESQL/COBOL) 510
SYSTEM 8-77
エラーのシミュレート 8-34
索引 17
ス ト ア ー ド・プ ロ シ ー
ジャー 8-32
ス ト ア ー ド・プ ロ シ ー
ジャーのエラー後
の続行 8-70
例外処理 8-32
円記号 (¥)
エ ス ケ ー プ 文 字、
MATCHES 7-358
エス ケー プ文 字、LIKE 7358
オープン 7-211
型の定義 7-111
終了 7-41
順 7-113
スクロール 7-113
宣言 7-108
特性 7-112
トランザクションでの使用
表の命名のための 7-77
疑問符 (?)
EXECUTE によるプレース
ホルダーへの値の
提供 7-146
PUT における変数の指名
7-239
USING キーワードとの置
換 7-214
位置指定子、PREPARE 内
の 7-222
条件 のワ イル ドカ ード 7-
7-120
トランザクションの終了に
よる影響 7-43
カーソル安定性排他レベル 7314
お
お客様の環境のデフォルト解釈
4-3
オプティマイザー
SET OPTIMIZATION 文 7321
親子関係 7-27, 7-87
オンライン
ファイル -23
ヘルプ -24
か
カーソリー・プロシージャー 856
カーソル
DELETE 7-124
FETCH による値の検索 7155
INTO キーワード SELECT
7-271
OPEN による起動 7-210
PREPARE 文で処理された
文 7-111
PREPARE 文で処理された
文との関連付け 7119
ROLLBACK WORK による
クローズ 7-260
358
カーソル操作文 7-10
外部キー 7-27, 7-87
拡張機能検査、DBANSIWARN
を使用した指定 4-7
カラー、INFORMIXTERM の設
定 4-23
環境変数 -12
Bourne シェル 4-4
C シェルでの設定方法 4-4
製品別のリスト 4-5
定義 4-3
デフォルト解釈 4-3
環境変数の設定 4-4
関係演算子
WHERE
キー ワー ド
SELECT 7-277
条件セグメント 7-351
セグメント 7-434
関係演算子セグメント 7-434
関数
ス ト ア ー ド・プ ロ シ ー
ジャー内 8-28
関数式、SELECT 7-267
き
キャレット (^) ワイルドカード
7-358
行
FETCH による検索 7-158
FETCH による複数行照会
7-156
エンジン応答、ロック行に
対する 7-316
カーソルによる挿入 7-194
行 ID 定義 7-158
削除 7-124
バッファーに入れられた行
の FLUSH による
書き込み 7-164
ビューによる更新 7-332
ビューへの挿入 7-193
ファントム 7-313
行 ID 7-409
業界標準、準拠 -24
協調属性、INFORMIXTERM の
設定 4-23
共有メモリー・パラメーター、
TBCONFIG を使用したファイ
ルの指定 4-27
く
規則
活字 -12
構文 -13
コードの例 -18
18 IBM Informix SQL リファレンス・ガイド
区切り文字
DATETIME 値の場合 3-9
INTERVAL 値の場合 3-15
7-133
LOAD 入力ファイル 7-206
UNLOAD による指定 7-328
クラスター・インデックス
ALTER INDEX を使用した
RECOVER TABLE によ る
適用 7-243
開始、CREATE AUDIT 7-48
クラスター・インデックス
なし 7-57
操作、更新記録ファイル 7-
7-17
CREATE INDEX を使 用し
て作成 7-56
更新記録付き 7-57
繰返し読込み排他設定レベル
更新 中の エミ ュレ ート 7162
244
構文ダイアグラム
エレメント -16
規則 -13
コミット読み込み排他レベル 7313
け
警告
ス ト ア ー ド・プ ロ シ ー
ジャー 8-10
計算式
GROUP BY の制限 7-284
計算済み式
記述 7-387
形式
DBDATE
を使 用し た
DATE 値の指定 48
結合
2 表結合 7-282
外部結合 7-283
条件セグメント 7-282
セルフ結合 7-283
複数表結合 7-283
幻行 7-313
権限
SYSTEM 8-78
現行のデータベース
DATABASE で指定 7-102
こ
更新可能ビュー 7-101
更新記録
DROP AUDIT によ る削 除
コロン (:)
DATETIME 内 の区切 り文
字として 3-9
INTERVAL 内 の区 切り 文
字として 3-15
コンパイラー
COBOL 用の環境変数の設
定 4-20, 4-21
COBOL 用の記憶モードの
設定 4-21
さ
再 帰、ス ト ア ー ド・プ ロ シ ー
ジャー 8-29
最適化
更新、システム・カタログ
表を 7-341
サーバー 7-321
照会 7-306
ネットワーク全体にまたが
る 7-322
最適化、高レベルまたは低レベ
ルの指定 7-321
算術演算子、式 7-376
参照制約
削除 7-35
実行 7-79
使用のルール 7-87
定義 7-27, 7-87
データ型制限 7-89
列の変更 7-31
し
式
UPDATE 7-335
整列 7-290
式セグメント
SPL 式 8-24
計算済み式 7-387
結合式 7-402
構文 7-376
式型 7-376
集計式 7-397
定数式 7-380
列式 7-378
時刻関数
GROUP BY の制限 7-284
SELECT での使用 7-267
システム記述子領域
ESQL/C での 6-5
ESQL/COBOL での 6-13
TYPE および ITYPE フィー
ルドの値 6-8, 6-17
定義済みのフィールド 6-7,
6-16
サイズ変更 7-300
修正、コンテンツの 7-298
システム名、データベース名 7368
システム・カタログ
sysblobs 2-10
syschecks 2-11
syscolauth 2-11, 7-254
syscoldepend 2-12
syscolumns 2-13
sysconstraints 2-16
sysdefaults 2-17
sysdepend 2-18
sysindexes 2-18
sysopclstr 2-22
sysprocauth 2-24
索引 19
sysprocbody 2-25, 8-11
sysprocedures 2-26
sysprocplan 2-27
sysreferences 2-28
syssynonyms 2-28
syssyntable 2-29
SYSTABAUTH 7-186
systabauth 2-30, 7-254
systables 2-31
sysusers 2-34
sysviews 2-34
アクセス 2-8
更新 2-9
更新、最適化のためのデー
タを 7-341
制約のための sysindexes 項
目 7-79
説明 2-3
データベース項目 7-51
統計の更新 2-9
表のマップ 2-35
実効確認 7-294
実行時プログラム
DBANSIWARN の設定 4-7
INFORMIXCOBDIR の設定
4-20
シノニム
ANSI 標準準拠の命名法 772
CREATE SYNONYM を 使
用した作成 7-71
削除 7-139
チェーニング 7-74
別名との差 7-71
集計関数
4GL および ESQL 7-401
EXISTS 副照会 7-361
GROUP BY の制限 7-284
SELECT 7-268
SPL 式 8-23
式 7-267, 7-387
要約 7-400
修飾子、フィールド
DATETIME 7-373
DATETIME の場合 3-8
INTERVAL の場合 3-14
DATETIME 7-422
INTERVAL 7-419, 7-425
主キー制約
削除 7-35
参照側 7-27
実行 7-79
使用のルール 7-34, 7-87
要件 7-26, 7-86
列の定義 7-86
列の変更 7-31
順カーソル
FETCH 7-157
使用 7-113
定義 7-112
準拠
業界標準 -24
照会
他のオペレーティング・シ
ステム・ファイル
への結果の送信 7-
結合条件 7-282
検索 のワ イル ドカ ード 7358
構文 7-350
説明 7-350
比較条件 7-351
ブール式 7-351
小数点 (.)
DATETIME 内 の区切 り文
字として 3-9
INTERVAL 内 の区 切り 文
字として 3-15
状態、INFO 文での表示 7-191
省略記号 (...)、条件セグメント
のワイルドカード 7-358
除算記号 (/)、算術演算子 7-376
所有者
ALTER TABLE での 7-21
CREATE SYNONYM で の
7-72
CREATE VIEW でのビュー
7-445
RENAME COLUMN 7-246
RENAME TABLE 7-248
インデックス名セグメント
7-365, 7-417, 7-429,
219
他のプログラムへの結果の
送信 7-220
他のプログラムへの結果の
パイピング 7-220
照会での値の重複 7-266
条件セグメント
ALL、ANY、SOME 副照会
7-362
7-439
ビュー名セグメント 7-444
表名セグメント 7-403, 7-441
所有者アクセス権付きストアー
ド・プロシージャー 8-16
BETWEEN キ ーワ ード 7354
ESCAPE キーワード 7-359
EXISTS キーワード 7-361
IN キーワード 7-355
IS キーワード 7-356
LIKE キーワード 7-357
MATCHES キ ーワ ード 7357
NOT キーワード 7-357
SELECT での副照会 7-360
関係演算子 7-353
関数の使用 7-351
20 IBM Informix SQL リファレンス・ガイド
す
スクロール・カーソル
FETCH 7-157
使用 7-113
定義 7-112
保留、トランザクション 7315
ストアード・プロシージャー
BYTE および TEXT データ
型 8-43, 8-47
ALTER TABLE を使用した
追加 7-32, 7-78
DROP INDEX 7-136
一意性制約のルール 7-33
作成に必要なアクセス権 7-
DBA アクセス権付き 8-16
DBACCESS からの作成 8-7
SELECT からの受け取り 7270
SQL 関数との名前の混用
34
8-23
TRACE 文の出力ファイル
の命名 7-296
埋め込み言語からの作成 8-
実行 7-79
制約を持つ列の変更 7-30
設定、チェック・モード 7-
8
エラーのシミュレート 8-72
カーソル 8-55
概要 8-5
コメント 8-8
再帰 8-29
実行 8-11
使用 8-6
所有者アクセス権付き 8-16
定義 8-6
デバッグ 8-14, 8-79
ドキュメント化 8-8
取消し、アクセス権の 7-253
内容の表示 8-11
複数行の処理 8-75
ヘッダー 8-29, 8-42
変更 8-16
変数 8-19
マニュアルの表示 8-11
戻り値 8-29
ストアード・プロシージャー・
アクセス権の付与 7-184
スペース ( )
DATETIME 内 の区切り 文
字として 3-9
INTERVAL 内 の区 切り 文
字として 3-15
スラッシュ (/)、
算術演算子 7-376
294
定義 7-77
表レベルでの指定 7-85
許される列の数 7-78, 7-85
要件 7-25
列レベルでの指定 7-84
セルフ結合
説明 7-283
そ
相関副照会
定義 7-360
ソート
SELECT 7-288
結合照会 7-292
た
単純代入 8-63
単純読み込み排他レベル 7-313
単精度浮動小数点数の格納 3-12
端末処理
および TERM 環境変数 4-29
およ び TERMCAP 環境 変
数 4-30
および TERMINFO 環境変
数 4-30
せ
制約
ALTER TABLE を使用した
削除 7-29, 7-35, 7-78
ち
チェック制約
CREATE TABLE を使用し
た作成 7-90
定義 7-90
表レベルでの指定 7-90
列レベルでの指定 7-90
遅延チェック 7-294
て
定数式
GROUP BY の制限 7-284
PUT での挿入 7-237
SELECT 7-267
構文 7-380
データ型
ALTER TABLE を使用した
変更 7-31
BYTE 3-5
CHAR 3-6
CHARACTER 3-7
CREATE VIEW を使用した
指定 7-99
DATE 3-7
DATETIME 3-8
DEC 3-11
DECIMAL 3-11
DOUBLE PRECISION 3-12
FLOAT 3-12
INSERT に関する考慮事項
7-198, 7-433
INT 3-12
INTEGER 3-13
INTERVAL 3-13
MONEY 3-17
NUMERIC 3-17
REAL 3-17
SERIAL 3-17
SMALLFLOAT 3-18
SMALLINT 3-19
SPL 変数 8-21
TEXT 3-19
VARCHAR 3-21
構文 7-370
索引 21
サマリー表 3-4
参照制約の要件 7-28, 7-89
浮動小数点 3-12
変換 3-22
データ型セグメント 7-370
データ型の変換 3-22
データ整合性文 7-11
データ操作文 7-10
データ定義文 7-10
データベース
ANSI 準拠の作成 7-323
CLOSE DATABASE を使用
したクローズ 7-45
CREATE DATABASE を使
用した作成 7-50
stores5 -6
削除 7-134
照会の最適化 7-342
データ型 3-4
デフ ォル ト排 他レ ベル 7312
データベース・レベル・アクセ
ス権 7-180, 7-256
付与 7-180
付与権限の引き渡し 7-185
データベース・ロック 7-104
データ、LOAD 文によるデータ
の挿入 7-202
データ・アクセス文 7-11
テキスト・エディター、DBEDIT
を使用した指定 4-10
デッドロックの検出 7-317
デフォルト値
ALTER TABLE を使用した
指定 7-24
指定
ALTER TABLE 7-24
CREATE TABLE を 使
用した 7-82
デモンストレーション・データ
ベース
インストール・スクリプト
-6
排他モードでのオープン 7104
181
データベース名セグメント
引用符、スラッシュの使用
7-369
構文 7-367
データベース、DBPATH の
外部 7-369
変数による命名 7-369
命名規則 7-367
リモート・データベース 7368
データベース、stores5 説明 1-3
261
ロールバック 7-259
ログ 7-323
トランザクションおよび
CREATE DATABASE 7-54
トランザクション・ログ
ログのリネーム 7-324
ネットワーク環境変数
DBNETTYPE 4-13
DBPATH 4-14
SQLRM 4-26
SQLRMDIR 4-27
2-35
命名規則 7-368
リモート 7-368
デー タベ ース 管理 者 (DBA) 7-
315
トランザクションの回復 7-
ね
概要 -6
コピー -7
表 1-5 ‐ 1-11
表の構造 1-4
マップ 1-11
復元 7-261
変数による命名 7-369
マップ
stores5 1-11
システム・カタログ表
動的管理文 7-11
ドキュメント・ノート -23
トランザクション
BEGIN WORK を使用した
開始 7-37
COMMIT WORK を使用し
たコミット 7-47
カーソルの使用 7-120
ス ク ロ ー ル・カ ー ソ ル と
データの一貫性 7-
と
問合せ最適化情報文 7-11
動的 SQL
システム記述子領域の使用
ESQL/C での 6-5
ESQL/COBOL で の 613
メモリーの割り当て
ESQL/C での 6-4
ESQL/C で の sqlda ポ
インターの使
用 6-9
ESQL/COBOL で の 6-
22 IBM Informix SQL リファレンス・ガイド
13
は
パーセント (%) 記号、条件セグ
メントのワイルドカード 7-358
排他レベル
カーソル安定性 7-314
外部表 7-314, 7-317
繰り 返し 可能 読み 込み 7314
コミット読み込み 7-313
単純読み込み 7-313
定義 7-313
バイナリー・ラージ・オブジェ
クト (BLOB)
LOAD 文 7-205
UNLOAD 文 7-327
ハイフン (-)
DATETIME 内 の区切り 文
字として 3-9
INTERVAL 内 の区 切り 文
字として 3-15
配列、FETCH による行の移動 7160
パス名
DBPATH を 使用 した指 定
4-14
DBSRC を使用した指定 417
PATH を使用した指定 4-28
SQLEXEC に組み込む 4-25
破損した表のチェック 7-39
バッファー付きロギング 7-50
パフォーマンス
ス ト ア ー ド・プ ロ シ ー
ジャーによる改善
8-6
パラメーター
CALL 文 8-38
SPL での BYTE また は
TEXT 8-48
ス ト ア ー ド・プ ロ シ ー
ジャーへの 8-29
ひ
更新 7-332
削除 7-143
シノニムの作成 7-71
ビュー名セグメント 7-444
ビュー、更新可能 7-101
表
ANSI 準拠命名 7-441
CHECK TABLE 文を使用し
たチェック 7-39
LOAD 文 によ るデ ータ の
ロード 7-202
SELECT での別名 7-274
stores5 デ ータ ベー スの 構
造 1-4
一時の使用 7-92
エンジン応答、ロック表に
対する 7-316
更新記録の復元 7-243
最適化、照会の 7-342
削除 7-139
制約 7-35
表 7-141
作成
一時表 7-91
シノニム 7-71
表 7-76
システム・カタログ表 2-10
‐ 2-34
修復、REPAIR TABLE 文に
よる 7-250
条件セグメントでの結合 7282
比較条件
構文と使用 7-351
日付データ型
関数 7-387
ビュー
GRANT によるアクセス権
7-186
SELECT * 表記を使用した
7-99
UNION 演算子の制限 7-292
アクセス権 7-99
仮想列 7-100
制約の追加 7-32
命名規則 7-77, 7-404, 7-441
リネーム 7-248
列のデータ型の変更 3-22
ロギング 7-92
ロック
ALTER INDEX を使用
した 7-18
LOCK TABLE 7-207
モードの変更 7-36
ロックの解除 7-329
標識変数
EXECUTE 7-146
SELECT 7-270
式 7-401
表示ラベル
SELECT での構文 7-265
UNION 演算子 7-292
表名セグメント 7-440
表レベル・アクセス権
GRANT でのデフォルト 7184
定義と使用 7-183
取り消し 7-254
付与 7-182
付与権限の引き渡し 7-185
列固有のアクセス権 7-256
ふ
ファイル
OUTPUT 文に よる 出力 の
送信 7-219
拡張子
.lok 7-317
.dbs 7-51, 7-103
フィールド修飾子
DATETIME 7-373
DATETIME の場合 3-8
INTERVAL の場合 3-14
INTERVAL 7-425, 7-419
ブール式
条件セグメント 7-350
フォーマット
DBMONEY
を使 用し た
MONEY 値のため
の指定 4-12
複合インデックス
CREATE INDEX を使 用し
て作成 7-55
定義 7-57
列の制限 7-57
複合代入 8-63
複合列リスト、複数列制限 7-33,
7-34
索引
23
副照会
ALL/ANY/SOME キーワー
ドに よる 開始 7281
DISTINCT キーワード 7-266
EXISTS キーワードによる
開始 7-280
IN キーワードによる開始
へ
め
並行性
SET ISOLATION による定
義 7-312
カーソル安定性排他 7-314
繰り返し可能読み込み排他
命名規則
インデックス 7-365, 7-417, 7-
7-314
7-280
UNION 演算子の制限 7-292
条件セグメント 7-360
複数行照会
FETCH による管理 7-156
戻り値の宛先 7-159
副問合せ
相関 7-360
定義 7-277
プラス記号 (+)、算術演算子 7376
プロシージャー名
関数名との矛盾 7-429
命名規則 7-429
文識別子
カー ソル との 関連 付け 7-
コミ ット 読み 込み 排他 7313
単純読み込み排他 7-313
ヘッダー
プロシージャーの 8-29
別名
SELECT 内の表 7-275
変数
IF での不明値 8-60
SPL 8-19
SPL での GLOBAL および
LOCAL 8-20
SPL での定義 8-41
SPL でのデフォルト値 8-45,
8-46
SPL 変数の範囲 8-42
キーワードと同じ名前 8-22
広域、SPL 8-44, 8-46
111
解放 7-223
構文
DECLARE 7-108
DESCRIBE 7-127
EXECUTE 7-144
FREE 7-168
PREPARE 7-221
使用
DECLARE 7-119
FREE 7-169
PREPARE 7-222
定義 7-222
文タイプ 7-9
文のパラメーター化
PREPARE 7-227
SQL 識別子 7-228
文変数名の定義 7-149
439
データベース 7-368
表 7-77, 7-404, 7-441
列 7-81, 7-246
メッセージ・ファイルのファイ
ル -21
メ ッ セ ー ジ・フ ァ イ ル、
DBLANG を使用したサブディ
レクトリーの指定 4-11
メニュー、DBMENU を使用し
た指定 4-12
メモリー
ESQL/C での割り当て 6-4
ESQL/COBOL での 割り 当
て 6-13
システム sqlda 構造体につ
いての割り当て 713
メモリーの割り当て
ALLOCATE DESCRIPTOR
文を使用した 7-13
ESQL/C での動的な 6-4
ESQL/COBOL での 動的 な
6-13
ほ
メモリー、FREE による解放 7167
ボールド体 -12
も
ま
マイナス記号 (-)、算術演算子 7376
マシン・ノート -23
マニュアル、型
ドキュメント・ノート -23
マシン・ノート -23
リリース・ノート -23
24 IBM Informix SQL リファレンス・ガイド
文字ストリング
DATE 値として 3-28
DATETIME 値 とし て 3-10,
3-28
INTERVAL 値として 3-16
文字の表記 -12
ゆ
る
ろ
ユーザー Informix、関連するア
クセス権 7-181
ループ
RAISE 例 外の 使用 によ る
終了 8-35
SPL での作成および終了 8-
ロギング
CREATE TABLE を使用し
た設定 7-92
IBM Informix OnLine での 7-
26
り
リテラル
DATE
デフォルト値として使
用 7-24, 7-83
DATETIME
ALTER TABLE での使
用 7-23
CREATE TABLE で の
使用 7-82
IN キーワード 7-278
INSERT での構文 7-197
構文 7-422
式 7-380, 7-385
条件セグメント 7-351
セグメント 7-421
INTERVAL
INSERT での構文 7-197
構文 7-425
式 7-380, 7-385
条件セグメント 7-351
セグメント 7-424
デフォルト値として使
用 7-24, 7-83
構文 7-425
数
INSERT での構文 7-197
番号
IN キーワード 7-356
構文 7-427
式 7-380, 7-383
条件セグメント 7-351
セグメント 7-427
リリース・ノート、-23
リレー・モジュール
SQLRM 環境変数 4-26
SQLRMDIR 環境変数 4-27
52
WHILE での不確定 8-83
制御された 8-51
IBM Informix SE での 7-53
START DATABASE での開
始 7-54
ログのリネーム 7-324
ログ・ファイル位置の検出
れ
7-54
ログ
列
ALTER TABLE を使用した
削除 7-29
ALTER TABLE を使用した
変更 7-30
CREATE TABLE を使用し
た指定 7-81
stores5 データベース内の 15 ‐ 1-11
外部キーとしての定義 7-87
仮想 7-100
主キーとしての定義 7-86
情報の表示 7-189
制約の設定 7-78
制約の定義時に許される数
7-78
挿入 7-193
チェック制約の指定 7-90
データ型の変更 3-22
被参照側と参照側 7-27, 7-87
命名規則 7-81, 7-246
リネーム 7-246
列式
SELECT 7-267
構文 7-378
列レベル・アクセス権 7-184
連結演算子 (||) 7-377
連絡先情報 -24
開始、START DATABASE
7-323
バッファー付きとバッ
ファーなし 7-319
変更、SET LOG でモードを
7-319
ロック
COMMIT WORK による解
放 7-47
FETCH 7-161
ROLLBACK WORK による
アンロック 7-259
SET ISOLATION 7-312
SET LOCK MODE 7-316
UNLOCK TABLE 7-329
UPDATE カー ソル の影 響
7-116
上書き、行レベル 7-208
間
挿入 7-195
期間
更新 7-116
削除 7-124
更新 7-333
スクロール・カーソル 7-315
トランザクション内での 737
待ち時間 7-316
ロックのタイプ
行ロック 7-96
索引
25
ページ・ロック 7-96
論理演算子
条件セグメント 7-363
わ
ワイルドカード文字、LIKE ま
たは MATCHES 7-432
26 IBM Informix SQL リファレンス・ガイド
򔻐򗗠򙳰
Printed in Japan
GB88-8617-00
Fly UP