1

コンマで区切られた電子メール文字列を、カンマで区切られた個々の電子メール ID に分割しようとしていますが、各電子メール ID は一重引用符で囲まれています。

私の入力は 'one@gmail.com,two@gamil.com,three@gmail.com,four@gmail.com'

私の出力は次のようになります。 'one@gmail.com','two@gamil.com','three@gmail.com','four@gmail.com'

上記の出力文字列を oracle クエリで使用します。条件は次のとおりです...

Where EmailId's in ( 'one@gmail.com','two@gamil.com','three@gmail.com','four@gmail.com');

これを達成するために次のコードを使用しています

 WHERE EMAIL IN 
                    (REGEXP_SUBSTR('one@gmail.com,two@gamil.com,three@gmail.com,four@gmail.com' ,'[^,]+', 1, LEVEL))
CONNECT BY LEVEL <= LENGTH('one@gmail.com,two@gamil.com,three@gmail.com,four@gmail.com' ) - LENGTH(REPLACE('one@gmail.com,two@gamil.com,three@gmail.com,four@gmail.com' , ',', '')) +1;

しかし、上記のクエリは 16 レコードしか返すのに 60 秒かかりません。誰でもこれに最適なアプローチを提案できますか...

4

1 に答える 1

2

これを試して、

WHERE email IN (
  select regexp_substr('one@gmail.com,two@gamil.com,three@gmail.com,four@gmail.com','[^,]+', 1, level) from dual
  connect by regexp_substr('one@gmail.com,two@gamil.com,three@gmail.com,four@gmail.com', '[^,]+', 1, level) is not null );
于 2013-08-27T12:59:21.847 に答える