0

単一の文字列であるアドレスを複数の文字列に分割する必要があります。以下は、アドレスを対応するアドレス行に分割するpl/sqlプロシージャの要件です。手順のパラメーターは次のとおりです。

プロシージャsplit_address(varchar2のアドレス、al1 out varchar2、al2 out varchar2、al3 out varchar2、al4 out varchar2)を作成または置換します。

  1. アドレスはvarchar2(250)であり、それぞれvarchar2(100)の4行al1、al2、al3、al4に分割する必要があります。
  2. アドレスに改行文字CHR(10)が含まれています。そして、これらに基づいて分割を行う必要があります。
  3. アドレスの長さが100以下の場合、アドレス全体を3番目のアドレス行al3に入れる必要があります。
  4. アドレス長が100を超える場合にのみ、分割を実行する必要があります。
  5. 1行が100文字を超える場合、その行は50番目の位置の中央または近くで区切り文字'、'によって2つに分割され、残りの行は2番目のアドレス行に追加されます。
  6. 行数が4を超える場合は、各セグメントを1つのアドレス行にマージして、最大4セグメントまで100文字にします。
  7. アドレス行3は必須の出力です。

例を挙げましょう。アドレスを

'ドア#nnxxxxxxxxxxXXXXXXXXXXX
yyyy YYYYYYYYY Zip -NNNNNN zzzzzzzzzzzzzzz
ZZZZZZZZZZZZZZZZZZZZ '





この全長が100未満の場合は、分割せずに直接al3に入れる必要があります。アドレスの長さが100を超える場合、問題が発生します。このアドレスは8行ありますが、次のように4行にする必要があります。

  1. 'ドア#nnxxxxxxxxxxXXXXXXXXXXyyyy'->長さ100最大
  2. 'YYYYYYYYYYY Zip-NNNNNNN、zzzzzzzzzzzz'->長さ100最大
  3. 'zzzzzzzzzzz、ZZZZZZZZZZZZZZZZZZZZZ'->長さ100最大
  4. 'ZZZZZZ'->長さ100max

システムはoracle-10gで、その機能を使用できます。問題は単純ですが、ロジックをコードに組み込むのは少し難しいです。ヒントをいくつか教えてください。前もって感謝します。

4

1 に答える 1

0

関数はプロシージャよりも優れたアイデアかもしれないと思います。

その他の観察:

  • Oracle instr 関数を使用して、改行とカンマを検索します。
  • オラクルの長さ関数を使用して、個々のフィールドが 100 文字を超えているかどうかを判断します
  • 考えられるすべての入力が、指定された要件に一致する出力を生成できると確信していますか? たとえば、改行文字が 1 つしかない 100 文字を超える単一の入力行がある場合はどうなるでしょうか。
于 2010-07-08T12:30:36.567 に答える