一、过程与函数区别
1.过程可以有0~N个返回参数,通过OUT or IN OUT参数返回;函数有且仅有1个返回值,通过return 语句返回。
2.调用过程时,可做为单独的语句执行;调用函数时,函数必须把返回结果赋值给一个变量。
3.在SQL语句中,可以不能调用过程;在SQL语句中,可以直接调用函数。
二、过程与函数
过程[procedure]及函数[function]这两种方案对象均由SQL 语句及PL/SQL 语言构件组合而成,存储于数据库中,运行时作为一个整体,用于解决某个问题,或完成一组相关的操作。调用者可以在调用过程及函数时为其提供参数,参数可以专用于输入值,专用于输出值,或同时用于输入及输出值。在过程与函数中,用户既可以发挥SQL 的灵活性与易用性,也能够发挥结构化编成语言的过程控制能力。过程与函数基本类似,唯一区别在于函数总会向调用者返回一个值,而过程无此特性。
三、存储过程在以下方面具有优势:
1.利用定义者权限过程[definer's rights procedure]确保数据安全
使用存储过程有助于确保数据安全。具备数据库对象访问权限的用户可以定义存储过程或函数,其他用户通过已定义的过程访问数据,从而达到限制用户对数据库操作的目的。
例如,现有一个过程能够更新某数据表,管理员不必授予用户直接访问数据表的权限,而是授予用户访问此过程的权限。当用户调用此过程时,过程以其拥有者的权限运行。具备执行此过程权限(但不具备查询,更新,及删除底层表数据权限)的用户可以调用过程对表进行操作,但不能以其他方式操作表数据。
2.通过调用者权限过程[invoker's rights procedure]使用调用者的权限及方案上下文
调用者权限过程可以继承其调用者的权限及方案上下文。即调用者权限过程不与特定的用户或方案绑定,每次执行时利用当前用户的权限操作当前用户的方案对象。应用程序开发者可以通过调用者权限过程使应用逻辑集中化,即便底层数据分散于不同的用户方案中。
例如,以经理身份登录的用户运行针对employees表的更新过程时可以修改薪水数据,而以职员身份登录的用户运行同样的的更新过程时只能修改地址数据。
3.提升性能