Можно ли получить план объяснения с переменными связывания в DB2?

В Oracle синтаксис такой:

explain plan for
select * from users WHERE user_name = :user_name AND user_dob = :user_dob

Можно ли сделать то же самое в DB2? Заявление ниже, похоже, не работает.

explain plan with snapshot for
select * from users WHERE user_name = :user_name AND user_dob = :user_dob

Спасибо.


person Andy    schedule 21.10.2013    source источник
comment
На какой ОС работает ваш сервер DB2?   -  person WarrenT    schedule 23.10.2013


Ответы (2)


Ответ может зависеть от вашей версии DB2 и платформы, которые вы по какой-то причине решили не сообщать нам. Это отлично работает на DB2 для LUW (v10.1, но я уверен, что это будет работать с v9.7 и выше):

$ db2 "explain plan with snapshot for select * from syscat.schemata where schemaname = :blah"
DB20000I  The SQL command completed successfully.

Вы можете попробовать заменить маркеры именованных параметров знаками вопроса.

person mustaccio    schedule 21.10.2013
comment
Изменение оператора для выбора * из пользователей, ГДЕ имя_пользователя = ? И user_dob = ? работал. Спасибо. - person Andy; 22.10.2013

Судя по всему, ответ есть на сайте IBM, но разобраться в нем непросто.

http://publib.boulder.ibm.com/infocenter/db2luw/v9/index.jsp?topic=%2Fcom.ibm.db2.udb.admin.doc%2Fdoc%2Fr0000952.htm

ДЛЯ объяснимого-sql-утверждения

Задает оператор SQL, который необходимо объяснить. Этот оператор может быть любым допустимым оператором CALL, Compound SQL (Dynamic), DELETE, INSERT, MERGE, SELECT, SELECT INTO, UPDATE, VALUES или VALUES INTO SQL. Если оператор EXPLAIN встраивается в программу, оператор объяснимого-sql может содержать ссылки на переменные хоста (эти переменные должны быть определены в программе). Точно так же, если EXPLAIN подготавливается динамически, объяснимый-sql-оператор может содержать маркеры параметров.

Но он не говорит вам, что такое «маркеры параметров», поэтому вам нужно пойти и поискать его.

person Andy    schedule 23.10.2013