開発者リファレンス : データ アクセス方法 : SQL Engine Reference : システム カタログ関数
 
このページをシェアする                  
システム カタログ関数
システム カタログ関数によるメタデータの取得
以下のトピックでは、システム カタログ関数について説明します。
Zen システム カタログ関数
dbo.fSQLColumns
dbo.fSQLForeignKeys
dbo.fSQLPrimaryKeys
dbo.fSQLProcedures
dbo.fSQLProcedureColumns
dbo.fSQLSpecialColumns
dbo.fSQLStatistics
dbo.fSQLTables
dbo.fSQLDBTableStat
文字列検索パターン
Zen システム カタログ関数
システム カタログ関数を使用すると、データ辞書ファイル(「カタログ」とも呼ばれます)からデータベース メタデータを取得することができます。システム カタログ関数は FROM 句でのみ使用できます。
Zen では、適切なカタログ API を呼び出したり、システム ストアド プロシージャ(システム ストアド プロシージャを参照)を使用したりすることによって、メタデータを返すこともできます。しかし、これら 2 つの方法はメタデータをビューに格納しません。ビューでは、ほかのテーブルとの JOIN や UNION が行えます。ほかのテーブルとの JOIN および UNION 機能を提供するには、システム カタログ関数が必要です。
ADO.NET など一部のアクセス方法では、JOIN および UNION の機能を利用できるように、エンティティ サポートのためのシステム カタログ関数を必要とします。
各システム カタログ関数のテンポラリ ビュー スキーマは、準備フェーズで作成されます。実行フェーズで対応するカタログ API を呼び出すことにより、そのビューにデータが格納されます。
次の表は、利用可能なシステム カタログ関数を示しています。
Zen 関数1
戻り値
現在のデータベースまたは指定されたデータベースの、特定テーブルの列の一覧とそれに関連する情報。
現在のデータベース内の特定テーブルの外部キー情報。
現在のデータベースまたは指定されたデータベースの、特定テーブルの主キー情報。
現在のデータベースまたは指定されたデータベースの、ストアド プロシージャの名前。
入力パラメーターおよび出力パラメーターのリストと、指定されたプロシージャの結果セットを構成する列。
指定されたテーブル内の行を一意に識別する最適な列セットに関する情報、または、トランザクションによって行内の任意の値が更新されたときに自動的に更新される列に関する情報。
現在のデータベースまたは指定されたデータベースの、ある単一テーブルに関する統計情報と、そのテーブルに関連付けられているインデックスの一覧。
現在のデータベースまたは指定されたデータベースの、テーブルの一覧とそれに関連する情報。
1 Zen のカタログ関数は ODBC に基づいているので、追加情報については ODBC のドキュメントを参照してください。ここに記述されている内容は、Zen カタログ関数を理解し使用するのに十分な情報を提供していますが、完全な技術的詳細は含まれていません。
リターン ステータス
各システム カタログ関数は、実行結果に応じて以下のステータス値のいずれかを返します。
SQL_SUCCESS
SQL_SUCCESS_WITH_INFO
SQL_STILL_EXECUTING
SQL_ERROR
SQL_INVALID_HANDLE
まとめ
システム カタログ関数には以下の特性があります。
メタデータを返す。
ビューと同じように動作する。
SELECT ステートメントの FROM 句でのみ参照できる。
パラメーターは、定数または動的パラメーターの形式でのみ指定できる。
メモ:よく使われる SQL エディターのほとんどは、複数のステートメントを実行するためにステートメント区切り文字を使用しません。しかし、ZenCC の SQL Editor は区切り文字を必要とします。ほかの環境で例を実行する場合は、シャープ記号またはセミコロンの区切り文字を取り除く必要があります。
dbo.fSQLColumns
この関数は、指定されたテーブルの列名の一覧を返します。
構文
dbo.fSQLColumns <'database_qualifier' | null>, <'table_name' | null>, <'column_name' | null>)
引数
 
表 94 dbo.fSQLColumns の引数
パラメーター
データ型
デフォルト値
説明
database_qualifier
VARCHAR
現在のデータベース
詳細を取得するデータベースの名前。
table_name
VARCHAR
(デフォルト値なし)
列情報を要求するテーブルの名前
column_name
VARCHAR
指定したテーブルのすべての列
指定したテーブルの列名。
返される結果セット
 
