第四章 存储过程和函数的总结

存储过程

一、概念:
存储过程是Oracle数据库的一种对象,是一种带名字的PL/SQL过程程序块,[视图 view 是 有名称的]
是能完成一定操作的一组SQL语句,它在创建后,编译一次后直接存储在数据库中,可以被有权用户在任何需要的地方调用。
不仅允许嵌入SQL语句,而且允许定义变量和常量,允许过程语言结构(条件分支语句和循环语句),允许使用处理Oracle异常。

二、优点:
① 提高效率。存储过程本身的执行速度很快,而且,调用存储过程可以大大减少同数据库的交互次数,减少网络开销。
② 提高安全性。假如将SQL语句混合在JSP代码中,一旦代码失密,同时也就意味着数据库结构失密。
③ 有利于SQL语句的重用。

三、语法顺序:
1.create 【or replace】procedure 存储名称(参数 数据类型) [有则替换,无则创建
参数 是为了存储过程之后的调用使用]
2.As / is 可以在此定义过程 的局部变量。在存储过程内的变量类型只能指定变量类型信息,但不能指定长度;
3.声明部分
4.begin –参数在执行部分进行连接
5.执行部分
6.exception 异常部分(可省略)
7.end ;
注释:
参数部分用于定义多个参数(如果没有参数,就可以省略)。如果没有指明参数的形式,则默认为IN。
参数有三种形式:
IN—向存储过程传递参数 输入的
OUT—往外传值 当为out输出类型时,采用begin end;进行调用 输出的
IN OUT—都能传值

四、调用存储过程:
call 存储过程名字(); –调用存储过程,Call的调用直接,同时有无参数都得加括号
execute 存储过程名字() –调用存储过程,要在command窗口下调用,要显示打印结果必须提前运行:set sreveroutput on ,同时无参数就不用加括号
存储过程在PL/SQL块中可以直接引用。
其他用户使用这些存储过程,必须经过授权

五、删除存储过程:
删除存储过程是 过程的创建者或者拥有drop any PROCEDURE系统权限的人。
drop procedure 存储过程名; –删除存储过程

六、参数的传递:顺序的和名称的传递
参数的值由调用者传递,传递的参数的个数、类型和顺序应该和存储过程定义时候保持一致。
如果顺序不一致,可以采用以下执行 语句可以改为:
execute CHANGE_SALARY(P_RAISE=>[等号尖括号]80,P_EMPNO=>7788);
可以看出传递参数的顺序发生了变化,并且明确指出了参数名和要传递的值
=>运算符左侧是参数名,右侧是参数表达式,这种赋值方法的意义较清楚。

函数
一.概述:
1、函数与存储过程的不同点
① 函数就是一个有返回值的过程,且是必须。
② 函数不仅可以作为plsql语句调用,同时符合约束的函数还可以作为sql表达式的一部分使用。而存储过程只能作为一个plsql语句调用。
③ 对于无参函数的定义和调用都没有圆括号,但无参存储过程需要加括号。

2、函数与存储过程的相同点
① 都存储在数据库中,并且可在PL/SQL块中调用,代码都有定义声明部分、可执行部分、异常处理部分。
② 都有in,out,in out三种参数,都可以使用缺省值(默认值 in),都可以通过out模式返回一个或多个值。
③ 都可以使用位置表示法和名称表示法进行参数的传递。
二、语法:

1.create 【or replace】function 函数名称(参数1,参数2..) [有则替换,无则创建

如果其中的某些参数有默认值,可以省略,定义其他的]
2.return 数据类型 –设置返回值的数据类型,不需要指定长度;
3.As / is
4.声明部分
5.begin –参数在执行部分进行连接
6.执行部分
7.return 变量; –返回值
8.exception 异常部分(可省略)
9.end ;
注意:如果用out的话必须放在PL/SQL语句块中,声明变量,把函数赋值给变量进行输出。

三、调用函数:
select getdname(10) from dual;
select getdname(deptno),ename from emp;
四、删除函数:
drop function 函数名;

猜你喜欢

转载自blog.csdn.net/weixin_42800008/article/details/81325265