pl sql代码拆分邮箱和手机号码

plsql code to Split Email and moblie number

我需要代码来拆分存储在单列中的电子邮件和手机号码,并将其存储在两个集合变量中以发送短信和电子邮件。请注意,电子邮件和手机号码将合并并存储在单个 column/variable 中,以逗号

分隔

更新代码以同时显示邮件和手机号码。

DECLARE
  l_str VARCHAR(150) := 'adsf@qewr.com, uiohljkh@uiyhjn.com, +7(800)800-80-80, +7(900)900-90-90'; 
  l_pattern_email VARCHAR(500) := '[a-zA-Z0-9._%-]+@[a-zA-Z0-9._%-]+\.[a-zA-Z]{2,4}';
  l_pattern_phone VARCHAR(500) := '+[0-9]\([0-9]{3}\)([0-9]{3})-[0-9]{2}-[0-9]{2}';
  TYPE tp_emails_col_typ IS TABLE OF VARCHAR(100);
  TYPE tp_phone_col_typ IS TABLE OF VARCHAR(100);
  l_emails_col tp_emails_col_typ;
  l_phone_col tp_phone_col_typ;
BEGIN
    SELECT REGEXP_SUBSTR( l_str, l_pattern_email, 1, LEVEL ) BULK COLLECT INTO l_emails_col
      FROM (
          SELECT l_str FROM dual
      )
      CONNECT BY LEVEL <= REGEXP_COUNT(l_str, l_pattern_email);  

     IF l_emails_col.count > 0 THEN
         FOR idx IN l_emails_col.first..l_emails_col.last LOOP
             dbms_output.put_line( l_emails_col(idx) );
         END LOOP;
     END IF;

  SELECT REGEXP_SUBSTR( l_str, l_pattern_phone, 1, LEVEL ) BULK COLLECT INTO l_phone_col
    FROM (
      SELECT l_str FROM dual
    )
    CONNECT BY LEVEL <= REGEXP_COUNT(l_str, l_pattern_phone);  

   IF l_phone_col.count > 0 THEN
     FOR idx IN l_phone_col.first..l_phone_col.last LOOP
       dbms_output.put_line( l_phone_col(idx) );
     END LOOP;
   END IF;

END;