postgresql - 使用 JDBCTemplate 运行 sql 函数
问题描述
我有一个 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 脚本是否合适?
解决方案
推荐阅读
- sql - 在 escape() 中使用通配符
- session - 错误:redistor 函数体外部的非声明语句
- c++ - 将 C++ 字节数组转换为 C 字符串
- sql - (SQL Vertica)创建一个新表,删除单列中具有重复项的行
- python-3.x - 解析 json、循环和打印 (python)
- angular - 如何导入 scss 变量取决于包含的 mixin
- c# - 为什么 CameraCaptureUI 总是显示圆形裁剪?
- tensorflow - 在 Kubernetes 上的 cifar10 上训练 nasnet_large 时出现 ResourceExhausted 错误
- powershell - 如何更新 SharePoint 库中文档和文件夹的元数据
- listview - 检测按钮单击动态列表视图外观的正确方法