• 検索結果がありません。

配列とは、順序付けられたデータ要素の集合です。ある特定の配列のすべての要素は、同じ データ型です。各要素には索引があります。索引は、各要素の配列内での位置に対応する番 号です。

配列内の要素数は、その配列のサイズを表します。Oracleの配列は可変サイズであるため、

VARRAYと呼ばれます。配列を宣言する場合は、最大サイズを指定する必要があります。

VARRAY宣言時に領域は割り当てられません。VARRAYでは、次のような型を定義しま

す。

リレーショナル表の列のデータ型

オブジェクト型属性

PL/SQLの変数、パラメータ、またはファンクションの戻り型

Oracleは通常、1つの配列オブジェクトをインライン形式でその行の他のデータと同じ表領 域に、またはアウトライン形式でLOBに格納します。この形式は配列オブジェクトのサイ ズによって決まります。ただし、VARRAYに個別の記憶特性を指定する場合、Oracleはこ れをサイズに関係なくアウトライン形式で格納します。

ネストした表 ネストした表 ネストした表 ネストした表

ネストした表は、順序付けられていない要素の集合を表現します。その要素は、組込み型ま たはユーザー定義型です。ネストした表は、単一列の表として表示できます。ネストした表 がオブジェクト型の場合、オブジェクト型のそれぞれの属性を表す複数列の表としても表示 できます。

ネストした表の定義では、領域は割り当てられません。ネストした表では、次のものを宣言 するための型を定義します。

リレーショナル表の列

オブジェクト型属性

PL/SQLの変数、パラメータ、およびファンクションの戻り値

ネストした表が、リレーショナル表内の列型として使用される場合、またはオブジェクト表 の基礎となるオブジェクト型の属性として使用される場合、Oracleは、ネストした表のすべ てのデータを単一表に格納し、その単一表を、ネストした表を囲むリレーショナル表または オブジェクト表に対応付けます。

データ型の比較規則 データ型の比較規則 データ型の比較規則 データ型の比較規則

ここでは、Oracleが各データ型の値を比較する方法について記述します。

数値 数値 数値 数値

大きい値は小さい値よりも大きいとみなされます。すべての負の数は、0(ゼロ)およびす べての正の数より小さいとみなされます。したがって、-1は100より小さく、-100は-1よ り小さいとみなされます。

日付値 日付値 日付値 日付値

後の日付は前の日付よりも大きいとみなされます。たとえば、'29-MAR-1997'(1997年3月 29日)に相当する日付は'05-JAN-1998'(1998年1月5日)に相当する日付よりも小さく、

'05-JAN-1998 1:35pm'(1998年1月5日午後1時35分)に相当する日付は'05-JAN-1998

10:09am'(1998年1月5日午前10時9分)に相当する日付よりも大きいとみなされます。

参照参照参照

参照: 詳細は、10-32ページの「CREATE TABLE」の varray_storage_clauseを参照してください。

文字列値 文字列値 文字列値 文字列値

文字値は、次のどちらかの比較方法を使用して比較されます。

空白埋め比較

非空白埋め比較

ここでは、これらの比較方法について説明します。これらの異なる比較方法を使用して2つ の文字値を比較した場合、その結果が異なることもあります。次の表に、それぞれの比較方 法を使用して5組の文字を比較した結果を示します。通常、空白埋め比較と非空白埋め比較 の結果は同じです。表に示されている最後の比較では、空白埋め比較と非空白埋め比較の違 いが明確になっています。

空白埋め比較 空白埋め比較空白埋め比較

空白埋め比較 2つの値の長さが異なる場合、Oracleはまず短い方の値の最後に空白を追加 して、2つの値が同じ長さになるようにします。次に、その2つの値を、最初に異なる文字 まで1文字ずつ比較します。最初に異なる文字の位置で、大きい方の文字を持つ値の方が大 きいとみなされます。2つの値に異なる文字がない場合、その2つの値は等しいとみなされ ます。この規則では、2つの値の後続空白数のみが異なる場合、その2つの値は等しいとみ なされます。Oracleでは、比較する両方の値が、CHARデータ型、NCHARデータ型、テキス ト・リテラルのいずれかの式の場合、またはUSER関数の戻り値の場合のみ空白埋め比較方 法を使用します。

非空白埋め比較 非空白埋め比較非空白埋め比較

非空白埋め比較 Oracleは、2つの値を、最初に異なる文字まで1文字ずつ比較します。最 初に異なる文字の位置で、大きい方の文字を持つ値の方が大きいとみなされます。長さが異 なる2つの値を短い方の値の最後まで比較して、すべて同じ文字だった場合、長い方の値が 大きいとみなされます。同じ長さの2つの値に異なる文字がない場合、その2つの値は等し いとみなされます。Oracleでは、比較する片方または両方の値がVARCHAR2データ型また はNVARCHAR2データ型の場合、非空白埋め比較方法を使用します。

単一文字 単一文字 単一文字 単一文字

Oracleは、データベース・キャラクタ・セットで指定された数値に従って各文字を比較しま

す。第1の文字の数値が第2の文字の数値よりも大きい場合、第1の文字は第2の文字より も大きいとみなされます。Oracleは、空白はどの文字よりも小さいとみなします。これは、

ほぼすべてのキャラクタ・セットでいえることです。

空白埋め比較 空白埋め比較空白埋め比較

