Constants

AdvancedServerの暗黙的に型指定された定数の種類は、 strings と numbers です。定数を明示的な型で指定することもできます。これにより、システムによるより正確な表現とより効率的な処理が可能になります。これらの選択肢については、次のサブセクションで説明します。

文字列定数

SQLの string constant は、 'This is a string' などの単一引用符 (') で区切られた任意の文字列です。文字列定数内に単一引用符を含めるには、2つの隣接する単一引用符を記述します。 'Dianne''s horse' 。これは、二重引用符 (/") と同じではないことに注意してください。

数値定数

数値定数は、次の一般的な形式で受け入れられます。

digits
digits.[digits][e[+-]digits]
[digits].digits[e[+-]digits]
digitse[+-]digits

ここで、 digits は1つ以上の10進数(0〜9)です。小数点を使用する場合、少なくとも1桁は小数点の前または後になければなりません。指数マーカー (e) が存在する場合は、少なくとも1桁が続く必要があります。定数にスペースやその他の文字を埋め込むことはできません。先頭のプラス記号またはマイナス記号は、実際には定数の一部とは見なされないことに注意してください。これは定数に適用される演算子です。

有効な数値定数の例を次に示します。

42
3.5
4.
.001
5e2
1.925e-3

小数点も指数も含まない数値定数は、その値が INTEGER 型(32ビット)に収まる場合、最初は INTEGER 型と見なされます。それ以外の場合、値がタイプ BIGINT (64ビット)に収まる場合、タイプ BIGINT であると推定されます。それ以外の場合は、タイプ NUMBER と見なされます。小数点や指数を含む定数は、最初は常に NUMBER タイプであると推定されます。

数値定数の最初に割り当てられたデータ型は、型解決アルゴリズムの出発点にすぎません。ほとんどの場合、定数はコンテキストに応じて自動的に最も適切な型に強制されます。必要に応じて、次のセクションで説明するようにキャストすることにより、数値を特定のデータ型として解釈させることができます。

他のタイプの定数

CAST

次の表記法を使用して、任意のタイプの定数を入力できます。

CAST('string' AS type)

文字列定数のテキストは、 type というタイプの入力変換ルーチンに渡されます。結果は、示されたタイプの定数です。明示的な型キャストは、定数が必要な型にあいまいさがない場合(たとえば、テーブル列に直接割り当てられる場合)、省略される場合があります。この場合、自動的に強制されます。

CAST を使用して、任意の式の実行時型変換を指定することもできます。

CAST (MULTISET)

MULTISET は CAST の拡張で、サブクエリの結果をネストされたテーブルタイプに変換します。概要は次のとおりです。

CAST ( MULTISET ( < subquery > ) AS < datatype > )

subquery は1つ以上の行を返すクエリであり、 datatype はネストされたテーブルタイプです。

CAST(MULTISET) は、データのコレクションをテーブルに格納するために使用されます。

Example

次の例は、 MULTISET の使用方法を示しています。

edb=# CREATE OR REPLACE TYPE project_table_t AS TABLE OF VARCHAR2(25);
CREATE TYPE
edb=# CREATE TABLE projects (person_id NUMBER(10), project_name VARCHAR2(20));
CREATE TABLE
edb=# CREATE TABLE pers_short (person_id NUMBER(10), last_name VARCHAR2(25));
CREATE TABLE
edb=# INSERT INTO projects VALUES (1, 'Teach');
INSERT 0 1
edb=# INSERT INTO projects VALUES (1, 'Code');
INSERT 0 1
edb=# INSERT INTO projects VALUES (2, 'Code');
INSERT 0 1
edb=# INSERT INTO pers_short VALUES (1, 'Morgan');
INSERT 0 1
edb=# INSERT INTO pers_short VALUES (2, 'Kolk');
INSERT 0 1
edb=# INSERT INTO pers_short VALUES (3, 'Scott');
INSERT 0 1
edb=# COMMIT;
COMMIT
edb=# SELECT e.last_name, CAST(MULTISET(
edb(#   SELECT p.project_name
edb(#   FROM projects p
edb(#   WHERE p.person_id = e.person_id
edb(#   ORDER BY p.project_name) AS project_table_t)
edb-# FROM pers_short e;
 last_name | project_table_t
-----------+-----------------
 Morgan    | {Code,Teach}
 Kolk      | {Code}
 Scott     | {}
(3 rows)