例
以下の埋め込み SQL の例では、$LISTSAME を使用して 2 つのリスト引数を比較しています。
SET a=$LISTBUILD("Red",,"Yellow","Green","","Violet")
SET b=$LISTBUILD("Red",,"Yellow","Green","","Violet")
&sql(SELECT $LISTSAME(:a,:b)
INTO :c )
IF SQLCODE'=0 {
WRITE !,"Error code ",SQLCODE }
ELSEIF c=1 { WRITE "lists a and b are the same",! }
ELSE { WRITE "lists a and b are not the same",! }
以下の SQL の例では、NULL であるか、存在しないか、または空の文字列要素があるリストを比較しています。
SELECT $LISTSAME($LISTBUILD('Red',NULL,'Blue'),$LISTBUILD('Red',,'Blue')) AS NullAbsent,
$LISTSAME($LISTBUILD('Red',NULL,'Blue'),$LISTBUILD('Red','','Blue')) AS NullEmpty,
$LISTSAME($LISTBUILD('Red',,'Blue'),$LISTBUILD('Red','','Blue')) AS AbsentEmpty
$LISTSAME 比較は、ObjectScript 等号によって使用されるのと同じ等価テストではありません。統合は、2 つのリストをエンコードされた文字列として (文字ごとに) 比較します。$LISTSAME は、2 つのリストを要素ごとに比較します。以下の例で示すように、1 つの数字と 1 つの数値文字列を比較するとき、この相違が容易にわかります。
SET a = $LISTBUILD("365")
SET b = $LISTBUILD(365)
IF a=b
{ WRITE "Equal sign: lists a and b are the same",! }
ELSE { WRITE "Equal sign: lists a and b are not the same",! }
&sql(SELECT $LISTSAME(:a,:b)
INTO :c )
IF SQLCODE'=0 {
WRITE !,"Error code ",SQLCODE }
ELSEIF c=1 { WRITE "$LISTSAME: lists a and b are the same",! }
ELSE { WRITE "$LISTSAME: lists a and b are not the same",! }
以下の SQL の例では、キャノニック形式および非キャノニック形式の数字および数値文字列が含まれるリストを比較しています。数値と文字列のリスト要素を比較する際、文字列リスト要素では、数値をキャノニック形式で表す必要があります。これは、InterSystems IRIS では常に、比較の実行前に、数字がキャノニック形式に変換されるためです。以下の例で、$LISTSAME は文字列と数字を比較します。最初の 3 つの $LISTSAME 関数は 1 (同一) を返します。4 つ目の $LISTSAME 関数は 0 (同一でない) を返します。これは、文字列表現がキャノニック形式でないためです。
SELECT $LISTSAME($LISTBUILD('365'),$LISTBUILD(365)),
$LISTSAME($LISTBUILD('365'),$LISTBUILD(365.0)),
$LISTSAME($LISTBUILD('365.5'),$LISTBUILD(365.5)),
$LISTSAME($LISTBUILD('365.0'),$LISTBUILD(365.0))