Oracle pl/sql语句被忽略,缺少右括号

Oracle pl/sql语句被忽略,缺少右括号,oracle,plsql,Oracle,Plsql,此代码必须计算部门id为100的员工的工资总额。因此,它给出了此错误“缺少右括号” “缺少右括号”错误显然是由子查询中的orderby子句引起的(不允许) 清除该错误后,会出现“值太多”错误,因为您将单个变量(salary)与返回两个值(department\u id和sum(salary))的子查询的输出进行比较。不确定您为什么认为需要在子查询的SELECT子句中包含department\u id 当您在问题中包含错误消息时,请包含消息的全文(显示错误发生的行号和位置-一个重要的细节!) 一小

此代码必须计算部门id为100的员工的工资总额。因此,它给出了此错误“缺少右括号”

“缺少右括号”错误显然是由子查询中的
orderby
子句引起的(不允许)

清除该错误后,会出现“值太多”错误,因为您将单个变量(
salary
)与返回两个值(
department\u id
sum(salary)
)的子查询的输出进行比较。不确定您为什么认为需要在子查询的
SELECT
子句中包含
department\u id

当您在问题中包含错误消息时,请包含消息的全文(显示错误发生的行号和位置-一个重要的细节!)

一小步一小步地走。暂时忘记PL/SQL;您是否能够用SQL编写正确的查询,该查询将返回部门名称、经理姓名以及该部门所有员工的工资总额?如果您能够做到这一点,那么围绕它的PL/SQL就很容易了

以下是在一条SQL语句中获取所有值的一种方法:

select   d.department_name,
         m.first_name || ' ' || m.last_name as manager_name,
         sum(e.salary) as sum_salary
from     departments d
         join
         employees   m   on d.manager_id    = m.employee_id
         join
         employees   e   on d.department_id = e.department_id
where    d.department_id = 100
group by d.department_id, d.department_name, m.first_name, m.last_name
;

DEPARTMENT_NAME  MANAGER_NAME     SUM_SALARY
---------------  ---------------  ----------
Finance          Nancy Greenberg       51608

也许80%编写好的PL/SQL代码仅仅是编写好的、高效的SQL语句。如果您对此查询有任何困难,您可能需要在接下来的几天或几周内花费大部分时间编写SQL语句;当您觉得这个查询(在我的回答中)是“简单”、“容易”、“标准”(就是这样!)时,请返回PL/SQL这让我想起了这篇文章。你的问题非常非常接近。正如mathguy断言的,子查询中不能有ORDERBY子句。此外,子查询中的department_id列不应该存在(而且是不必要的)。您应该使用
in
操作符与子查询进行比较。在许多方面,这是一个重复。可能是
select   d.department_name,
         m.first_name || ' ' || m.last_name as manager_name,
         sum(e.salary) as sum_salary
from     departments d
         join
         employees   m   on d.manager_id    = m.employee_id
         join
         employees   e   on d.department_id = e.department_id
where    d.department_id = 100
group by d.department_id, d.department_name, m.first_name, m.last_name
;

DEPARTMENT_NAME  MANAGER_NAME     SUM_SALARY
---------------  ---------------  ----------
Finance          Nancy Greenberg       51608