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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> показать несуществующий ID, oracle 
:(
    Опции темы
ziga
Дата 26.9.2010, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



есть простой запрос с параметром

Код

select t1.id_table, t1.name
  from table t1
  where id_table in (:param1)


в параметр к примеру передаётся через запятую ID 1,2,3,4,5
к примеру 5 ID нет в таблице но мне всё равно надо его отобразить с t1.name = null 
как это сделать ? 
стоит учитывать что ID может быть сколько угодно 

Это сообщение отредактировал(а) ziga - 26.9.2010, 14:24
PM MAIL   Вверх
Zloxa
Дата 27.9.2010, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


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

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



Цитата(ziga @  26.9.2010,  14:22 Найти цитируемый пост)
стоит учитывать что ID может быть сколько угодно

количество значений, перечисленных в In не может превышать 1000 значений.
Цитата(ziga @  26.9.2010,  14:22 Найти цитируемый пост)
как это сделать ?

Если есть возможность создать объект схемы(или использовать ранее созданный обект) - создать коллеккцию и дожйниться с ней.
Код

SQL> create table some_table as select 1 id from dual union all select 8 from dual;

Table created.

SQL> var cur refcursor;
SQL> declare
  2    coll num_collection := num_collection();
  3  begin
  4    for i in 1..10 loop
  5      coll.extend;
  6      coll(coll.count) := i;
  7    end loop;
  8    open :cur for select * from table(coll) t left join some_table st on t.column_value = st.id;
  9  end;
 10  /

PL/SQL procedure successfully completed.

SQL> print cur;

COLUMN_VALUE         ID
------------ ----------
           1          1
           2
           3
           4
           5
           6
           7
           8          8
           9
          10

10 rows selected.


если объекты схемы создавать нельзя и коллекции нужного типа ранее не было создано, тогда извращатсья либо через XML:
Код

SQL> declare
  2    xml clob := '<b><a>1</a><a>2</a><a>3</a><a>4</a><a>5</a><a>6</a><a>7</a><a>8</a><a>9</a><a>10</a></b>';
  3  begin
  4    open :cur for
  5     select value(t).extract('*/text()').getNumberVal() val
  6            ,st.id
  7     from
  8       table(xmlsequence(extract(XmlType(xml),'*/*')))t
  9       left join some_table st on value(t).extract('*/text()').getNumberVal() = st.id;
 10  end;
 11  /

PL/SQL procedure successfully completed.

SQL> print cur;

       VAL         ID
---------- ----------
         1          1
         2
         3
         4
         5
         6
         7
         8          8
         9
        10

10 rows selected.

Либо же формировать подзапрос select 1 from dual union all select 2 from dual.....  и джойнить с ним.


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




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


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

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