-1

数字の文字列 (234567、678956、345678 など) をストアド プロシージャに渡す必要があります。SP はその文字列をカンマ区切りで分割し、各値 (例: 234567) を取得し、別のテーブルを検索して対応する値を取得します。別の列から値を取得し、文字列を作成します。

たとえば、次のようなTableA3 つの列Column1Column2、およびColumn3データを含むテーブルがあるとします。

1 123456 XYZ 
2 345678 ABC 

たとえば、数字の文字列をストアド プロシージャに渡します'123456', '345678'。次に、この数字の文字列を分割し、最初の数字 (123456)TableAを取得し、検索を実行して一致する値Column3(つまり、「XYZ」) を取得します。

数字の分割文字列 ('12345', '345678') を使用してテーブルをループし、連結された文字列を返す必要があります-「XYZ ABC」のように

私はOracle 11gでそれをやろうとしています。

どんな提案も役に立ちます。

4

1 に答える 1

0

ほとんどの場合、可能であれば単一のステートメントですべてを実行する方が効率的です。つまり、回避できる場合は関数を使用しないでください。

REGEXP_SUBSTR()文字列を使用可能なものに変えるために、これを解決するために使用できるちょっとしたトリックがあります。

with the_string as ( 
  select '''123456'', ''345678''' as str
    from dual
         )
 , the_values as (
 select regexp_substr( regexp_replace(str, '[^[:digit:],]')
                     , '[^,]+', 1, level ) as val
   from the_string
connect by regexp_substr( regexp_replace(str, '[^[:digit:],]')
                        , '[^,]+', 1, level ) is not null
        )
 select the_values.val, t1.c
   from t1
   join the_values 
     on t1.b = the_values.val

これは、必要な数字とそれらを分割する何か、コンマ以外のすべてを削除することで機能します。次に、それをコンマで分割し、階層クエリを使用してこれを列に変換します。これを使用して結合できます。

デモンストレーションとしてSQL Fiddleを次に示します。

大規模なデータセットで使用する場合、これは非常に非効率的であることに注意してください。関数に変数を普通に渡した方が良いでしょう...

于 2013-05-29T19:47:49.713 に答える