【问题标题】:ATG - How to override RQL for insert statementsATG - 如何覆盖插入语句的 RQL
【发布时间】:2019-05-22 08:45:46
【问题描述】:

我需要使用表的顺序将记录插入到已经有记录的 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 Repository API 使用表的序列来插入语句?

【问题讨论】:

    标签: repository atg oracle-commerce


    【解决方案1】:

    最终,我没能成功,但我找到了以下解决方案。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多