-
Oracle新手: 触发器的问题20
create table userInfo ( user_name varchar2(20) not null, --用户名称 sex number(1) , --性别
identity_card varchar2(20) primary key, --身份证 ,主键(PK)
phone varchar2(50) not null, --联系方式
address varchar2(50) not null, --地址
remark varchar2(255), --备注
account_id varchar2(20) --账户编号,外键(FK)
)
create table accountInfo
(
account_id varchar2(20) primary key, --账户 , 主键(PK)
account_password varchar2(10) not null, --密码
account_balance number not null, --账户余额
open_date date not null --开户日期
)
--建立userInfo用户信息表和accountInfo账户信息表之间的关系
alter table userInfo
add constraint fk_user_account
foreign key(account_id) references accountInfo(account_id);
--创建一个序列用来辅助生成账户信息id
create sequence seq_exacid
start with 1001
increment by 1
--查询信息
select * from userInfo;
select * from accountInfo;
/*
* 为用户信息表(userInfo)创建触发器,当创建用户时自动为用户开户(accountInfo),
* 初始金额为0元,默认密码为123456
* 同时将账户id绑定给用户表
*/
create or replace trigger tri_userinfo_insert
before insert on userInfo
for each row
begin
insert into accountInfo values('hsbc'||seq_exacid.nextval,'123456',0,sysdate);
update userInfo set account_id = 'hsbc'||seq_exacid.currval where identity_card=:NEW.identity_card;
end;
--插入数据
insert into userInfo values('Big Brother',0,'421126198805056666','15856568998','China Wuhan','Nothing','')
大家帮忙看下,现在这个触发器有点问题,触发器的作用在注释里写了
我向userInfo插入数据后,accountInfo里确实也插入了数据,但是userInfo里的account_id字段值依然为空,也就是说update语句没有执行,是吗?是不是用的before insert 此时userInfo是空的没有数据可更新呢?
然后我改为after insert 再插入数据就报错了,看图
如此一来问题该如何解决呢?
我是oracle新手,谢谢指点。
2009年12月20日 11:52
4个答案 按时间排序 按投票排序
-
采纳的答案
修改你的trigger,直接NEW.account_id赋值而不是用update语句.
create or replace trigger tri_userinfo_insert before insert on userInfo for each row declare var_account_id accountInfo.account_Id%type; begin --// get valid account id select 'hsbc' || seq_exacid.nextval into var_account_id from dual; --// insert into subassembly table insert into accountInfo values (var_account_id, '123456', 0, sysdate); --// associate FK :NEW.account_id := var_account_id; end;
2009年12月21日 11:46
-
Oracle行级触发器是不能同时修改触发表的。这种问题道理上是不该写在触发器里的。而是应该在事务中。纯Oracle的话,用存储过程写。
你一定要使用触发器的话,将
可以使用语句级触发器。2009年12月21日 00:31
-
变异表的问题
以前的解决方法是在触发器里面加入
commit;
EXCEPTION
WHEN OTHERS THEN
NULL;
强制提交,就是在触发器的end前面加上这句话,你可以试试2009年12月20日 18:20
相关推荐
这份“Oracle新手必看”的资料,以PPT的形式呈现,旨在帮助初学者快速理解和上手Oracle。 1. 数据库概念与架构 Oracle数据库是用于存储、管理和检索数据的系统。它由多个组件构成,如服务器进程、后台进程、控制...
1. 架构和存储:深入理解Oracle数据库架构、内存管理、存储过程和触发器。 2. 高级复制和分区:掌握高级复制技术、数据的分片技术。 3. 数据仓库和数据挖掘:数据库在数据仓库环境下的应用、数据挖掘和分析技巧。 4....
- **PL/SQL:** 学习Oracle的程序化语言,包括过程、函数、触发器的编写。 - **Oracle GoldenGate:** 了解Oracle的数据复制解决方案,实现跨平台的数据同步。 - **Oracle Real Application Clusters (RAC):** 学习...
本文将详细介绍Oracle的一些常用功能,帮助新手快速上手。 1. **数据存储与管理**:Oracle数据库的核心功能在于存储和管理数据。它使用表来组织数据,通过SQL(结构化查询语言)进行数据的增删改查操作。创建表、...
在学习和使用Oracle时,新手经常会遇到一些看似简单但实则需要理解基础概念的问题。以下是一些Oracle常见问题及其解答: 1. **Oracle安装后的初始口令**: - internal/oracle - sys/change_on_install - system/...
Oracle12c完全参考手册是数据库管理员和开发者的重要资源,其中包含了全面的SQL脚本集合。...通过深入学习和实践这些脚本,无论是新手还是经验丰富的DBA,都能提升在Oracle12c数据库管理上的技能。
本教程的13章节将逐步引导你深入理解Oracle 9.0的各个方面,无论你是数据库新手还是希望巩固基础,都能从中受益。通过实践和学习,你将能够熟练地使用Oracle 9.0进行数据库设计、管理和优化,为你的IT职业生涯打下...
Oracle数据库是世界上最流行的数据库管理...这些只是Oracle数据库基础的一部分,更深入的学习包括存储过程、触发器、游标、索引优化、性能调优等。对于初学者来说,理解并熟练运用这些基础概念是学习Oracle的第一步。
4. **PL/SQL**:Oracle特有的编程语言,扩展了SQL的功能,允许编写存储过程、函数、触发器等,用于实现更复杂的业务逻辑和数据库操作。 5. **数据库创建与管理**:了解如何创建数据库、表空间以及数据表,设置用户...
由于Oracle数据库系统的复杂性,对于初学者来说,理解其基础知识、概念、操作和常见问题的解决方案是十分必要的。下面,我们将详细介绍Oracle初学者可能会面临的一些常见问题及其解决方法。 1. 什么是Oracle数据库...
### Oracle新手培训知识点详解 #### 一、Oracle Database 2DayDBA 10g Release 2 (10.2) 简介 - **版本信息**:本手册为Oracle Database 2DayDBA 10g Release 2 (10.2),发布日期为2005年12月。 - **版权信息**:...
通过学习和实践这些Oracle基础和常见问题,新手可以逐步掌握数据库管理的基本技能,为更深入的学习打下坚实的基础。在"oracle常用傻瓜问题1000问"中,涵盖了大量实际操作中可能遇到的问题,对于初学者来说,是一份极...
Oracle数据库是全球广泛使用的大型...掌握这些概念后,新手可以逐步深入学习Oracle的更多高级特性,如触发器、函数、包以及数据库设计和管理等。在实际工作中,灵活运用这些工具将极大地提升数据库管理的效率和质量。
这个“适合新手的Oracle练习题集合”旨在帮助初学者巩固理论知识,提高实践技能,同时通过解决实际问题,如安全认证和转账问题,加深对Oracle数据库的理解。 1. **SQL基础**:在Oracle中,SQL(结构化查询语言)是...
以下是一份详细的Oracle新手指南,旨在帮助你逐步了解并熟悉Oracle的相关概念和技术。 1. **Oracle基础概念** - **数据库**:Oracle数据库是存储和管理数据的系统,它提供了数据的组织、存储、检索和安全控制。 -...
除了上述内容,Oracle还提供了许多其他功能,如视图、存储过程、触发器、游标、事务管理等。学习Oracle SQL,还需要理解这些概念以及如何在实际场景中应用它们。Oracle数据库的强大在于其灵活性和复杂的数据管理能力...
Oracle数据库是全球广泛使用的...总的来说,“Oracle常用傻瓜问题1000问”应该是一个全面且实用的指南,帮助读者解决在Oracle数据库使用过程中可能遇到的各种问题,无论你是新手还是有一定经验的DBA,都能从中受益。
以下是一些Oracle新手入门的知识点: 1. **安装与配置**: 首先,你需要下载并安装Oracle数据库软件,如Oracle Database Express Edition (XE) 或其他版本。安装过程中会涉及到环境变量设置、监听配置和数据库实例...
在这个"Oracle精华帖"的压缩包中,你将找到这些主题的深度解析和实际案例,无论你是Oracle新手还是经验丰富的DBA,都能从中受益匪浅。通过学习和实践,你可以提升自己在Oracle领域的专业技能,解决实际工作中遇到的...
这两个资源结合在一起,无论你是Oracle新手还是有经验的DBA,都能找到适合自己的学习路径。通过深入学习,你可以掌握Oracle数据库的管理和开发技巧,提升在实际工作中的问题解决能力。无论是进行数据分析、系统运维...