我正在设计一个HTML报告,可以有效地从单个表中提取列
此表中的列数非常大,我想要一些方法来配置应用程序以说明要显示的列。注意:这不是每用户设置。
假设我有主表:
MAIN_TABLE
id
first_name
last_name
weight
height
attribute_4
attribute_5
attribute_6
...
attribute_99
我在考虑像
这样的表格MAIN_TABLE_DISPLAY
column_name
display
或者
MAIN_TABLE_DISPLAY
display_id
display_first_name
display_last_name
display_weight
display_height
display_attribute_4
display_attribute_5
display_attribute_6
...
display_attribute_99
但我想进行有效的加入。
有什么建议吗?
感谢。
答案 0 :(得分:1)
动态列包含/排除==动态SQL。 这个解决方案可能会给你一些想法。 http://tkyte.blogspot.com/2006/01/i-like-online-communities.html - 他将一个ref_cursor传递给一个函数,该函数返回一个完全格式化的HTML表CLOB,该表具有该ref_cursor的完整结果集。全部不到100行。
答案 1 :(得分:0)
您是否考虑过使用视图?您的应用程序可以从那里提取数据,并更改您正在显示的列,更改视图。您还必须更改事物的表示方面以考虑不同的列。
答案 2 :(得分:0)
正如jva所说,你需要使用动态SQL。这样的事情(有适当的错误修复)应该这样做:
type column_table is table of varchar2(30);
function table_as_html(table_name varchar2, columns column_table) return clob is
sql_query varchar2(32767);
sql_cursor sql_refcursor;
html_row clob;
html_text clob;
begin
sql_query := 'select ''<tr>';
for column in 1 .. columns.count loop
sql_query := sql_query||'||''<td>''||'||columns(column)||'||''</td>'''
end loop;
sql_query := sql_query||'||''</tr>'' from '||table_name;
open sql_cursor for sql_query;
loop
fetch sql_cursor into html_row;
exit when sql_cursor%notfound;
html_text := html_text||html_row||chr(10);
end loop;
close sql_cursor;
return html_text;
end;