表 95 dbo.fSQLColumns で返される結果セット
列名
データ型
説明
TABLE_QUALIFIER
VARCHAR
データベースの名前。データベースに適用されない場合は NULL。
TABLE_OWNER
VARCHAR
テーブルのスキーマ名。データベースに適用されない場合は NULL。
TABLE_NAME
NULL でない VARCHAR
テーブルの名前。
COLUMN_NAME
VARCHAR
テーブルの列名、または、名前のない列の場合は空文字列。
DATA_TYPE
NULL でない SMALLINT
列の SQL データ型コード。『ODBC Guide』の使用できるデータ型を参照してください。
TYPE_NAME
VARCHAR
列のデータ型の、DATA_TYPE 値に対応する名前
PRECISION
INTEGER
列の精度(列のデータ型が Decimal、Numeric などである場合)。Decimal データ型の精度と小数位を参照してください。
DATA_TYPE が CHAR または VARCHAR である場合、この列には列の最大長(文字単位)が格納されます。これは、日付時刻データ型の場合は、値が文字列に変換されたときに、その値を表示するために必要な文字の総数になります。数値データ型の場合は、RADIX 列に応じて、列で許可される桁数の合計またはビット数の合計のいずれかになります。
LENGTH
INTEGER
SQL_C_DEFAULT が指定された場合は、SQLGetData、SQLFetch、または SQLFetchScroll 操作で転送されるデータの長さ(バイト単位)。
数値データの場合、このサイズは、データベースに格納されているデータのサイズとは異なる場合があります。この値は、文字データの COLUMN_SIZE 列とは異なる場合があります。
SCALE
SMALLINT
小数点の右側にある有効桁の総数。TIME、TIMESTAMP、および TIMESTAMP2 の場合、この列には小数の秒部分の桁数が格納されます。
それ以外のデータ型では、これはデータベース内の列の小数点以下の桁数です。Decimal データ型の精度と小数位を参照してください。
RADIX
SMALLINT
数値データ型の基数
数値データ型の場合は、10 または 2 のいずれかです。
10 - COLUMN_SIZE および DECIMAL_DIGITS の値は、列で許可される小数点以下の桁数を示します。
2 - COLUMN_SIZE および DECIMAL_DIGITS の値は、列で許可されるビット数を示します。
RADIX が適用されないデータ型では、NULL が返されます。
NULLABLE
SMALLINT
プロシージャ列がヌル値を受け入れるかどうかを示します。
0 = NO_NULLS - プロシージャ列はヌル値を受け入れません。
1 = NULLABLE - プロシージャ列はヌル値を受け入れます。
2 = NULLABLE_UNKNOWN - プロシージャ列がヌル値を受け入れるかどうかわかりません。
REMARKS
VARCHAR
備考フィールド
COLUMN_DEF
VARCHAR
列のデフォルト値。
デフォルト値として NULL が指定された場合、この列は、引用符で囲まれていない単語の NULL になります。デフォルト値を切り捨てなしで表すことができない場合は、一重引用符で囲まれていない TRUNCATED が格納されます。デフォルト値が指定されていない場合は、NULL になります。
SQL_DATA_TYPE
NULL でない SMALLINT
記述子の SQL_DESC_TYPE フィールドに表示される SQL データ型の値。この列は次のデータ型を除き、TYPE_NAME 列と同じです。例外とするのは AUTOTIMESTAMP、DATE、DATETIME、TIME、TIMESTAMP、および TIMESTAMP2 です。
例外とするデータ型について、結果セットの SQL_DATA_TYPE フィールドは次のように値を返します。DATE は SQL_DATE、TIME は SQL_TIME、AUTOTIMESTAMP、DATETIME、TIMESTAMP、および TIMESTAMP2 は SQL_TIMESTAMP です。
SQL_DATETIME_SUB
SMALLINT
AUTOTIMESTAMP、DATE、DATETIME、TIME、TIMESTAMP、および TIMESTAMP2 のサブタイプ コード。その他のデータ型について、この列は NULL を返します。
1 = DATE(SQL_CODE_DATE)
2 = TIME(SQL_CODE_TIME)
3 = AUTOTIMESTAMP、DATETIME、TIMESTAMP、および TIMESTAMP2(SQL_CODE_TIMESTAMP)
CHAR_OCTET_LENGTH
INTEGER
文字またはバイナリ データ型列の最大長(バイト単位)。その他すべてのデータ型について、この列は NULL を返します。
ORDINAL_POSITION
NULL でない INTEGER
入力および出力パラメーターについては、プロシージャ定義におけるパラメーターの位置を表す序数(1 から始まり、増加するパラメーター順)。
戻り値がある場合、戻り値については 0 が返されます。結果セット列については、結果セットにおける列の位置を表す序数。この場合、結果セット列の最初の列は 1 から始まります。
IS_NULLABLE
VARCHAR
列に NULL が含まれていない場合は "NO"。
列に NULL が含まれている場合は "YES"。
ヌル値を許可するかどうかわからない場合、この列は長さゼロの文字列を返します。この列に返される値は、NULLABLE 列に返される値とは異なります。
次の例は、デフォルトの Demodata サンプル データベースに含まれる、Room テーブルのすべての列に関する情報を返します。
SELECT * FROM dbo.fSQLColumns ('Demodata', 'room', null);
結果セット(スペースを考慮して短縮されています):
COLUMN_NAME     DATA_TYPE   LENGTH   ORDINAL_POSITION
==============  =========   ======   ================
Building_Name           1       25                  1
Number                  4        4                  2
Capacity                5        2                  3
Type                    1       20                  4
 
4 行が影響を受けました。
dbo.fSQLForeignKeys
この関数は、現在のデータベース内の特定テーブルの外部キー情報を返します。dbo.fSQLForeignKeys は、外部キーの一覧を次のいずれかの結果セットとして返すことができます。
特定テーブル(他のテーブルの主キーを参照する特定テーブル内の列)
特定テーブルの主キーを参照する他のテーブル
構文
dbo.fSQLForeignKeys (<'table_qualifier' | null>, 'pkey_table_name' | null>, <'fkey_table_name' | null>)
引数
 
表 96 dbo.fSQLForeignKeys の引数
パラメーター
データ型
デフォルト値
説明
table_qualifier
VARCHAR
現在のデータベース
詳細を取得するデータベースの名前。
pkey_table_name
VARCHAR
(デフォルト値なし)
主キー列に外部キーが関連付けられているテーブルの名前。パターン検索がサポートされます(文字列検索パターンを参照してください)。
fkey_table_name
VARCHAR
(デフォルト値なし)
外部キー情報を取得する必要のあるテーブルの名前。パターン検索がサポートされます(文字列検索パターンを参照してください)。
返される結果セット
 
