ORACLE触发器

s2t01 2010-01-21 09:41:31
刚开始学ORACLE请大家帮帮忙!昨天查资料查了一天!
我要写一个简单的触发器,功能是当表peo中插入一条信息后触发:表people也动态的插入peo插入的数据!
(peo,people两个表的结构是一样的,属性字段有 ID,UNAME,ADDRESS 三个字段)。
触发器如下:
一、
create trigger zhuanhuan
after insert
on peo
declare
i peo.id%type;
nm peo.uname%type;
addr peo.address%type;
begin
insert into people values(i,nm,addr);
end

为什么insert into people values(i,nm,addr)报错!

二、
create trigger zhuanhuan
after insert
on peo
declare
hhh varchar(200);
i peo.id%type;
nm peo.uname%type;
addr peo.address%type;
begin
hhh:='insert into people values(:i,:nm,:addr)';
end

对是对了,但是不能触发!
insert into peo tt values('003','丫丫','北京市南城区')
...全文
112 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
碧水幽幽泉 2010-01-23
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 wildwave 的回复:]
第一个只声明了几个变量却没有赋值,这样的话会插入一条空记录,id是主键不允许为空吧,所以报错
第二个触发后只是给该临时字符型变量赋值,没有任何意义

可以改成行级触发器,用:new来处理
也可以保持为表级改成
create trigger zhuanhuan
after insert
on peo
begin
insert into people
select id,uname,address from peo t
where not exists(select 1 from people where id=t.id);
end;
[/Quote]
11楼正解!
小灰狼W 2010-01-23
  • 打赏
  • 举报
回复
第一个只声明了几个变量却没有赋值,这样的话会插入一条空记录,id是主键不允许为空吧,所以报错
第二个触发后只是给该临时字符型变量赋值,没有任何意义

可以改成行级触发器,用:new来处理
也可以保持为表级改成
create trigger zhuanhuan
after insert
on peo
begin
insert into people
select id,uname,address from peo t
where not exists(select 1 from people where id=t.id);
end;
  • 打赏
  • 举报
回复
create or replace trigger zhuanhuan
after insert
on peo
for each row
begin
insert into people values(:new.id,:new.uname,:new.address);
end;
zhangwonderful 2010-01-22
  • 打赏
  • 举报
回复
begin
insert into people values(:new.id,:new.uname,:new.address);
end ;
end后面要有分号结束
fatfoxz 2010-01-21
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 liusong_china 的回复:]
SQL code09:49:52 tina@PRACTICE>createtable people(idint,unamevarchar2(10),addressvarchar2(20));

表已创建。

已用时间:00:00:00.0009:50:03 tina@PRACTICE>createtable peo(idint,unamevarchar2(10),addressvarchar2(2?-
[/Quote]
办事太有效率了。。。
liusong_china 2010-01-21
  • 打赏
  • 举报
回复
要用行级触发器。
wuyisky84 2010-01-21
  • 打赏
  • 举报
回复
old 改成new
wuyisky84 2010-01-21
  • 打赏
  • 举报
回复
create trigger zhuanhuan
after insert
on peo for each row

begin
insert into people values(:old.i,:old.nm,:old.addr);
end
liusong_china 2010-01-21
  • 打赏
  • 举报
回复
09:49:52 tina@PRACTICE> create table people(id int,uname varchar2(10),address varchar2(20));

表已创建。

已用时间: 00: 00: 00.00
09:50:03 tina@PRACTICE> create table peo(id int,uname varchar2(10),address varchar2(20));

表已创建。

已用时间: 00: 00: 00.00
09:50:09 tina@PRACTICE> select * from peo;

未选定行

已用时间: 00: 00: 00.00
09:50:15 tina@PRACTICE> select * from people;

未选定行

已用时间: 00: 00: 00.00
09:50:18 tina@PRACTICE> create or replace trigger zhuanhuan
09:50:25 2 after insert
09:50:25 3 on peo
09:50:25 4 for each row
09:50:25 5 begin
09:50:25 6 insert into people values(:new.id,:new.uname,:new.address);
09:50:25 7 end;
09:50:25 8 /

触发器已创建

已用时间: 00: 00: 00.04
09:50:27 tina@PRACTICE> insert into peo tt values('003','丫丫','北京市南城区');

已创建 1 行。

已用时间: 00: 00: 00.00
09:50:39 tina@PRACTICE> select * from peo;

ID UNAME ADDRESS
---------- ---------- --------------------
3 丫丫 北京市南城区

已用时间: 00: 00: 00.01
09:50:44 tina@PRACTICE> select * from people;

ID UNAME ADDRESS
---------- ---------- --------------------
3 丫丫 北京市南城区

已用时间: 00: 00: 00.00
fatfoxz 2010-01-21
  • 打赏
  • 举报
回复
不用
i peo.id%type;
nm peo.uname%type;
addr peo.address%type;
用一下就行
insert into people values(:new.id,:new.uname,:new.address);
yuzhenhuan01 2010-01-21
  • 打赏
  • 举报
回复
begin
insert into people values(:new.id,:new.uname,:new.address);
end
yuanmoren 2010-01-21
  • 打赏
  • 举报
回复
4、5楼正解

17,078

社区成员

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

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