Download presentation
Presentation is loading. Please wait.
Published byErik Norris Modified 5年之前
1
实验4:PL-SQL编程 1.实验目的 2.实验原理 PL/SQL是一种过程化语言,属于第三代语言,本实验在与熟悉使用PL/SQL编程.
整个PL/SQL块分三部分:声明部分(用Declare开头),执行部分(以Begin开头)和异常处理(以Exception开头).其中执行部分是必须的,其他两个部分可选.基本格式如下: Declare … Begin …
2
Exception … End; ⑵PL/SQL常用的几种数据类型 Number:数字型(能存放整数值和实数值) Integer:整数型 Varchar2:字符型(存放可变长字符串) Char:字符型(存放定长字符串) Date:日期型 Boolean:布尔型 注意:在PL/SQL中声明变量与其他语言不太一样,它采用从右向左的方式声明, Declare ID Number:
3
⑶ PL/SQL的三种程序结构:条件结构,循环结构和顺序结构
①条件结构 与其他语言完全类似,其语法结构如下: If C1 Then S1 Else S2 End If; ②循环结构 这一结构与其他语言结构不太一样在PL/SQL程序中有三种循环结构: (A) Loop … End Loop; (B) While 条件 Loop … End Loop; (c) For变量 In 变量下界…变量上界 Loop … End Loop
4
③顺序结构 在顺序结构中,有两个语句值得一提:一个是Goto语句不能转移到If语句, 循环语句或子语句中;另一个是Null语句,该语句什么也不做,仅仅将程序的控制传递给下一个语句,可以在一定的程度上提高PL/SQL程序的可读性. ④过程与函数 PL/SQL中的过程和函数与其他语言的过程和函数的概念基本一样,起语法结构为: 过程:Create or replace procedure procname(param1,param2, …)as PL/SQL语句块 函数: Create or replace function funcname(param1,param2, …)return返回值as PL/SQL语句块 基本格式如下: Create or replace procedure Pro_name as … /*声明变量并赋初值*/ Begin … /* Pro_name可以省略*/ End Pro_name:
5
⑤游标 游标就是用来指代一个DML SQL操作返回的结果值.就是当一个对数据库的查询操作返回一组结构值时,用游标来标注这组结构集,以后通过对游标的操作来取得结果集中的数据,游标在PL/SQL的编程中非常的重要.游标分为显式游标和隐式游标 显示游标的使用需要4步: a,声明游标 声明游标时,可以将游标名与一个查询联系起来.定义游标的语法格式为:CURSOR 游标名[(参数1, …,参数n)] is 例:定义游标mycru Cursor mycur is Select sid from s
6
b,打开游标 打开游标用于执行查询,组成一个由满足查询检索标准的全部行组成的活动集.其语法格式为:Open游标名 例:打开游标mycur Oper mycur c,读取数据 可以利用Fetch命令来检索活动集中的一行,每执行一次Fetch操作,游标向前移动到活动集的下一行.其语法格式为: Fetch 游标名 into 变量列表 例: Fetch mycur into v_sid:
7
d,关闭游标 关闭游标能够使活动集成为未活动的状态,一旦游标关闭,就不能在它上面执行任何其他的操作,否则将会引起定义的例外INVALID_CURSOR.起语法格式为: Colse 游标名 例:关闭游标名mycur. Close mycur;
8
3.实验内容 ①用 While-Loop-End循环结构来求5的阶乘 ②利用游标找出表S中计算机系学生的名字 ③定义一函数实现如下功能。对于一个给定的SID值,查询该值在S表中是否存在,返回表中给定的SID值数目(可利用游标实现) ④写一段PL/SQL脚本程序调用上述函数。当向S表中插入一条记录时,首先调用函数check_SID检索该记录在S表中是否已经存在有SID字段对应的值,若不存在,则将该记录插入S表
9
①参考 declare a number:=0; b number:=1; begin while a<5 loop a:=a+1; b:=b*a; end loop; dbms_output.put_line(a||'! = '||b); end;
10
②参考 declare name varchar2(20); dept varchar2(20); cursor get_students is select sn, sd from s where sd='计算机'; begin open get_students; fetch get_students into name, dept; if get_students %notfound then dbms_output.put_line('数据库中目前尚没有计算机系的学生!'); else dbms_output.put_line('计算机系的学生如下:'); while get_students%found loop dbms_output.put_line(name); end loop; end if; close get_students; end;
11
③参考 create or replace function CHECK_SID (s_id in number) return number as num number; cursor get_num is select count(sid) from s where sid=s_id; begin open get_num; fetch get_num into num; return num; end CHECK_SID;
12
④参考 declare num number; begin num := CHECK_SID(23); if num=0 then insert into s values('23','李四','22','男','化学'); dbms_output.put_line('记录被成功添加!'); end; else dbms_output.put_line('SID已经存在,记录添加失败!'); end if;
Similar presentations