Oracle 创建一个存储过程,用于接受和计算该部门的工资总额,并显示该部门和;工资总额

Oracle 创建一个存储过程,用于接受和计算该部门的工资总额,并显示该部门和;工资总额,oracle,oracle11g,Oracle,Oracle11g,我做错了什么 创建一个过程,该过程接受部门编号,计算该部门的基本工资总额,并显示部门编号和基本工资总额 第6行错误:PL/SQL:ORA-00933:SQL命令未正确结束 来自员工、部门 其中EMPLOYEES.DEPARTMENT\u ID=DEPARTMENTS.DEPARTMENT\u ID DBMS_OUTPUT.PUT_行(“*计算的总工资*”) 结束 / 如果DeptNum为30,下面的查询代码是否会执行以下操作?如果没有,我如何编写代码,根据上面的员工表计算每个部门的所有工资 接

我做错了什么

创建一个过程,该过程接受部门编号,计算该部门的基本工资总额,并显示部门编号和基本工资总额

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