PLSQL高级内容
一、PLSQL接受动态输入的值
使用PL/SQL块也可以进行数据库的查询操作。
可以使用&来获得用户的输入。
语法:变量名:=&输入变量名;
范例:要求输入一个雇员的编号,之后显示出此雇员编号的姓名。
二、游标
游标:是内存中用于装载记录的一个区域。
如果要想使用游标,需要按照以下步骤进行处理:
1、声明游标
语法:cursor 游标名 is 查询语句
2、打开游标
语法:open 游标名
3、取得游标进行PL/SQL的使用,将内容放到变量之中
语法: FETCH cursor_name INTO variable[,variable,....]
??? 其中:cursor_name为游标名,variable为在声明中定义的变量名
4、关闭游标
语法:close 游标名;
问题:
对于基本数据类型number、varchar2都可以直接使用,但是现在需要一种类型,此种类型可以直接装下一行数据。
如果要想使用装下一行数据的话要使用rowtype表示类型。每一个rowtype表示一行数据,然后通过列名称访问。
掌握了rowtype之后就可以使用游标进行操作了,游标需要依次取出每一行记录。
范例:使用游标依次输出雇员表中的编号和姓名。
游标名%found:表示检查游标里面是否有记录,有的话返回true.
在循环游标之前需要将游标的指针先向下移动,同时把内容给了变量,之后还判断是否存在记录,如果存在记录则循环输出,输出之后继续向下移动游标,直到游标里没有内容为止。
范例:用loop循环执行上面的范例。
游标名%notfound:表示检查游标里面是否有记录,没有的话返回true.
使用以上的循环操作最麻烦的地方就在于需要手工开打游标并且手工关闭游标,手工移动游标,那么在oracle中为了简化这种操作,对于for循环提供了新的支持。
范例:用for循环实现上面的范例。
游标可以带参数,这种游标称为带参数的游标。
范例:输入一个部门编号,查询出该部门的雇员信息。
游标中可以使用%found,%notfound,%isopen,%rowcount.
范例:给上面的范例使用行号。
Rowcount和rownum的功能是一样的。
?
三、过程
过程=过程的声明+PLSQL块
语法:
create or replace procedure 过程名
?? ???? As
Begin
PLSQL语句
End;
/
范例:定义一个完整的过程,可以接收参数,并且根据雇员编号找出其工资。
调用过程
语法:exec 过程名(参数)
一个过程分为两个部分:创建和调用
范例:利用过程向部门表插入数据。
范例:进一步思考,部门的编号不应该重复,如果插入重复的部门编号,则应该提示信息。
过程的参数:
过程的参数可以分为三种类型:
In (默认,传递数值)
Out(输出值)
In out (带值进,也可以带值出)
语法:
create or replace procedure 过程名(变量名 in 类型,变量名 out 类型,)
?? ???? As
Begin
PLSQL语句
End;
/
调用带输出参数的过程
语法:
Declare
定义变量
Begin
exec 过程名(参数1,参数2...);
输出语句;
End;
/