我需要使用表的顺序将记录插入到其中已经有记录的Oracle DB表中。
我尝试使用RQL为主键创建一个自动生成的ID,但有时这些生成的ID已存在于数据库中,结果引发了违反约束的错误。
ATG文档提供了一个名为Overriding RQL-Generated SQL的替代方法,但我没有设法使其适用于插入语句。
GSARepository repo =
(GSARepository)request.resolveName("/examples/TestRepository");
RepositoryView view = repo.getView("canard");
Object params[] = new Object[4];
params[0] = new Integer (25);
params[1] = new Integer (75);
params[2] = "french";
params[3] = "greek";
Builder builder = (Builder)view.getQueryBuilder();
String str = "SELECT * FROM usr_tbl WHERE (age_col > 0 AND age_col < 1
AND EXISTS (SELECT * from subjects_tbl where id = usr_tbl.id AND subject
IN (2, 3)))";
RepositoryItem[] items =
view.executeQuery (builder.createSqlPassthroughQuery(str, params));
是否可以通过ATG存储库API将表的序列用于插入语句?
答案 0 :(得分:0)
最终,我没有设法使其工作,但是我找到了以下解决方案。
我按如下方式检索序列号,然后在RQL插入语句中使用它。
RepositoryView view = getRestServiceDetailsRepository().getView("wsLog");
String sql = "select log_seq.nextval from dual";
Object[] params = {};
Builder builder = (Builder) view.getQueryBuilder();
Query query = builder.createSqlPassthroughQuery(sql, params);
RepositoryItem[] items = view.executeQuery(query);
if (items != null && items.length > 0) {
items[0].getRepositoryId();
}