【发布时间】:2015-10-09 16:43:37
【问题描述】:
我想在我的包体中编写一个更新程序。在我添加这个 IF 语句之前它工作正常。我想检查只有当新值与旧值不同时,我才更新它。否则,我不会更新它。然后我得到了这个错误:Error(39,22): PLS-00357: Table,View Or Sequence reference 'USER.TABLE_NAME.FIRSTNAME' not allowed in this context。以下是我的程序代码:
PROCEDURE updateTABLE (
v_code IN USER.TABLE_NAME.CODE%TYPE,
v_id IN USER.TABLE_NAME.ID%TYPE,
v_firstname IN USER.TABLE_NAME.FIRSTNAME%TYPE,
v_lastname IN USER.TABLE_NAME.LASTNAME%TYPE,
v_email IN USER.TABLE_NAME.EMAIL%TYPE,
v_phone IN USER.TABLE_NAME.PHONE%TYPE
) IS
BEGIN
IF USER.TABLE_NAME.FIRSTNAME != v_firstname OR
USER.TABLE_NAME.LASTNAME != v_lastname OR
USER.TABLE_NAME.EMAIL != v_email OR
USER.TABLE_NAME.PHONE != v_phone THEN
UPDATE USER.TABLE_NAME
SET FIRSTNAME = v_firstname,
LASTNAME = v_lastname,
EMAIL = v_email,
PHONE = v_phone,
SYS_LASTMODF_DTTM = sysdate
WHERE USER.TABLE_NAME.ID = v_id AND
USER.TABLE_NAME.CODE= v_code;
END IF;
COMMIT;
END updateTABLE;
想知道我应该如何解决它?在这里做了一些搜索,但没有找到我需要的。
【问题讨论】:
-
您可以检查
UPDATE语句的WHERE子句中的值。 -
BEGIN UPDATE USER.TABLE_NAME SET FIRSTNAME = v_firstname, LASTNAME = v_lastname, EMAIL = v_email, PHONE = v_phone, SYS_LASTMODF_DTTM = sysdate WHERE USER.TABLE_NAME.ID = v_id AND USER.TABLE_NAME.CODE= v_code AND (USER.TABLE_NAME.FIRSTNAME != v_firstname OR USER.TABLE_NAME.LASTNAME != v_lastname OR USER.TABLE_NAME.EMAIL != v_email OR USER.TABLE_NAME.PHONE != v_phone); COMMIT; -
完美运行~非常感谢!
-
如果您想了解更多,请搜索游标。你会发现你的初始来源没有意义。
-
而且,这段代码在触发器上更有意义。