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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> SQL: преобразовать список (из SELECT), в строку разделенную запятыми 
:(
    Опции темы
ivashkanet
Дата 4.4.2007, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


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

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



Всем привет.

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

Скорее всего это будет что-то типа:
Код

select join(operator_clock_number, ',')
  from (select operator_clock_number from operators)


Заранее спасибо
PM MAIL WWW ICQ   Вверх
LSD
Дата 4.4.2007, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Запросом такого не сделать. Тебе нужно написать процедуру на PL/SQL которая пробежиться по этому курсору и "склеит" все в одну строку.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
ivashkanet
Дата 4.4.2007, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


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

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



Жаль. :(
Мне нужно создать View, одна из колонок которой будет эта строка.


LSD, не поможешь мне с этим, а то я Оракл знаю всего месяц, а за PL/Sql даже не брался :(
PM MAIL WWW ICQ   Вверх
Sqlninja
Дата 4.4.2007, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 353
Регистрация: 15.5.2006
Где: San Francisco, CA

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





--------------------
It's better to burn out than to fade away.
PM MAIL WWW ICQ   Вверх
DimW
Дата 5.4.2007, 07:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(ivashkanet @  4.4.2007,  17:32 Найти цитируемый пост)
набор строк, каждая состоит из одной колонки


ivashkanet, где хранятся строки, в таблицах или тебе этот набор строк параметром приходит?
PM MAIL ICQ   Вверх
ivashkanet
Дата 5.4.2007, 09:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


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

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



DimW, я же написал пример, он максимально приближен к задаче smile
Эти строки хранятся в таблице smile
Sqlninja, я гляну, спасибо
PM MAIL WWW ICQ   Вверх
DimW
Дата 5.4.2007, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



создаешь функцию:

Код

create or replace function get_all_row return varchar2 is
  result varchar2(2000);
begin
  for i in (select operator_clock_number from operators)
  loop
    result := result ||','|| i.operator_clock_number;
  end loop;
  return(result);
end get_all_row;


выполняешь такой запрос:

Код

select t.operator_clock_number, get_all_row from operators t

если я все правельно понял это то что тебе нужно.
единственное ограничение в функции - "result varchar2(2000);"

на основе селекта создашь вьюху

Добавлено через 8 минут и 16 секунд
если вьюха должна возвращать одну строку то селект такой:

Код

select get_all_row from dual


Это сообщение отредактировал(а) DimW - 5.4.2007, 09:53
PM MAIL ICQ   Вверх
ivashkanet
Дата 5.4.2007, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


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

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



DimW, круто   smile  smile

А теперь можно добавить к этой функции пару параметров:
1) Department чтобы запрос был такой
Код
select operator_clock_number from operators where Department =department 

2) очень хотелось бы установить имя таблицы выборки "operators" и его поля "operator_clock_number" . 

2 не столь важно, а вот без п1 никак 
ИМХО, 1 элементарно, но я не знаком с синтаксисом Pl/SQL 

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


Эксперт
***


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

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



Цитата

1) Department чтобы запрос был такой


Код

create or replace function get_all_row(pDep varchar2) return varchar2 is
  result varchar2(2000);
begin
  for i in (select operator_clock_number from operators where Department = pDep)
  loop
    result := result ||','|| i.operator_clock_number;
  end loop;
  return(result);
end get_all_row;



отсюда:

Код

select get_all_row('xxx') from dual



по поводу остального - пока втыкаю...

Это сообщение отредактировал(а) DimW - 5.4.2007, 10:11
PM MAIL ICQ   Вверх
ivashkanet
Дата 5.4.2007, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


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

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



DimW, большое спасибо
PM MAIL WWW ICQ   Вверх
DimW
Дата 5.4.2007, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



пожалуйста smile
PM MAIL ICQ   Вверх
DimW
Дата 5.4.2007, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



по поводу:

Цитата(ivashkanet @  5.4.2007,  10:02 Найти цитируемый пост)
2) очень хотелось бы установить имя таблицы выборки "operators" и его поля "operator_clock_number" . 

Код

create or replace function get_all_rows_by_param(pTable_Name varchar2, pField_Name varchar2) return varchar2 is
  result varchar2(2000);
  sql_block varchar2(1000) := 'begin
                                 for i in (select ' || pField_Name || ' from ' || pTable_Name || ')
                                 loop
                                   :result := :result || '','' || i.' || pField_Name || ';
                                 end loop;
                               end;';
begin
  execute immediate sql_block using in out result;
  return(result);
end get_all_rows_by_param;

параметр для условия и условие добавишь сам если нужно.

отсюда:
Код

select get_all_rows_by_param('operators', 'operator_clock_number') from dual



Это сообщение отредактировал(а) DimW - 5.4.2007, 10:56
PM MAIL ICQ   Вверх
ivashkanet
Дата 5.4.2007, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


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

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



О как  smile smile 

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

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

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

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

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

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


 




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


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

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