Oracle 创建一个存储过程,用于接受和计算该部门的工资总额,并显示该部门和;工资总额
我做错了什么 创建一个过程,该过程接受部门编号,计算该部门的基本工资总额,并显示部门编号和基本工资总额 第6行错误:PL/SQL:ORA-00933:SQL命令未正确结束Oracle 创建一个存储过程,用于接受和计算该部门的工资总额,并显示该部门和;工资总额,oracle,oracle11g,Oracle,Oracle11g,我做错了什么 创建一个过程,该过程接受部门编号,计算该部门的基本工资总额,并显示部门编号和基本工资总额 第6行错误:PL/SQL:ORA-00933:SQL命令未正确结束 来自员工、部门 其中EMPLOYEES.DEPARTMENT\u ID=DEPARTMENTS.DEPARTMENT\u ID DBMS_OUTPUT.PUT_行(“*计算的总工资*”) 结束 / 如果DeptNum为30,下面的查询代码是否会执行以下操作?如果没有,我如何编写代码,根据上面的员工表计算每个部门的所有工资 接
接受部门编号
你做错的第一件事就是忽略了需求的这一方面。您需要编写一个过程,以获取部门编号,并使用
where
子句来限制从表中检索的内容。工资和部门编号都在EMPLOYEES
表中,因此无需在查询中包含DEPARTMENTS
表
查询中的错误有:
部门
表WHERE
子句按部门编号进行筛选选择
查询后需要一个分号CREATE OR REPLACE PROCEDURE Dept_Total_Salary (deptNum NUMBER)
AS
total_salary NUMBER(12, 2);
BEGIN
SELECT SUM(Salary)
INTO total_salary
FROM Employees
WHERE Department_ID = deptNum;
DBMS_OUTPUT.PUT_LINE('Department ' || deptNum || ' salary is ' || total_salary);
END;
编辑:忘记了
结束
后的分号,就在我指出你怎么漏掉了分号之后-哎哟 下面是我如何解决这个问题的
CREATE TABLE proTable -- create new table to store sum of sal for each dept
(deptno NUMBER,
sumSal NUMBER);
CREATE OR REPLACE PROCEDURE display_dept_sal_sum (v_deptno NUMBER)
AS
BEGIN
INSERT INTO proTable (deptno,SumSal)
SELECT v_deptno,SUM(sal)
FROM employees
WHERE deptno = v_deptno;
END;
EXECUTE display_dept_sal_sum(40);
SELECT * FROM proTable;
Oracle文档在这里可能会有所帮助:我不太确定,但可能是上面的代码缺少部门ID的参数,如:创建或替换过程DEPT\u TOTAL\u SALARY(department\u ID NUMBER)as…看起来您缺少一个
GROUP BY
子句。我看到至少四个错误,但是这里没有足够的信息给你答案。请张贴这两个表的结构,并指出哪个表/列包含部门编号。哇!!!!你的解释很透彻,很容易理解。非常感谢你。在我发布了DEPARTMENTS表之后,我意识到我不需要它。非常感谢。我没有正确执行。它工作得很好。非常感谢。
DeptNum Total_Salary
-------- ------------
30 34,200.00
CREATE OR REPLACE PROCEDURE Dept_Total_Salary (deptNum NUMBER)
AS
total_salary NUMBER(12, 2);
BEGIN
SELECT SUM(Salary)
INTO total_salary
FROM Employees
WHERE Department_ID = deptNum;
DBMS_OUTPUT.PUT_LINE('Department ' || deptNum || ' salary is ' || total_salary);
END;
CREATE OR REPLACE PROCEDURE Dept_Total_Salary (deptNum NUMBER)
AS
total_salary NUMBER(12, 2);
BEGIN
SELECT SUM(Salary)
INTO total_salary
FROM Employees
WHERE Department_ID = deptNum;
DBMS_OUTPUT.PUT_LINE('Department ' || deptNum || ' salary is ' || total_salary);
END;
CREATE TABLE proTable -- create new table to store sum of sal for each dept
(deptno NUMBER,
sumSal NUMBER);
CREATE OR REPLACE PROCEDURE display_dept_sal_sum (v_deptno NUMBER)
AS
BEGIN
INSERT INTO proTable (deptno,SumSal)
SELECT v_deptno,SUM(sal)
FROM employees
WHERE deptno = v_deptno;
END;
EXECUTE display_dept_sal_sum(40);
SELECT * FROM proTable;