有人可以帮我修复错误 pls-00049 吗?
Can someone help me to fix an error pls-00049?
我已经为我的 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
我的问题是:
自动创建日志记录 table 并与之相关联触发器 A 创建一个存储过程,该过程创建一个 LOGGING table,其中包含对应的旧值列和新值列,ACTION 列,应该被填充通过 ACTION 类型和用户名 (AUTHOR)
示例:您有 table 个 USER 用户,下一列为:
- 用户名 VARCHAR
- FIRST_NAME VARCHAR
- LAST_NAME VARCHAR
您的程序应该生成一个新的 table,名称为“SOURCETABLENAME”_LOG - 在本例中 - USER_LOG 以及下一列:
- 身份证号码[或OPERATION_ID号码]
- OPERATION_DATE日期
- OLD_USERNAME VARCHAR
- NEW_USERNAME VARCHAR
- OLD_FIRST_NAME VARCHAR
- NEW_FIRST_NAME VARCHAR
- OLD_LAST_NAME VARCHAR
- NEW_LAST_NAME VARCHAR
- 动作变量
- 作者 VARCHAR**
如果列名是例如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);
我已经为我的 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
我的问题是:
自动创建日志记录 table 并与之相关联触发器 A 创建一个存储过程,该过程创建一个 LOGGING table,其中包含对应的旧值列和新值列,ACTION 列,应该被填充通过 ACTION 类型和用户名 (AUTHOR) 示例:您有 table 个 USER 用户,下一列为:
- 用户名 VARCHAR
- FIRST_NAME VARCHAR
- LAST_NAME VARCHAR
您的程序应该生成一个新的 table,名称为“SOURCETABLENAME”_LOG - 在本例中 - USER_LOG 以及下一列:
- 身份证号码[或OPERATION_ID号码]
- OPERATION_DATE日期
- OLD_USERNAME VARCHAR
- NEW_USERNAME VARCHAR
- OLD_FIRST_NAME VARCHAR
- NEW_FIRST_NAME VARCHAR
- OLD_LAST_NAME VARCHAR
- NEW_LAST_NAME VARCHAR
- 动作变量
- 作者 VARCHAR**
如果列名是例如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);