问题:oracle触发器无效且未通过重新验证;结果:触发器里面没有加分号(;)

oracle无效且未通过重新验证

代码如下:

SQL code如下:

--创建中国地图表

create table  china_address

(

       id number not null primary key,

       address_name varchar2(30) not null,

       parent_address_id number ,

       foreign key(parent_address_id) references china_address(id)

);              

--创建中国地图序列

create sequence china_address_sequ

minvalue 1

maxvalue 10000

start with 1

increment by 1

nocycle

cache 5;

--创建中国地图主键自增长触发器

create trigger china_address_increase_tr before

insert on china_address for each row

begin

  select china_address_sequ.nextval into:new.id from dual

end china_address_increase_tr;

修改如下:

CREATE OR REPLACE TRIGGER CHINA_ADDRESS_INCREASE_TR BEFORE

INSERT ON CHINA_ADDRESS FOR EACH ROW

BEGIN

  SELECT CHINA_ADDRESS_SEQU.NEXTVAL INTO:NEW.ID FROM DUAL;

END CHINA_ADDRESS_INCREASE_TR;

主要是你从网上COPY的代码里面
SELECT CHINA_ADDRESS_SEQU.NEXTVAL INTO:NEW.ID FROM DUAL
后面少了个符号";"
PL/SQL认为语句后面带有一个;才作为一个语句的结束

此外,不建议使用触发器做这个事情,不如使用
INSERT INTO china_address VALUES(CHINA_ADDRESS_SEQU.NEXTVAL,‘sd‘,1);
更健壮.

时间: 2024-10-29 00:33:14

问题:oracle触发器无效且未通过重新验证;结果:触发器里面没有加分号(;)的相关文章

触发器 'SA.U_USER_INFO_TRG' 无效且未通过重新验证--Oracle序列

程序开发时报错:触发器 'SA.U_USER_INFO_TRG' 无效且未通过重新验证打开触发器的定义,执行其中的语句,发现序列 U_USER_INFO_SEQ 未定义.什么是序列呢?序列相当于sqlserver中那些自增的id,有步长.最大值.最小值等属性.在Oracle中是自定义的. 本篇文章的主题是通过创建Oracle序列和触发器实现表的主键自增. 1.首先创建序列,Oracle序列的语法格式为:CREATE SEQUENCE 序列名[INCREMENT BY n][START WITH

Oracle:新增用户登录提示“ORA-04098:触发器‘GD.ON_LOGON_TRIGGER’无效且未通过重新验证”

接着上一篇创建一个只有查看权限的用户,在测试环境,新建账号后尝试登录,提示如下: 1.看提示是base库的触发器有问题了,所以先定位到这个触发器 SELECT * FROM DBA_OBJECTS WHERE OBJECT_TYPE='TRIGGER'and OBJECT_NAME = ' ON_LOGON_TRIGGER '; 它的状态是无效的 2.通过pl/sql登录base库,查看触发器Triggers,找到ON_LOGON_TRIGGER 这个触发器上面有个红色的叉号,可能需要重新编译一

Oracle ORA-01722: 无效数字 处理方法

C# + Oralce 10G 项目中 有用参数处理Update语句.参数命名和表字段同名.执行报错: ORA-01722: 无效数字 后修改所有的参数和对应字段不同.解决. 修改前: StringBuilder strSql = new StringBuilder();object returnOValue = null;strSql.Append("update CRM_CONTACTS_RESOURCE set ");strSql.Append("RESOURCE_NA

Oracle 参数化更新数据时报错:Oracle ORA-01722: 无效数字

报错:Oracle ORA-01722: 无效数字 看了一篇博客,据说是参数与列名不能一致,改过之后还是报一样的错误:Oracle ORA-01722: 无效数字 ,后来试了一下,不是参数名必须不一样的原因. 然后把参数的语句变换了一些,按照参数的正确顺序排好之后,一切正常.

oracle 02180无效CREATE TABLESPACE命令

Oracle 02180 无效CREATE TABLESPACE命令 解决方案: extend错误,应该为extent,虽然二者都有扩展的意思 extent: n  程度; 长度; 广大地域; 扣押; extend: vt.延伸:扩大:推广: vt.延长:伸展:给予:发出(邀请.欢迎等): vi.延伸.伸出:增加: vt. 延伸; 扩大; 推广; vt. 延长; 伸展; 给予; 发出(邀请.欢迎等); vi. 延伸; 伸出; 增加; 原文地址:https://www.cnblogs.com/mi

安装wls报(主清单位置 "/u01/app/oracle/inventory" 无效 (无法读取/写入/执行))

安装出现的错误: [[email protected] ~]$ java -jar fmw_12.1.3.0.0_wls.jar 启动程序日志文件为/tmp/OraInstall2019-07-31_10-09-36AM/launcher2019-07-31_10-09-36AM.log. 正在提取文件...... 主清单位置 "/u01/app/oracle/inventory" 无效 (无法读取/写入/执行). [[email protected] ~]$ 解决: 1.在wls主清

cocos2d-x CocoStudio中场景触发器(Trigger)的代码部分和触发器之间的互调

这节继上一篇触发器扩展,讲一下代码部分的实现. 事件:EventDef.h 只有一个枚举,是对触发器事件的编号 #ifndef__EVENTDEF__ #define__EVENTDEF__ enum { TRIGGEREVENT_ENTERSCENE = 0, TRIGGEREVENT_LEAVESCENE, TRIGGEREVENT_INITSCENE, TRIGGEREVENT_UPDATESCENE, TRIGGEREVENT_TOUCHBEGAN, TRIGGEREVENT_TOUCH

Code-Validator:验证网址(可以匹配IPv4地址但没对IPv4地址进行格式验证;IPv6暂时没做匹配)

ylbtech-Code-Validator:验证网址(可以匹配IPv4地址但没对IPv4地址进行格式验证:IPv6暂时没做匹配) 1.返回顶部 1. using System; using System.Text.RegularExpressions; namespace Sp.Common { public class ValidatorHelper { /// <summary> /// 验证网址(可以匹配IPv4地址但没对IPv4地址进行格式验证:IPv6暂时没做匹配) /// [允许

Oracle的基本语法,存储函数及触发器

1.PL/SQL    PL/SQL是Oracle对 ql语言的过程化扩展,指在 SQL 命令语言中增加了过程处理语句,使SQL语言具有过程处理能力.把 SQL 语言的数据操纵能  力与过程语言的数据处理能力结合起来,使得 PLSQL 面向过程但比过程语言简单.高效.灵活和实用.   基本语法结构:        [declare]   -- 声明变量        begin       -- 代码逻辑        [exception] -- 异常处理        end;    注意: