Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3] 4 5 6   вперед  Ctrl      все
 Re: На философию потянуло...  [new]
NightGhost
Member

Откуда:
Сообщений: 629
Так и не понял можно ли обойти на мой взгляд глупое ограничение
пр ивыполнении динамического запроса с использованием DBMS_SQL
ограничение касается того что нельзя
сделать бинд входного массива и бинд выходного массива

тоесть нельзя хотеть в SQL select забиндидь массив и получить тоже
массив
массив можно получать только по строчкам УЖОС ПРОСТО
а если у меня в результате получится 100к строчек ответа я что помереть от старости должен пока их в цикле загоню в массив

Кстати если у кого есть решение данной прболемы буду признателен
кинте плиз ссылочку
popov_art@mail.ru
11 сен 06, 23:44    [3121553]     Ответить | Цитировать Сообщить модератору
 Re: На философию потянуло...  [new]
Elic
Member

Откуда: 1984. Выбраковка финно-угром началась. КЯЗ
Сообщений: 26947
NightGhost
тоесть нельзя хотеть в SQL select забиндидь массив и получить тоже массив
begin select value into :value from t where id = :id; end;
12 сен 06, 00:24    [3121604]     Ответить | Цитировать Сообщить модератору
 Re: На философию потянуло...  [new]
RA\/EN
Member

Откуда:
Сообщений: 3642
О! Нашелся топик.
Хочу от оракла индексы и явное управление превращением подзапроса в темповую таблицу в конструкции with, а так же разрешать в списке with неиспользуемые подзапросы:

with 
q1 /*+ MAKE_TEMP INDEX(OBJECT_ID) INDEX(OWNER,OBJECT_NAME) COMPRESS 1*/ 
as (
  select * from all_objects),
q2 /*+ NO_MAKE_TEMP*/
as (
  select 1 One from dual)
select * from q1 where owner = 'SYS' order by Object_Name

Должно сконвертить q1 в темп, построить индекс и сделать SKIP_SCAN по нему.

А еще темповые таблицы a-la MSSQL - тот же with, только повторно используемый.

 create with_table q1 as (select * from dual) index q1_i(dummy)
 /
 drop with_talbe q1
 /
И все это не DDL.
Хотя это вызовет проблемы с компиляций, но, если, например, определять это структурой курсора в коде... Просто не всегда удобно в вычислительных задачах таскать за собой скрипты с кучей темповых таблиц, а если генерить их в рантайме, то все съезжает в DSQL из-за раскомпиляции.
12 сен 06, 09:18    [3122063]     Ответить | Цитировать Сообщить модератору
 Re: java книги, обмен, советы, eBook  [new]
Timm
Member

