有人可以帮我修复错误 pls-00049 吗?

Posted

技术标签:

【中文标题】有人可以帮我修复错误 pls-00049 吗?【英文标题】:Can someone help me to fix an error pls-00049? 【发布时间】:2021-04-08 09:53:56 【问题描述】:

我为我的 Oracle 任务创建了一个触发器,但出现了一些错误,我正在尝试解决但不知道如何解决。我正在寻找修复我的错误,但我没有找到有用的解决方案 请问有人可以帮我做吗?

这是我的代码:

   create table sourcetablename_log (
    id  number, 
    operation_date date,
    old_username varchar2(20),
    new_username varchar2(20),
    old_first_name varchar2(20),
    new_first_name varchar2(20),
    old_last_name varchar2(20),
    new_last_name varchar2(20),
    action varchar2(20),
    author varchar2(20)
    );

    create or replace trigger src_log 
    before insert or delete or update on sourcetablename_log
    for each row
    begin
    if inserting then 
    insert into sourcetablename_log(id, operation_date, new_username,  new_firstname, new_lastname)
    values (:new.id, sysdate, :new.username, :new.firstname, :new.lastname);
    elsif updating then 
    insert into sourcetablename_log(id, operation_date, old_username, new_username, old_firstname, new_firstname, old_lastname, new_lastname)
    values (:new.id, sysdate, :old.username, :new.username, :old.firstname, :new.firstname, :old.lastname, :new.lastname);
    elsif deleting then 
    insert into sourcetablename_log(id, operation_date, old_username, new_username, old_firstname, new_firstname, old_lastname, new_lastname)
    values (:new.id, sysdate, :old.username, :new.username, :old.firstname, :new.firstname, :old.lastname, :new.lastname);
    end if;
    end src_log;

这是一个错误:

LINE/COL  ERROR
--------- -------------------------------------------------------------
4/27      PLS-00049: bad bind variable 'NEW.USERNAME'
4/42      PLS-00049: bad bind variable 'NEW.FIRSTNAME'
4/58      PLS-00049: bad bind variable 'NEW.LASTNAME'
7/27      PLS-00049: bad bind variable 'OLD.USERNAME'
7/42      PLS-00049: bad bind variable 'NEW.USERNAME'
7/57      PLS-00049: bad bind variable 'OLD.FIRSTNAME'
7/73      PLS-00049: bad bind variable 'NEW.FIRSTNAME'
7/89      PLS-00049: bad bind variable 'OLD.LASTNAME'
7/104     PLS-00049: bad bind variable 'NEW.LASTNAME'
10/27     PLS-00049: bad bind variable 'OLD.USERNAME'
10/42     PLS-00049: bad bind variable 'NEW.USERNAME'
10/57     PLS-00049: bad bind variable 'OLD.FIRSTNAME'
10/73     PLS-00049: bad bind variable 'NEW.FIRSTNAME'
10/89     PLS-00049: bad bind variable 'OLD.LASTNAME'
10/104    PLS-00049: bad bind variable 'NEW.LASTNAME'
Errors: check compiler log

我的问题是:

自动创建日志表并与之关联触发器 A 创建一个存储过程,该过程创建一个 LOGGING 表,其中包含 OLD 值和 NEW 值的相应列,ACTION 列,应按 ACTION 类型和用户名填写(作者) 示例:您有一个用户表 USER,其中包含下一列:

    用户名 VARCHAR FIRST_NAME VARCHAR LAST_NAME VARCHAR

您的过程应该生成一个名为“SOURCETABLENAME”_LOG 的新表 - 在这种情况下 - USER_LOG 和下一个列:

    ID NUMBER [或 OPERATION_ID NUMBER] OPERATION_DATE 日期 OLD_USERNAME VARCHAR NEW_USERNAME VARCHAR OLD_FIRST_NAME VARCHAR NEW_FIRST_NAME VARCHAR OLD_LAST_NAME VARCHAR NEW_LAST_NAME VARCHAR ACTION VARCHAR 作者 VARCHAR**

【问题讨论】:

我会假设您还没有显示另一个表sourcetable。我希望您的意思是定义在修改sourcetable 以将数据插入sourcetable_log 时触发的触发器。您已经在sourcetable_log 上定义了触发器,但您引用了usernamelastnamesourcetable_log 中不存在的列。我假设它们存在于sourcetable 您确定要触发on sourcetablename_log 吗?当它插入该表时,它是否应该在其他表上,例如on sourcetablename? 我没有其他桌子。我应该创建它吗? "你有一个表 USER" - 所以你的触发器应该是 on user? (除了user 是保留字...)听起来这应该是一个过程,它采用现有表的名称并根据该表中的列创建日志表和触发器。在示例中,日志表应称为user_log。您似乎错过了任务的几个步骤。我猜你目前正在学习动态 SQL? 我以用户身份创建了表 sourcetablename,但仍然出现这些错误。 【参考方案1】:

如果列名是例如new_username,那么你会使用:new.new_username,而不仅仅是:new.username

所有其他列也是如此。

例如:

insert into sourcetablename_log(id, operation_date, new_username,  new_firstname, new_lastname)
    values (:new.id, sysdate, :new.new_username, :new.new_firstname, :new.new_lastname);

【讨论】:

这些列名似乎是正确的,而触发器表名是错误的——因为它插入到定义触发器的同一个表中 对,@Alex,没有注意到这一点。看起来ON SOURCETABLENAME_LOG 是错误的,应该是其他表。 所以,据我所知,我需要创建新表或什么? 您正在将“某个表”上的更改记录到 SOURCETABLENAME_LOG 中。是哪张桌子?有一个日志表和一个基于同一个日志表的触发器是没有用的。您没有 SOURCETABLENAME 本身吗? 哦,好吧,我没有。谢谢。

以上是关于有人可以帮我修复错误 pls-00049 吗?的主要内容,如果未能解决你的问题,请参考以下文章

Oracle SQL 错误 PLS-00049:错误的绑定变量 'NEW.NOOFCUSTOMERS'

条件 old 不等于 new 的 Oracle 触发器以错误 PLS-00049、PL/SQL: ORA-00933 结束

PLS-00049 不良绑定变量 [关闭]

pl/sql 绑定错误

有人可以帮我修复这个 Xcode 的 UICollection 吗?

有人可以帮我修复我的 android AsyncTask 吗?