oracle: эффективный способ настройки столбцов в выходном отчете - PullRequest
0 голосов
/ 09 июля 2009

Я разрабатываю отчет 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 ]

1 голос
/ 09 июля 2009

Динамическое включение / исключение столбцов == динамический SQL. Это решение может дать вам некоторые идеи. http://tkyte.blogspot.com/2006/01/i-like-online-communities.html - он передает ref_cursor в функцию, которая возвращает CLOB, полностью отформатированную таблицу HTML с полным набором результатов этого ref_cursor. Всего менее 100 строк.

0 голосов
/ 09 июля 2009

Как сказал 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;
0 голосов
/ 09 июля 2009

Думали ли вы об использовании представления? Ваше приложение может извлекать данные оттуда, и чтобы изменить отображаемые столбцы, измените представление. Вам придется изменить сторону представления вещей, чтобы учесть и другие столбцы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...