如何在($)符号中显示PL / SQL中的最高金额?

时间:2013-04-17 21:10:53

标签: sql oracle plsql

以下是我当前的代码,我必须在两个名为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;

2 个答案:

答案 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',但使用通用版本并不是一个坏习惯。