IDfSession.apiExec()
在 DFC 中,可以使用该方法直接执行 SQL(绕过 DQL) 。问题是该方法在 DFC API 的当前(6.x、7.x)版本中被标记为已弃用。
下面是一些使用不推荐使用的方法的示例代码:
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 是应该工作的 - 或者?我当然是用超级用户帐户尝试这个,所以我不知道我缺少哪些特权。
从 DFC 中执行原始 SQL 语句是否有一种很好的、不被弃用的方法?
我还要补充一点,我非常清楚不建议使用原始 SQL,因为它绕过了 Documentum 的安全模型。我也知道我可以@SuppressWarnings("deprecation")
在我的 Java 代码中使用,但这并没有减少该方法的弃用。