首页 > 解决方案 > 光标不打印任何数据 - 两个参数过程

问题描述

我有一项任务要解决。

创建一个程序,根据该程序列出在定义的期间(任何变量)内已经受雇一次的所有员工(job_history 表)。报告将说明:employee_id、first_name、last_name、start_date、end_date。

如果在给定期间没有雇员受雇,则处理该案例。

调用 1997 年至 2007 年的程序。

程序已编译,当我调用它时,答案是:PL/SQL 程序成功完成。但是我的数据库中没有数据。

我的代码在这里:

create or replace procedure zamestnanci
  (s_date in job_history.start_date%type, e_date in job_history.end_date%type)
is 
begin
  for cur_r in 
    (select employees.employee_id, employees.first_name, employees.last_name 
     from employees join job_history on employees.employee_id = job_history.employee_id
     where start_date = s_date and end_date = e_date
    )
  loop
    dbms_output.put_line(cur_r.employee_id ||', '|| cur_r.first_name ||', '|| cur_r.last_name ||', '||
     s_date ||', '|| e_date );
  end loop;
  exception when no_data_found then
            dbms_output.put_line('error');
end zamestnanci;

exec zamestnanci('01.01.97', '31.12.07');

你能帮我么?谢谢你。

标签: sqloracleplsqldatabase-cursor

解决方案


您的代码获取在 '01.01.97' 开始工作并在 '31.12.07' 离职的员工

试试下面的代码。还要注意日期格式

create or replace procedure zamestnanci
  (s_date in job_history.start_date%type, e_date in job_history.end_date%type)
is 
begin
  for cur_r in 
    (select employees.employee_id, employees.first_name, employees.last_name 
     from employees join job_history on employees.employee_id = job_history.employee_id
     where start_date between s_date and e_date
     or end_date between s_date and e_date
     or s_date between start_date and end_date
     or e_date between start_date and end_date
    )
  loop
    dbms_output.put_line(cur_r.employee_id ||', '|| cur_r.first_name ||', '|| cur_r.last_name ||', '||
     s_date ||', '|| e_date );
  end loop;
  exception when no_data_found then
            dbms_output.put_line('error');
end zamestnanci;

exec zamestnanci(to_date('01.01.1997', 'dd.mm.yyyy'), to_date('31.12.2007', 'dd.mm.yyyy')); 

推荐阅读