ストリング代入

ストリング割り当てには、ストレージ割り当てと取り出し割り当ての 2 つのタイプがあります。

  • 変更の開始ストレージの割り当てとは、値が列または遷移変数に割り当てられることを指します。変更の終わり
  • 変更の開始取得代入とは、変数に値が代入されることを指し、遷移変数を除く。変更の終わり

規則は、ストレージ割り当てと取り出し割り当てで異なります。

バイナリー・ストリングの割り当て

バイナリー・ストリングの割り当てには、バイナリー・ストリングのストレージと取り出しの両方の割り当てが含まれます。

ストレージ割り当て
変更の開始列または遷移変数に割り当てるストリングの長さは、その列またはパラメーターの長さ属性を超えてはなりません。 ストリングがその列または遷移変数の長さ属性より長い場合は、エラーが返されます。

関数またはプロシージャーの固定長バイナリー・ストリングの列またはパラメーターにストリングを割り当てる場合、ストリングの長さがその列またはパラメーターの長さ属性より短いときは、ストリングの右側に必要な数だけ 2 進ゼロが埋め込まれます。

変更の終わり
取得割り当て
変数に割り当てるストリングの長さは、変数の長さ属性を超えてもかまいません。 変数にストリングを割り当てる場合に、 ストリングが変数の長さ属性より長いときは、必要なバイト数だけストリングの右側が切り捨てられます。 これが生じた場合、警告が戻されます。

文字ストリングとグラフィック・ストリングの割り当て

ソースと宛先の両方がストリングである場合、ストレージ割り当ておよび取り出し割り当ての規則が適用されます。

datetimeデータ型が関わる場合は、 Datetime assignments (datetimeの代入)を参照してください。 特定の型が代入に関与する場合に適用される特別な考慮事項については、特に変数への代入については、 特定の型への代入を参照してください。

文字列およびグラフィック文字列のストレージ割り当て

文字のストレージ割り当ての基本的な規則は、関数の列または遷移変数に割り当てるストリングの長さが、その列またはパラメーターの長さ属性を超えてはならないということです。

末尾ブランクはストリングの長さに含まれます。 ストリングの長さが列またはパラメーターの長さ属性を超えている場合、 以下のアクションがとられます。

  • ストリングをターゲットに収めるために切り捨てる必要がある末尾の文字が すべてブランクであり、ストリングが文字ストリングまたはグラフィック・ストリングである場合、警告なしでストリングは切り捨てられ、割り当てられます。
  • 他の場合、ストリングは割り当てられず、エラーが発生して、超過文字の 少なくとも 1 つが非ブランクであることを示します。

固定長の列またはパラメーターにストリングを割り当てる場合に、 ストリングの長さがターゲットの長さ属性より短い時は、ストリングの右側に 、SBCS または DBCS のブランクが必要な数だけ埋め込まれます。 埋め込み文字は、FOR BIT DATA 属性を指定して定義された列またはパラメーターの 場合でも、常にブランクです。

文字列およびグラフィック文字列の検索割り当て

変数に割り当てるストリングの長さは、変数の長さ属性を超えてもかまいません。 ストリングの長さが変数の長さを超えている場合、ストリングの右側の SBCS または DBCS 文字が必要な数だけ切り捨てられます。

変更の開始 切り捨てが行われると、警告が返されます (SQLSTATE 「01004」)。 変数がホスト変数の場合、SQLCA の SQLWARN1 フィールドに「W」が割り当てられます。 さらに、標識変数が提供されていて、値のソースが LOB でない場合、標識変数はストリングの元の長さに設定されます。 正しくない形式の混合ストリングを切り捨てると、予測不能な結果になります。 変更の終わり

固定長の変数に文字ストリングを割り当てる場合に、 ストリングの長さがターゲットの長さ属性より短い時は、ストリングの右側に、 ブランクが必要な数だけ埋め込まれます。 埋め込み文字は、FOR BIT DATA 属性を指定 して定義したストリングの場合でも、常にブランクです。

