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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> получить таблицу с именем и значением поля, положить таблицу набок 
V
    Опции темы
Fyrklod
Дата 26.10.2010, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Доброе время суток.

попытаюсь сразу изложить задачу

есть выборка 
Код

select field1 as f1, field2 as f2, field3, field4
from table
where field1=value1; 


- результат этой выборки - одна строка

есть ли какой-то нормальный способ получения таблицы в виде
----------------
f1 | value1
----------------
f2 | value2
----------------
field3 | value3
----------------
field4 | value4
----------------

Заранее благодарен за помощь!

P.S. использую Oracle 8i поэтому функция UNPIVOT не поможет
--------------------
Зачем компьютеры пищат, когда нажимаешь сразу много клавиш? Чтобы будить уснувших на клавиатуре программистов!
PM MAIL   Вверх
Zloxa
Дата 27.10.2010, 08:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


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

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



Код

select decode(t_id,1,'field1',2,'field2',3,'field3',4,'field4') field_name
       ,decode(t_id,1,field1,2,field2,3,field3,4,field4) field_val
from table,(select 1 t_id from dual union all select 2 from dual union all select 3 from dual union all select 4 from dual )
where field1=value1;


Это сообщение отредактировал(а) Zloxa - 27.10.2010, 08:42


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Fyrklod
Дата 27.10.2010, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



увы такой вариант мимо....
дело в том, что запросы у меня хранятся... и в зависимости от случаев выполняется свой запрос... в одном выдает 10 полей, в другом 15 
имена у этих полей тоже различные.....

мне нужно нечто универсальное.... чтобы не зная количество и имена полей
--------------------
Зачем компьютеры пищат, когда нажимаешь сразу много клавиш? Чтобы будить уснувших на клавиатуре программистов!
PM MAIL   Вверх
Zloxa
Дата 27.10.2010, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


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

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



Цитата(Fyrklod @  27.10.2010,  11:13 Найти цитируемый пост)
чтобы не зная количество и имена полей 

Тогда Вам и Unpivot бы не помог.
На девятке можно было бы поробовать через dbms_xmlgen... на восьмерке - не знаю был ли он.


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
password
Дата 28.10.2010, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 23.9.2008
Где: Украина, Сумы

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



А нельзя создать например функцию:
Код

FUNCTION TEST (parr IN Varchar2) RETURN Varchar2
 iS
 TYPE GenericCursor IS REF CURSOR;
 c1 GenericCursor;
 result Varchar2(250);
BEGIN

OPEN c1 FOR parr;
        FETCH c1 INTO result;
    CLOSE c1;

RETURN to_char(result);
END;


А дальше строить sql запросы:
Код

select TABLE_NAME, 
          COLUMN_NAME, 
          test('select to_char('||COLUMN_NAME||') from "Таблица" where field1=value1') as zn  from sys.all_tab_cols
where OWNER='Схема' and TABLE_NAME='Таблица'


Выведет значения в виде:  
  
 Таблица   Столбец  Значение 
  Таблица       Поле1           value1
  Таблица       Поле2           value2
  Таблица       Поле3           value3

а дальше уже строить другие варианты запросов


Это сообщение отредактировал(а) password - 28.10.2010, 17:26
PM MAIL Skype   Вверх
Zloxa
Дата 28.10.2010, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


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

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



password, восхитительно.
Я даже не сразу понял о чем речь, мне это изначально показалось похожим на бред. 
А оно ведь действительно будет работать.
Столь извращенная трактовка сути вопроса - восхищает.

Ну а если по серьезному, то если есть возможность пайплайну использовать, то уж лучше выполнить запрос с помощью dbms_sql и запайпить первую строчку.
Только надо задать вопрос ТС, зачем ему это нужно.
Сдается мне, что тем самым он хочет решить банальный вопрос - как гридину показать в виде проперти палеты.


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Fyrklod
Дата 6.7.2011, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



ой.. че-то подзабыл про этот топик...

короче помог  dbms_sql.describe_columns

пример простой работы:
Код

DECLARE
   cur PLS_INTEGER := DBMS_SQL.OPEN_CURSOR;
   cols DBMS_SQL.DESC_T;
   ncols PLS_INTEGER;
BEGIN
   DBMS_SQL.PARSE(cur, 'SELECT hiredate, sal FROM emp', DBMS_SQL.NATIVE);
   DBMS_SQL.DEFINE_COLUMN (cur, 1, SYSDATE);
   DBMS_SQL.DEFINE_COLUMN (cur, 2, 1);
   DBMS_SQL.DESCRIBE_COLUMNS (cur, ncols, cols);
   FOR colind IN 1 .. ncols
   LOOP
      DBMS_OUTPUT.PUT_LINE (cols.col_name);
   END LOOP;
   DBMS_SQL.CLOSE_CURSOR (cur);
END;
 

при его помощи я получил всю информацию о своем запросе: количество и имена-типы-длины-.. полей запроса (не выполненного, а любого,лишь бы синтаксически корректного) 
а дальше - ручками (или сценарием) сформировал запрос для_разворота


--------------------
Зачем компьютеры пищат, когда нажимаешь сразу много клавиш? Чтобы будить уснувших на клавиатуре программистов!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0906 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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