使用 JDBCTemplate 运行 sql 函数

时间:2021-03-15 17:25:58

标签: postgresql jdbctemplate

我有一个 postgres 数据库和一个与数据库交互的 java 应用程序。我需要运行一个 sql 函数,将数据从一个表复制到另一个表。为此,我使用 jdbcTemplate.update(),但得到了错误的 SQL 语法错误。 我的代码:

public boolean populateWithTemplateActivityData(LocalDate localDate) {

    String sql ="DO\n" +
            "$$\n" +
            "    declare\n" +
            "        day    double precision;\n" +
            "        mydate date;\n" +
            "    begin\n" +
            "\n" +
            "        mydate := '?';\n" +
            "        day := extract(\n" +
            "                isodow from mydate\n" +
            "            );\n" +
            "        DELETE FROM activities\n" +
            "        WHERE date>=mydate AND date<=mydate + INTERVAL '7 days';\n" +
            "        while day < 6\n" +
            "            loop\n" +
            "                insert into activities (groupid, classroomid, lessonnumber, courseid, weekday, teacherid)\n" +
            "                select groupid, classroomid, lessonnumber, courseid, weekday, teacherid\n" +
            "                from template_activities\n" +
            "                where weekday = day;\n" +
            "                update activities set date = mydate where weekday = day;\n" +
            "                day := day + 1;\n" +
            "                mydate := mydate + INTERVAL '1 day';\n" +
            "            end loop;\n" +
            "\n" +
            "    END\n" +
            "$$;";
    try{
        jdbcTemplate.update(sql, localDate);
        return true;
    }catch (Exception e){
        LOGGER.warn(e.getMessage());
        return false;
    }

}

从控制台运行时,sql 代码按预期工作。当我在测试中使用 jdbctemplate 运行它时(我使用 h2),它给出了一个错误。

我的问题: 运行包含一些 sql 逻辑的复杂 sql 脚本是否合适?

0 个答案:

没有答案