Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PL/SQL中显示最大数量以及($)符号?_Sql_Oracle_Plsql - Fatal编程技术网

如何在PL/SQL中显示最大数量以及($)符号?

如何在PL/SQL中显示最大数量以及($)符号?,sql,oracle,plsql,Sql,Oracle,Plsql,下面是我当前的代码,我必须在两个填充的表department和employee上显示该代码 Employee Name: Johnshon Job: Service Writer Total Pay: $56,000 ======================================== Department Name: Service Highest Total Pay: $4,500.00 我很难获得最高的总薪酬来展示自己。我想我的

下面是我当前的代码,我必须在两个填充的表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;

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;
根据发布的代码,这个选择应该能让你找到你想要的东西——如果没有,稍微调整一下就可以了


分享和享受。

Bob将介绍您在
max
计算中遇到的问题;
v_dpay
变量可以声明为
employee.salary%TYPE
到maych
v_pay
,或声明为
NUMBER
或其他数字数据类型。你可以重复使用
v_pay
,但如果它有自己的变量,我想会更清楚

对于显示器,您需要:

使用
C
表示货币,如果您的NLS设置是针对美国(或使用该符号的其他国家!),则将为您提供
$
G
用于组分隔符,它将为您提供
D
用于十进制分隔符,它将为您提供
,同样基于NLS设置


一个可移植性较差的等价物是
“$99999999.99”
,但使用通用版本并不是一个坏习惯。

我在运行时仍会遇到此错误:“不是单个组函数”谢谢,但在使用此代码后,我不断收到错误:“不是单个组函数”嗯……试着按d.DEPARTMENT\u ID添加
组,看看这是否对您有所改善。他在同一个变量名中选择了变量名的Max(),所以我认为这里还有其他问题。Max(v\u dpay)?为什么要将一个未声明变量的最大值放入同一个变量中?是的,我在大约2小时后意识到它应该是最大值(薪水)。奥普斯
DBMS_OUTPUT.PUT_LINE('Highest Total Pay: ' || TO_CHAR(v_dpay, 'C999G999G999D99'));