表 97 dbo.fSQLForeignKeys で返される結果セット
列名
データ型
説明
PKTABLE_QUALIFIER
VARCHAR
主キー テーブルのデータベース名。データベースに適用されない場合は NULL。
PKTABLE_OWNER
VARCHAR
主キー テーブルのオーナーの名前。データベースに適用されない場合は NULL。
PKTABLE_NAME
NULL でない VARCHAR
主キー テーブルの名前
PKCOLUMN_NAME
NULL でない VARCHAR
主キー列の列名名前のない列については、空文字列が返されます。
FKTABLE_QUALIFIER
VARCHAR
外部キー テーブルのデータベース名。データベースに適用されない場合は NULL。
FKTABLE_OWNER
VARCHAR
外部キー テーブルのオーナーの名前。データベースに適用されない場合は NULL。
FKTABLE_NAME
NULL でない VARCHAR
外部キー テーブルの名前。
FKCOLUMN_NAME
NULL でない VARCHAR
外部キー列の列名名前のない列については、空文字列が返されます。
KEY_SEQ
SMALLINT
キーにおける列のシーケンス番号(1 から始まります)。この列の値は、X$Index の Xi$Part に対応します。X$Index を参照してください。
UPDATE_RULE
SMALLINT
SQL 操作が UPDATE であるとき、外部キーに適用される動作。次のいずれかの値になります。
0 = CASCADE
1 = RESTRICT
DELETE_RULE
SMALLINT
SQL 操作が DELETE であるとき、外部キーに適用される動作。次のいずれかの値になります。
0 = CASCADE
1 = RESTRICT
FK_NAME
VARCHAR
外部キーの名前。データベースに適用されない場合は NULL。
PK_NAME
VARCHAR
主キーの名前。データベースに適用されない場合は NULL。
DEFERRABILITY
SMALLINT
次のいずれかの値です。
5 = INITIALLY_DEFERRED
6 = INITIALLY_IMMEDIATE
7 = NOT_DEFERRABLE
次の例では、Demodata サンプル データベースに 3 つのテーブルを作成します。それらのテーブルに外部キーと主キーが割り当てられます。dbo.fSQLForeignKeys 関数は、文字列検索パターンを使って 2 つの主キー テーブルを参照します。文字列検索パターンも参照してください。
CREATE TABLE primarykey1 (pk1col1 INT, pk1col2 INT, pk1col3 INT, pk1col4 INT, PRIMARY KEY (pk1col1, pk1col2));
ALTER TABLE primarykey1 ADD FOREIGN KEY (pk1col3, pk1col4) REFERENCES primarykey1 ON DELETE CASCADE;
 
CREATE TABLE primarykey2 (pk2col1 INT, pk2col2 INT, pk2col3 INT, pk2col4 INT, PRIMARY KEY (pk2col1, pk2col2));
ALTER TABLE primarykey2 ADD FOREIGN KEY (pk2col3, pk2col4) REFERENCES primarykey2 ON DELETE CASCADE;
 
CREATE TABLE foreignkey1 (fkcol1 INT, fkcol2 INT, fkcol3 INT, fkcol4 INT);
ALTER TABLE foreignkey1 ADD FOREIGN KEY (fkcol1, fkcol2) REFERENCES PRIMARYKEY1;
ALTER TABLE foreignkey1 ADD FOREIGN KEY (fkcol3, fkcol4) REFERENCES PRIMARYKEY2;
 
SELECT * FROM dbo.fSQLForeignKeys ('Demodata', 'primarykey%', 'foreignkey1');
結果セット(スペースを考慮して短縮されています):
FKCOLUMN_NAME  DELETE_RULE   FK_NAME     PK_NAME
=============  ===========   ==========  ==========
fkcol1                   1   FK_0fkcol1  PK_pk1col1
fkcol2                   1   FK_0fkcol1  PK_pk1col1
fkcol3                   1   FK_0fkcol3  PK_pk2col1
fkcol4                   1   FK_0fkcol3  PK_pk2col1
 
4 行が影響を受けました。
dbo.fSQLPrimaryKeys
この関数は、テーブルの主キーを構成する列名を結果セットとして返します。dbo.fSQLPrimaryKeys では、1 回の呼び出しで複数のテーブルから主キーを返すことはできません。
構文
dbo.fSQLPrimaryKeys (<'pkey_table_qualifier' | null>, <'table_name' | null>)
引数
 
表 98 dbo.fSQLPrimaryKeys の引数
パラメーター
データ型
デフォルト値
説明
pkey_table_qualifier
VARCHAR
現在のデータベース
詳細を取得するデータベースの名前。
table_name
VARCHAR
(デフォルト値なし)
主キー情報を要求するテーブルの名前。パターン検索がサポートされます(文字列検索パターンを参照してください)。
返される結果セット
 
表 99 dbo.fSQLPrimaryKeys で返される結果セット
列名
データ型
説明
TABLE_QUALIFIER
VARCHAR
データベース名。データベースに適用されない場合は NULL。
TABLE_OWNER
VARCHAR
主キー テーブルのオーナーの名前。データベースに適用されない場合は NULL。
TABLE_NAME
NULL でない VARCHAR
主キー テーブルの名前
COLUMN_NAME
NULL でない VARCHAR
主キー列の名前。名前のない列については、空文字列が返されます。
COLUMN_SEQ
NULL でない SMALLINT
キーにおける列のシーケンス番号(1 から始まります)。
PK_NAME
VARCHAR
主キーの名前。データベースに適用されない場合は NULL。
次の例では、Demodata サンプル データベースに 2 つのテーブルを作成します。それらのテーブルに外部キーと主キーが割り当てられます。dbo.fSQLPrimaryKeys 関数は、文字列検索パターンを使って 2 つのテーブルを参照します。文字列検索パターンも参照してください。
CREATE TABLE tblprimarykey3 ( tblpk3col1 INT, tblpk3col2 INT, tblpk3col3 INT, tblpk3col4 INT, PRIMARY KEY (tblpk3col1, tblpk3col2) );
ALTER TABLE tblprimarykey3 ADD FOREIGN KEY (tblpk3col3, tblpk3col4) REFERENCES tblprimarykey3 ON DELETE CASCADE;
 
CREATE TABLE tblprimarykey4 ( tblpk4col1 INT, tblpk4col2 INT, tblpk4col3 INT, tblpk4col4 INT, PRIMARY KEY (tblpk4col1, tblpk4col2) );
ALTER TABLE tblprimarykey4 ADD FOREIGN KEY (tblpk4col3, tblpk4col4) REFERENCES tblprimarykey4 ON DELETE CASCADE;
 
