2016-07-04 8 views
0

ACLと呼ばれる変数にフェッチするcACLsonDistributionというカーソルがあります。 カーソルには電子メールのリストが挿入され、その電子メールが複製されることもあります。文字列を取得して複製を削除する

LOOP 
     FETCH cACLsonDistribution INTO ACLs; 
     EXIT WHEN cACLsonDistribution%NOTFOUND; 
     ACLsonDistribution := ACLsonDistribution || ','|| ACLs.ENGINEER_EMAIL; 

      END LOOP; 

これは、このような文字列を返します。

,[email protected],[email protected],[email protected],[email protected]

あなたがそこに2重複メールを見ることができるように。時には3つの電子メールが重複しています。私は重複のない文字列を返すことを望みます。このように:

,[email protected],[email protected],[email protected]

答えて

0

この簡単な説明をお試しください。お役に立てれば。

SET SQLBL ON; 
SET serveroutput ON; 
DECLARE 
    PLST SYS_REFCURSOR; 
    AV  VARCHAR2(100); 
    LV_VAR VARCHAR2(100); 
    VAR_TAB VARCHAR2(100); 
BEGIN 
    OPEN PLST FOR SELECT '[email protected]' nm FROM DUAL 
    UNION ALL 
    SELECT '[email protected]' nm FROM DUAL 
    UNION ALL 
    SELECT '[email protected]' nm FROM DUAL; 
    LOOP 
    FETCH plst INTO AV; 
    EXIT 
    WHEN PLST%NOTFOUND; 
    -- NULL; 
    lv_var:=lv_var||','||av; 
    END LOOP; 
    -- close 
    DBMS_OUTPUT.PUT_LINE(SUBSTR(LV_VAR,2,LENGTH(LV_VAR))); 
    SELECT WMSYS.WM_CONCAT(a.txt) 
    INTO var_tab 
    FROM 
    (SELECT DISTINCT(REGEXP_SUBSTR(SUBSTR(LV_VAR,2,LENGTH(LV_VAR)),'[^,]+', 1, level)) txt 
    FROM DUAL 
     CONNECT BY regexp_substr(SUBSTR(LV_VAR,2,LENGTH(LV_VAR)), '[^,]+', 1, level) IS NOT NULL 
    )a; 
    DBMS_OUTPUT.PUT_LINE(var_tab); 
END; 

----------------------------------OUTPUT---------------------------------------- 

[email protected],[email protected] 

----------------------------------OUTPUT---------------------------------------- 
+0

しかし、私はそれを私のコードにどのように適用しますか? –

+0

SELECT WMSYS.WM_CONCAT(a.txt)INTO var_tab FROM(SELECT DISTINCT(REGEXP_SUBSTR(SUBSTR(LV_VAR、2、LENGTH(LV_VAR))、 '[^、] +'、1、レベル))txt FROM DUAL CONNECT BY regexp_substr (SUBSTR(LV_VAR、2、LENGTH(LV_VAR))、 '[^、] +'、1、レベル)IS NOT NULL)a;この部分を使用しようとします。 –

+0

こんにちは、私は変数にカーソルをフェッチしています。そして、電子メールを変数Discontinuationに連結しています。コードを適用すると、a.txtを変数Discontinuationに置き換える必要がありますか?何をお勧めしますか? OPEN cDiscontinuation; 中止:= ''; ループ FETCH cDiscontinuation INTO DOD; 終了時にcDiscontinuation%NOTFOUND; 製造中止:=廃止|| '、' || DOD.ENGINEER_EMAIL; END LOOP; –

関連する問題