1つのローにクエリの各出力カラムを記述したクエリの結果セットを記述します。
sa_describe_query( query [, add_keys ] )
query 記述されている SQL 文のテキストを指定する LONG VARCHAR パラメータ。
add_keys 記述されているクエリの結果セットで一意にローを識別するカラムのセットを決定するかどうかを指定する任意の BIT パラメータ。デフォルトは 0 です。データベース・サーバはカラムの識別を試行しません。このパラメータの詳細については、以下の備考部分を参照してください。
カラム名 | データ型 | 説明 |
---|---|---|
column_number | INTEGER | このローが記述するカラムの順序位置 (開始値は 1)。 |
name | VARCHAR(128) | カラムの名前。 |
domain_id | SMALLINT | カラムのデータ型。SYSDOMAIN システム・ビューを参照してください。 |
domain_name | VARCHAR(128) | データ型の名前。SYSDOMAIN システム・ビューを参照してください。 |
domain_name_with_size | VARCHAR(160) | サイズと精度を含むデータ型名 (CREATE TABLE 関数または CAST 関数で使用されます)。 |
width | INTEGER | 文字列パラメータでは長さ、数値パラメータでは精度、その他のデータ型では記憶領域のサイズをバイトで示します。 |
scale | INTEGER | 数値データ型カラムでは小数点以下の桁数、その他のデータ型では 0 を示します。 |
declared_width | INTEGER | 文字列パラメータでは長さ、数値パラメータでは精度、その他のデータ型では記憶領域のサイズをバイトで示します。 |
user_type_id | SMALLINT | 1 つの場合はユーザ定義のデータ型の type_id、それ以外の場合は NULL。SYSUSERTYPE システム・ビューを参照してください。 |
user_type_name | VARCHAR(128) | 1 つの場合はユーザ定義のデータ型の name、それ以外の場合は NULL。SYSUSERTYPE システム・ビューを参照してください。 |
correlation_name | VARCHAR(128) | 使用できる場合、式と関連付けられている相関名、それ以外の場合は NULL。 |
base_table_id | UNSIGNED INTEGER | 式がフィールドの場合は table_id、それ以外の場合は NULL。SYSTAB システム・ビューを参照してください。 |
base_column_id | UNSIGNED INTEGER | 式がフィールドの場合は column_id、それ以外の場合は NULL。SYSTABCOL システム・ビューを参照してください。 |
base_owner_name | VARCHAR(128) | 式がフィールドの場合は所有者名、それ以外の場合は NULL。SYSUSER システム・ビューを参照してください。 |
base_table_name | VARCHAR(128) | 式がフィールドの場合はテーブル名、それ以外の場合は NULL。 |
base_column_name | VARCHAR(128) | 式がフィールドの場合はカラム名、それ以外の場合は NULL。 |
nulls_allowed | BIT | 式をNULL にできる場合は 1、それ以外の場合は 0 を示すインジケータ。 |
is_autoincrement | BIT | 式が、オートインクリメントすると宣言されているカラムの場合は 1、それ以外の場合は 0 を示すインジケータ。 |
is_key_column | BIT | 式が結果セットのキーの一部である場合は 1、それ以外の場合は 0 を示すインジケータ。詳細については以下の備考部分を参照してください。 |
is_added_key_column | BIT | 式が追加されたキーカラムの場合は 1、それ以外の場合は 0 を示すインジケータ。詳細については以下の備考部分を参照してください。 |
sa_describe_query プロシージャは、API に依存しないメカニズムによって、クエリの結果セットに含まれる式に関する名前とタイプの情報を記述します。
add_keys に 1 が指定されている場合、sa_describe_query プロシージャはクエリ対象のオブジェクトからカラム・セットを検索しようとします。このカラム・セットは、記述されるクエリの結果セットのローを一意に識別するときに使用されます。キーの形式は、クエリ対象のオブジェクトに含まれる1 つ以上のカラムです。また、クエリで明示的に参照されないカラムがキーに含まれます。オプティマイザがキーを検索する場合、カラムまたはキーで使用されるカラムは、値が 1 の is_key_column によって結果のキーが識別されます。キーが見つからない場合、エラーが返されます。
キーに含まれるがクエリで明示的に参照されないカラムの場合、is_added_key_column は 1 に設定されます。これは、カラムがプロシージャの結果に追加されたことを示します。それ以外の場合、is_added_key_column の値は 0です。
add_keys を指定しない場合、または 0 の値を指定する場合、オプティマイザは結果セットのキーを検索しようとしません。また、is_key_column と is_added_key_column には NULL が含まれます。
declared_width 値と width 値のどちらもカラムのサイズを記述します。declared_width は、CREATE TABLE 文またはクエリによって定義されるカラムのサイズを記述します。クライアントにフェッチするときに、width 値は、フィールドのサイズを指定します。クライアントの型表記は、データベース・サーバとは異なることがあります。たとえば、return_date_time_as_string オプションがオンの場合、日付と時間のデータ型は文字列に変換されます。文字列の場合、character-length セマンティックで宣言されたフィールドは、CREATE TABLE と一致する declared_width 値があります。width 値は、戻り値の文字列を格納するために必要な最大バイト数を示します。次に例を示します。
宣言 | width | declared_width |
---|---|---|
CHAR(10) | 10 | 10 |
CHAR(10 CHAR) | 40 | 10 |
TIMESTAMP | タイムスタンプ形式の文字列長によって変わります | 8 |
NUMERIC(10, 3) | 10 (精度) | 10 (精度) |
なし
なし
次の例は、Departments テーブルのすべてのカラムを問い合わせると返される情報を記述します。
SELECT * FROM sa_describe_query( 'SELECT * FROM Departments DEPT' ); |
この結果、add_keys パラメータが指定されなかったため、is_key_column と is_added_key_column の値を NULL と示します。
次の例は、Departments テーブルとジョインした Employees テーブルの DepartmentName カラムと Surname カラムを問い合わせることで返される情報を記述します。
SELECT * FROM sa_describe_query( 'SELECT DepartmentName, Surname FROM Employees E JOIN Departments D ON E.EmployeeID = D.DepartmentHeadId', add_keys = 1 ); |
この結果、結果セットのロー 3 と 4 に 1 が示されます。これは、クエリの結果セットに含まれるローを一意に識別するときに必要なカラムが Employees.EmployeeID and Departments.DepartmentID であることを示します。また、ロー 3 と 4 の is_added_key_column には 1 が指定されます。これは Employees.EmployeeID と Departments.DepartmentID が、記述されているクエリで明示的にされなかったためです。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |