2011-09-22 90 views
-1

我有表的Oracle SQL查询来运行列值的SQL查询

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字段的值。 (可能以逗号分隔的级联值,其中查询将返回多行)

+0

为什么downvote? –

+1

我没有downvote,但:-1使用隐式连接语法cg SQL 1989.使用所有的大写使得难以阅读。没有努力来布置查询,我不知道你想要做什么。你没有告诉我们你想要什么,为什么你想要它。这只是一堆代码。 – Johan

+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;