Коллега рассказывал, что они переводили проекты с разных языков программирования на Джаву, в том числе и с Кобола. И делали они это при помощи грамматики, написанной на JavaCC.
В опросе нет такого пункта, что использовал бы парсер-генератор, но другой.
В оракле такие штуки можно решить хинтами. Чтобы сработал пуш предиката, нужно, чтобы джоин был методом nested loops, и это можно сделать примерно так:
select /*+ leading(t) use_nl(v) */
v.*
from table1 t,
view1 v
where t.some_id = 123
and t.another_id = v.another_id;
То, что идет после слова select – это хинт. Он говорит ораклу, начинать джоины с таблицы t, а при присоединении представления v, использовать nested loops.
Таким же образом можно поступать, если мы из ведущей таблицы берем поле, которое в ведомой является ключом секционирования. Чтобы в таком случае не перебирать все партиции, нужен опять же nested loops. Такое не-перебирание партиций называется partition pruning.
А то сейчас невозможно использовать DataGrip в энтерпрайзе с Ораклом. Потому что select any dictionary там не дают, а дают очень похожую роль, в которой есть dba_source и другие dba-вьюшки. Но DataGrip их не использует, а использует all-вьюшки, в которых в этом случае ничего толком нет.
Можно еще для инвертирования регистра использовать функцию translate, тогда решением бонусного задания будет:
select translate(initcap(‘иВАнОв ИВан иВанович’),’АБВГДЕЁЖЗИКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯабвгдеёжзиклмнопрстуфхцчшщьыъэюя’,‘абвгдеёжзиклмнопрстуфхцчшщьыъэюяАБВГДЕЁЖЗИКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯ‘) as t;
Коллега рассказывал, что они переводили проекты с разных языков программирования на Джаву, в том числе и с Кобола. И делали они это при помощи грамматики, написанной на JavaCC.
В опросе нет такого пункта, что использовал бы парсер-генератор, но другой.
В оракле такие штуки можно решить хинтами. Чтобы сработал пуш предиката, нужно, чтобы джоин был методом nested loops, и это можно сделать примерно так:
То, что идет после слова select – это хинт. Он говорит ораклу, начинать джоины с таблицы t, а при присоединении представления v, использовать nested loops.
Таким же образом можно поступать, если мы из ведущей таблицы берем поле, которое в ведомой является ключом секционирования. Чтобы в таком случае не перебирать все партиции, нужен опять же nested loops. Такое не-перебирание партиций называется partition pruning.
Хотелось бы, чтобы вот эту проблему поправили: https://youtrack.jetbrains.com/issue/DBE-2500
А то сейчас невозможно использовать DataGrip в энтерпрайзе с Ораклом. Потому что select any dictionary там не дают, а дают очень похожую роль, в которой есть dba_source и другие dba-вьюшки. Но DataGrip их не использует, а использует all-вьюшки, в которых в этом случае ничего толком нет.
Можно пруфы, пожалуйста? Ссылки на исследования.
А то, сдаётся мне, мама-то была права, и с кашей сытнее, чем без каши.
зашел сюда написать то же самое
Можно еще для инвертирования регистра использовать функцию translate, тогда решением бонусного задания будет: