有2个表
student学生表
----------------------------------------------------------------------------
sno sname sage ssex sxiexing sclass sjiguan shjxz szcode stel
学号 班级score
--------------------------------------------------------------------------------------
ssno course1 course2 course3 course4 course5 course6 course7 course8 course9 course10
学号course1-course10分表代表十门课程,课程是分班级的,这里分两个班级(11班,22班),21班的课程是
(course1,course2,course3,course7,course9)剩下的是11班的课程。目的是要通过存储过程在score表中插入成绩,由于两个班的课程不一样,故插入成绩的时候要考虑往哪个课程插入的问题。我是想通过IF语句判断出是哪个班的 ,再通过insert into score(course1,course2,course3,course7,course9)
values(&course1,&course2,&course3,&course7,&course9)
else
insert into score(course4,course5,course6,cours8,course10)
values(&course4,&course5,&course6,&cours8,&course10)
插入成绩,老是提示过程有编译错误,麻烦各位帮忙指点下啊~~
student学生表
----------------------------------------------------------------------------
sno sname sage ssex sxiexing sclass sjiguan shjxz szcode stel
学号 班级score
--------------------------------------------------------------------------------------
ssno course1 course2 course3 course4 course5 course6 course7 course8 course9 course10
学号course1-course10分表代表十门课程,课程是分班级的,这里分两个班级(11班,22班),21班的课程是
(course1,course2,course3,course7,course9)剩下的是11班的课程。目的是要通过存储过程在score表中插入成绩,由于两个班的课程不一样,故插入成绩的时候要考虑往哪个课程插入的问题。我是想通过IF语句判断出是哪个班的 ,再通过insert into score(course1,course2,course3,course7,course9)
values(&course1,&course2,&course3,&course7,&course9)
else
insert into score(course4,course5,course6,cours8,course10)
values(&course4,&course5,&course6,&cours8,&course10)
插入成绩,老是提示过程有编译错误,麻烦各位帮忙指点下啊~~
v_sno in varchar2,
v_score1 in number,
v_score2 in number,
v_score3 in number,
v_score4 in number,
v_score5 in number)
is
v_class vaarchar2(20);
begin select sclass into v_class from student where sno = v_sno;
if v_class = '11' then
insert into score(sno,course1,course2,course3,course7,course9)
values (v_sno,v_score1,v_score2,v_score3,v_score4,v_score5);
else
insert into score(sno,course4,course5,course6,cours8,course10)
values (v_sno,v_score1,v_score2,v_score3,v_score4,v_score5);
end;exception
when no_data_found then
dbms_output.put_line('No such student');
when others then
raise;
end proc;
/
v_class vaarchar2(20);
这里v_sno还是空的,还没输入呢,要到下面才输入,这样怎么能判断sno=v_sno呢
不好意思~麻烦你再帮我看个问题吧 是两张表互相同步更新的问题先建2张表create table a
(
a_id number,
a_name varchar2(20)
)create table b
(
b_id number,
b_name varchar2(20)
)各自添加个字段默认为1,为了防止死循环,我每次UPDTAE的时候都先将它置0,alter table a add a_no number(1) default 1;
alter table b add b_no number(1) default 1;
create or replace trigger upd_b
after update on b
for each row
when (new.b_no = 1)
begin
update a set a_id=:NEW.b_id,a_name=:new.b_name,a_no=0 where a_no=1;
end upd_b;
create or replace trigger upd_a
after update on a
for each row
when (new.a_no = 1)
begin
update b set b_id=:NEW.a_id,b_name=:new.a_name,b_no=0 where b_no=1;
end upd_a;
可是怎么也不触发~~也不提示错误,不知道哪里不对了~~
这里不能where a_no=1 对不不然就全更新了~还是不知道怎么回事
SQL> set serveroutput on
SQL>
SQL> create table a
2 (
3 a_id number,
4 a_name varchar2(20),
5 a_no number
6 );Table createdSQL> create table b
2 (
3 b_id number,
4 b_name varchar2(20),
5 b_no number
6 );Table createdSQL> create or replace trigger upd_b
2 after update on b
3 for each row
4 when (new.b_no = 1)
5 begin
6 update a set a_id=:NEW.b_id,a_name=:new.b_name,a_no=0 where a_no=1;
7 end upd_b;
8 /Trigger createdSQL> create or replace trigger upd_a
2 after update on a
3 for each row
4 when (new.a_no = 1)
5 begin
6 update b set b_id=:NEW.a_id,b_name=:new.a_name,b_no=0 where b_no=1;
7 end upd_a;
8 /Trigger createdSQL> select * from a; A_ID A_NAME A_NO
---------- -------------------- ----------
1 test1 1SQL> select * from b; B_ID B_NAME B_NO
---------- -------------------- ----------
2 test2 1
SQL> update b set b_id = 4, b_name = 'abc';1 row updatedSQL> select * from a; A_ID A_NAME A_NO
---------- -------------------- ----------
4 abc 0
SQL>
这会导致所有a_no为1的记录都被更新。
after insert or update on b
for each row
when (new.b_no = 1)
begin
if inserting then
insert into a(a_id, a_name, a_no)
values (:new.b_id, :new.b_name, 0);
else
update a set a_id=:NEW.b_id,a_name=:new.b_name,a_no=0 where a_no=:new.b_no;
end if;
end linshi;create or replace trigger linshi2
after insert or update on a
for each row
when (new.a_no = 1)
begin
if inserting then
insert into b(b_id, b_name, b_no)
values (:new.a_id, :new.a_name, 0);
else
update b set b_id=:NEW.a_id,b_name=:new.a_name,b_no=0 where b_no=:new.a_no;
end if;
end linshi;真麻烦呀 a_no和b_no本来是为了前面插入值的时候不至于死循环
可是后面要update的时候感觉a_no和b_no会变0和1很乱
老是不能正确更新
delete from b where b_id=:old.a_id;delete触发器这样写为什么不触发呢。