存储过程:A表数据查出来后放入B表。急急急
学员表(student)有学员编号,姓名,邮箱,班级四个字段,学员编号是主键,是通过序列自动生成的。报名学员表(registration_student)里有姓名,邮箱两...
学员表(student)有学员编号,姓名,邮箱,班级四个字段,学员编号是主键,是通过序列自动生成的。报名学员表(registration_student)里有姓名,邮箱两个字段,邮箱是主键。根据邮箱,查出一条报名学员的信息,放入学员表中,然后在班级字段中插入数据,最后把报名学员表中的这行数据删除。这样的存储过程怎么写?
有用的话,会给更多的财富值。 展开
有用的话,会给更多的财富值。 展开
4个回答
2012-10-19
展开全部
CREATE OR REPLACE PROCEDURE pro_add_student(mail VARCHAR2)--参数为邮箱编号
AS
myrec registration_student%ROWTYPE;
mysid NUMBER; --定义学员编号 可以做参数传进来
myclassid VARCHAR2(10); --定义班级编号 可以做参数传进来
BEGIN
mysid :='00001'; --赋值学员编号
myclassid :='T001';--赋值班级编号
--通过邮箱在 “报名学员表” 中的记录
SELECT sname,smail INTO myrec FROM registration_student WHERE smail=mail;
--将查出来的记录保存在 “学员表 ”中
INSERT INTO student(sid,sname,smail) VALUES(mysid,myrec.sname,myrec.smail);
--更新学员的班级编号信息
UPDATE student SET classid=myclassid WHERE sid=mysid;
--删除 “报名学员表”中该邮箱的记录
DELETE FROM registration_student WHERE smail=mail;
COMMIT;
--异常处理,回滚
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
END;
AS
myrec registration_student%ROWTYPE;
mysid NUMBER; --定义学员编号 可以做参数传进来
myclassid VARCHAR2(10); --定义班级编号 可以做参数传进来
BEGIN
mysid :='00001'; --赋值学员编号
myclassid :='T001';--赋值班级编号
--通过邮箱在 “报名学员表” 中的记录
SELECT sname,smail INTO myrec FROM registration_student WHERE smail=mail;
--将查出来的记录保存在 “学员表 ”中
INSERT INTO student(sid,sname,smail) VALUES(mysid,myrec.sname,myrec.smail);
--更新学员的班级编号信息
UPDATE student SET classid=myclassid WHERE sid=mysid;
--删除 “报名学员表”中该邮箱的记录
DELETE FROM registration_student WHERE smail=mail;
COMMIT;
--异常处理,回滚
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
END;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
光点科技
2023-08-15 广告
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件...
点击进入详情页
本回答由光点科技提供
展开全部
基于什么数据库?是oracle吗?
这个不需要使用存储过程,一条语句就可以了:
insert into registration_student select student_name, mail from student where 查询条件;
如有疑问请追问。
这个不需要使用存储过程,一条语句就可以了:
insert into registration_student select student_name, mail from student where 查询条件;
如有疑问请追问。
追问
是oracle。
是insert into student select registration_student.......
可是学员表没主键的话,数据数插不进去的。
下面是我执行的语句
SQL> insert into T_Student(name,E_mail)
2 select name,E_mail
3 from t_registration_student
4 where E_mail like '% 1111111@QQ.COM %';
已创建0行。
这个 E_mail账号在t_registration_student已存在。
并且更新语句和删除语句都要同时执行。
追答
创建一个序列,例如:
create sequence seq_stuid
minvalue 100000
maxvalue 999999
start with 100000
increment by 1
cache 10;
语句这样写:
INSERT INTO t_Student
(NAME,
e_Mail)
SELECT Seq_Stuid.Nextval
NAME,
e_Mail
FROM t_Registration_Student
WHERE e_Mail LIKE '% 1111111@QQ.COM %';
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
create table student (id int,name varchar2(10),email varchar2(30),classname varchar2(10));
create table registration_student (name varchar2(10),email varchar2(30) );
create sequence SEQ_sid
minvalue 1
maxvalue 999999999
start with 1
increment by 1
cache 100
order;
create or replace procedure add_student(vv_email varchar2, vv_class varchar2)
is
vv_name varchar2(10);
begin
select t.name
into vv_name
from registration_student t
where t.email = vv_email;
insert into student (id,name,email,classname )values(SEQ_sid.nextval,vv_name,vv_email,vv_class);
delete from registration_student t1 where t1.email = vv_email;
commit;
end add_student;
测试已经通过
多联系才能成长
create table registration_student (name varchar2(10),email varchar2(30) );
create sequence SEQ_sid
minvalue 1
maxvalue 999999999
start with 1
increment by 1
cache 100
order;
create or replace procedure add_student(vv_email varchar2, vv_class varchar2)
is
vv_name varchar2(10);
begin
select t.name
into vv_name
from registration_student t
where t.email = vv_email;
insert into student (id,name,email,classname )values(SEQ_sid.nextval,vv_name,vv_email,vv_class);
delete from registration_student t1 where t1.email = vv_email;
commit;
end add_student;
测试已经通过
多联系才能成长
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
create or replace procedure myprocedure(email in varchar2,class in varchar2) is
v_name varchar2(20);
v_email varchar2(50);
begin
select reg_name,reg_email into v_name,v_email from registration_student where reg_email=email;
insert into student values(sequence.nextval,v_name,v_email,class);
delete from registration_student where reg_email=email;
commit;
end;
就是这样写,调用的时候在过程里加入邮箱地址和班级名称就可以了。
v_name varchar2(20);
v_email varchar2(50);
begin
select reg_name,reg_email into v_name,v_email from registration_student where reg_email=email;
insert into student values(sequence.nextval,v_name,v_email,class);
delete from registration_student where reg_email=email;
commit;
end;
就是这样写,调用的时候在过程里加入邮箱地址和班级名称就可以了。
追问
人比较笨,还有问题。
begin
myprocedure('1111111@QQ.COM',11);
end;
后面是这样运行吗?
class我改为number型了。
追答
可以,也可以这样 exec myprocedure('1111111@QQ.COM',11);
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询