1、函数和过程允许业务逻辑作为存储过程记录在数据库中,并在数据库内执行。

2、数据库的存储过程有几个优点,它允许多个应用访问这些过程,允许当业务规则发生变化时进行单和点的修改,而不必改变应用程序的其他部分。应用代码可以调用存储过程,而不是直接去更新数据库关系。

3、大多数数据库都实现了它们自己非标准版本的语法,oracle(PL/SQL),Microsoft SQL Server(TransactSQL),PostgreSQL(PL/pgSQL)。概念在不同的实现上都是适用的,只是语法上有所区别。

4、SQL标准支持返回关系作为结果的函数,这种函数称为表函数。通常以表为值的函数可以被看作带参数的视图,它通过允许参数把视图的概念更加一般化。

5、create function dept_count(dept_name varchar(20)) retutns integer begin declare d_count integer; select count(*) into d_count from instructor where instructor.dept_name=dept_name end。

6、create function instructor_of(dept_name varchar(20)) returns table(ID varchar(5),name varchar(20),dept_name varchar(20),salary numeric(8,2)) 

return table(select Id,name,dept_name,salary from instructor where instructor.dept_name=instructor_of.dept_name)。

7、SQL也支持存储过程,关键词in和out分别表示待赋值的参数和为返回结果而在过程中设置值的参数。

8、create procedure dept_count_proc(in dept_name varchar(20),out d_count integer)

begin  select count(*) into d_count from instructors where instructor.dept_name=dept_count_proc.dept_name  end

9、可以从一个SQL过程中或者嵌入式SQL中使用call语句调用过程。

10、函数和过程都允许重载。

11、变量通过declare语句进行声明,可以是任意的合法的SQL类型,使用set语句进行赋值。

12、一个复合语句会包含begin。。。end的形式,在begin和end之间会包含复杂的SQL语句。

13、可以在复合语句中声明局部变量,begin atomic。。。end的复合语句可以确保其中包含的所有语句作为一个单一事务来执行。 

14、while布尔表达式 do end while。repeat 语句序列 until 布尔表达式 end repeat。for循环,允许对查询的所有结果重复执行。

15、程序每获取查询结果的一行,并存入for循环变量中,语句leave可用来退出循环,而iterate表示跳出剩余语句从循环的开始进入下一个元组。

16、if..then..else语句,if布尔表达式then语句或复合语句 elif then语句或复合语句 else 语句或符合语句 end if。

17、SQL还支持发信号通知异常条件,以及声明句柄来处理异常。

18、

SQL允许我们用一种程序设计语言定义函数,这种方式定义的函数会比SQL中定义的函数效率更高,而且在SQL中执行的计算可以由这些函数执行。


19、用程序设计语言定义并在数据库系统之外编译的函数可以由数据库系统代码进行加载和执行。


20、

当今的一些数据库系统支持外部语言例程在查询执行过程中的沙盒里执行。