В DFC можно выполнять SQL напрямую (минуя DQL) с помощью метода IDfSession.apiExec()
. Проблема в том, что этот метод помечен как устаревший в текущих (6.x, 7.x) версиях DFC API.
Вот пример кода с использованием устаревшего метода:
IDfSession session;
(...)
String sql = "UPDATE dm_sysobject_s SET r_modifier = 'hacker' WHERE r_object_id = '<some_id>'";
session.apiExec("execsql", sql);
Это прекрасно работает, но, как уже упоминалось, apiExec
устарело.
Я также пробовал альтернативный подход:
(...)
IDfQuery query = new DfQuery(sql);
query.execute(session, IDfQuery.DF_EXEC_QUERY);
Насколько мне известно, это должно работать, но я продолжаю получать следующее сообщение:
[DM_QUERY_E_REG_TABLE_PERMIT_IN]error: "You have insufficient privilege to UPDATE the dbo.dm_sysobject_s table."
Я получаю то же сообщение об ошибке при использовании IDfQuery.DF_QUERY
, но в любом случае DF_EXEC_QUERY должен работать - или? Я, конечно, пробую это с учетной записью суперпользователя, поэтому я не знаю, каких привилегий мне не хватает.
Есть ли хороший, нерекомендуемый способ выполнения необработанных операторов SQL из DFC?
Я также хотел бы добавить, что я мне очень хорошо известно, что необработанный SQL настоятельно не рекомендуется, поскольку он обходит модель безопасности Documentum. Я также знаю, что могу использовать @SuppressWarnings("deprecation")
в своем Java-коде, но это не делает этот метод менее устаревшим.