`
zjm16
  • 浏览: 69945 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
文章分类
社区版块
存档分类
最新评论

oracle 存储过程 练习笔记

阅读更多
目标:

·熟悉Oracle存储过程的各种写法


先写下面几个存储过程(无,有,返回普通值,返回结果集)

在Oracle中编写:

1、创建班级表和学生表。

2、添加学生(学号,姓名,班级编号),不返回任何值。

3、添加学生(姓名,班级编号),由程序生成学号并返回(。

4、添加学生(姓名,班级编号),并返回该班的所有学生。

解答:
1、创建 班级表过程 classinfo_create
CREATE OR REPLACE PROCEDURE classinfo_create
Authid Current_User
IS
v_classinfo_sql varchar2(1000);
v_flag integer;
BEGIN
           v_classinfo_sql:='create table classinfo(
                                  classinfo_id varchar2(20) primary key,
                                  classinfo_name varchar2(20) not null
                                   ) ';
           EXECUTE IMMEDIATE v_classinfo_sql;
           EXCEPTION
           WHEN OTHERS THEN
               EXECUTE IMMEDIATE 'drop table classinfo';
               EXECUTE IMMEDIATE v_classinfo_sql;
END classinfo_create;
创建 学生表过程 student_class_create
CREATE OR REPLACE PROCEDURE student_class_create
Authid Current_User
IS
v_student_sql varchar2(1000);
v_classinfo_sql varchar2(1000);
v_flag integer;
BEGIN
           v_flag:=1;
           v_student_sql:='create table student(
                                            student_id varchar2(20) primary key,
                                            student_name varchar2(20) not null,
                                            classinfo_id varchar2(20) not null
                                           )' ;
           v_classinfo_sql:='create table classinfo(
                                  classinfo_id varchar2(20) primary key,
                                  classinfo_name varchar2(20) not null
                                   ) ';
           EXECUTE IMMEDIATE v_student_sql;
           v_flag:=2;
           EXECUTE IMMEDIATE v_classinfo_sql;

           EXCEPTION
           WHEN OTHERS THEN
             if v_flag=1 then
               EXECUTE IMMEDIATE 'drop table student';
               EXECUTE IMMEDIATE v_student_sql;
               classinfo_create;
             end if;
             if v_flag=2 then
               EXECUTE IMMEDIATE 'drop table classinfo';
               EXECUTE IMMEDIATE v_classinfo_sql;
             end if;
END student_class_create;
2、添加学生(学号,姓名,班级编号),不返回任何值  insert_student
CREATE OR REPLACE PROCEDURE insert_student(sid in varchar2,
                                                  sname in varchar2,
                                                  sclass in varchar2)
IS
BEGIN
           insert into student(student_id,student_name,classinfo_id)-- values (sid,sname,sclass);
           select sid as student_id,sname as student_name,sclass as classinfo_id from dual;
           commit;
   exception
                  when others then dbms_output.put_line(sqlcode||sqlerrm);
END insert_student;
测试方法:
exec insert_student('1','zhangsan','1');
3、添加学生(姓名,班级编号),由程序生成学号并返回 insert_student2
CREATE OR REPLACE PROCEDURE insert_student2(sid out varchar2,
                                                  sname in varchar2,
                                                  sclass in varchar2)
IS
BEGIN
           select max(student_id) into sid from student;
           sid:=nvl(sid,0)+1;
           insert into student(student_id,student_name,classinfo_id)-- values (sid,sname,sclass);
           select sid as student_id,sname as student_name,sclass as classinfo_id from dual;
           commit;
           exception
                  when others then dbms_output.put_line(sqlcode||sqlerrm);
END insert_student2;
测试方法:
declare
v_out varchar2(100);
begin
insert_student2(v_out,'221','1');
dbms_output.put_line(v_out);
end;
4、添加学生(姓名,班级编号),并返回该班的所有学生 insert_student3
CREATE   OR   REPLACE   PROCEDURE  insert_student3(sysrefcursor out sys_refcursor,sname in varchar2,sclass in varchar2) IS
refcursor sys_refcursor;
sid varchar2(20);
BEGIN  
           select max(student_id) into sid from student;                     
           sid:=nvl(sid,0)+1;
           insert into student(student_id,student_name,classinfo_id)
           select sid as student_id,sname as student_name,sclass as classinfo_id from dual;
           commit;
           open refcursor for select * from student where classinfo_id=sclass order by student_id;
           sysrefcursor := refcursor;
           exception when others then dbms_output.put_line(sqlcode||sqlerrm);
END insert_student3;  
测试方法:
declare
v_out sys_refcursor;
sid varchar2(20);
sname varchar2(20);
sclass varchar2(20);
begin
insert_student3(v_out,'222','2');
  loop
      fetch v_out into sid,sname,sclass; --fetch ..into ..exit when遍历游标的方式之一
      exit when v_out%notfound;
      dbms_output.put_line(sid||','||sname||','||sclass);
  end loop;
  close v_out;
end;
分享到:
评论

相关推荐

    oracle pl的学习笔记

    自己总结的oracle pl学习代码。有游标,存储过程,触发器,集合等。 初步学习pl的话会有一些帮助,也提供了相关的练习。

    oracle学习笔记

    本文档中有包括oracle中的学习笔记 也有oracle的语法和常用的函数 也包括了oralce 的练习 包括存储过程

    韩顺平oracle学习笔记

    记住:欲速则不达,做任何事情要遵循他的规律,循序渐进,信心很重要 成为一个oracle高手过程:理解小知识点->做小练习->把小的只是点连成线->做oracle项目->形成只是面->深刻理解 Oracle基础部分:oracle基础使用; ...

    oracle数据库笔记

    8.练习:表的查询 36 五. 在SQL *Plus中使用函数 37 1.字符串函数 37 2.数字函数 37 3.日期时间函数 38 4.转换函数 38 第五讲 修改SQL数据与SQL*Plus命令 40 一.添加数据 40 1.Insert Into 表名 [ 字段列表 ] ...

    oracle复习笔记之PL/SQL程序所要了解的知识点

    异常处理机制、存储函数/存储过程、触发器。 为方便大家跟着我的笔记练习,为此提供数据库表文件给大家下载:点我下载 为了要有输出的结果,在写PL/SQL程序前都在先运行这一句: set serveroutput on 结构: declare...

    中博科创ORACLE培训资料.rar

    教学内容 JAVA项目练习(在项目中如何使用分区,索引,存储过程,备份,举例说明优化如何在项目使用) 时间 第五天 备份 上午(9:00至11:00) 下午(2:00至5:30) 晚上(6:30至8:30) 职责 ...

    Java JDK 7学习笔记(国内第一本Java 7,前期版本累计销量5万册)

     《Java JDK 7学习笔记》是作者多年来教学实践的经验总结,汇集了学员在教学过程中遇到的概念、操作、应用或认证考试上的各种问题及解决方案。  《Java JDK 7学习笔记》详细介绍了JVM、JRE、Java SE API、JDK与IDE...

    Notes:开发Java开发学习笔记

    :books:学习是一个不断模仿,练习,创新,超越的过程,一起努力吧〜 本仓库正在不断更新,敬请期待 :glowing_star: 〜 :high_voltage: | :sparkles: | :bookmark_tabs:计算机基础 数据结构 算法 :fire: ...

    asp.net知识库

    发布Oracle存储过程包c#代码生成工具(CodeRobot) New Folder XCodeFactory3.0完全攻略--序 XCodeFactory3.0完全攻略--基本思想 XCodeFactory3.0完全攻略--简单示例 XCodeFactory3.0完全攻略--IDBAccesser ...

    程序员考试刷题-OCAJP-8:OCAJP-8的注意事项

    程序员考试刷题OCAJP-8 Oracle 认证助理 Java SE ...Programmer练习测试”(ISBN 978-1-119-36339-2),作者是 Jeanne Boyarsky 和 ​​Scott Selikoff。 这个存储库是我的 1Z0-808 考试笔记的集合。

    java8stream源码-graalvm-japac-hands-on-lab-02092020:GraalVM企业版动手实验,2020年9

    Oracle Linux 8.2、Ubuntu 20.04、Fedora 32(由于 CGroup v2 问题进行了小幅调整 - 请参阅本动手实验后面部分的解决方法)和 MacOS 10.15.6 上进行了测试。 安装以下工具: git 、 curl 、 unzip 、 Docker 、 ...

Global site tag (gtag.js) - Google Analytics