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;