Sql 光标不显示';t打印任何数据-双参数程序

Sql 光标不显示';t打印任何数据-双参数程序,sql,database,oracle,plsql,cursor,Sql,Database,Oracle,Plsql,Cursor,我有一个任务要解决 创建一个程序,根据该程序,将列出在定义的期间(任何变量)内已经雇佣过一次的所有员工(职务历史记录表)。报告将说明:员工id、姓名、姓氏、开始日期、结束日期 如果在给定时间段内没有雇员受雇,则处理该情况 调用1997年至2007年的程序 编译过程,当我调用它时,答案是:PL/SQL过程成功完成。但我的数据库里没有数据 我的代码在这里: create or replace procedure zamestnanci (s_date in job_history.start_d

我有一个任务要解决

创建一个程序,根据该程序,将列出在定义的期间(任何变量)内已经雇佣过一次的所有员工(职务历史记录表)。报告将说明:员工id、姓名、姓氏、开始日期、结束日期

如果在给定时间段内没有雇员受雇,则处理该情况

调用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');

你能帮帮我吗?谢谢。

您的代码将获取在'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')); 

在IDE中启用DMBS输出,您应该能够在运行过程后在编辑器窗口中看到put_行语句。dbms_输出是否工作,例如
dbms_输出。put_行('Hello')
?还是只是这个程序?您能在调试器中跟踪它并查看它是否进入循环吗?顺便说一句,
exception当找不到任何数据时,dbms\u output.put\u line('error')不会被调用,因为没有
select-into
或collection-lookup,如果有,这确实不是处理它的最佳方法。是
start\u-date
end\u-date
日期吗?还是字符串?您正在传递字符串,但名称暗示它们应该是日期。是否真的有1997年1月1日开始工作,2007年12月31日离开的员工?似乎不太可能。这个问题要求在规定的时间间隔内的某个时间点受雇的任何人——思考可能发生的潜在方式。一种方法是开始日期在1997-01-01之前,结束日期在1997-01-01之后(或根据数据模型的工作方式而丢失)。还有其他一些条件需要解释。@WiliamRobertson-谢谢。是的,dbms_输出工作正常,只是这个过程。我不知道如何在调试器中跟踪它。谢谢,它是有效的:)@developer如果它有效,你为什么不接受这个答案,@Kristina?