以下是我当前的代码,我必须在两个名为department和employee的填充表中显示。
Employee Name: Johnshon
Job: Service Writer
Total Pay: $56,000
========================================
Department Name: Service
Highest Total Pay: $4,500.00
我在获得最高总薪水方面遇到了问题。我想我的问题可能是我宣布另一个变量名称v_dpay。我不确定我是否需要。我很确定我应该使用MAX来获得部门中最高的总薪酬。我在输出中将($)和(,)实现到两位小数时也遇到了一些问题。
ACCEPT p_1 PROMPT 'Please enter the Employee ID:'
DECLARE
v_eid employee.employee_id%TYPE := &p_1;
v_count NUMBER;
v_name employee.employee_name%TYPE;
v_job employee.job%TYPE;
v_pay employee.salary%TYPE;
v_did department.department_id%TYPE;
v_dname department.department_name%TYPE;
v_dpay ?????????????????????????????????
BEGIN
SELECT COUNT(*)
INTO v_count
FROM employee
WHERE employee_id = v_eid;
IF v_count = 0 THEN
DBMS_OUTPUT.PUT_LINE(v_eid || ' is not in the employee table.');
ELSE
select employee_name, job, salary + NVL(commission, 0), department_id
into v_name, v_job, v_pay, v_did
from employee
where employee_id = v_eid;
DBMS_OUTPUT.PUT_LINE('Employee Name: ' || v_name);
DBMS_OUTPUT.PUT_LINE('Job: ' || v_job);
DBMS_OUTPUT.PUT_LINE('Total Pay: ' || v_pay);
if v_did is not null then
select department_name, MAX(v_dpay)
into v_dname, v_dpay
from department, employee
where department_id = v_did;
DBMS_OUTPUT.PUT_LINE('Department Name: ' || v_dname);
DBMS_OUTPUT.PUT_LINE('Highest Total Pay: ' || v_dpay);
else
DBMS_OUTPUT.PUT_LINE('N/A');
end if;
END IF;
END;
答案 0 :(得分:1)
取v_dpay
的最大值只会给你...... v_dpay
的值。我怀疑这不是你想要的。也许以下内容可能有所帮助:
SELECT d.DEPARTMENT_NAME, MAX(e.SALARY + NVL(e.COMMISSION, 0))
INTO v_dname, v_dpay
FROM DEPARTMENT d
INNER JOIN EMPLOYEE e
ON (e.DEPARTMENT_ID = d.DEPARTMENT_ID)
WHERE d.DEPARTMENT_ID = v_did;
根据发布的代码,这个SELECT应该可以帮到你找到你想要的东西 - 如果它没有一点调整就应该这样做。
分享并享受。
答案 1 :(得分:1)
鲍勃已经涵盖了max
计算出错的地方; v_dpay
变量冷被声明为employee.salary%TYPE
到maych v_pay
,或NUMBER
或其他数字数据类型。您可以重复使用v_pay
,但如果它有自己的变量,我会更清楚。
对于显示器,您需要TO_CHAR(number)
function:
DBMS_OUTPUT.PUT_LINE('Highest Total Pay: ' || TO_CHAR(v_dpay, 'C999G999G999D99'));
format model使用C
代表货币,如果您的NLS设置适用于美国(或使用该符号的其他国家/地区),则会为您$
; G
用于小组分隔符,它会为您提供,
和D
小数点分隔符,再次根据您的NLS设置为您提供.
。
不太便携的等价物是'$999,999,999.99'
,但使用通用版本并不是一个坏习惯。