繁体   English   中英

ATG - 如何覆盖插入语句的RQL

[英]ATG - How to override RQL for insert statements

我需要使用表的序列将记录插入到已包含记录的Oracle DB表中。

我尝试使用RQL为主键创建自动生成的id,但有时这些生成的id已经存在于数据库中,因此会引发约束违规错误。

ATG文档提供了一个名为Overriding RQL-Generated SQL的替代方法,但我没有设法使其适用于insert语句。

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 Repository API将表序列用于insert语句?

最终,我没有设法让它工作,但我找到了以下解决方案。

我检索了如下的序列号,然后在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();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM