Oracle SQL - ORA-04079:触发器插入无效



我正在尝试创建一个触发器,当我插入表"cuenta"并在表"cuenta_log"中插入时运行,此插入的值之一是通过接受输入获取的。

create or replace trigger trigger_new_account                
AFTER INSERT ON cuenta  FOR EACH ROW
accept vstring prompt "Please enter your name: ";
declare v_line varchar2(50);
begin
v_line:= 'Hello '||'&vstring';
insert into cuentas_log (fecha,cuenta,cliente)
values (now(),:new.idcuenta,v_line);
end;

cuenta_log结构是这样的:

cuenta_log 
("FECHA"   DATE DEFAULT (sysdate), 
"CUENTA"  NUMBER(38,0),   
"CLIENTE" VARCHAR2(50 BYTE)
)    

在某个事件上触发触发;你的,在插入名为cuenta的表中后触发。它不与最终用户交互工作。你不能指望它会提示任何人输入任何东西。此外,accept是一个SQL*Plus命令,它在PL/SQL中不起作用。

因此,您可能已经执行以下操作:首先示例表:

SQL> create table cuenta (fecha date, cuenta number);
Table created.
SQL> create table cuenta_log (fecha date, cuenta number, cliente varchar2(30));
Table created.

触发:

SQL> create or replace trigger trigger_new_account
2    after insert on cuenta
3    for each row
4  begin
5    insert into cuenta_log(fecha, cuenta, cliente)
6    values
7    (sysdate, :new.cuenta, 'Hello ' || user);
8  end;
9  /
Trigger created.

测试:

SQL> insert into cuenta (fecha, cuenta) values (sysdate, 100);
1 row created.
SQL> select * From cuenta;
FECHA                   CUENTA
------------------- ----------
11.05.2020 12:31:17        100
SQL> select * From cuenta_log;
FECHA                   CUENTA CLIENTE
------------------- ---------- ------------------------------
11.05.2020 12:31:17        100 Hello SCOTT
SQL>

最新更新