空白埋め比較 非空白埋め比較非空白埋め比較非空白埋め比較非空白埋め比較

’ab’ > ’aa’ ’ab’ > ’aa’

’ab’ > ’a

' ’ab’ > ’a '

’ab’ > ’a’ ’ab’ > ’a’

'ab' = 'ab' 'ab' = 'ab'

'a ' = 'a' ’a ’ > ’a’

次に、一般的なキャラクタ・セットを示します。

7ビットASCII(情報交換用米国標準コード)

EBCDICコード(拡張2進化10進コード)

ISO 8859/1(国際標準化機構)

JEUC日本語拡張UNIX

ASCIIとEBCDICのキャラクタ・セットの一部を表2-4と表2-5に示します。なお、大文字

と小文字は同じではありません。また、キャラクタ・セットの照合順番は、特定の言語に対 する言語順序と一致しない場合があります。

表 表表

2-4 ASCIIキャラクタ・セットキャラクタ・セットキャラクタ・セットキャラクタ・セット 記号

記号記号

記号 10進値進値進値進値 記号記号記号記号 10進値進値進値進値

空白 32 ; 59

! 33 < 60

" 34 = 61

# 35 > 62

$ 36 ? 63

% 37 @ 64

& 38 A-Z 65-90

' 39 [ 91

( 40 \ 92

) 41 ] 93

* 42 ^ 94

+ 43 _ 95

, 44 ' 96

- 45 a-z 97-122

. 46 { 123

/ 47 | 124

0-9 48-57 } 125

: 58 ~ 126

オブジェクト値 オブジェクト値 オブジェクト値 オブジェクト値

オブジェクト値は、比較関数MAPおよびORDERのどちらかを使用して比較されます。どち らの関数でもオブジェクト型インスタンスは比較されますが、両者は別のものです。これら の関数は、オブジェクト型の一部として指定される必要があります。

VARRAY とネストした表 とネストした表 とネストした表 とネストした表

Oracle8iでは、VARRAYとネストした表を比較することはできません。

表表表

2-5 EBCDICキャラクタ・セットキャラクタ・セットキャラクタ・セットキャラクタ・セット 記号

記号記号

記号 10進値進値進値進値 記号記号記号記号 10進値進値進値進値

空白 64 % 108

¢ 74 _ 109

. 75 > 110

< 76 ? 111

( 77 : 122

+ 78 # 123

| 79 @ 124

& 80 ' 125

! 90 = 126

$ 91 " 127

* 92 a-i 129-137

) 93 j-r 145-153

; 94 s-z 162-169

ÿ 95 A-I 193-201

- 96 J-R 209-217

/ 97 S-Z 226-233

参照 参照参照

参照: MAPメソッドとORDERメソッド、およびこれらのメソッドが戻す 値の詳細は、10-80ページの「CREATE TYPE」および『Oracle8iアプリ ケーション開発者ガイド 基礎編』を参照してください。

データ変換 データ変換 データ変換 データ変換

一般に、式には異なるデータ型の値を含めることができません。たとえば、式では10に5 を掛けた値に'JAMES'を加えることはできません。ただし、Oracleでは値をあるデータ型か ら別のデータ型へ変換する場合の、暗黙的な変換と明示的な変換をサポートしています。

暗黙的なデータ変換 暗黙的なデータ変換 暗黙的なデータ変換 暗黙的なデータ変換

あるデータ型から別のデータ型への変換が意味を持つ場合、Oracleは値を自動的に変換しま す。Oracleは、次の場合にデータ型を変換します。

INSERT文またはUPDATE文で、あるデータ型の値を別のデータ型の列に割り当てる場 合。Oracleはその値を列のデータ型に変換します。

SQL関数または演算子に不当なデータ型の引数を指定して使用する場合。Oracleはその 引数を正当なデータ型に変換します。

異なるデータ型の値に比較演算子を使用する場合。Oracleは式の一方を他方のデータ型 に変換します。

暗黙的なデータ変換の例 暗黙的なデータ変換の例 暗黙的なデータ変換の例 暗黙的なデータ変換の例

テキスト・リテラルの例 テキスト・リテラルの例テキスト・リテラルの例

テキスト・リテラルの例 テキスト・リテラル'10'はCHARデータ型です。次の文のように 数式で使用すると暗黙的にNUMBERデータ型に変換されます。

SELECT sal + '10' FROM emp;

文字値および数値の例 文字値および数値の例文字値および数値の例

文字値および数値の例 条件で文字値とNUMBER型の値を比較する場合、NUMBER型の値は 文字値に変換されず、文字値が暗黙的にNUMBER型の値に変換されます。次の文では、

'7936'が暗黙的に7936に変換されます。

SELECT ename FROM emp

WHERE empno = '7936';

日付の例 日付の例日付の例

日付の例 次の文では、Oracleがデフォルトの日付書式'DD-MON-YYYY'を使用して、

'12-MAR-1993'をDATE値に暗黙的に変換します。

SELECT ename FROM emp

WHERE hiredate = '12-MAR-1993';

ROWID例例例例 次の文では、Oracleがテキスト・リテラル'AAAAZ8AABAAABvlAAA'を

ROWID値に暗黙的に変換します。

SELECT ename

ドキュメント内 Oracle8i SQLリファレンス Vol.1, リリース8.1 (ページ 50-81)

関連したドキュメント