powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / На философию потянуло...
25 сообщений из 139, страница 3 из 6
На философию потянуло...
    #33979432
NightGhost
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так и не понял можно ли обойти на мой взгляд глупое ограничение
пр ивыполнении динамического запроса с использованием DBMS_SQL
ограничение касается того что нельзя
сделать бинд входного массива и бинд выходного массива

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

Кстати если у кого есть решение данной прболемы буду признателен
кинте плиз ссылочку
popov_art@mail.ru
...
Рейтинг: 0 / 0
На философию потянуло...
    #33979461
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NightGhostтоесть нельзя хотеть в SQL select забиндидь массив и получить тоже массив
Код: plaintext
begin select value into :value from t where id = :id; end;
...
Рейтинг: 0 / 0
На философию потянуло...
    #33979694
Фотография RA\/EN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О! Нашелся топик.
Хочу от оракла индексы и явное управление превращением подзапроса в темповую таблицу в конструкции with, а так же разрешать в списке with неиспользуемые подзапросы:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
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, только повторно используемый.

Код: plaintext
1.
2.
3.
4.
 create with_table q1 as (select * from dual) index q1_i(dummy)
 /
 drop with_talbe q1
 /
И все это не DDL.
Хотя это вызовет проблемы с компиляций, но, если, например, определять это структурой курсора в коде... Просто не всегда удобно в вычислительных задачах таскать за собой скрипты с кучей темповых таблиц, а если генерить их в рантайме, то все съезжает в DSQL из-за раскомпиляции.
...
Рейтинг: 0 / 0
На философию потянуло...
    #33979945
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Явное превращение в темп
Код: plaintext
/*+ materialize*/
противоположное ему
Код: plaintext
/*+ inline*/
только все недокументировано :(
...
Рейтинг: 0 / 0
На философию потянуло...
    #33980087
Фотография RA\/EN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TimmЯвное превращение в темп
Код: plaintext
/*+ materialize*/
противоположное ему
Код: plaintext
/*+ inline*/
только все недокументировано :(

Да, век живи-век учись...
Нарыл описание ( претендующее на полноту ) хинтов оракла, буду пытаться разобраться, что это такое.
http://www.adp-gmbh.ch/ora/sql/hints.html
...
Рейтинг: 0 / 0
На философию потянуло...
    #33980162
Фотография grexhide
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RA\/EN
Да, век живи-век учись...


Да.... мощная конструкция... Интересно, насколько она легальна ?
...
Рейтинг: 0 / 0
На философию потянуло...
    #33980305
Гость1111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TimmЯвное превращение в темп
Код: plaintext
/*+ materialize*/
противоположное ему
Код: plaintext
/*+ inline*/
только все недокументировано :(

А каким образом данный хинт юзать?
в запросах типа with lalala as... ?
как проверить что данный хинт действительно пашеть?
...
Рейтинг: 0 / 0
На философию потянуло...
    #33980326
Владимор Конев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
  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

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
  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 
...
Рейтинг: 0 / 0
На философию потянуло...
    #33980338
Фотография RA\/EN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grexhide RA\/EN
Да, век живи-век учись...


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

Кайт говорит, что обходится rownum>0, но это не совсем то, что хинт - на примере Владимира не материализует.
...
Рейтинг: 0 / 0
На философию потянуло...
    #33980505
contr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RA\/EN grexhide RA\/EN
Да, век живи-век учись...

Да.... мощная конструкция... Интересно, насколько она легальна ?
Кайт говорит, что обходится rownum>0, но это не совсем то, что хинт - на примере Владимира не материализует.
Кайт пользуется для другого, а именно - для получения VIEW.
Соответствующий хинт - /*+no_merge*/
...
Рейтинг: 0 / 0
На философию потянуло...
    #33980529
iamhere
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доменов немножко не хватает, чтобы один раз описать CHECK CONSTRAINT и потом просто использовать получившийся домен (BOOLEAN, PHONE_NUMBER, etc) везде, где надо.

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

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

Не хватает возможности получить автоматом приблизительную оценку длительности/progress'а длинной операции.
...
Рейтинг: 0 / 0
На философию потянуло...
    #33980558
Фотография dmidek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О ! Вспомнил.

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

Оффтоп. Внимание ! Название темы частично "заражено" .
(Timm, по- моему это Вы - что за ebookи ? )
...
Рейтинг: 0 / 0
На философию потянуло...
    #33980565
contr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iamhereНе хватает возможности получить перечень ошибок для DEFERRED CONSTRAINT.??? Что имелось ввиду? iamhere
Не хватает возможности получить автоматом приблизительную оценку длительности/progress'а длинной операции.
Код: plaintext
v$session_longops
...
Рейтинг: 0 / 0
На философию потянуло...
    #33980576
Фотография grexhide
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iamhere
Не хватает возможности получить автоматом приблизительную оценку длительности/progress'а длинной операции.

V$SESSION_LONGOPS, dbms_application_info.set_session_longops в т.ч.
...
Рейтинг: 0 / 0
На философию потянуло...
    #33980605
iamhere
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
contr iamhereНе хватает возможности получить перечень ошибок для DEFERRED CONSTRAINT.??? Что имелось ввиду?

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

contr
iamhere
Не хватает возможности получить автоматом приблизительную оценку длительности/progress'а длинной операции.
Код: plaintext
v$session_longops


Не то. Это КУСОЧКИ длинной операции :)
Я прекрасно понимаю, что невозможно предсказать это общее время, даже имея всю статистику и план - потому что от даннх зависит. Но все-таки не хватает :)
...
Рейтинг: 0 / 0
На философию потянуло...
    #33980629
Фотография grexhide
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iamhere
Я прекрасно понимаю, что невозможно предсказать это общее время, даже имея всю статистику и план - потому что от даннх зависит. Но все-таки не хватает :)

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

