9.1 組み込み関数の規則
LANSAオブジェクトを参照する場合、大多数の既存の組み込み関数は、オブジェクトIDにのみに対 応しています。ロングネームをサポートする組み込み関数はそ れ ぞ れ明示されています。
入力引数または戻り値のタイプはA、N、L、u、w またはXが使用できます。
タイプ |
説明 |
A |
英数 字 - 指定できるフィールド・タイプはAlpha、String およびChar |
N |
数値 - 指定できるフィールド・タイプはPacked、Signed、Float およびInteger |
L |
リス ト |
u |
Unicodo - 指定できるフィールド・タイプはAlpha、String、Char、Nchar およびNvarchar |
w |
Unicode を除くすべてのフィールド・タイプが指定可能(ただしリスト以外)。つまり、Xと同じであるがUnicodeを含まない |
X |
すべ てのフィールド・タイプを指定可能(ただしリスト以外) |
Date、Datetime、およびBLOBなどのその他のフィールド・タイプはすべて独自タイプに分類されます。したがって、'A'または'N'タイプ の引数/戻り値に有効ではありません。これらのフィールド・タイプを使用するには、組み込みファンクションを使って適切なクラスに強制型変換する必要があ ります。組み 込みファンクションの使用に関する詳細および例については、「組み込みファンクション」を 参照してください。
ユーザーが定義した組み込み関数のフィールド・タイプはすべてのRDMLXフィールド・タイプと正確に一致させる必要があります。そのため、ユーザーが定 義した組み込み関数の宣言でStringが使用される場合、呼び出し時に使用できるものはStringのみです。Alpaフィールドは使用できません。し か し、Alphaで引数として宣言された場合は、Stringフィールドを利用できます。これは、下位互換性をサポートするための例外です。ユーザーが定義 した組み込み関数は、X、u またはwタイプで引数または戻り値を宣言できません。
'X' は特別な引数/戻り値のタイプで、すべてのフィールド・タイプを使用できます。
フィールドとリテラル
引 数の長さに50を超える値の指定が許されるのは、フィールドの場合だけです。リテラル値 は最大長が50に制限されます。
RDMLX の引数や戻り値に対するFFC警告(FFC エラーではない)
最大長が256桁のA、u、w またはX(すべて)の引数または戻り値に、それよりも長いフィールドが渡された場合、エラーではなくFFC警告が発生します(BIF は256バイト長を超えるフィールドに対処することができません)。
最大長が30桁で最大小数点以下桁数が9桁のNタイプの引数または戻り値に、それよりも長い フィールドが渡された場合、エラーではなくFFC警告が発生し ます(BIFは30,9を超えるフィールドに対処することができません)。
BIFの引数や戻り値の中には、新しい最大長の値である2147483647、つまり無制限を 定義できるものがあります。この場合、フィールド長の最大/最小をチェックする必要はありません。
NまたはXの引数や戻り値の中には、新しい小数点以下桁数の最大値である32767、つまり無制限を定義できるものがあります。この場合、小数点以下桁数 の最大/最小をチェックする必要はありません。
Integer フィールド・タイプ
Integerフィールド・タイプは、長さではなくバイト数でサイズを指定します。小数部はなく正確です。
次のテーブルにはIntegerで考えられる各バイト長の暗黙の長さが示されています。暗黙の長さは、SignedまたはPackedフィールドの実際の 長さに相当します。
バイト数 |
最大値 |
最大値 |
最大桁数 |
1 |
127 |
255 |
3 |
2 |
32767 |
65535* |
5 |
4 |
2147483647 |
4294967295* |
10 |
8 |
9223372036854775807 |
18446744073709551615* |
19
符号付き |
Integerタイプのフィールドは、以下の条件下でのみ、数値の引数または数値の戻り値として使用することができます。
· 引 数または戻り値の最小小数点以下桁数が0であること
· 引 数または戻り値の最小長がIntegerフィールドの暗黙の長さ以下であること。例えば、引数の最小長が4の場合、1バイトのIntegerを使用するこ とはできません(暗黙の長さが3しかないため)。
· 引 数または戻り値の最大長が2147483647、または引数または戻り値の最大長がIntegerフィールドの暗黙の長さ以上であること。例えば、引数の 最大長が4の場合、2、4、8バイトのIntegerを使用することはできません(暗黙の長さが5以上のため)。
タイプFloatのフィールド
Floatフィールド・タイプは、長さではなくバイト数でサイズを指定します。小数部を仮定することはできますが固定長ではありません。また、特定の桁数 に対して正確です。
次のテーブルはFloatで考えられる各バイト長の正確な長さの一覧です。正確な長さはSignedまたはPackedフィールドの実際の長さに相当する と考えることができます。考えられる実行時の小数点以下桁数もテーブルに示されています。
バイト数 |
正確な桁数(正確な長さ) |
考えられる小数点以下桁数 |
4 |
6 |
0 - 6 |
8 |
15 |
0 - 15 |
Floatタイプのフィールドは、実行時に0から15桁の間のどこにでも小数点を持つことができるため、一般的にBIFの数値引数に は不適切であると考えられています。実際の小数点位置を予測することが不可能なためです。数値引数にFloatタイプのフィールドが使用された場合、引数 の最大長が2147483647でなければ、FFC警告が発生します。
ただし、Floatタイプのフィールドは以下の条件下では、数値の戻り値に 適します。
· 最 大長が2147483647に定義された場合、どのようなサイズも受け入れられます。また戻り値の最大小数点以下桁数が1以上の場合、どのような小数点以 下桁数も正常であり受け入れられます。
· 戻 り値の最小長および 最小小数点以下桁数がFloatフィールドの正確な長さ以下であること。例えば、引数の最小長が10の場合、4バイトのFloatを使 用することはできません(6桁までしか正確ではないため)。また、例えば、引数の最小小数点以下桁数が7の場合、4バイトのFloatを使用することはで きません(小数点以下6桁までしか正確ではないため)。これは、Float長が上記表のように調整されることを前提として、通常の数値チェックの一部と して実行します。最小長が10桁の場合、使用される数値のタイプにかかわらず6桁の数値はエラーとなります。同様に、最小小数点以下桁数が7桁の場 合、最小長は7桁以上にする必要があります。したがって、この場合も6桁の数値はエラーになります。
· 現 在、LANSAに搭載されているすべてのBIFにおいて、最大の最小小数点以下桁数は1です。では、なぜ最小小数点以下桁数に制限があるのでしょうか。さ らに大きな最小小数点以下桁数が必要なユーザー(または新しいLANSA BIF)により、BIFが定義される場合があるからです。
英数字の引数と戻り値の規則
英数字の引数または戻り値が必要な場合、BIFの引数と戻り値のタイプに 加えて以下の規則が適用されます。
· Stringま たはCharタ イプのフィールドの長さが、引数または戻り値に指定された長さの範囲内であれば、そのフィールドを使用することができます。注:最大長が 2147483647の場合、どのような長さでも使用することができます。
· Nchar または Nvarchar のフィールド・タイプは、asNativeString組み込みファンクションを使用して英数字の引数に強制型変換し、かつ上記と同様に長さを制限する必 要があります。この組み込みファンクションの例については 「asNativeString」 を参照してください。
· 他 のすべてのRDMLXフィールド・タイプは、asString組み込みファンクションを使用して英数字の引数に強制型変換し、かつ上記と同様に長さを制限 する必要があります。組み 込みファンクションの使用に関する詳細および例については、「組み込みファンクション」を 参照してください。
· BLOBお よびCLOBタ イプのフィールドに実際に含まれているのは、ファイル名(最大長は256)です。ファイル名にアクセスするには#Myblob.Value構文のほかに #Myblob.asStringも使用することができます(BLOBまたはCLOBファイル名の内容をBIFの引数や戻り値として有効とするかどうかに ついては開発者が決定します)。
· Date(長 さは常に10桁)、Time(長 さは常に8桁)、およびDateTime(長 さは19から29桁の間)は、asStringと指定通りの長さチェックが必要です(Date、Time、またはDateTimeの内容をBIFの引数や 戻り値として有効とするかどうかについては開発者が決定します)。
Unicode の引数と戻り値の規則
Xおよびuタイプ の引数および戻り値がUnicodeをサポートしています。
Unicodeの 引数および戻り値の規則は英数字のものと同じです。例外は以下のとおりです。
· RDML オブジェクトでは、Unicodeの引数または戻り値は、英数字の引数または戻り値と全く同じように扱われます。
· RDMLX オブジェクトでは、Nchar およびNvarcharタイプのフィールドを直接かつデータ損失なく使用できます。
·
Unicode
の引数をUnicodeフィー
ルドで
使用する場合、Unicodeの戻り値にはUnicodeフィールドを使用しなければなりません。これにより、
Unicodeがネイティブに変換される時の暗黙的なデータ損失を防ぎます。ただし、逆のケースは違います。Unicodeの戻り値をネイティブ・フィー
ルドで使用する場合、Unicodeの戻り値はUnicodeフィールドまたはネイティブ・フィールドのいずれも使用できます。暗示的なデータ損失がない
た
めです。
リスト の引数と戻り値の規則
FFCは作業リストの合計バイト長を検査しません。BIFが特定の合計バイト長を必要とする場合、合計バイト長が正しいかどうかを確認する必要がありま す。
すべての多言語組み込み関数
DBCS SQL Server以外のデータベース・サーバーでは、DBCSデータが壊れる可能性があります。DBCS SQL Serverでは、その他すべての言語のテキストが壊れる可能性があります。データの破損を確実に防ぐには、データベース・サーバーの文字セットと互換性 があるテキストのみ変更してください。
Visual LANSAに統合されている開発環境では、さまざまな方法でデータベースIOが実行されるため、データの破損を防ぐことができます。