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

如何使用存储过程按入职日期查询员工表中多条符合条件的记录

问题修正方案

现有代码的核心问题

  • 字段不匹配:你自建的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 08:54:01