DB2 9.5 SQL Procedure Developer 认证考试 735 准备,第2部分
2010-02-16 14:59:32 来源:WEB开发网下面是 SQL过程独有的特性:
SQL过程只能使用一种称作 SQL Programming Language (SQL PL)的语言来编写。关于这种语言的更多信息,可以在本系列的前一篇教程中找到(参见 参考资料)。因此,外部存储过程与 SQL过程主要的区别在于外部过程是使用一种特定的编程语言编写的,而 SQL过程是只能使用SQL语句编写。
SQL过程存放在真正的数据库中。外部存储过程依赖于文件系统中的一个外部库或可执行文件,而 SQL过程是数据库的一部分。
构建SQL过程不需要编译器,也不需要对特定的编程语言有深入的理解。所以,SQL过程的开发可能更快。
SQL过程总是被定义为NOT FENCED。这种类型的存储过程存在的风险更小,因为这种存储过程只能执行 SQL 操作,所以数据库服务器面临的风险是有限的。
SQL过程的可移植性更好。由于它们不依赖于特定的编程语言,每个数据库服务器上也就不需要用于这种语言的编译器或解释器,所以必要时更容易在每个服务器上重新创建这些存储过程。
SQL过程的结构
SQL过程的结构由 CREATE PROCEDURE语句、参数和复合语句组成。下面的伪图显示了 SQL过程的结构:
清单 1. SQL过程的结构
CREATE PROCEDURE proc_name
IN, OUT, INOUT parameters
optional clauses
SQL procedure body - compound statement
CREATE PROCEDURE语句定义存储在DB2 系统目录(例如 SYSCAT.PROCEDURES)中的存储过程的特征和逻辑。
清单 2. CREATE PROCEDURE命令语法
CREATE PROCEDURE--procedure-name----------------------------->
>--+----------------------------------------------------+--?---->
'-(--+------------------------------------------+--)-'
| .-,------------------------------------. |
| V .-IN----. | |
'---+-------+--parameter-name--data-type-+-'
+-OUT---+
'-INOUT-'
>--+-------------------------+--?------------------------------->
'-SPECIFIC--specific-name-'
.-DYNAMIC RESULT SETS 0--------. .-MODIFIES SQL DATA-.
>--+------------------------------+--?--+-------------------+--->
'-DYNAMIC RESULT SETS--integer-' +-CONTAINS SQL------+
'-READS SQL DATA----'
.-NOT DETERMINISTIC-. .-CALLED ON NULL INPUT-.
>--?--+-------------------+--?--+----------------------+--?----->
'-DETERMINISTIC-----'
.-INHERIT SPECIAL REGISTERS-. .-OLD SAVEPOINT LEVEL-.
>--+---------------------------+--?--+---------------------+---->
'-NEW SAVEPOINT LEVEL-'
.-LANGUAGE SQL-. .-EXTERNAL ACTION----.
>--?--+--------------+--?--+--------------------+--?------------>
'-NO EXTERNAL ACTION-'
>--+------------------------------+--?-------------------------->
'-PARAMETER CCSID--+-ASCII---+-'
'-UNICODE-'
>--| SQL-procedure-body |--------------------------------------><
这个图中最常用的部分是 procedure_name 和parameters (IN/OUT/INOUT)。
procedure_name是一个SQL标识符,可以用一个SCHEMA NAME 限定,其最大长度为128个字符。
parameters (IN/OUT/INOUT) 用于提供一种机制,将特定的数据发送到存储过程中,或者从存储过程中返回数据。系统目录中定义的每个存储过程通过名称和参数数量(不论数据类型)加以区分。在同一个模式中,两个具有相同名称的过程不能具有相同数量的参数。IN是默认的,不需要指定。例如,“CREATE PROCEDURE test1 (p1 INT, OUT p2 INT)” 定义一个具有一个输入参数和一个输出参数的存储过程。请注意,也可以不带参数创建存储过程,例如 “CREATE PROCEDURE test2”。
SPECIFIC--specific-name 为存储过程赋予一个特定的名称,而不是让 DB2 为它赋予一个系统生成的惟一的名称。当使用具有相同名称和不同参数数量的重载存储过程时,这一点很有用。当删除存储过程时,可以使用这个特定的名称。但是这个特定的名称不能用于调用该存储过程。限定形式是一个模式名称后面跟上一个时间和一个SQL标识符(长度限制为18个字符)。如果没有指定特定的名称,则由数据库管理器生成一个惟一的名称。这个惟一的名称是 'SQL' 后面加上一个字符时间戳:'SQLyymmddhhmmssxxx'。
CONTAINS SQL, READS SQL DATA, MODIFIES SQL DATA 表明存储过程对数据的访问权的级别。如果在存储过程中执行任意的数据操作,例如使用GLOBAL TEMPORARY TABLES,那么需要以 MODIFIES SQL DATA 选项指定该存储过程。如果在一个复合 SQL过程中使用BEGIN ATOMIC 子句,那么创建该存储过程时必须指定 MODIFIES SQL DATA。
SQL procedure body是存储过程的主体。其核心是一个复合语句。复合语句由关键词 BEGIN 和END 包围。这些语句可以是 ATOMIC或NOT ATOMIC的。默认情况下,它们是 NOT ATOMIC的。SQL Procedures 要求复合语句中的声明和可执行语句符合特定的顺序。
图 2 说明了 SQL过程中复合语句的构造格式:
图 2. 复合语句的构造格式
- ››sql server自动生成批量执行SQL脚本的批处理
- ››sql server 2008亿万数据性能优化
- ››SQL Server 2008清空数据库日志方法
- ››sqlserver安装和简单的使用
- ››SQL Sever 2008 R2 数据库管理
- ››SQL SERVER无法安装成功,sqlstp.log文件提示[未发...
- ››Sql Server中通过父记录查找出所有关联的子记录
- ››SqlServer触发器、存储过程和函数
- ››SQL Server 中的事务(含义,属性,管理)
- ››Sqlite数据库插入和读取图片数据
- ››Sql server 2005拒绝了对对象 'xx表' (数...
- ››Sql server 2005拒绝了对对象 'xx表' (数...
更多精彩
赞助商链接