Откуда: Moscow, Ё-burg
Сообщений: 3729
Явное превращение в темп
/*+ materialize*/
противоположное ему
/*+ inline*/
только все недокументировано :(
12 сен 06, 10:34    [3122508]     Ответить | Цитировать Сообщить модератору
 Re: java книги, обмен, советы, eBook  [new]
RA\/EN
Member

Откуда:
Сообщений: 3642
Timm
Явное превращение в темп
/*+ materialize*/
противоположное ему
/*+ inline*/
только все недокументировано :(


Да, век живи-век учись...
Нарыл описание ( претендующее на полноту ) хинтов оракла, буду пытаться разобраться, что это такое.
http://www.adp-gmbh.ch/ora/sql/hints.html
12 сен 06, 11:11    [3122746]     Ответить | Цитировать Сообщить модератору
 Re: java книги, обмен, советы, eBook  [new]
grexhide
Member [заблокирован]

Откуда: Страна непреодолимых противоречий
Сообщений: 8561
RA\/EN

Да, век живи-век учись...


Да.... мощная конструкция... Интересно, насколько она легальна ?
12 сен 06, 11:28    [3122872]     Ответить | Цитировать Сообщить модератору
 Re: java книги, обмен, советы, eBook  [new]
Гость1111
Guest
Timm
Явное превращение в темп
/*+ materialize*/
противоположное ему
/*+ inline*/
только все недокументировано :(


А каким образом данный хинт юзать?
в запросах типа with lalala as... ?
как проверить что данный хинт действительно пашеть?
12 сен 06, 11:55    [3123106]     Ответить | Цитировать Сообщить модератору
 Re: На философию потянуло...  [new]
Владимор Конев
Member

Откуда:
Сообщений: 3456
  SQL Statement from editor:
   
   
  with my_dual as (select 1 as num from dual)
  select * from my_dual
  ------------------------------------------------------------
    
  Statement Id=1   Type=TABLE ACCESS
  Cost=2  TimeStamp=12-09-06::15::57:47
  
       (1)  SELECT STATEMENT  CHOOSE 
     Est. Rows: 1  Cost: 2
       (2)  TABLE ACCESS FULL SYS.DUAL  [Analyzed] 
       (2)   Blocks: 1 Est. Rows: 1 of 1  Cost: 2 
     Tablespace: SYSTEM

  SQL Statement from editor:
   
   
  with my_dual as (select /*+ materialize*/ 1 as num from dual)
  select * from my_dual
  ------------------------------------------------------------
    
  Statement Id=1   Type=RECURSIVE EXECUTION
  Cost=0  TimeStamp=12-09-06::15::58:16
  
       (2)  SELECT STATEMENT  CHOOSE 
     Est. Rows: 1  Cost: 2
           (1)  RECURSIVE EXECUTION.SYS_LE_2_0
    TEMP TABLE TRANSFORMATION
           (4)  VIEW (Embedded SQL) 
                Est. Rows: 1  Cost: 2
               (3)  TABLE ACCESS FULL SYS.SYS_TEMP_0FD9D6662_8723E40F  [Analyzed] 
                    Est. Rows: 1  Cost: 2
12 сен 06, 11:58    [3123141]     Ответить | Цитировать Сообщить модератору
 Re: java книги, обмен, советы, eBook  [new]
RA\/EN
Member

Откуда:
Сообщений: 3642
grexhide
RA\/EN

Да, век живи-век учись...


Да.... мощная конструкция... Интересно, насколько она легальна ?


Кайт говорит, что обходится rownum>0, но это не совсем то, что хинт - на примере Владимира не материализует.
12 сен 06, 12:01    [3123165]     Ответить | Цитировать Сообщить модератору
 Re: java книги, обмен, советы, eBook  [new]
contr
Member

Откуда:
Сообщений: 1909
RA\/EN
grexhide
RA\/EN

Да, век живи-век учись...

Да.... мощная конструкция... Интересно, насколько она легальна ?

Кайт говорит, что обходится rownum>0, но это не совсем то, что хинт - на примере Владимира не материализует.

Кайт пользуется для другого, а именно - для получения VIEW.
Соответствующий хинт - /*+no_merge*/
12 сен 06, 12:34    [3123502]     Ответить | Цитировать Сообщить модератору
 Re: На философию потянуло...  [new]
iamhere
Member

Откуда:
Сообщений: 187
Доменов немножко не хватает, чтобы один раз описать CHECK CONSTRAINT и потом просто использовать получившийся домен (BOOLEAN, PHONE_NUMBER, etc) везде, где надо.

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

Не хватает возможности получить перечень ошибок для DEFERRED CONSTRAINT.

Не хватает возможности получить автоматом приблизительную оценку длительности/progress'а длинной операции.
12 сен 06, 12:40    [3123550]     Ответить | Цитировать Сообщить модератору
 Re: На философию потянуло...  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 88515
О ! Вспомнил.

Возможность использования CLOB в динамическом SQL.

Оффтоп. Внимание ! Название темы частично "заражено" .
(Timm, по- моему это Вы - что за ebookи ? )
12 сен 06, 12:46    [3123616]     Ответить | Цитировать Сообщить модератору
 Re: На философию потянуло...  [new]
contr
Member

Откуда:
Сообщений: 1909
iamhere
Не хватает возможности получить перечень ошибок для DEFERRED CONSTRAINT.
??? Что имелось ввиду?
iamhere

Не хватает возможности получить автоматом приблизительную оценку длительности/progress'а длинной операции.

v$session_longops
12 сен 06, 12:47    [3123626]     Ответить | Цитировать Сообщить модератору
 Re: На философию потянуло...  [new]
grexhide
Member [заблокирован]

Откуда: Страна непреодолимых противоречий
Сообщений: 8561
iamhere

Не хватает возможности получить автоматом приблизительную оценку длительности/progress'а длинной операции.


V$SESSION_LONGOPS, dbms_application_info.set_session_longops в т.ч.
12 сен 06, 12:49    [3123643]     Ответить | Цитировать Сообщить модератору
 Re: На философию потянуло...  [new]
iamhere
Member

Откуда:
Сообщений: 187
contr
iamhere
Не хватает возможности получить перечень ошибок для DEFERRED CONSTRAINT.
??? Что имелось ввиду?


Есть DEFERRED CONSTRAINT. Quantity > 0, например.
Есть транзакция, которая разными способами меняет этот Quantity в разных строках. Делает COMMIT и вываливается, потому что Quantity получился где-то < 0, в т.ч. и из-за параллельных сессий. FOR UPDATE - дорого и в 99% случаев не нужно, т.к. обновляются разные записи или записи, где Quantity МНОГО. Поэтому делаем так, с DEFERRED. Но вот знать бы еще, в каких строках этот CONATRAINT (который во время COMMIT срабатывает) обломался... EXCEPTIONS INTO тут не прокатывает.

contr

iamhere

Не хватает возможности получить автоматом приблизительную оценку длительности/progress'а длинной операции.

v$session_longops


Не то. Это КУСОЧКИ длинной операции :)
Я прекрасно понимаю, что невозможно предсказать это общее время, даже имея всю статистику и план - потому что от даннх зависит. Но все-таки не хватает :)
12 сен 06, 12:54    [3123696]     Ответить | Цитировать Сообщить модератору
 Re: На философию потянуло...  [new]
grexhide
Member [заблокирован]

Откуда: Страна непреодолимых противоречий
Сообщений: 8561
iamhere

Я прекрасно понимаю, что невозможно предсказать это общее время, даже имея всю статистику и план - потому что от даннх зависит. Но все-таки не хватает :)


