Oracle SQL - 仅更新过程非空值

use*_*514 1 sql oracle-sqldeveloper

我有一个简单的更新过程。因此,我希望更新它们不是空值的字段。我该怎么做?

  PROCEDURE UpdateCustomerInfo(
      CustomerID                 IN NUMBER,
      CustomerType                 IN VARCHAR2,
      CustomerName        IN VARCHAR2,
      CustomerGender          IN VARCHAR2,
      CustomerBirthday        IN DATE)
  AS
  BEGIN
    UPDATE CUSTOMER_INFO
    SET CUSTOMER_TYPE =CustomerType,
     CUSTOMER_NAME =CustomerName,
     CUSTOMER_GENDER =CustomerGender,
     CUSTOMER_BIRTHDAY =CustomerBirthday
    WHERE CUSTOMER_ID = CustomerID;
    COMMIT;

  END CUSTOMER_INFO
Run Code Online (Sandbox Code Playgroud)

有人可以帮助我吗?

谢谢

Jus*_*ave 5

UPDATE CUSTOMER_INFO
   SET CUSTOMER_TYPE     = NVL(CustomerType, CUSTOMER_TYPE),
       CUSTOMER_NAME     = NVL(CustomerName, CUSTOMER_NAME),
       CUSTOMER_GENDER   = NVL(CustomerGender, CUSTOMER_GENDER),
       CUSTOMER_BIRTHDAY = NVL(CustomerBirthday, CUSTOMER_BIRTHDAY)
 WHERE CUSTOMER_ID = CustomerID;
Run Code Online (Sandbox Code Playgroud)

应该这样做。NVL如果第一个参数是 ,该函数将返回第二个参数NULL。因此,如果CustomerType参数为NULL,则该CUSTOMER_TYPE列将更新为已有的值。您仍在进行更新(例如生成重做),但没有更改数据。