SELECT * FROM dbo.fsqlprimarykeys('Demodata', 'tbl%');
結果セット(スペースを考慮して短縮されています):
TABLE_NAME       COLUMN_NAME   KEY_SEQ   PK_NAME
==============   ===========   =======   =============
tblprimarykey3   tblpk3col1          1   PK_tblpk3col1
tblprimarykey3   tblpk3col2          2   PK_tblpk3col1
tblprimarykey4   tblpk4col1          1   PK_tblpk4col1
tblprimarykey4   tblpk4col2          2   PK_tblpk4col1
 
4 行が影響を受けました。
dbo.fSQLProcedures
この関数は、現在のデータベースまたは指定されたデータベースの、ストアド プロシージャおよびユーザー定義関数の名前を結果セットとして返します。CREATE PROCEDURE および CREATE FUNCTION も参照してください。
構文
dbo.fSQLProcedures (<'database_qualifier' | null>, <'procedure_name' | null>)
引数
 
表 100 dbo.fSQLProcedures の引数
パラメーター
データ型
デフォルト値
説明
database_qualifier
VARCHAR
現在のデータベース
詳細を取得するデータベースの名前。
procedure_name
VARCHAR
(デフォルト値なし)
情報を要求するストアド プロシージャの名前。
メモ:システム ストアド プロシージャは、Zen Control Center に表示されない内部データベース PERVASIVESYSDB に定義されています。
返される結果セット
 
表 101 dbo.fSQLProcedures で返される結果セット
列名
データ型
説明
PROCEDURE_QUALIFIER
VARCHAR
プロシージャが作成されたデータベースの名前。データベースに適用されない場合は NULL。
PROCEDURE_OWNER
VARCHAR
プロシージャ スキーマ識別子。データベースに適用されない場合は NULL。
PROCEDURE_NAME
NULL でない VARCHAR
プロシージャ識別子
NUM_INPUT_PARAMS
なし
今後の使用に備えて予約されています。アプリケーションには使用しないでください。
NUM_OUTPUT_PARAMS
なし
今後の使用に備えて予約されています。アプリケーションには使用しないでください。
NUM_RESULT_SETS
なし
今後の使用に備えて予約されています。アプリケーションには使用しないでください。
REMARKS
VARCHAR
プロシージャの解説。
PROCEDURE_TYPE
SMALLINT
プロシージャの種類を定義します。
0 = PT_UNKNOWN - プロシージャが値を返すかどうかを判断できません。
1 = PT_PROCEDURE - 返されるオブジェクトはプロシージャで、戻り値はありません。
2 = PT_FUNCTION - 返されるオブジェクトは関数で、戻り値があります。
デフォルトで、Demodata データベースにはストアド プロシージャとユーザー定義関数が何も含まれていません。dbo.fSQLProcedures 関数(および dbo.fSQLProcedureColumns)の出力を提供するために、次のようなストアド プロシージャとユーザー定義関数を作成してください。それらはすべて、必要なテーブルおよびパラメーター バインドが与えられれば呼び出すことができます。しかし、この例の目的はそれらの実行を示すことではなく、それらをデータベース オブジェクトとして含めることです。
CREATE PROCEDURE および CREATE FUNCTION も参照してください。
CREATE PROCEDURE curs1 (IN :Arg1 CHAR(4), IN :Arg2 INTEGER) AS BEGIN
DECLARE :alpha char(10) DEFAULT 'BA';
DECLARE :beta INTEGER DEFAULT 100;
DECLARE degdel CURSOR FOR
SELECT degree, cost_per_credit FROM tuition WHERE Degree = :Arg1 AND cost_per_credit = :arg2
FOR UPDATE;
OPEN degdel;
FETCH NEXT FROM degdel INTO :alpha, :beta
DELETE WHERE CURRENT OF degdel;
CLOSE degdel;
END
 
CREATE PROCEDURE EnrollStudent2 (IN :Stud_id INTEGER, IN
:Class_Id INTEGER);
BEGIN
INSERT INTO Enrolls VALUES (:Stud_id, :Class_Id, 0.0);
END
 
CREATE PROCEDURE AInsert
(IN :AGUID BINARY(16),
IN :APeriod INT,
IN :BBal UTINYINT,
IN :BDr DECIMAL(23,9),
IN :BCr DECIMAL(23,9),
IN :BNet DECIMAL(23,9),
IN :HTrx UTINYINT,
IN :PDr DECIMAL(23,9),
IN :PCr DECIMAL(23,9),
IN :PNet DECIMAL(23,9))
AS BEGIN
INSERT INTO "ASum" ("AID", "APeriod", "IBal", "BDr", "BCr", "BNet", "HTrx", "PDr", "PCr", "PNet") VALUES (:AGUID,:APeriod,:BBal,:BDr,:BCr,:BNet,:HTrx, :PDr,:PCr,:PNet);
END
 
CREATE PROCEDURE AR (OUT :BIID SMALLINT, IN :BName CHAR(30))
AS BEGIN
SELECT MAX(BID) + 1 INTO :BIID FROM Br;
INSERT INTO Br (BID, FName) VALUES (:BIID, :BName);
END
 
CREATE FUNCTION CalInterest (IN :principle FLOAT,
IN :period REAL, IN :rate DOUBLE)
RETURNS DOUBLE
AS BEGIN
DECLARE :interest DOUBLE;
SET :interest = ((:principle * :period * :rate) /
100);
RETURN (:interest);
END;
 
SELECT * FROM dbo.fSQLProcedures ('Demodata', null);
結果セット(スペースを考慮して短縮されています):
PROCEDURE_QUALIFIER  PROCEDURE_NAME     PROCEDURE_TYPE
===================  =================  ==============
Demodata             curs1                           1
Demodata             Enrollstudent2                  1
Demodata             AInsert                         1
Demodata             AR                              1
Demodata             CalInterest                     2
 
