oracle:在输出报告中配置列的有效方法

时间:2009-07-08 20:19:21

标签: oracle join

我正在设计一个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

但我想进行有效的加入。

有什么建议吗?

感谢。

3 个答案:

答案 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;