我正在学习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;
答案 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)
了解您的代码是否正常运行的唯一方法是按照您的想法/希望进行尝试。即使是有经验的程序员也会拥有他们认为有效的代码,然后在他们尝试时会弹出错误/错误。 :-)
关于你的代码。如果您想为表中的每个成员执行操作,您还可以创建一个获取所需信息的游标。然后,您可以使用记录逐个获取信息并使用它做任何事情。