長さ n のストリングが、n を超える最大長の可変長ストリング変数に割り当てられると、 変数の n 文字目より後の文字は未定義になります。

混合データ・ストリングを含む割り当て

MBCS 文字を含む混合データ・ストリングを SBCS 列、SBCS パラメーター、または SBCS 変数に割り当てることはできません。

混合データ・ストリングを変数に割り当て、そのストリングが変数の長さ属性よりも長い場合、以下の規則が適用されます。

  • ストリングが正しい形式の混合データでない場合、ストリングは BIT または グラフィック・データのように切り捨てられます。
  • ストリングが正しい形式の混合データである場合、変数の長さ属性と同じ長さの正しい形式の混合データになるようにストリングの右端が切り捨てられ、消失する文字数は最小限で済みます。

C の NUL 終了ストリングを含む割り当て

CONNECT ステートメントで参照される C の NUL 終了ストリング変数には、NUL が入っていなくても構いません。 それ以外の場合、 Db2 は、文字またはグラフィックのNUL文字で終了する文字列変数の値は、NUL文字で終了するという規約を強制します。

入力変数に NUL が入っていないと、エラーになります。 出力変数に割り当てられた値は、必ず NUL で終わっています。NUL を入れるために文字を切り捨てなければならない場合もあります。

長さが n+1 を超える C の NUL 終了ストリング変数に 長さが n のストリングを割り当てる場合は、ソース・ストリングが 固定長ストリングと可変長ストリングのどちらの値なのかによって異なる規則となります。

  • ソースが固定長ストリングで、インストール・パネル DSNTIP4 の フィールド PAD NUL-TERMINATED の値が YES の場合は、ストリングの右側 に x-n-1 個のブランクが埋め込まれます。x は変数の 長さです。 次に、埋め込みが行われたストリングが変数に割り当てられ、変数の最後に NUL が付加されます。 フィールド PAD NUL-TERMINATED の値が NO の場合、ストリングは変数の先頭 n バイトに割り当てられ、変数の最後に NUL が付加されます。
  • ソースが可変長ストリングの場合、ストリングは変数の 先頭 n バイトに割り当てられ、変数の最後に NUL が付加されます。

ストリング割り当てに関する変換規則

列または変数に割り当てられる文字ストリングまたはグラフィック・ストリングは、必要であれば、まずターゲットのコード化文字セットに変換されます。 特定の条件が適用される場合にのみ、変換が必要です。

以下の条件がすべて満たされた場合にのみ、変換が必要となります

  • ストリングと割り当て先の CCSID が異なる。
  • どちらの CCSID も X'FFFF' ではない (ストリングも割り当て先も BIT データとして定義されていない)。
  • ストリングが NULL でも空でもない。

以下の場合には、エラーが発生します。

  • SYSSTRINGSテーブルは使用されているが、CCSIDのペアに関する情報は含まれておらず、 Db2 は z/OS® のUnicodeサポートを通じて変換を行うことができません。
  • ストリングの文字の変換ができない場合、かつ演算が標識変数を持たない列またはホスト変数への割り当て演算である場合。 例えば、DBCS 文字を変換して、SBCS CCSID を持つ変数にすることはできません。

以下の場合には、警告が出ます。

  • ストリングの文字を置換文字に変換する場合。 置換文字 とは、ソース文字セットの文字が割り当て先の 文字セットに含まれていない場合に使用される文字のことです。 例えば、ターゲットが EBCDIC 文字セットであるとすると、カタカナがソース文字セットに含まれており、割り当て先の文字セットに含まれていない場合には、カタカナは EBCDIC SUB X'3F' に変換されます。
  • ストリングの文字の変換ができない場合、かつ標識変数を持つ変数への割り当て演算である場合。 例えば、変数が SBCS CCSID を持つ場合、DBCS 文字を変換することはできません。 この場合、ストリングは変数に割り当てられず、標識変数が -2 に設定されます。