ORA-04098: 触发器 'SCOTT.TRI_INSERT_EMP' 无效且未通过重新验证 在线等!好急

weixin_41400530 2018-05-05 09:23:11
利用springmvc 来对Oracle 的emp表进行添加操作

一开始的报错是 ora- 00955 序列的问题 后来我创建了 seq_emp 序列是存在的,之后应该是没问题了,但现在出现了触发器的问题,困扰到现在
SQL 语句没有问题
在谷歌浏览器上也能跑出来 也能输入数据

但是输入完之后就报错了

初学jdbc 和spring 还忘大佬们指点
...全文
1575 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
卖水果的net 2018-05-07
  • 打赏
  • 举报
回复

-- 你的建表语句,我的触发器,没有问题的。
SQL> 
SQL> CREATE TABLE EMP
  2     (    EMPNO NUMBER(4,0),
  3      ENAME VARCHAR2(10),
  4      JOB VARCHAR2(9),
  5      MGR NUMBER(4,0),
  6      HIREDATE DATE,
  7      SAL NUMBER(7,2),
  8      COMM NUMBER(7,2),
  9      DEPTNO NUMBER(2,0),
 10       CONSTRAINT PK_EMP PRIMARY KEY (EMPNO));
Table created
SQL> create sequence seq_emp;
Sequence created
SQL> create trigger tri_insert_emp
  2  before insert on emp
  3  for each row
  4  begin
  5    :new.empno := seq_emp.nextval;
  6  end;
  7  /
Trigger created
SQL> insert into emp(ename) values('cc');
1 row inserted
SQL> insert into emp(ename) values('ff');
1 row inserted
SQL> select empno, ename from emp;
EMPNO ENAME
----- ----------
    1 cc
    2 ff
SQL> drop sequence seq_emp;
Sequence dropped
SQL> drop table emp purge;
Table dropped

SQL> 
卖水果的net 2018-05-06
  • 打赏
  • 举报
回复
因为你要给列赋值,所以要有赋值的动作,而 select 只是一个查询,尽管说你写了一个 into ,但是这个语法是错的。 4# 的语句,你先参考一下,有问题再来追问。
weixin_41400530 2018-05-06
  • 打赏
  • 举报
回复

  CREATE TABLE "SCOTT"."EMP" 
   (	"EMPNO" NUMBER(4,0), 
	"ENAME" VARCHAR2(10), 
	"JOB" VARCHAR2(9), 
	"MGR" NUMBER(4,0), 
	"HIREDATE" DATE, 
	"SAL" NUMBER(7,2), 
	"COMM" NUMBER(7,2), 
	"DEPTNO" NUMBER(2,0), 
	 CONSTRAINT "PK_EMP" PRIMARY KEY ("EMPNO")
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "USERS"  ENABLE, 
	 CONSTRAINT "FK_DEPTNO" FOREIGN KEY ("DEPTNO")
	  REFERENCES "SCOTT"."DEPT" ("DEPTNO") ENABLE
   ) SEGMENT CREATION IMMEDIATE 
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "USERS" 
 
卖水果的net 2018-05-06
  • 打赏
  • 举报
回复
把建表语句,发上来,要文本的。
weixin_41400530 2018-05-06
  • 打赏
  • 举报
回复
引用 8 楼 wmxcn2000 的回复:
因为你要给列赋值,所以要有赋值的动作,而 select 只是一个查询,尽管说你写了一个 into ,但是这个语法是错的。 4# 的语句,你先参考一下,有问题再来追问。
4#的语句执行后说已经存在触发器,所以我加了 or replace 执行成功后 程序还是报同样的错误
weixin_41400530 2018-05-06
  • 打赏
  • 举报
回复
也不是完全一样的报错 以前是 触发器SCOTT.TRI_INSERT_EMP 这一次是SCOTT.SCOTT.TRI_INSERT_EMP
  • 打赏
  • 举报
回复
into :new.empno from dual 就可以了,而且有触发器 不需要显示地,向那一类写入值
weixin_41400530 2018-05-05
  • 打赏
  • 举报
回复
以后会注意 不用图片用文本 我也是初学,身边的同学和我跑一样的程序都是创建序列后直接能够对数据库增添语句 我在创建后 就出现了触发器的问题 并不是想要测试触发器,因为正常来说不会出现触发器的报错 ,老师累的话 明天再指点我也行
卖水果的net 2018-05-05
  • 打赏
  • 举报
回复
引用 5 楼 weixin_41400530 的回复:
emp表是自带的 我没有创建过触发器,我一开始报错是02289 说是序列不存在 然后就创建了一个序列 创建完之后就是触发器的报错 我现在想要的就是通过jdbc 对数据库emp表插入一个数据
先看一下 4# 的语句, 有问题再来追问。 困。
卖水果的net 2018-05-05
  • 打赏
  • 举报
回复

你已经在前台代码中,使用了 seq_emp.nextval,就没有必要再用触发器生成 EMPNO 了

如果你想测试一下触发器的功能,要这样写

create trigger tri_insert_emp
before insert on emp
for each row
begin
  :new.empno := seq_emp.nextval;
end;
/

PS : 让你贴代码,要文本的,最好不要图片,更方便别人帮你解答。
卖水果的net 2018-05-05
  • 打赏
  • 举报
回复
你创建这个触发器的目的是什么呢? 就是一个查询吗?
weixin_41400530 2018-05-05
  • 打赏
  • 举报
回复
emp表是自带的 我没有创建过触发器,我一开始报错是02289 说是序列不存在 然后就创建了一个序列 创建完之后就是触发器的报错 我现在想要的就是通过jdbc 对数据库emp表插入一个数据
weixin_41400530 2018-05-05
  • 打赏
  • 举报
回复
卖水果的net 2018-05-05
  • 打赏
  • 举报
回复
把 emp 的建表语句,和建 trigger 语句,都发上来。

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