5 行が影響を受けました。
dbo.fSQLProcedureColumns
この関数は、入力パラメーターおよび出力パラメーターのリストと、指定されたストアド プロシージャまたはユーザー定義関数の結果セットを構成する列を返します。CREATE PROCEDURE および CREATE FUNCTION も参照してください。
構文
dbo.fSQLProcedureColumns (<'database_qualifier' | null>, <'procedure_name' | null>, <'procedure_column_name' | null>)
引数
 
表 102 dbo.fSQLProcedureColumns の引数
パラメーター
データ型
デフォルト値
説明
database_qualifier
VARCHAR
現在のデータベース
詳細を取得するデータベースの名前。
procedure_name
VARCHAR
(デフォルト値なし)
情報を要求するストアド プロシージャの名前
procedure_column_name
VARCHAR
(デフォルト値なし)
プロシージャの列の名前。
メモ:システム ストアド プロシージャは、Zen Control Center に表示されない内部データベース PERVASIVESYSDB に定義されています。
返される結果セット
 
表 103 dbo.fSQLProcedureColumns で返される結果セット
列名
データ型
説明
PROCEDURE_QUALIFIER
VARCHAR
プロシージャが作成されたデータベースの名前。データベースに適用されない場合は NULL。
PROCEDURE_OWNER
VARCHAR
プロシージャ スキーマ識別子。データベースに適用されない場合は NULL。
PROCEDURE_NAME
NULL でない VARCHAR
プロシージャ識別子
COLUMN_TYPE
NULL でない SMALLINT
プロシージャ列をパラメーターまたは結果セット列として定義します。
0 = PARAM_TYPE_UNKNOWN - プロシージャ列は種類が不明なパラメーターです。
1 = PARAM_INPUT - プロシージャ列は入力パラメーターです。
2 = PARAM_INPUT_OUTPUT - プロシージャ列は入力/出力パラメーターです。
3 = RESULT_COL - プロシージャ列は結果セット列です。
4 = PARAM_OUTPUT - プロシージャ列は出力パラメーターです。
5 = RETURN_VALUE - プロシージャ列はプロシージャの戻り値です。
DATA_TYPE
NULL でない SMALLINT
SQL データ型。『ODBC Guide』の使用できるデータ型も参照してください。
TYPE_NAME
NULL でない VARCHAR
リレーショナル データ型名。Zen で使用できるデータ型も参照してください。
PRECISION
INTEGER
データベース内のプロシージャ列のサイズ。列サイズが適用されないデータ型では、NULL が返されます。Decimal データ型の精度と小数位も参照してください。
LENGTH
INTEGER
SQL_C_DEFAULT が指定された場合は、SQLGetData または SQLFetch 操作で転送されるデータの長さ(バイト単位)。数値データの場合、このサイズは、データベースに格納されているデータのサイズとは異なる場合があります。Zen で使用できるデータ型も参照してください。
SCALE
SMALLINT
データベース内のプロシージャ列の小数点以下の桁数。小数点以下の桁数が適用されないデータ型では、NULL が返されます。Decimal データ型の精度と小数位も参照してください。
RADIX
SMALLINT
数値データ型の場合は、10 または 2 のいずれかです。
10 - COLUMN_SIZE および DECIMAL_DIGITS の値は、列で許可される小数点以下の桁数を示します。
2 - COLUMN_SIZE および DECIMAL_DIGITS の値は、列で許可されるビット数を示します。
RADIX が適用されないデータ型では、NULL が返されます。
NULLABLE
NULL でない SMALLINT
プロシージャ列がヌル値を受け入れるかどうかを示します。
0 = NO_NULLS - プロシージャ列はヌル値を受け入れません。
1 = NULLABLE - プロシージャ列はヌル値を受け入れます。
2 = NULLABLE_UNKNOWN - プロシージャ列がヌル値を受け入れるかどうかわかりません。
REMARKS
VARCHAR
プロシージャ列の解説。
COLUMN_DEF
VARCHAR
列のデフォルト値。
デフォルト値として NULL が指定された場合、この列は、引用符で囲まれていない単語の NULL になります。デフォルト値を切り捨てなしで表すことができない場合は、一重引用符で囲まれていない TRUNCATED が格納されます。デフォルト値が指定されていない場合は、NULL になります。
SQL_DATA_TYPE
NULL でない SMALLINT
記述子の SQL_DESC_TYPE フィールドに表示される SQL データ型の値。この列は次のデータ型を除き、TYPE_NAME 列と同じです。例外とするのは AUTOTIMESTAMP、DATE、DATETIME、TIME、TIMESTAMP、および TIMESTAMP2 です。
例外とするデータ型について、結果セットの SQL_DATA_TYPE フィールドは次のように値を返します。DATE は SQL_DATE、TIME は SQL_TIME、AUTOTIMESTAMP、DATETIME、TIMESTAMP、および TIMESTAMP2 は SQL_TIMESTAMP です。
SQL_DATETIME_SUB
SMALLINT
AUTOTIMESTAMP、DATE、DATETIME、TIME、TIMESTAMP、および TIMESTAMP2 のサブタイプ コード。その他のデータ型について、この列は NULL を返します。
1 = DATE(SQL_CODE_DATE)
2 = TIME(SQL_CODE_TIME)
3 = AUTOTIMESTAMP、DATETIME、TIMESTAMP、および TIMESTAMP2(SQL_CODE_TIMESTAMP)
CHAR_OCTET_LENGTH
INTEGER
文字またはバイナリ データ型列の最大長(バイト単位)。その他すべてのデータ型について、この列は NULL を返します。
ORDINAL_POSITION
NULL でない INTEGER
入力および出力パラメーターについては、プロシージャ定義におけるパラメーターの位置を表す序数(1 から始まり、増加するパラメーター順)。
戻り値がある場合、戻り値については 0 が返されます。結果セット列については、結果セットにおける列の位置を表す序数。この場合、結果セット列の最初の列は 1 から始まります。
IS_NULLABLE
VARCHAR
列に NULL が含まれていない場合は "NO"。
列に NULL が含まれている場合は "YES"。
ヌル値を許可するかどうかわからない場合、この列は長さゼロの文字列を返します。この列に返される値は、NULLABLE 列に返される値とは異なります。
デフォルトで、Demodata サンプル データベースにはストアド プロシージャとユーザー定義関数が何も含まれていません。dbo.fSQLProcedureColumns 関数の出力を提供するために、dbo.fSQLProcedures の例で示されているストアド プロシージャとユーザー定義関数を作成してください。この例は、Demodata にストアド プロシージャ curs1、Enrollstudent2、AInsert、および AR と、ユーザー定義関数 CalInterest が含まれていることを前提とします。
次のステートメントは、Demodata サンプル データベース内のすべてのストアド プロシージャおよびユーザー定義関数の、すべての列に関する情報を返します。
SELECT * FROM dbo.fsqlprocedurecolumns ('Demodata', null, null)
結果セット(スペースを考慮して短縮されています):
PROCEDURE_NAME  COLUMN_NAME  COLUMN_TYPE  DATA_TYPE
==============  ===========  ===========  =========
AInsert         :AGUID                 1         -2
AInsert         :APeriod               1          4
AInsert         :BBal                  1         -6
AInsert         :BCr                   1          3
AInsert         :BDr                   1          3
AInsert         :BNet                  1          3
AInsert         :HTrx                  1         -6
AInsert         :PCr                   1          3
AInsert         :PDr                   1          3
AInsert         :PNet                  1          3
AR              :BIID                  4          5
AR              :BName                 1          1
CalInterest     :period                1          7
CalInterest     :principle             1          8
CalInterest     :rate                  1          8
CalInterest     :RETURN_VALUE          5          8
curs1           :Arg1                  1          1
curs1           :Arg2                  1          4
Enrollstudent2  :Class_Id              1          4
Enrollstudent2  :Stud_id               1          4
 
