PL / SQL循环/批量输出

时间:2015-02-14 15:18:09

标签: sql oracle plsql

我正在学习PL / SQL并尝试编写一些代码来计算表中所有员工的薪水,年薪税和月税 然后基本上将每个员工的信息输出到屏幕

我做了一些研究,并了解了plsql中的批量函数。我目前无法立即测试代码,但这会有效吗?我错过了什么吗?

我真正想要的是,如果有更简单的方法可以做到这一切。

SET serveroutput ONDECLARE
TYPE t_employee_test
IS
  TABLE OF employee%ROWTYPE;
  b_firstname T_EMPLOYEE_TEST;
  b_lastname T_EMPLOYEE_TEST;
  b_salary T_EMPLOYEE_TEST;
  yr_salary HR,employees.salary%TYPE;
  name  VARCHAR2(100);
  taxes NUMBER(7,2);
  sal hr.employees.salary%TYPE;
BEGIN
  SELECT salary,
         firstname
                || ' '
                || lastname bulk collect
  INTO   b_salary,
         b_name
  FROM   employees;

  FOR indx IN 1 .. b_name.count
  LOOP
    yr_salary:= B_salary(indx) * 12 taxes := yr_salary(indx) * 0.25;
    csal := L_salary(indx)     * 0.25;
    dbms_output.put_line(‘employee: ‘
    || name
    || ’ monthly salari tax
  IS
    : ‘
    || taxes);
    dbms_output.put_line(‘25 % OF employee: ‘
    || name
    || ’salary
  IS
    : ‘
    || csal);
    dbms_output.put_line(‘employee: ‘
    || name
    || ’ has a yearly salary OF ‘
    || yr_sal);
  END LOOP;
END;

2 个答案:

答案 0 :(得分:2)

您不需要此任务的集合。使用光标并打印出所需的值更容易,例如:

begin
   for r_emp in (select salary * 0.25 salary_tax
                 , first_name || ' ' || last_name name
                 , salary * 12 yearly_salary
                 from employees )
   loop
      dbms_output.put_line(‘employee: ‘ || r_emp.name || ’ monthly salary tax is : ‘ || r_emp.salary_tax);
      dbms_output.put_line(‘employee: ‘ || r_emp.name || ’ has a yearly salary of ‘ || r_emp.yearly_salary);
   end loop;
end;

答案 1 :(得分:0)

了解您的代码是否正常运行的唯一方法是按照您的想法/希望进行尝试。即使是有经验的程序员也会拥有他们认为有效的代码,然后在他们尝试时会弹出错误/错误。 :-)

关于你的代码。如果您想为表中的每个成员执行操作,您还可以创建一个获取所需信息的游标。然后,您可以使用记录逐个获取信息并使用它做任何事情。

链接:Cursor and Records