Oracle SQL Query以sql查询的形式运行列值

时间:2011-09-22 10:45:36

标签: sql oracle

表格中有以下行

 TEMP_ID    HTML_LABEL HTML_NAME     OPTIONS_TYPE OPTION_VALUES                   HTML_CODE
----------------------------------------------------------------------------------------------
    2       RULE_NO :  RULE_NO_7_32  D            SELECT DRV_COLUMN FROM FRD_DATA <reconTags:renderSelect></reconTags:renderSelect> 

我想要一个oracle sql查询,它提供像这样的输出

  TEMP_ID HTML_LABEL HTML_NAME      OPTIONS_TYPE OPTION_VALUES HTML_CODE
   ----------------------------------------------------------------------------                                                                     
    2      RULE_NO :  RULE_NO_7_32  D            1,2,3,4       <reconTags:renderSelect></reconTags:renderSelect>   

我希望将option_values字段中存储的查询结果显示为option_values字段的值。 (可能是以逗号分隔的连接值,查询将返回多行。)

1 个答案:

答案 0 :(得分:2)

创建一个以sql列为参数的函数,并循环遍历每个记录构建一串值然后返回结果,用法为SELECT col1, your_function(col2) from your table

以下是关于动态SQL的一些指示:http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28370/dynamic.htm

我猜它会是这样的:

CREATE OR REPLACE FUNCTION sql_to_csv (p_select IN VARCHAR2)
   RETURN VARCHAR
AS
  v_out             VARCHAR2 (4000);
  TYPE RefCurTyp    IS REF CURSOR;
  v_cursor          RefCurTyp;
  a_record          DUAL%ROWTYPE;

BEGIN
    OPEN v_cursor FOR p_select;
    -- Fetch rows from result set one at a time:
    LOOP
    FETCH v_cursor INTO a_record;        
        EXIT WHEN v_cursor%NOTFOUND;
        v_out:=v_out || ',' || a_record.dummy;
    END LOOP;

    -- Close cursor:
    CLOSE v_cursor;

   RETURN (v_out);
END;