DB2 SQL存储过程语法指南
创建SQL存储过程(CREATE PROCEDURE (SQL) statement )
语法格式如下:
>>-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-. .-7 OLD SAVEPOINT LEVEL-.
>--+---------------------------+--*--+---------------------+---->
'-7 NEW SAVEPOINT LEVEL-'
.-LANGUAGE SQL-. .-7 EXTERNAL ACTION----.
>--7 *--+--------------+--*--+--------------------+--*------------>
'-7 NO EXTERNAL ACTION-'
>--+------------------------------+--3 *-------------------------->
'-3 PARAMETER CCSID--+-3 ASCII---+-'
'-3 UNICODE-'
>--| SQL-procedure-body |--------------------------------------><
SQL-procedure-body:
|--SQL-procedure-statement--------------------------------------|
语法说明
1、procedure-name: 存储过程的名字,在同一个数据库的同一模式下,不能存在存储过程名相同参数数目相同的存储过程,即使参数的类型不同也不行。
2、(IN | OUT | INOUT parameter-name data-type,...) :传入参数
IN:输入参数
OUT:输出参数
INOUT:作为输入输出参数
parameter-name:参数名字,在此存储过程中唯一的标识符。
data-type:参数类型,可以接收SQL类型和创建的表。不支持LONG VARCHAR, LONG VARGRAPHIC, DATALINK, REFERENCE和用户自定义类型。
3、SPECIFIC specific-name:唯一的特定名称(别名),可以用存储过程名代替,这个特定名称用于dorp存储过程,或者给存储过程添加注视用,但不能调用存储过程。如果不指定,则数据库会自动生成一个yymmddhhmmsshhn时间戳的名字。推荐给出别名。
4、DYNAMIC RESULT SETS integer:指定存储过程返回结果的最大数量。存储过程中虽然没有return语句,但是却能返回结果集。
5、CONTAINS SQL, READS SQL DATA, MODIFIES SQL DATA: 指定存储过程中的SQL访问级别
CONTAINS SQL: 表示存储过程可以执行中,既不可读取 SQL 数据,也不可修改 SQL 数据。
READS SQL DATA: 表示存储过程可以执行中,可读取SQL,但不可修改 SQL 数据。
MODIFIES SQL DATA: 表示存储过程可以执行任何 SQL 语句。可以对数据库中的数据进行增加、删除和修改。
6、DETERMINISTIC or NOT DETERMINISTIC:表示存储过程是动态或者非动态的。动态的返回的值是不确定的。非动态的存储过程每次执行返回的值是相同的。
7、CALLED ON NULL INPUT:表示可以调用存储过程而不管任何的输入参数是否为NULL,并且,任何的OUT或者INOUT参数可以返回一个NULL或者非空值。检验参数是否为NULL是在过程中进行的。
8、INHERIT SPECIAL REGISTERS:表示继承专用寄存器。
9、OLD SAVEPOINT LEVEL or NEW SAVEPOINT LEVEL:建立存储点。OLD SAVEPOINT LEVEL是默认的存储点。
10、LANGUAGE SQL:指定程序的主体用的是SQL语言。
11、EXTERNAL ACTION or NO EXTERNAL ACTION:表示存储过程是否执行一些改变理数据库状态的活动,而不通过数据库管理器管。默认是 EXTERNAL ACTION。如果指定为NO EXTERNAL ACTION ,则数据库会确定最最佳优化方案。
12、PARAMETER CCSID:指定所有输出字符串数据的编码,默认为UNICODE编码数据库为PARAMETER CCSID UNICODE ,其他的数据库默认为PARAMETER CCSID 3 ASCII。
13、SQL-procedure-body:存储过程的主体
例子1:产生一个SQL存储过程,返回员工的平均薪水. 返回所有员工超过平均薪水的数额,结果集包括name, position, and salary字段(参考数据库为db2的示例数据库sample)。
CREATE PROCEDURE MEDIAN_RESULT_SET (OUT medianSalary DOUBLE)
RESULT SETS 1
LANGUAGE SQL
BEGIN
DECLARE v_numRecords INT DEFAULT 1;
DECLARE v_counter INT DEFAULT 0;
DECLARE c1 CURSOR FOR
SELECT CAST(salary AS DOUBLE)
FROM staff
ORDER BY salary;
DECLARE c2 CURSOR WITH RETURN FOR
SELECT name, job, CAST(salary AS INTEGER)
FROM staff
WHERE salary > medianSalary
ORDER BY salary;
DECLARE EXIT HANDLER FOR NOT FOUND
SET medianSalary = 6666;
SET medianSalary = 0;
SELECT COUNT(*) INTO v_numRecords
FROM STAFF;
OPEN c1;
WHILE v_counter < (v_numRecords / 2 + 1)
DO
FETCH c1 INTO medianSalary;
SET v_counter = v_counter + 1;
END WHILE;
CLOSE c1;
OPEN c2;
END
--------------------
原文如下:
CREATE PROCEDURE (SQL) statement
The CREATE PROCEDURE (SQL) statement defines an SQL procedure at the current server.
Invocation
This statement can be embedded in an application program or issued through the use of dynamic SQL statements. It is an executable statement that can be dynamically prepared only if DYNAMICRULES run behavior is in effect for the package (SQLSTATE 42509).
Authorization
The privileges held by the authorization ID of the statement must include at least one of the following:
2 BINDADD privilege on the database, and one of the 2 following: 2 2 2 IMPLICIT_SCHEMA privilege on the database, if the implicit 2 or explicit schema name of the procedure does not exist 2 CREATEIN privilege on the schema, if the schema name of the 2 procedure refers to an existing schema
SYSADM or DBADM authority
If the authorization ID of the statement does not have SYSADM or DBADM authority, the privileges held by the authorization ID of the statement must also include all of the privileges necessary to invoke the SQL statements that are specified in the procedure body.
Syntax
>>-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-. .-7 OLD SAVEPOINT LEVEL-.
>--+---------------------------+--*--+---------------------+---->
'-7 NEW SAVEPOINT LEVEL-'
.-LANGUAGE SQL-. .-7 EXTERNAL ACTION----.
>--7 *--+--------------+--*--+--------------------+--*------------>
'-7 NO EXTERNAL ACTION-'
>--+------------------------------+--3 *-------------------------->
'-3 PARAMETER CCSID--+-3 ASCII---+-'
'-3 UNICODE-'
>--| SQL-procedure-body |--------------------------------------><
SQL-procedure-body:
|--SQL-procedure-statement--------------------------------------|
Description
procedure-name
Names the procedure being defined. It is a qualified or unqualified name that designates a procedure. The unqualified form of procedure-name is an SQL identifier (with a maximum length of 128). In dynamic SQL statements, the CURRENT SCHEMA special register is used as a qualifier for an unqualified object name. In static SQL statements, the QUALIFIER precompile/bind option implicitly specifies the qualifier for unqualified object names. The qualified form is a schema-name followed by a period and an SQL identifier.
The name, including the implicit or explicit qualifiers, together with the number of parameters, must not identify a procedure described in the catalog (SQLSTATE 42723). The unqualified name, together with the number of parameters, is unique within its schema, but does not need to be unique across schemas.
If a two-part name is specified, the schema-name cannot begin with 'SYS'; otherwise, an error is returned (SQLSTATE 42939).
(IN | OUT | INOUT parameter-name data-type,...)
Identifies the parameters of the procedure, and specifies the mode, name, and data type of each parameter. One entry in the list must be specified for each parameter that the procedure will expect.
It is possible to register a procedure that has no parameters. In this case, the parentheses must still be coded, with no intervening data types. For example:
CREATE PROCEDURE SUBWOOFER() ...
No two identically-named procedures within a schema are permitted to have exactly the same number of parameters. A duplicate signature raises an SQL error (SQLSTATE 42723).
For example, given the statements:
CREATE PROCEDURE PART (IN NUMBER INT, OUT PART_NAME CHAR(35)) ...
CREATE PROCEDURE PART (IN COST DECIMAL(5,3), OUT COUNT INT) ...
the second statement will fail because the number of parameters in the procedure is the same, even if the data types are not.
IN | OUT | INOUT
Specifies the mode of the parameter.
If an error is returned by the procedure, OUT parameters are undefined and INOUT parameters are unchanged.
IN
Identifies the parameter as an input parameter to the procedure. Any changes made to the parameter within the procedure are not available to the calling SQL application when control is returned. The default is IN.
OUT
Identifies the parameter as an output parameter for the procedure.
INOUT
Identifies the parameter as both an input and output parameter for the procedure.
parameter-name
Specifies the name of the parameter. The parameter name must be unique for the procedure (SQLSTATE 42734).
data-type
Specifies the data type of the parameter.
SQL data type specifications and abbreviations that can be specified in the data-type definition of a CREATE TABLE statement, and that have a correspondence in the language that is being used to write the procedure, may be specified.
1 LONG VARCHAR, LONG VARGRAPHIC, DATALINK, REFERENCE, and 1 user-defined structured types are not supported (SQLSTATE 429BB).
SPECIFIC specific-name
Provides a unique name for the instance of the procedure that is being defined. This specific name can be used when dropping the procedure or commenting on the procedure. It can never be used to invoke the procedure. The unqualified form of specific-name is an SQL identifier (with a maximum length of 18). The qualified form is a schema-name followed by a period and an SQL identifier. The name, including the implicit or explicit qualifier, must not identify another procedure instance that exists at the application server; otherwise an error (SQLSTATE 42710) is raised.
The specific-name can be the same as an existing procedure-name.
If no qualifier is specified, the qualifier that was used for procedure-name is used. If a qualifier is specified, it must be the same as the explicit or implicit qualifier for procedure-name, or an error (SQLSTATE 42882) is raised.
If specific-name is not specified, a unique name is generated by the database manager. The unique name is SQL followed by a character timestamp, SQLyymmddhhmmsshhn.
DYNAMIC RESULT SETS integer
Indicates the estimated upper bound of returned result sets for the procedure.
相关推荐
### DB2 SQL存储过程语法官方权威指南 #### 一、概述 DB2是IBM公司推出的一款关系型数据库管理系统,广泛应用于各种大型企业级应用中。其中,存储过程是DB2中一个非常重要的特性,它允许开发者在数据库内编写可重用...
本篇将深入解析DB2 SQL存储过程的创建语法及其相关知识点。 1. **创建存储过程的语法** 创建存储过程的语句以`CREATE PROCEDURE`开头,接着是存储过程的名称,这是必须提供的。在DB2中,每个存储过程必须具有一个...
DB2存储过程是一种在数据库管理系统中预编译的SQL代码集合,它允许开发人员封装复杂的业务逻辑和数据处理操作,并可以被多次调用。DB2作为一款强大的关系型数据库管理系统,其存储过程功能强大,提高了应用程序的...
#### 标题:IBM DB2 SQL存储过程 IBM DB2 SQL存储过程是数据库管理系统(DBMS)中一个非常重要的组成部分,它允许开发者编写可重用的代码模块来执行复杂的数据库操作。在IBM DB2环境下,存储过程能够提高数据处理...
本文将围绕“DB2存储过程语法大全”这一核心主题,深入探讨存储过程的概念、类型以及动态SQL语句的应用,旨在为数据库开发者提供全面而深入的知识点。 #### 一、存储过程概述 存储过程是一种在数据库中存储的预先...
### DB2存储过程基本语法详解 在数据库管理与应用程序开发领域,存储过程是提升数据处理效率、增强数据安全性和简化复杂操作的关键技术之一。DB2作为IBM推出的一款高性能关系型数据库管理系统,其存储过程功能强大...
DB2 存储过程官方教程是 DB2 存储过程的基础文档,涵盖了基本变量定义、基本语法描述等内容,适合初学者学习和实践。 变量声明是 DB2 存储过程中的一种基本概念,用于声明本地变量,以支持所有 SQL 逻辑。在 SQL ...
2. "DB2 SQL学习手册.pdf":这本手册可能侧重于DB2 SQL在实际项目中的应用,可能包含针对特定场景的SQL查询优化策略,以及与DB2其他功能(如事务、存储过程、存储函数等)的集成。 3. "学习笔记:DB2 9 基础.pdf":...
这个命令提供了一个更加便捷的方式来获取存储过程的定义脚本,其语法如下: ```shell db2look -d <database_name> -e -o ``` - `-d`: 指定目标数据库的名称。 - `-e`: 表示导出存储过程。 - `-o`: 指定输出文件的...
4. `DB2 SQL存储过程语法官方权威指南(翻译).mht`:这个文件提供了DB2 SQL存储过程的官方语法参考,可能包括创建、修改和执行存储过程的步骤,以及各种内置函数和控制结构的用法。 5. `freelance graphics - ebu-...
DB2存储过程、表空间与SQL是数据库管理中的核心概念,尤其在企业级数据库应用中,它们的重要性不言而喻。DB2作为IBM推出的关系型数据库管理系统,广泛应用于金融、电信等关键领域。本专题旨在深入探讨DB2中存储过程...
DB2存储过程是一组为了完成特定功能的SQL语句集合,通过存储在数据库中,可被应用程序或其他存储过程调用。DB2存储过程使用SQL Procedure Language (SQLPL),这是SQL Persistent Stored Module (PSM) 标准的一个子集...
《db2 SQL语法和语句块大全》是Graeme Birchall为DB2 UDB V8.1编写的详尽指南,重点介绍了SQL语法、函数功能以及语句块的运用,旨在帮助数据库管理员、开发人员及爱好者深入理解并熟练掌握DB2的SQL语言特性。...
下面将详细介绍SQL Server 2000和DB2中分页存储过程的实现,以及DB2如何自动生成流水号。 首先,让我们看看SQL Server 2000的分页存储过程。在SQL Server 2000中,由于没有内置的OFFSET和FETCH NEXT功能,我们通常...
DB2存储过程是一种预编译的SQL代码集合,它封装了复杂的数据库操作,可以在需要时被应用程序调用。存储过程的使用有多个显著优势。首先,它可以减少客户端和服务器之间的网络通信,因为处理过程在服务器端执行,减少...