Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Oracle > Как считать данные из таблицы


Автор: AnimuSksy 16.8.2007, 06:49
Помогите пожалуйста новичку! =(
Как считать данные из таблицы если не известно заранее из какой таблицы, и соответственно не известна ее структура...

Автор: math_beginer 16.8.2007, 07:07
А что вообще известно? Можно попробовать использовать таблицу user_tab_columns (all_tab_columns):
Код

select column_name,data_type,data_length 
from
user_tab_columns 
where ...


Автор: DimW 16.8.2007, 08:04
Цитата(AnimuSksy @  16.8.2007,  06:49 Найти цитируемый пост)
Как считать данные из таблицы если не известно заранее из какой таблицы


формируешь текст запроса в процедуре/функции и в ней же вызываешь execute immediate 'предворительно сформированный текст запроса';


Автор: AnimuSksy 16.8.2007, 10:17
Спасибо за подсказку
и вот что вышло:

Код

begin
execute immediate ('
declare
   rec1   www_pblc.SPR_COL%rowtype;
begin
for rec1 in (select COL_NAME from WWW_PBLC.SPR_COL where ID_SP=6 and COL_VISIB like ''%1%'')
loop
    HTP.p(rec1.COL_NAME);
  for rec2 in (select rec1.COL_NAME from PERSONAL.sp_profession_title)
    loop
    HTP.p(rec2.rec1.COL_NAME);
    end loop;
end loop;
end;');
end;


COL_NAME - столбец с названиями колонок которые необходимо вывести

На что SQL Editor отвечает:

ORA-06550: line 10, column 16:
PLS-00302: component 'REC1' must be declared
ORA-06550: line 10, column 5:
PL/SQL: Statement ignored
ORA-06512: at line 2

Автор: DimW 16.8.2007, 13:41
я исправил явные ошибки:
Код

begin
for rec1 in (select COL_NAME from WWW_PBLC.SPR_COL where ID_SP=6 and COL_VISIB like ''%1%'')
loop
    HTP.p(rec1.COL_NAME);
  for rec2 in (select COL_NAME from PERSONAL.sp_profession_title)
    loop
    HTP.p(rec2.COL_NAME);
    end loop;
end loop;
end;


1) какой смысл в использовании execute immediate? (он отработает и так прекрасно)
2) это для чего - "rec1   www_pblc.SPR_COL%rowtype;"?
3) какой смысл во вложенном цикле (for rec2 in ...) если ты не ограничиваешь его селект по первому?(хотя попытка была - "for rec2 in (select rec1.COL_NAME ")
4) что за конструкция - rec2.rec1.COL_NAME, что ты имел ввиду?

Цитата(AnimuSksy @  16.8.2007,  06:49 Найти цитируемый пост)
Как считать данные из таблицы если не известно заранее из какой таблицы

не увидел этого в приведенном коде?!

ОБЪЯСНИ ЧТО ТЫ ПЫТАЕШЬСЯ СДЕЛАТЬ НА ПРОСТОМ ПРИМЕРЕ, ТОГДА БУДЕТ ТОЛК!

Автор: AnimuSksy 17.8.2007, 04:53
И так
Входящие параметры, изменяющиеся в зависимости от выбора пользователя:
Код

ID_SP, COL_VISIB, PERSONAL.sp_profession_title


COL_NAME хранит названия колонок таблицы PERSONAL.sp_profession_title

выбираем какие колонки нужно выбрать из другой таблицы:
Код

(select COL_NAME from WWW_PBLC.SPR_COL where ID_SP=6 and COL_VISIB like ''%1%'')


выбираем данные этих колонок
Код

(select rec1.COL_NAME from PERSONAL.sp_profession_title)

Автор: DimW 20.8.2007, 08:00
Цитата(DimW @  16.8.2007,  13:41 Найти цитируемый пост)
ОБЪЯСНИ ЧТО ТЫ ПЫТАЕШЬСЯ СДЕЛАТЬ НА ПРОСТОМ ПРИМЕРЕ, ТОГДА БУДЕТ ТОЛК!

т.е. ни как ты это делал, а в чем сама идея, а мы постараемся объяснить как это лучше реализовать.

воспользуйся саветом math_beginer, как мне кажется ты даже в эту сторону не копал.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)