【问题标题】:Oracle SQL - ORA-04079: invalid trigger insertOracle SQL - ORA-04079: 无效的触发器插入
【发布时间】:2020-05-11 18:32:45
【问题描述】:

我正在尝试创建一个触发器,该触发器在我在表“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)
 )    

【问题讨论】:

  • 你遇到什么错误?
  • ORA-04079:00000 - “无效的触发器规范”,*原因:create TRIGGER 语句无效。 *操作:检查语句的语法是否正确。
  • 首先,你应该使用 ':new' 而不是 'new'。
  • 其次,格式化你的代码,看起来很糟糕。
  • 好的,已编辑,谢谢。但我仍然有同样的问题。

标签: oracle plsql oracle11g


【解决方案1】:

触发器触发特定的事件;你的,在插入名为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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-02
    • 1970-01-01
    • 2013-07-08
    • 2021-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多