или тебе привести формулу "предсказания точного времени" ?
...
Рейтинг: 0 / 0
На философию потянуло...
    #33980650
contr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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, а в нецелевом его использовании ;)
...
Рейтинг: 0 / 0
На философию потянуло...
    #33980830
Владимор Конев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
contrКайт пользуется для другого, а именно - для получения VIEW.
Соответствующий хинт - /*+no_merge*/Вот только не всегда сей хинт срабатывает, в отличие от того же ROWNUM...
...
Рейтинг: 0 / 0
На философию потянуло...
    #33980851
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmidekО ! Вспомнил.

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

Оффтоп. Внимание ! Название темы частично "заражено" .
(Timm, по- моему это Вы - что за ebookи ? )
Это все Опера :)
Вот тема про ебуки (там и оракловые книги есть, правда сейчас ниче не доступно)
...
Рейтинг: 0 / 0
На философию потянуло...
    #33981194
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TimmЯвное превращение в темп
Код: plaintext
/*+ materialize*/
противоположное ему
Код: plaintext
/*+ inline*/
только все недокументировано :(
Кстати. По моим наблюдениям temp table transformation появляется сразу же если subquery_factoring_clause используется более одного раза (имхо, это дурацкое решение, попахивает индусами ). Поэтому для "эмуляции" /*+ materialize*/ достаточно добавить union all select 1 from q1 where 1=0 или что то подобное.
А вот с inline все сложнее...
...
Рейтинг: 0 / 0
На философию потянуло...
    #33981566
Фотография RA\/EN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Timm
Кстати. По моим наблюдениям temp table transformation появляется сразу же если subquery_factoring_clause используется более одного раза (имхо, это дурацкое решение, попахивает индусами ). Поэтому для "эмуляции" /*+ materialize*/ достаточно добавить union all select 1 from q1 where 1=0 или что то подобное.
А вот с inline все сложнее...

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

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

Код: plaintext
1.
2.
3.
with q as (select * from dual  )
select * from q
union all
select * from q where  1 = 2 

а это - дает

Код: plaintext
1.
2.
3.
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 

Вполне логично.
...
Рейтинг: 0 / 0
На философию потянуло...
    #33981619
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
с дьюалом нечестно
...
Рейтинг: 0 / 0
На философию потянуло...
    #33981634
Фотография Ааз
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TimmЯвное превращение в темп
Код: plaintext
/*+ materialize*/
противоположное ему
Код: plaintext
/*+ inline*/
только все недокументировано :(На oracle-l@freelists.org подсмотрел такое
Код: plaintext
select /*+ OPT_PARAM('_optimizer_cost_based_transformation' 'off') */
Я так понимаю, список параметров можно увидеть в трассе 10053

Всего
...
Рейтинг: 0 / 0
На философию потянуло...
    #33981718
Фотография RA\/EN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АазНа oracle-l@freelists.org подсмотрел такое
Код: plaintext
select /*+ OPT_PARAM('_optimizer_cost_based_transformation' 'off') */
Я так понимаю, список параметров можно увидеть в трассе 10053

Всего

А примерчик реального использования (хотя-бы эффекта) этого хинта можешь подкинуть?
А то навскидку не получается 10-ку убедить хотя-бы в вырубании картезиана, не говоря уж о включении через это хинт режима RULE.
...
Рейтинг: 0 / 0
На философию потянуло...
    #33981720
contr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RA\/ENне говоря уж о включении через это хинт режима RULE.
Может, просто /*+ RULE */ попробовать? :)
...
Рейтинг: 0 / 0
25 сообщений из 139, страница 3 из 6
Форумы / Oracle [игнор отключен] [закрыт для гостей] / На философию потянуло...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]