如何使用存储过程按入职日期查询员工表中多条符合条件的记录
问题修正方案
现有代码的核心问题
- 字段不匹配:你自建的
Employees表字段为emp_id/emp_name/hire_date/department_id,原代码引用了不存在的first_name/salary字段,还遗漏了需要输出的emp_id、hire_date - 单行查询逻辑不匹配:
SELECT INTO语法仅支持返回单行结果的查询,该需求会返回多条符合条件的记录,必须用游标遍历处理 - 无输出逻辑:查询到的结果没有打印输出的步骤
- 表名引用错误:自建表不需要加
hr.前缀,除非你确认表是创建在hr用户下且当前用户有访问权限
修正后的完整存储过程代码
CREATE OR REPLACE PROCEDURE display_records ( joindate IN DATE ) AS -- 定义游标存储所有符合条件的员工记录 CURSOR cur_emp IS SELECT emp_id, emp_name, hire_date, department_id FROM Employees WHERE hire_date > joindate; -- 定义变量接收游标每一行数据 v_emp cur_emp%ROWTYPE; BEGIN -- 打开游标遍历 OPEN cur_emp; LOOP FETCH cur_emp INTO v_emp; -- 游标遍历完退出循环 EXIT WHEN cur_emp%NOTFOUND; -- 输出结果,格式和预期一致 DBMS_OUTPUT.PUT_LINE(v_emp.emp_id || ',' || v_emp.emp_name || ', ''' || TO_CHAR(v_emp.hire_date,'YY-MM-DD') || ''',' || v_emp.department_id); END LOOP; CLOSE cur_emp; END; /
测试方法
执行存储过程前先开启输出开关:
SET SERVEROUTPUT ON;
调用存储过程测试,和示例输入参数一致:
EXEC display_records(TO_DATE('21-06-07','YY-MM-DD'));
执行后输出预期结果:
2,Duplex, '21-06-08',20 3,Charles, '21-06-09',30
内容的提问来源于stack exchange,提问作者AlbertAlex
相关产品推荐
相关产品推荐