20 行が影響を受けました。
dbo.fSQLSpecialColumns
この関数は、指定されたテーブルについて次のような列情報を取得します。対象となるのは、テーブル内の行を一意に識別する最適な列のセット、およびトランザクションによって行内の任意の値が更新されたときに自動的に更新される列です。
構文
dbo.fSQLSpecialColumns (<'database_qualifier' | null>, <'table_name' | null>, <'nullable' | null>)
引数
 
表 104 dbo.fSQLSpecialColumns の引数
パラメーター
データ型
デフォルト値
説明
database_qualifier
VARCHAR
現在のデータベース
詳細を取得するデータベースの名前
table_name
VARCHAR
(デフォルト値なし)
列情報を要求するテーブルの名前
nullable
SMALLINT
(デフォルト値なし)
ヌル値を持つことができる特殊な列を返すかどうかを判断します。次のいずれかでなければなりません。
0 = NO_NULLS - ヌル値を持つことができる特殊な列を除外します。
1 = NULLABLE - ヌル値を持つことができる特殊な列を返します。
返される結果セット
 
表 105 dbo.fSQLSpecialColumns で返される結果セット
列名
データ型
説明
SCOPE
SMALLINT
rowid の適用範囲。次のいずれかの値を含みます。
0 = SCOPE_CURROW
1 = SCOPE_TRANSACTION
2 = SCOPE_SESSION
IdentifierType が SQL_ROWVER である場合は、NULL が返されます。
COLUMN_NAME
NULL でない VARCHAR
列の名前。名前のない列については、空文字列が返されます。
DATA_TYPE
NULL でない SMALLINT
SQL データ型。『ODBC Guide』の使用できるデータ型も参照してください。
PRECISION
INTEGER
データベース内のプロシージャ列のサイズ。Decimal データ型の精度と小数位も参照してください。
LENGTH
INTEGER
SQL_C_DEFAULT が指定された場合は、SQLGetData または SQLFetch 操作で転送されるデータの長さ(バイト単位)。数値データの場合、このサイズは、データベースに格納されているデータのサイズとは異なる場合があります。Zen で使用できるデータ型も参照してください。
SCALE
SMALLINT
データベース内のプロシージャ列の小数点以下の桁数。小数点以下の桁数が適用されないデータ型では、NULL が返されます。Decimal データ型の精度と小数位も参照してください。
PSEUDO_COLUMN
SMALLINT
列が擬似列であるかどうかを示します。
0 = PC_UNKNOWN
Zen は擬似列をサポートしません。
この例では次のようなテーブルを作成します。テーブルは行を一意に識別する 2 つの列を持ち、トランザクションが行内の任意の値を更新したときにそれらの列が自動的に更新されます。
CREATE TABLE t2 (c1 IDENTITY, c2 INTEGER, c3 SMALLINT NOT NULL, c4 TIMESTAMP NOT NULL)
ALTER TABLE t2 ADD PRIMARY KEY (c1, c4);
 
SELECT * FROM dbo.fSQLSpecialColumns ('Demodata' ,'t2' , 'null')
結果セット(スペースを考慮して短縮されています):
COLUMN_NAME  DATA_TYPE  TYPE_NAME  PRECISION  LENGTH
===========  =========  =========  =========  ======
c1                   4  INTEGER            4       4
c4                  11  DATETIME          16      16
 
2 行が影響を受けました。
dbo.fSQLStatistics
この関数は、テーブルに関する統計情報の一覧と、そのテーブルに関連付けられているインデックスを 1 つの結果セットとして返します。
構文
dbo.fSQLStatistics (<'database_qualifier' | null>, <'table_name' | null>, <'unique' | null>)
引数
 
