Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 ограничение для UNION  [new]
Dimka9
Member

Откуда: Владивосток
Сообщений: 1851
Вчера читал книжку O`reilly про SQL - точное название не помню. Не в нем суть.

Там в главе про union есть в конце список ограничений типа:

Селект не может быть for update, нельзя использовать blob... и в конце фраза суть которой:

Суммарный размер select list списка столбцов не может превышать размер блока БД.

Проверил запросом в БД с 8к блоком:
select lpad('a',4097) o, lpad('b',4096) from dual
union
select lpad('c',4097) o, lpad('d',4096) from dual

Отработал без проблем. сегодня с утра пытался найти данной ограничение в доке, но не для 8 и 10 не нашел.

Подскажите откуда ноги растут (у данного утверждения)
22 июн 07, 02:28    [4301855]     Ответить | Цитировать Сообщить модератору
 Re: ограничение для UNION  [new]
juks@gala.net
Member

Откуда: Киев
Сообщений: 4212
666 сообщений - откуда ноги растут ? :-)

Оригинал увидеть можно ?
22 июн 07, 03:18    [4301880]     Ответить | Цитировать Сообщить модератору
 Re: ограничение для UNION  [new]
mcureenab
Member

Откуда: Murmansk
Сообщений: 5928
Dimka9
Подскажите откуда ноги растут (у данного утверждения)


Oracle Database Reference
10g Release 2 (10.2)
Part Number B14237-02
Logical Database Limits

GROUP BY clause

Maximum length

The GROUP BY expression and all of the nondistinct aggregate functions (for example, SUM, AVG) must fit within a single database block.


А в примере замени константы на реальные колонки таблицы. Возможно речь идёт о размере блока в табличном пространстве временного сегмента, который используется для сортировки.
22 июн 07, 04:05    [4301901]     Ответить | Цитировать Сообщить модератору
 Re: ограничение для UNION  [new]
Dimka9
Member

Откуда: Владивосток
Сообщений: 1851
Если это важно
"Mastering Oracle SQL" Sanjay Mishra & Alan Beaulieu. Глава 7, стр 180

The number and size of columns in the SELECT list of component queries are
limited by the block size of the database. The total bytes of the columns
SELECTed can’t exceed one database block.
22 июн 07, 04:07    [4301903]     Ответить | Цитировать Сообщить модератору
 Re: ограничение для UNION  [new]
Dimka9
Member

Откуда: Владивосток
Сообщений: 1851
sys> desc ttt1;
 Имя                                       Пусто?   Тип
 ----------------------------------------- -------- --------------
 O                                                  VARCHAR2(4000)
 O1                                                 VARCHAR2(4000)
 O2                                                 VARCHAR2(4000)

sys> select o,o1,o2 from ttt
  2  union
  3  select o,o1,o2 from ttt
  4  ;
select o,o1,o2 from ttt
            *
ошибка в строке 1:
ORA-00904: "O2": invalid identifier


sys> select o,o1,o2 from ttt
  2  union all
  3  select o,o1,o2 from ttt
  4  ;
select o,o1,o2 from ttt
            *
ошибка в строке 1:
ORA-00904: "O2": invalid identifier
или я что-то не так делаю или второй запрос (нет сортировки) должен отработать
22 июн 07, 04:17    [4301906]     Ответить | Цитировать Сообщить модератору
 Re: ограничение для UNION  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18484
tst> create table t1(a varchar2(4000), b varchar2(4000), c varchar2(4000));

Table created.

tst> insert into t1 values(1,2,3);

1 row created.

tst> select * from t1;

A
--------------------------------------------------------------------------------------
B
--------------------------------------------------------------------------------------
C
--------------------------------------------------------------------------------------
1
2
3


tst> select * from t1
  2  union
  3  select * from t1;

A
--------------------------------------------------------------------------------------
B
--------------------------------------------------------------------------------------
C
--------------------------------------------------------------------------------------
1
2
3


tst> select a, b, c from t1
  2  union 
  3  select a, b, c from t1;

A
--------------------------------------------------------------------------------------
B
--------------------------------------------------------------------------------------
C
--------------------------------------------------------------------------------------
1
2
3

tst> sho parameter db_%size

NAME                                 TYPE        VALUE
------------------------------------ ----------- ---------------------------
db_16k_cache_size                    big integer 0
db_2k_cache_size                     big integer 0
db_32k_cache_size                    big integer 0
db_4k_cache_size                     big integer 0
db_8k_cache_size                     big integer 0
db_block_size                        integer     8192
db_cache_size                        big integer 134217728
db_keep_cache_size                   big integer 0
db_recycle_cache_size                big integer 0
22 июн 07, 04:24    [4301910]     Ответить | Цитировать Сообщить модератору
 Re: ограничение для UNION  [new]
Dimka9
Member

Откуда: Владивосток
Сообщений: 1851
действительно, вариант с сортировкой не прокатывает. Табличку переделал все получилось как у Вячеслава. Пробовал даже char все без ошибок.

Получается обшибся автор книги ?
22 июн 07, 04:50    [4301927]     Ответить | Цитировать Сообщить модератору
 Re: ограничение для UNION  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18484
tst> column a format a10 trunc
tst> column b format a10 trunc
tst> column c format a10 trunc
tst>  create table t1(a varchar2(4000), b varchar2(4000), c varchar2(4000));

Table created.

tst> insert into t1 values(rpad('1',4000,'1'), rpad('2',4000,'2'), rpad('3',4000,'3'));

1 row created.

tst> insert into t1 values(rpad('4',4000,'4'), rpad('5',4000,'5'), rpad('6',4000,'6'));

1 row created.

tst> select a, b, c from t1
  2  union 
  3  select a, b, c from t1;

A          B          C
---------- ---------- ----------
1111111111 2222222222 3333333333
4444444444 5555555555 6666666666

tst> select a, b, c from t1 order by a, b, c;

A          B          C
---------- ---------- ----------
1111111111 2222222222 3333333333
4444444444 5555555555 6666666666

tst> select a, b, c from t1 group by a, b, c;

A          B          C
---------- ---------- ----------
1111111111 2222222222 3333333333
4444444444 5555555555 6666666666

tst> 
22 июн 07, 05:02    [4301929]     Ответить | Цитировать Сообщить модератору
 Re: ограничение для UNION  [new]
Dimka9
Member

Откуда: Владивосток
Сообщений: 1851
Вячеслав, идею не уловил :(
22 июн 07, 05:25    [4301937]     Ответить | Цитировать Сообщить модератору
 Re: ограничение для UNION  [new]
Dimka9
Member

Откуда: Владивосток
Сообщений: 1851
offtopic
и еще колупаю доку:
The following example creates a simple chart of salary amounts by padding a single space with asterisks:
SELECT last_name, RPAD(' ', salary/1000/1, '*') "Salary"
   FROM employees
   WHERE department_id = 80
   ORDER BY last_name;

LAST_NAME                 Salary
------------------------- ---------------
Abel                       **********
Ande                       *****
Banda                      *****
Bates                      ******
Bernstein                  ********
Bloom                      *********
Cambrault                  **********
Cambrault                  ******
Doran                      ******
Errazuriz                  ***********
Fox                        ********
Greene                     ********
Hall                       ********
Hutton                     *******
Johnson                    *****
King                       *********
в чем смысл деления на 1 не понял.
22 июн 07, 05:34    [4301944]     Ответить | Цитировать Сообщить модератору
 Re: ограничение для UNION  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18484
Dimka9
Вячеслав, идею не уловил :(
Dimka9
действительно, вариант с сортировкой не прокатывает
22 июн 07, 05:40    [4301950]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить