You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Java中创建HSQLDB存储过程遇到问题求助

问题修正:创建统计指定部门教师数量的存储过程

需求

实现存储过程count_teachers(dept_name VARCHAR),通过OUT参数返回与dept_name完全匹配的部门中的教师总数。

原代码的问题

  1. 参数定义完全颠倒:需求是传入部门名称(IN参数,VARCHAR类型)、返回教师数量(OUT参数,INT类型),但原代码把IN设为int类型的id,OUT设为VARCHAR类型的nombre,不符合需求。
  2. COUNT函数语法错误:COUNT id缺少括号,正确写法应为COUNT(*)或COUNT(teacher_id)(若教师表主键为teacher_id)。
  3. 参数引用逻辑错误:原代码错误地用OUT参数nombre匹配部门名称,实际应该用IN参数传入部门名称,将统计结果赋值给OUT参数。

修正后的代码

public static void count_Teacher_By_Department_Procedure() {
    try {
        Connection con = conexion("jdbc:hsqldb:.\\database\\db");
        Statement stt = con.createStatement();
        
        // 删除已存在的存储过程(如果有)
        String sql = "DROP PROCEDURE count_teachers IF EXISTS;";
        stt.executeUpdate(sql);

        // 创建符合需求的存储过程:IN参数为部门名称,OUT参数为教师总数
        sql = "CREATE PROCEDURE count_teachers(IN dept_name VARCHAR(20), OUT teacher_count INT)"
                + "READS SQL DATA "
                + "BEGIN ATOMIC "
                + "SET teacher_count = (SELECT COUNT(*) FROM teachers "
                + "WHERE dept_num IN (SELECT dept_num FROM departments WHERE name = dept_name)); "
                + "END";
        stt.executeUpdate(sql);
        
        con.close();
    } 
    catch (SQLException ex) {
        Logger.getLogger(Act3_4.class.getName()).log(Level.SEVERE, null, ex);
    }
}

代码说明

  1. 修正参数定义:IN参数dept_name接收部门名称,OUT参数teacher_count返回统计的教师数量,类型符合需求。
  2. 修正COUNT语法:使用COUNT(*)统计教师总数,语法正确。
  3. 调整子查询逻辑:用IN参数dept_name匹配departments表的name字段,找到对应的dept_num,再统计teachers表中该部门的教师数量,最后将结果赋值给OUT参数teacher_count。

内容的提问来源于stack exchange,提问作者Enrique

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 15:35:38