Фактический оператор SQL после указанных переменных связывания - PullRequest
2 голосов
/ 14 января 2011

Я пытаюсь зарегистрировать каждое выражение SQL, выполненное из моих сценариев.Однако я обдумываю одну проблему, которую не могу преодолеть.

Есть ли способ вычисления фактического оператора SQL после того, как были указаны переменные связывания.В SQLite мне пришлось вычислять оператор, который должен быть выполнен вручную, используя следующий код:

def __sql_to_str__(self, value,args):
    for p in args:
        if type(p) is IntType or p is None:
            value = value.replace("?", str(p) ,1)
        else:
            value = value.replace("?",'\'' + p + '\'',1)
    return value

Кажется, CX_Oracle имеет cursor.parse () средствНо я не могу понять, как обмануть CX_Oracle для вычисления моего запроса перед его выполнением.

Ответы [ 3 ]

7 голосов
/ 14 января 2011

Запрос никогда не вычисляется как одна строка.Фактический текст запроса и параметры никогда не интерполированы, а не создает настоящую полную строку с обоими.

В этом весь смысл использования параметризованных запросов- вы отделяете запрос от данных - предотвращая инъекции и ограничения sql за один раз, и позволяя легко оптимизировать запрос.База данных получает как по отдельности, так и делает то, что ей нужно, даже не объединяя их вместе.

Тем не менее, вы можете сгенерировать запрос самостоятельно, но обратите внимание, что сгенерированный вами запрос, хотя, вероятно, эквивалентный, не являетсячто фактически выполняется в базе данных.

1 голос
/ 14 января 2011

Лучше всего сделать это на сервере базы данных, поскольку правильно реализованный коннектор Oracle не будет помещать переменные связывания в строку перед отправкой запроса на сервер. Посмотрите, сможете ли вы найти параметр сервера Oracle, который заставляет его регистрировать запросы, которые он выполняет.

0 голосов
/ 14 января 2011

Возможно, вы захотите использовать для этого расширенную функцию трассировки SQL в Oracle. Я бы рекомендовал начать здесь: http://carymillsap.blogspot.com/2011/01/new-paper-mastering-performance-with.html.

...