您对我的PLSQL包有什么注意事项?

时间:2016-12-08 15:54:32

标签: oracle function stored-procedures plsql package

我对我的代码有点怀疑,但昨天我终于理解了如何开始编写我的最终包项目的一些要点。如果您想建议我执行一些更改或者有关我的软件包的任何内容,我会分享此代码的目的,我将非常感谢。

memberID

另外,我有一个小问题:当我在一个程序中使用一个函数时,我可以重新调整" RETURN"只有发送到调用程序信息的功能的句子?

SELECT email FROM members WHERE email = :email AND memberID != :memberID

当我使用简单记录更新我在控制台信息中收到的所有员工有关函数的返回信息和有关DBMS程序的信息。我可以更改我的代码以仅接收控制台上的过程信息吗?谢谢!

CREATE OR REPLACE PACKAGE BODY emp_upd_pkg IS

  -- Function to update commission of employee --
  FUNCTION comm_upd(
    p_empid employees.employee_id%TYPE)
    RETURN employees.commission_pct%TYPE
  IS
  v_oldcomm employees.commission_pct%TYPE;
  v_newcomm employees.commission_pct%TYPE;
BEGIN
  -- Valid parameter --
  SELECT commission_pct
  INTO   v_oldcomm
  FROM   employees
  WHERE  employee_id = p_empid;

  IF
    v_oldcomm IS NOT NULL THEN
      UPDATE    employees
      SET       commission_pct = commission_pct * 1.1
      WHERE     employee_id    = p_empid
      RETURNING commission_pct
      INTO      v_newcomm;

      RETURN    v_newcomm;
  ELSE
    /*UPDATE    employees
    SET       commission_pct = 0.1
    WHERE     employee_id    = p_empid
    RETURNING commission_pct
    INTO      v_newcomm;

    RETURN    v_newcomm;*/
    RETURN (0);
  END IF;
EXCEPTION
  WHEN NO_DATA_FOUND THEN
       RETURN (0);
  END comm_upd;

  -- Function to update salary of employee --
  FUNCTION sal_upd(
    p_empid employees.employee_id%TYPE)
  RETURN employees.salary%TYPE
  IS
  v_oldsal   employees.salary%TYPE;
  v_newsal   employees.salary%TYPE;
BEGIN
  -- Valid parameter --
  SELECT salary
  INTO   v_oldsal
  FROM   employees
  WHERE  employee_id = p_empid;

  IF
    v_oldsal IS NOT NULL THEN
      UPDATE    employees
      SET       salary      = salary + 100
      WHERE     employee_id = p_empid
      RETURNING salary
      INTO      v_newsal;

      RETURN v_newsal;
  END IF;
EXCEPTION
  WHEN NO_DATA_FOUND THEN
       RETURN (0);
  END sal_upd;

  -- Procedure to update comm and sal using package functions --
  PROCEDURE commsal_upd(
    p_empid employees.employee_id%TYPE)
  IS
    v_newcomm employees.commission_pct%TYPE;
    v_newsal  employees.salary%TYPE;
  BEGIN
    -- Call package functions to update sal and comm of all employees --
    DBMS_OUTPUT.PUT_LINE(comm_upd(p_empid));
    DBMS_OUTPUT.PUT_LINE(sal_upd(p_empid));

    -- Query for final inform --
    SELECT commission_pct, salary
    INTO   v_newcomm, v_newsal
    FROM   employees
    WHERE  employee_id = p_empid;

    DBMS_OUTPUT.PUT_LINE('THE NEW COMMISSION FOR EMPLOYEE' || p_empid ||
      ' IS ' || v_newcomm || ' AND THE NEW SALARY IS ' || v_newsal);
  EXCEPTION
    WHEN NO_DATA_FOUND THEN
      DBMS_OUTPUT.PUT_LINE('NO EXISTE EMPLEADO INGRESADO');
  END commsal_upd;

END emp_upd_pkg;

0 个答案:

没有答案