Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как считать данные из таблицы, причем заранее не и звестно из какой.. 
V
    Опции темы
AnimuSksy
  Дата 16.8.2007, 06:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 14.8.2007

Репутация: нет
Всего: нет



Помогите пожалуйста новичку! =(
Как считать данные из таблицы если не известно заранее из какой таблицы, и соответственно не известна ее структура...
PM MAIL   Вверх
math_beginer
Дата 16.8.2007, 07:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 29.5.2003

Репутация: нет
Всего: 1



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

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


--------------------
Метод "Кнута и Пряника" - алгоритм, описанный в известной монографии Кнута и позднее модифицированный русским программистом Пряником.
PM MAIL   Вверх
DimW
Дата 16.8.2007, 08:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 23
Всего: 44



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


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


PM MAIL ICQ   Вверх
AnimuSksy
Дата 16.8.2007, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 14.8.2007

Репутация: нет
Всего: нет



Спасибо за подсказку
и вот что вышло:

Код

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
PM MAIL   Вверх
DimW
Дата 16.8.2007, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 23
Всего: 44



я исправил явные ошибки:
Код

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 Найти цитируемый пост)
Как считать данные из таблицы если не известно заранее из какой таблицы

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

ОБЪЯСНИ ЧТО ТЫ ПЫТАЕШЬСЯ СДЕЛАТЬ НА ПРОСТОМ ПРИМЕРЕ, ТОГДА БУДЕТ ТОЛК!
PM MAIL ICQ   Вверх
AnimuSksy
Дата 17.8.2007, 04:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 14.8.2007

Репутация: нет
Всего: нет



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

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)

PM MAIL   Вверх
DimW
Дата 20.8.2007, 08:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 23
Всего: 44



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

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

воспользуйся саветом math_beginer, как мне кажется ты даже в эту сторону не копал.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Oracle"
Zloxa
LSD

Данный раздел предназначен для обсуждения проблем с Oracle Database, другие продукты Oracle здесь не обсуждаются. Просьба при создании темы, придерживаться следующих правил:

  • при создании темы давайте ей осмысленное название, описывающее суть проблемы
  • указывайте используемую версию базы, способ соединения и язык программирования
  • при ошибках обязательно приводите код ошибки и сообщение сервера
  • приводите код в котором возникла ошибка, по возможности дайте тестовый пример демонстрирующий ошибку
  • при вставке кода используйте соответсвующие теги: [code=sql] [/code] для подсветки SQL и PL/SQL кода, [code=java] [/code] - для Java, и т.д.

  • документация по Oracle: 9i, 10g, 11g
  • книги по Oracle можно поискать здесь
  • действия модераторов можно обсудить здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, LSD.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Oracle | Следующая тема »


 




[ Время генерации скрипта: 0.0763 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.