Ты хоть бы справочник почитал. на предмет V$SESSION_LONGOPS.SOFAR

или тебе привести формулу "предсказания точного времени" ?
12 сен 06, 12:58    [3123741]     Ответить | Цитировать Сообщить модератору
 Re: На философию потянуло...  [new]
contr
Member

Откуда:
Сообщений: 1909
iamhere
contr
iamhere
Не хватает возможности получить перечень ошибок для DEFERRED CONSTRAINT.
??? Что имелось ввиду?

Есть DEFERRED CONSTRAINT. Quantity > 0, например.
Есть транзакция, которая разными способами меняет этот Quantity в разных строках. Делает COMMIT и вываливается, потому что Quantity получился где-то < 0, в т.ч. и из-за параллельных сессий. FOR UPDATE - дорого и в 99% случаев не нужно, т.к. обновляются разные записи или записи, где Quantity МНОГО. Поэтому делаем так, с DEFERRED. Но вот знать бы еще, в каких строках этот CONATRAINT (который во время COMMIT срабатывает) обломался... EXCEPTIONS INTO тут не прокатывает.

Хм.
"Из-за параллельных транзакций" - очень сомнительно, ибо уже первый update заблокирует строку (или обломится).
Если же строка обновляется отлько в самом-самом конце, то не нужны никакие deferred...
ИМХО тут дело не в deferred, а в нецелевом его использовании ;)
12 сен 06, 13:03    [3123789]     Ответить | Цитировать Сообщить модератору
 Re: java книги, обмен, советы, eBook  [new]
Владимор Конев
Member

Откуда:
Сообщений: 3456
contr
Кайт пользуется для другого, а именно - для получения VIEW.
Соответствующий хинт - /*+no_merge*/
Вот только не всегда сей хинт срабатывает, в отличие от того же ROWNUM...
12 сен 06, 13:38    [3124083]     Ответить | Цитировать Сообщить модератору
 Re: На философию потянуло...  [new]