表 106 dbo.fSQLStatistics の引数
パラメーター
データ型
デフォルト値
説明
database_qualifier
VARCHAR
現在のデータベース
詳細を取得するデータベースの名前
table_name
VARCHAR
(デフォルト値なし)
列情報を要求するテーブルの名前。パターン検索がサポートされます(文字列検索パターンを参照してください)。
unique
SMALLINT
(デフォルト値なし)
インデックスの種類:
0 = INDEX_UNIQUE
1 = INDEX_ALL
返される結果セット
 
表 107 dbo.fSQLStatistics で返される結果セット
列名
データ型
説明
TABLE_QUALIFIER
VARCHAR
統計情報またはインデックスが適用されるテーブルを含んでいるデータベースの名前。データベースに適用されない場合は NULL。
TABLE_OWNER
VARCHAR
統計情報またはインデックスが適用されるテーブルのスキーマ名。データベースに適用されない場合は NULL。
TABLE_NAME
NULL でない VARCHAR
統計情報またはインデックスが適用されるテーブルの名前。
NON_UNIQUE
SMALLINT
インデックスが重複値を許可しないかどうかを示します。
0 = FALSE - インデックス値が一意である必要がある場合。
1 = TRUE - インデックス値が一意でなくてもよい場合。
TYPE が TABLE_STAT である場合は、NULL が返されます。
INDEX_QUALIFIER
VARCHAR
DROP INDEX を行うインデックス名を修飾するために使用されている識別子。インデックス修飾子がデータベースでサポートされない場合、または TYPE が TABLE_STAT である場合は、NULL が返されます。
INDEX_NAME
VARCHAR
インデックス名。TYPE が TABLE_STAT である場合は、NULL が返されます。
TYPE
NULL でない SMALLINT
返される情報の種類:
0 = TABLE_STAT
3 = INDEX_OTHER
SEQ_IN_INDEX
SMALLINT
インデックスにおける列のシーケンス番号(1 から始まります)。TYPE が TABLE_STAT である場合は、NULL が返されます。
COLUMN_NAME
VARCHAR
列名。列が PERSONID + NAME などのような式に基づている場合は、その式が返されます。式を判断できない場合は、空文字列が返されます。
TYPE が TABLE_STAT である場合は、NULL が返されます。
COLLATION
CHAR
列の並べ替え順。
A = 昇順
D = 降順
列の並べ替え順がデータベースでサポートされない場合、または TYPE が TABLE_STAT である場合は、NULL が返されます。
CARDINALITY
INTEGER
テーブルまたはインデックスの基数。
TYPE が TABLE_STAT である場合は、テーブル内の行数。TYPE が TABLE_STAT でない場合は、インデックスに含まれる一意な値の数。
この値をデータベースから入手できない場合は、NULL が返されます。
PAGES
INTEGER
インデックスまたはテーブルの格納に使用されるページ数。
TYPE が TABLE_STAT である場合は、テーブルのページ数。TYPE が TABLE_STAT でない場合は、インデックスのページ数。
この値をデータベースから入手できない場合、またはデータベースに適用されない場合は、NULL が返されます。
FILTER_CONDITION
VARCHAR
インデックスがフィルター選択されたインデックスである場合は、これは CLASSID > 150 などのようなフィルター条件になります。フィルター条件を判断できない場合、これは空文字列になります。
インデックスがフィルターされたインデックスでない場合、フィルターされたインデックスであるかどうかを判断できない場合、あるいは TYPE が TABLE_STAT である場合は、NULL になります。
次の例は、デフォルトの Demodata サンプル データベース中、文字 c で始まるすべてのテーブルの全インデックスに関する統計情報を返します。INDEX_NAME の NULL は除いてあります。文字列検索パターンも参照してください。
SELECT * FROM dbo.fSQLStatistics ('Demodata', 'c%', 1) WHERE INDEX_NAME IS NOT NULL
 
結果セット(スペースを考慮して短縮されています):
TABLE_NAME   INDEX_NAME          COLUMN_NAME
==========   ================    ====================
Class        UK_ID               ID
Class        Class_Name          Name
Class        Class_Name          Section
Class        Class_seg_Faculty   Faculty_ID
Class        Class_seg_Faculty   Start_Date
Class        Class_seg_Faculty   Start_Time
Class        Building_Room       Building_Name
Class        Building_Room       Room_Number
Class        Building_Room       Start_Date
Class        Building_Room       Start_Time
Course       Course_Name         Name
Course       DeptName            Dept_Name
 
