SQLBoy 存储过程之历险记(二)

前言:
建表语句我就不放了,只上最终代码结果图。
我是在自己本地所使用的Oracle 11g ,数据量也就几个字段,不必要使用call来调。所以使用游标的方式跑的数据,所以就注释掉了第一行红色部分;在自己本地跑的时候也要注意这点,不然报错。
存储过程概念篇详情查看以下文章链接:

https://blog.csdn.net/weixin_46163590/article/details/104106169

代码片段:


-注释掉了第一行 - create or replace procedure jhxtdb_t_ZQ_2020_5_9 is
declare
cursor cur_ZQ is
select sno, sname, ssex, sbirthday, sclass
from student
where sbirthday >= to_date(‘1974-6-3’, ‘YYYY-MM-DD’)
and sbirthday <= to_date(‘1977-9-01’, ‘YYYY-MM-DD’)
and sno in (select sno from score);

rec_ZQ cur_ZQ%rowtype;
rec_tbl jhxtdb_t_ZQ_2020_5_9%rowtype;

变量作用及代表含义:
	rec_ZQ :主变量的也作用也就是主表
	cur_ZQ :声明游标变量
	rec_tbl:新建表的变量用途和into 后面的新字段变量
	jhxtdb_t_ZQ_2020_5_9 :存储过程名和新建的最终结果表(统计表)其实就是。

begin
open cur_ZQ; – 打开游标
loop
fetch cur_ZQ
into rec_ZQ;
exit when cur_ZQ%notfound;
rec_tbl := null;

–学生ID
begin
select sno
into rec_tbl.snoid
from score
where sno = rec_ZQ.sno
and rownum = ‘1’;
exception
when no_data_found then
rec_tbl.snoid := null;
end;
– 取课程号
begin
select cno
into rec_tbl.cno
from score
where sno = rec_ZQ.sno
and rownum=‘1’;
exception
when no_data_found then
rec_tbl.cno:=null;
end;

–取学生成绩
begin
select degree
into rec_tbl.degree
from score
where sno = rec_ZQ.sno
and rownum =‘1’;
exception
when no_data_found then
rec_tbl.degree:=null;
end;

新建的结果表如下:它在执行的时候,查询一条,insert一条进结果表。
insert into jhxtdb_t_ZQ_2020_5_9
  (
  sno, 
  sname, 
  ssex, 
  sbirthday, 
  sclass, 
  snoid,
  cno,
  degree)
  select rec_ZQ.sno,
         rec_ZQ.sname,
         rec_ZQ.ssex,
         rec_ZQ.sbirthday,
         rec_ZQ.sclass,
         rec_tbl.snoid,
         rec_tbl.cno,
		 rec_tbl.degree
    from dual;

commit;
end Loop;
close cur_ZQ;
end;

——————————————————————————————————
–所建的结果表
create table jhxtdb_t_ZQ_2020_5_9(
sno varchar2(50) ,
sname varchar2(50),
ssex varchar2(50),
sbirthday date,
sclass varchar2(50),
snoid varchar2(50),
cno varchar2(50),
degree varchar2(50)
);
———————————————————————————————————

  • 查询表 select * from jhxtdb_t_ZQ_2020_5_9
  • 删表 drop table jhxtdb_t_ZQ_2020_5_9
  • 清表 truncate table jhxtdb_t_ZQ_2020_5_9
    ————————————————————————————————————————————————————————————
统计语句:

select sno 学号,
sname 姓名,
ssex 性别,
sbirthday 日期,
sclass 班级号,
cno 课程号,
degree 成绩
from jhxtdb_t_ZQ_2020_5_9
在这里插入图片描述

    • 调用存储过程
      call jhxtdb_t_ZQ_2020_5_9(‘有日期的话就放进来,分窗口跑快一点’);
      call jhxtdb_t_ZQ_2020_5_9(‘有日期的话就放进来,分窗口跑快一点’);
      call jhxtdb_t_ZQ_2020_5_9(‘有日期的话就放进来,分窗口跑快一点’);
      call jhxtdb_t_ZQ_2020_5_9(‘有日期的话就放进来,分窗口跑快一点’);
      call jhxtdb_t_ZQ_2020_5_9(‘有日期的话就放进来,分窗口跑快一点’);
      call jhxtdb_t_ZQ_2020_5_9(‘有日期的话就放进来,分窗口跑快一点’);
    • 就是PL/SQL 新建多个窗口。
注意点是不要重复执行存储过程及游标,不然会产生重复的数据表中,会有麻烦;当然重复了也是有解决办法的就是清表的方式,只是效率上脱节了一点。

眉头紧锁,认真解决BUG中。。。。。。

在这里插入图片描述

【转载注明出处,尊重原创 】

 

【作者水平有限,如有错误欢迎指正 .】
感悟:

为何写下这段存储过程代码,是因为前几天经历一件不愉快的事情,大家应该懂得。我决定亲自尝试去做,不开始就永远不会。当然途中也有遇到BUG,不要退缩,记住;但是当你解决掉之后你会感觉浑身轻飘飘的感觉。《坚持》这两字道出,古往今来,任何成大事者的,都需要你持之以恒奋斗及坚持才能开创出一段光明的历史。 加油吧,简单叙述一下我此时此刻的心情就是。
在这里插入图片描述

评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值