Timm
Member

Откуда: Moscow, Ё-burg
Сообщений: 3729
dmidek
О ! Вспомнил.

Возможность использования CLOB в динамическом SQL.

Оффтоп. Внимание ! Название темы частично "заражено" .
(Timm, по- моему это Вы - что за ebookи ? )

Это все Опера :)
Вот тема про ебуки (там и оракловые книги есть, правда сейчас ниче не доступно)
12 сен 06, 13:43    [3124113]     Ответить | Цитировать Сообщить модератору
 Re: На философию потянуло...  [new]
Timm
Member

Откуда: Moscow, Ё-burg
Сообщений: 3729
Timm
Явное превращение в темп
/*+ materialize*/
противоположное ему
/*+ inline*/
только все недокументировано :(

Кстати. По моим наблюдениям temp table transformation появляется сразу же если subquery_factoring_clause используется более одного раза (имхо, это дурацкое решение, попахивает индусами ). Поэтому для "эмуляции" /*+ materialize*/ достаточно добавить union all select 1 from q1 where 1=0 или что то подобное.
А вот с inline все сложнее...
12 сен 06, 15:05    [3124802]     Ответить | Цитировать Сообщить модератору
 Re: На философию потянуло...  [new]
RA\/EN
Member

Откуда:
Сообщений: 3642
Timm

Кстати. По моим наблюдениям temp table transformation появляется сразу же если subquery_factoring_clause используется более одного раза (имхо, это дурацкое решение, попахивает индусами ). Поэтому для "эмуляции" /*+ materialize*/ достаточно добавить union all select 1 from q1 where 1=0 или что то подобное.
А вот с inline все сложнее...


И так сложнее, но, вроде, оптимизатор вполне адекватен.

Это не дает темптабле:

with q as (select * from dual  )
select * from q
union all
select * from q where 1=2

а это - дает

with q as (select * from dual where exists (select count(*) from dual having count(*)=1) )
select * from q
union all
select * from q where 1=2

Вполне логично.
12 сен 06, 16:28    [3125396]     Ответить | Цитировать Сообщить модератору
 Re: На философию потянуло...  [new]
Timm
Member

Откуда: Moscow, Ё-burg
Сообщений: 3729
с дьюалом нечестно
12 сен 06, 16:38    [3125478]     Ответить | Цитировать Сообщить модератору
 Re: На философию потянуло...  [new]
Ааз
Member

Откуда: Москва/Протвино
Сообщений: 4274
Timm
Явное превращение в темп
/*+ materialize*/
противоположное ему
/*+ inline*/
только все недокументировано :(
На oracle-l@freelists.org подсмотрел такое
select /*+ OPT_PARAM('_optimizer_cost_based_transformation' 'off') */
Я так понимаю, список параметров можно увидеть в трассе 10053

Всего
12 сен 06, 16:43    [3125507]     Ответить | Цитировать Сообщить модератору
 Re: На философию потянуло...  [new]
RA\/EN
Member

Откуда:
Сообщений: 3642
Ааз
На oracle-l@freelists.org подсмотрел такое
select /*+ OPT_PARAM('_optimizer_cost_based_transformation' 'off') */
Я так понимаю, список параметров можно увидеть в трассе 10053

Всего


А примерчик реального использования (хотя-бы эффекта) этого хинта можешь подкинуть?
А то навскидку не получается 10-ку убедить хотя-бы в вырубании картезиана, не говоря уж о включении через это хинт режима RULE.
12 сен 06, 17:01    [3125674]     Ответить | Цитировать Сообщить модератору
 Re: На философию потянуло...  [new]
contr
Member

Откуда:
Сообщений: 1909
RA\/EN
не говоря уж о включении через это хинт режима RULE.

Может, просто /*+ RULE */ попробовать? :)
12 сен 06, 17:03    [3125688]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3] 4 5 6   вперед  Ctrl      все
Все форумы / Oracle Ответить