12 行が影響を受けました。
dbo.fSQLTables
この関数は、データベースに格納されているテーブル、カタログ、またはスキーマの名前と、テーブルの種類の一覧を返します。
構文
dbo.fSQLTables (<'database_qualifier' | null>, <'table_name' | null>, <['type' | null>)
引数
 
表 108 dbo.fSQLTables の引数
パラメーター
データ型
デフォルト値
説明
database_qualifier
VARCHAR
現在のデータベース
詳細を取得するデータベースの名前
table_name
VARCHAR
(デフォルト値なし)
情報を取得する必要のあるテーブルの名前
type
VARCHAR
(デフォルト値なし)
次のいずれかでなければなりません。
TABLE - ユーザー テーブルのみ返します
SYSTEM TABLE - すべてのシステム テーブルを返します
VIEW - ビューのみ返します
ヌル - すべてのテーブルを返します
返される結果セット
 
表 109 dbo.fSQLTables で返される結果セット
列名
データ型
説明
TABLE_QUALIFIER
VARCHAR
データベース名。データベースに適用されない場合は NULL。
TABLE_OWNER
VARCHAR
テーブル所有者の名前。データベースに適用されない場合は NULL。
TABLE_NAME
VARCHAR
テーブルの名前
TABLE_TYPE
VARCHAR
次のいずれかです。
TABLE
VIEW
SYSTEM TABLE
REMARKS
VARCHAR
テーブルの記述。
次の例は、デフォルトの Demodata サンプル データベース中の、ユーザー テーブルおよびシステム テーブルの一覧を返します。
SELECT * FROM dbo.fSQLTables ('Demodata', null, null)
結果セット(スペースを考慮して短縮されています):
TABLE_NAME      TABLE_TYPE
=============   ==============
X$File          SYSTEM TABLE
X$Field         SYSTEM TABLE
X$Index         SYSTEM TABLE
X$View          SYSTEM TABLE
X$Proc          SYSTEM TABLE
X$Relate        SYSTEM TABLE
X$Trigger       SYSTEM TABLE
X$Attrib        SYSTEM TABLE
X$Occurs        SYSTEM TABLE
X$Variant       SYSTEM TABLE
Billing         TABLE
Class           TABLE
Course          TABLE
Dept            TABLE
Enrolls         TABLE
Faculty         TABLE
Person          TABLE
Room            TABLE
Student         TABLE
Tuition         TABLE
X$User          SYSTEM TABLE
X$Rights        SYSTEM TABLE
 
22 行が影響を受けました。
dbo.fSQLDBTableStat
この関数は、Btrieve Stat(15)オペレーションから返される詳細など、現在のデータベース内のテーブルやファイルに関する基本情報を結果セットとして返します。
構文
dbo.fSQLDBTableStat ('table_name')
引数
 
表 110 dbo.fSQLDBTableStat の引数
パラメーター
データ型
デフォルト値
説明
table_name
VARCHAR
(デフォルト値なし)
情報を取得する、現在のデータベース内のテーブルの名前。
返される結果セット
 
表 111 dbo.fSQLDBTableStat で返される結果セット
列名
データ型
説明
Table Name
VARCHAR
テーブルの名前。
Table Location
VARCHAR
テーブルのデータ ファイルの絶対パス名。
Dictionary Path
VARCHAR
データベースの辞書パス。
File Version
VARCHAR
16 進数のファイルの Btrieve バージョン(例:バージョン 13 の場合は "13.0")。
Record Length
SMALLINT
Stat(15)によって返される、ファイルの固定レコード長。
Page Size
SMALLINT
Stat(15)によって返される、ファイルのページ サイズ。
Number of Records
BIGINT
Stat(15)によって返される、ファイル内のレコード数。
Number of Indexes
SMALLINT
Stat(15)によって返される、インデックス数。
Unused LinkedDup Ptr
SMALLINT
Stat(15)によって返される、未使用の重複ポインター数。
Unused PreAlloc Pages
SMALLINT
Stat(15)によって返される、ファイル内の未使用の空ページ数。
Variable Len Records
VARCHAR
ファイルに可変長レコードがあるかどうかを示す、YES または NO。
Blank Truncation
VARCHAR
可変長レコードでブランク トランケーションを使用しているかどうかを示す、YES または NO。
Record Compression
VARCHAR
Btrieve のデータ圧縮が使用されているかどうかを示す、YES または NO。
Page Compression
VARCHAR
Btrieve のページ圧縮が使用されているかどうかを示す、YES または NO。
Key Only File
VARCHAR
ファイルはキー オンリー ファイルであるかどうかを示す、YES または NO。
Index Balancing
VARCHAR
Btrieve のインデックス バランスが使用されているかどうかを示す、YES または NO。
Freespace Threshold
VARCHAR
空きスペース スレッショルドが指定されている場合、そのスレッショルドを示すパーセンテージ。
Uses ACS
VARCHAR
ファイルはオルタネート コレーティング シーケンスを使用しているかどうかを示す、YES または NO。
System Data
VARCHAR
ファイルはシステム データ キーを有効にしているかどうかを示す、YES または NO。
Used LinkedDup Ptr
SMALLINT
リンク重複を使用するキー数。
上記のフィールドの詳細については、『Btrieve API Guide』の Create(14)および Stat(15)を参照してください。
次の例は、デフォルトの Demodata サンプル データベースに含まれるテーブルの情報を返します。
SELECT * FROM dbo.fSQLDBTableStat ('student')
結果セット(スペースを考慮して再編成されています):
Table Name            Student
Table Location        C:\PROGRAMDATA\ACTIAN\ZEN\DEMODATA\Student.mkd
Dictionary Path       C:\PROGRAMDATA\ACTIAN\ZEN\DEMODATA
File Version          9.5
Record Length         76
Page Size             4096
Number of Records     1288
Number of Indexes     2
Unused LinkedDup Ptr  0
Unused PreAlloc Pages 0
Variable Len Records  NO
Blank Truncation      NO
Record Compression    NO
Page Compression      NO
Key Only File         NO
Index Balancing       NO
Freespace Threshold   0%
Uses ACS              NO
System Data           YES
Used LinkedDup Ptr    0
文字列検索パターン
以下のシステム カタログ関数は、文字列検索パターンをサポートしています。
dbo.fSQLForeignKeys
dbo.fSQLPrimaryKeys
dbo.fSQLStatistics
検索パターンで 2 つのワイルドカード文字を使用できます。
パーセント記号(%)は、任意の連続する n 個の文字を表します。
アンダースコア(_)は、単一文字を表します。
次の表は、文字列検索パターンの使用例を示します。
ステートメントの例
戻り値
SELECT * FROM dbo.fSQLStatistics ( null, '%', 0 )
現在のデータベースにある、一意のインデックスを持つすべてのテーブル
SELECT * FROM dbo.fSQLStatistics ( null, '%', 1 )
現在のデータベースにある、名前が 't' で始まり、インデックスを持つすべてのテーブル
SELECT * FROM dbo.fSQLPrimaryKeys ( null, '%' )
現在のデータベースにある、主キーを持つすべてのテーブル
SELECT * FROM dbo.fSQLPrimaryKeys ( null, 't%' )
現在のデータベースにある、名前が 't' で始まり、主キーを持つすべてのテーブル
SELECT * FROM dbo.fSQLForeignKeys ( null, '%' , '%' )
現在のデータベースにある、主キーを持つすべてのテーブルと、それに関連する外部キー テーブル