oracle过程查询学习笔记
来源:互联网 发布:公务员自动听课软件 编辑:程序博客网 时间:2024/05/16 00:50
orcale语句具有编程特性,它既可以完全支持一般的sql语句,又可以利用自身强大的特性对sql语句进行编程化操作,就像linux的sell语句一样进行批处理。
create table student(snum NUMBER(10) primary key,sname varchar2(10) not null,ssex varchar2(5) default '不详',sbirthday date default '');create table courses(cnum NUMBER(3) primary key,cname varchar2(20) not null);create table results(snum NUMBER(3),cnum NUMBER(3),grade NUMBER(3),rank varchar2(5));create table tempmsg(snum NUMBER(3),cnum NUMBER(3),grade NUMBER(3));create table grades(min_grade NUMBER(3),max_grade NUMBER(3),gradelin varchar2(10) default '',remark varchar2(1) default '',msg varchar2(10) default '');INSERT INTO student VALUES(101,'张三', '女', '07-5月-1990');INSERT INTO student VALUES(102,'李四', '男', '25-11月-1992');INSERT INTO student VALUES(103,'王五', '女', '12-8月-1991');INSERT INTO student VALUES(104,'赵六', '男', '08-10月-1991');INSERT INTO student VALUES(105,'周七', '男', '03-4月-1992');INSERT INTO student VALUES(106,'孙八', '男', '21-7月-1990');INSERT INTO student VALUES(107,'钱九', '男', '21-12月-1990');INSERT INTO student VALUES(108,'沈十', '女', '11-7月-1992');INSERT INTO COURSES VALUES (91, 'C语言');INSERT INTO COURSES VALUES (92, 'JAVA语言');INSERT INTO COURSES VALUES (93, 'Oracle编程');INSERT INTO COURSES VALUES (94, '语文');INSERT INTO RESULTS VALUES (101, 91, 85, '优');INSERT INTO RESULTS VALUES (103, 91, 71, '良');INSERT INTO RESULTS VALUES (104, 93, 82, '良');INSERT INTO RESULTS VALUES (105, 92, 95, '优');INSERT INTO RESULTS VALUES (107, 94, 90, '优');INSERT INTO RESULTS VALUES (108, 92, 67, '良');INSERT INTO TEMPMSG VALUES (102, 91, 58);INSERT INTO TEMPMSG VALUES (101, 94, 88);INSERT INTO TEMPMSG VALUES (104, 93, 0);INSERT INTO TEMPMSG VALUES (106, 92, 95);INSERT INTO TEMPMSG VALUES (112, 93, 76);INSERT INTO TEMPMSG VALUES (110, 91, 100);INSERT INTO TEMPMSG VALUES (103, 92, 55);INSERT INTO TEMPMSG VALUES (105, 91, 100);INSERT INTO TEMPMSG VALUES (107, 93, 89);insert into grades(min_grade,max_grade) values(0,59);insert into grades(min_grade,max_grade) values(60,79);insert into grades(min_grade,max_grade) values(70,89);insert into grades(min_grade,max_grade) values(90,100);Commit;下面是一些操作的例子:
/**编写匿名块,打印成绩表中编号为 101的学生的编号,姓名,课程编号和分数。**/DECLARECURSOR MYCUR IS SELECT * FROM RESULTS;MYREC RESULTS%ROWTYPE;S_NAME STUDENT.SNAME%TYPE;BEGINOPEN MYCUR;FETCH MYCUR INTO MYREC;WHILE MYCUR%FOUND LOOPIF myrec.snum=101 THEN SELECT SNAME INTO S_NAME FROM STUDENT WHERE SNUM=myrec.snum;dbms_output.put_line(S_NAME||'****'||myrec.snum||'****'||myrec.cnum||'****'||myrec.grade);END IF;FETCH MYCUR INTO MYREC;END LOOP;END;
/**编写匿名块,遍历students表中所有人员信息,根据grades表中的分数分档,更新results表中学生的成绩档次(grade字段),并对各自的成绩进行判断: **/# (1)如果学生成绩在A档,打印信息“xxx,你是好样的!”#(2)如果学生成绩在B档或者C档,打印“xxx,再接再厉!”# (3)其他的打印“xxx,你还差得远呢!”#(4)如果执行中出现异常,捕获异常并提示异常的系统信息;declarein_snum TEMPMSG.snum%type;in_sname student.sname%type;in_cname COURSES.cname%type;in_cnum COURSES.cnum%type;MSG VARCHAR2(2);s_grade TEMPMSG.grade%type;cursor mycur is select * from student WHERE SNUM IN(SELECT SNUM FROM TEMPMSG GROUP BY SNUM);myrec student%rowtype;beginopen mycur;fetch mycur into myrec;while mycur%found LOOPin_snum:=myrec.snum;IN_SNAME:=MYREC.SNAME;select grade into s_grade from tempmsg where snum = in_snum;select cnum into in_cnum from tempmsg where snum = in_snum;select CNAME into in_cname from COURSES where cnum = in_cnum;IF S_GRADE<60 THEN DBMS_OUTPUT.PUT_LINE(IN_SNAME||'-的-'||in_cname||'-课考了-'||s_grade||'-分,成绩不行啊,无人关心!');END IF;IF S_GRADE BETWEEN 60 AND 79 THEN DBMS_OUTPUT.PUT_LINE(IN_SNAME||'-的-'||in_cname||'-课考了-'||s_grade||'-分,你还差得远呢!');END IF;IF S_GRADE BETWEEN 80 AND 89 THEN DBMS_OUTPUT.PUT_LINE(IN_SNAME||'-的-'||in_cname||'-课考了-'||s_grade||'-分,再接再厉!');END IF;IF S_GRADE BETWEEN 90 AND 100 THEN DBMS_OUTPUT.PUT_LINE(IN_SNAME||'-的-'||in_cname||'-课考了-'||s_grade||'-分,你是好样的!');END IF;fetch mycur into myrec;end loop; end;
#根据Students表判断临时表中人员信息是否存在,不存在的按如下格式打印: “编号为:xxx的学生,没有基本信息!”;DECLARENOTIN STUDENT.SNUM%TYPE;CURSOR MYCUR IS SELECT * FROM TEMPMSG WHERE SNUM NOT IN(SELECT DISTINCT SNUM FROM STUDENT);MYREC TEMPMSG%ROWTYPE;S_SNUM TEMPMSG.SNUM%TYPE;BEGIN OPEN MYCUR;FETCH MYCUR INTO MYREC;WHILE MYCUR%FOUND LOOPDBMS_OUTPUT.PUT_LINE('编号为:'||MYREC.SNUM||'的学生,没有基本信息!');FETCH MYCUR INTO MYREC;END LOOP;END;#判断考试成绩表中是否已存在对应的人员编号和课程编号,如果存在,更新分数;如果不存在,将最新信息插入考试成绩表;DECLARECURSOR MYCUR IS SELECT * FROM RESULTS;MYETC RESULTS%ROWTYPE;BEGINOPEN MYCUR;FETCH MYCUR INTO MYETC;WHILE MYCUR%FOUND LOOPDBMS_OUTPUT.PUT_LINE(MYETC.SNUM);END LOOP;END;
欢迎各位批评指教!
- oracle过程查询学习笔记
- Oracle 层次查询-学习笔记
- oracle学习笔记--复杂查询
- oracle学习笔记 ---- 子查询
- Oracle学习笔记:高级查询
- oracle 存储过程学习笔记
- Oracle存储过程学习笔记
- Oracle存储过程学习笔记
- Oracle存储过程学习笔记
- oracle学习笔记(查询篇)
- oracle学习笔记之六 子查询
- oracle学习笔记(二)查询语句
- Oracle学习笔记:表的联合查询
- Oracle学习笔记之一SQL查询总结
- Oracle学习查询语句的笔记
- Oracle学习查询语句的笔记
- Oracle学习笔记之一SQL查询总结
- oracle学习笔记之数据查询
- UVA - 104 Arbitrage
- Yii学习指南(改编)3--模型-视图-控制器 (MVC)
- 解决内外网无法同时使用
- 再次深入了解epoll
- android--代码实现手机截屏
- oracle过程查询学习笔记
- [Qt教程] 第12篇 2D绘图(二)渐变填充
- PHP中获取当前页面的完整URL
- hosts & hostname 对hadoop系统的影响
- HDU 1198
- linux下查看所有用户及所有用户组
- 高效的使用 top
- ViewStub 的作用
- android--获取控件名字