在Java中创建HSQLDB存储过程遇到问题求助
问题修正:创建统计指定部门教师数量的存储过程
需求
实现存储过程count_teachers(dept_name VARCHAR),通过OUT参数返回与dept_name完全匹配的部门中的教师总数。
原代码的问题
- 参数定义完全颠倒:需求是传入部门名称(IN参数,VARCHAR类型)、返回教师数量(OUT参数,INT类型),但原代码把IN设为int类型的
id,OUT设为VARCHAR类型的nombre,不符合需求。 - COUNT函数语法错误:
COUNT id缺少括号,正确写法应为COUNT(*)或COUNT(teacher_id)(若教师表主键为teacher_id)。 - 参数引用逻辑错误:原代码错误地用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); } }
代码说明
- 修正参数定义:IN参数
dept_name接收部门名称,OUT参数teacher_count返回统计的教师数量,类型符合需求。 - 修正COUNT语法:使用
COUNT(*)统计教师总数,语法正确。 - 调整子查询逻辑:用IN参数
dept_name匹配departments表的name字段,找到对应的dept_num,再统计teachers表中该部门的教师数量,最后将结果赋值给OUT参数teacher_count。
内容的提问来源于stack exchange,提问作者Enrique
相关产品推荐
相关产品推荐

