如何修改rowconcat函数?

时间:2013-08-30 09:17:16

标签: sql plsql oracle-sqldeveloper

我在网站上找到了以下功能。对于特定列,此函数将列值指定为逗号分隔值,如a,b,c,d等。有没有办法让我可以将这些值作为'a','b','c','d'等等。

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 个答案:

答案 0 :(得分: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;