PLS-00357:此上下文中不允许表、视图或序列引用
Posted
技术标签:
【中文标题】PLS-00357:此上下文中不允许表、视图或序列引用【英文标题】:PLS-00357: Table,View Or Sequence reference not allowed in this context 【发布时间】: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;
完美运行~非常感谢!
如果您想了解更多,请搜索游标。你会发现你的初始来源没有意义。
而且,这段代码在触发器上更有意义。
【参考方案1】:
答案在评论里,我只是想把它放在这里,以防以后有人需要。
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;
【讨论】:
以上是关于PLS-00357:此上下文中不允许表、视图或序列引用的主要内容,如果未能解决你的问题,请参考以下文章
检查是不是存在 PLS-00405:在此上下文中不允许子查询