Oracle SQL-仅更新过程非空值

Oracle SQL-仅更新过程非空值,sql,oracle-sqldeveloper,Sql,Oracle Sqldeveloper,我有一个简单的更新程序。因此,我只想更新字段,它们不是空值。我怎么做 PROCEDURE UpdateCustomerInfo( CustomerID IN NUMBER, CustomerType IN VARCHAR2, CustomerName IN VARCHAR2, CustomerGender IN VARCHAR2, Cus

我有一个简单的更新程序。因此,我只想更新字段,它们不是空值。我怎么做

  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
有人能帮我吗

谢谢

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


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

是否要避免对字段进行更新?还是要避免更改值?因此,如果表中的
CUSTOMER\u birth
为空,并且传入了1986年1月12日的
CustomerBirthday
,您不想更新表吗?这似乎很奇怪。也许您的意思是,如果传递给过程调用的参数值为非NULL,您只想更改数据?我还不明白为什么您的
CustomerBirthday
时间戳
而不是
日期
——您似乎不太可能真正要求客户提供毫秒的出生日期。您好,这个SP是一个简单的示例,是的,时间戳是错误的:)如果变量CustomerGender,CustomerBirthday或其中任何一个值为null,我不想更新,不希望这些值显示为null。你明白吗?你想避免更新吗?还是要避免更改列中的值?我猜您只是想避免更改列中的值。但您可能试图避免更新列(甚至更新到相同的值),以避免编写重做的成本,或避免进行需要复制到某个位置的更改。我希望避免更改列中的值。但不知道怎么做。是否要避免对字段进行更新?还是要避免更改值?因此,如果表中的
CUSTOMER\u birth
为空,并且传入了1986年1月12日的
CustomerBirthday
,您不想更新表吗?这似乎很奇怪。也许您的意思是,如果传递给过程调用的参数值为非NULL,您只想更改数据?我还不明白为什么您的
CustomerBirthday
时间戳
而不是
日期
——您似乎不太可能真正要求客户提供毫秒的出生日期。您好,这个SP是一个简单的示例,是的,时间戳是错误的:)如果变量CustomerGender,CustomerBirthday或其中任何一个值为null,我不想更新,不希望这些值显示为null。你明白吗?你想避免更新吗?还是要避免更改列中的值?我猜您只是想避免更改列中的值。但您可能试图避免更新列(甚至更新到相同的值),以避免编写重做的成本,或避免进行需要复制到某个位置的更改。我希望避免更改列中的值。但不知道怎么办。
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;