Oracle проверить запрос, не выполняя его
мб просто добавить в where 1=2 и всётаки выполнить?
Разве просто отпрепарить недостаточно? В джаве это java.sql.Connection#prepareStatement
Большинство реализаций драйверов забивают на препейр, и отдают строку уже когда ты экзекьютишь, полагаясь на кэш планов в бд.
Большинство реализаций драйверов забивают на препейр, и отдают строку уже когда ты экзекьютишь, полагаясь на кэш планов в бд.они не совсем забивают, они откладывают ее до первого выполнения
а куда вставлять?
может хранимку создавать и удалять?
Большинство реализаций драйверов забивают на препейр, и отдают строку уже когда ты экзекьютишь, полагаясь на кэш планов в бд.И что, можно отпрепарить невалидный sql?
А че, сделать explain с забинденными переменными не?
Вроде да.
А че, сделать explain с забинденными переменными не?Как? Напиши код, плиз.
Может выполнять запросы на пустой схеме-песочнице?
Что-то я подумал, без знания типа каждого вопросика тяжело будет.Тип каждого вопросика известен.
Я в оракле нуб, поэтому могу тупить.
Я с ораклом последний раз тоже давно имел дело, так что...
А зачем это могло понадобиться?
ты уже пробовал prepared statement? на практике пробовал?
Использовать для Oracle EXPLAIN PLAN FOR у меня не получилось, ругается на bind variables.Попробуй выполнять
begin execute immediate 'explain plan for <query>'; end;
Попробуй выполнятьВсе понимают, что они сейчас совместными форумными усилиями портируют КоКу под Oracle?
а куда вставлять?в конце запроса, если есть условие where то добавить 'and 1=2', если нет, то 'where 1=2'
если есть GROUP BY и ORDER BY то перед ними
хотя в случае наличия вложенных подзапросов такой вариант не прокатит...
ну какой where для insert?
ты уже пробовал prepared statement? на практике пробовал?из .Net не сработало, из Java пока не пробовал (Java не установлена)
код из гугла: http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared....
А зачем это могло понадобиться?есть тулза, которая находит все динамические запросы, хочется их проверять на валидность. Например, это дает возможность поменять что-нибудь в базе и посмотреть, что в приложении на это завязано.
Что мешает сделать клон базы и на нём проверять? Или в рамках транзакции, которую сразу откатывать?
Что мешает сделать клон базы и на нём проверять? Или в рамках транзакции, которую сразу откатывать?Тот же insert потребует предоставить not null значения, а хочется просто проверить запрос. Другие констренты на данных тоже дадут ложные срабатывания.
объяснение не очень понятное =(а что не понятно? SQL статически типизированный язык, вот и хочется статической проверки ошибок. Хорошо же, когда при создании хранимок делается проверка. Так и тут хочется того же. Тулза находит все варианты для динамических запросов. Остается либо создать из них хранимки, либо прочекать еще как-то.
Да, это только для DML, с DDL там будет грустно. Но тебе вроде и не надо.
а что не понятно? SQL статически типизированный язык, вот и хочется статической проверки ошибок.мне вся задача не понятна =) Хочется автоматически верифицировать все SQL-запросы в коде?
Хочется автоматически верифицировать все SQL-запросы в коде?да
ну какой where для insert?в большинстве кода под Oracle, с которым мне приходилось работать, преимущественно используется конструкция insert into xxx(...) select ...
в конце запроса, если есть условие where то добавить 'and 1=2', если нет, то 'where 1=2'Такая практика будет в два раза быстрее забивать кеш запросов на сервере. Впрочем, для несильно нагруженных проектов прокатит.
если есть GROUP BY и ORDER BY то перед ними
Такая практика будет в два раза быстрее забивать кеш запросов на сервере.Топикстартер делает инструментальное средство, т.е это будет не прод и на кеш планов всем пофиг.
потом селект из табцицы куда пишется explain
http://dba.stackexchange.com/questions/18639/how-do-you-get-...
Оставить комментарий
6yrop
Есть запрос (insert/update/delete) с bind variables. Как проверить его, не выполняя? Желательно привести полный код вызова из Java/.Net/Pythin/PHP.В postgresql это делается через EXPLAIN. Использовать для Oracle EXPLAIN PLAN FOR у меня не получилось, ругается на bind variables.