0

下面是我当前的代码,其中我必须显示在两个名为部门和员工的填充表上。

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;
4

2 回答 2

1

Bob 已经涵盖了您在max计算中出错的地方;v_dpay变量冷被声明为maychemployee.salary%TYPEv_payasNUMBER或其他数字数据类型。您可以重复使用v_pay,但我认为如果它有自己的变量会更清楚。

对于显示,您需要以下TO_CHAR(number)功能

DBMS_OUTPUT.PUT_LINE('Highest Total Pay: ' || TO_CHAR(v_dpay, 'C999G999G999D99'));

格式模型用于C表示货币,如果您的$NLS 设置适用于美国(或使用该符号的其他国家!),它将告诉您;G对于将为您提供的组分隔符和将为您,提供D的小数分隔符.,再次基于您的 NLS 设置。

不太便携的等价物是'$999,999,999.99',但使用通用版本并不是一个坏习惯。

于 2013-04-17T22:52:29.683 回答
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 应该可以为您提供您正在寻找的东西 - 如果它没有一点点调整就应该这样做。

分享和享受。

于 2013-04-17T22:10:41.180 回答