2013-08-30 86 views
0

我在網站上找到了以下功能。對於特定的列,此函數將列值作爲逗號分隔值,如a,b,c,d等。有沒有一種方法可以將這些值取爲'a','b','c','d'等。如何修改rowconcat函數?

CREATE OR REPLACE FUNCTION rowconcat(q in VARCHAR2) RETURN VARCHAR2 IS 
    ret VARCHAR2(4000); 
    hold VARCHAR2(4000); 
     cur sys_refcursor; 
    BEGIN 
     OPEN cur FOR q; 
     LOOP 
     FETCH cur INTO hold; 
     EXIT WHEN cur%NOTFOUND; 
     IF ret IS NULL THEN 
      ret := hold; 
     ELSE 
      ret := ret || ',' || hold; 
     END IF; 
    END LOOP; 
    RETURN ret; 
END; 

我已經嘗試

IF ret IS NULL THEN 
    ret := '''|| hold || '''; 
ELSE 
    ret := ret || ',' || '''||hold || '''; 
END IF; 

結果,它給我的是

'|| hold || ','||hold || ','||hold || ','||hold || ','||hold || ','||hold || ','||hold || ','||hold || ','||hold || ','||hold || and so on. 

回答

1

更換功能的以下部分,

IF ret IS NULL THEN 
     ret := hold; 
    ELSE 
     ret := ret || ',' || hold; 
    END IF; 

這一點,

IF ret IS NULL THEN 
     ret := ''''|| hold ||''''; 
    ELSE 
     ret := ret || ',' || ''''||hold || ''''; 
    END IF; 
+0

這不會工作瑪尼。問題在於分隔符。沒有強制讀取值的符號。現在,代碼並沒有強制讀取。它採取了第一個'和最後一個',並打印介於兩者之間的任何謊言。 – MontyPython

+1

對不起,我輸入時錯過了1個報價。添加''''||保持|| 「」「」 –