DB2存储过程——参数详解

摘要:
虽然存储过程中没有return语句,但它可以返回结果集。READSSQLDATA:表示可以执行存储过程,读取SQL,但不能修改SQL数据。

DB2存储过程——参数详解第1张

语法说明
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。

例子1:产生一个SQL存储过程,返回员工的平均薪水. 返回所有员工超过平均薪水的数额,结果集包括name, position, and salary字段。

    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;

免责声明:文章转载自《DB2存储过程——参数详解》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇split命令详解在Linux终端命令行下播放音乐的命令(Ubuntu)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

C++连接mysql数据库的两种方法

现在正做一个接口,通过不同的连接字符串操作不同的数据库。要用到mysql数据库,以前没用过这个数据库,用access和sql server比较多。通过网上的一些资料和自己的摸索,大致清楚了C++连接mysql的方法。可以通过2种方法实现。 第一种方法是利用ADO连接, 第二种方法是利用mysql自己的api函数进行连接。 第一种方法可以实现我当前的需求,通...

Oracle系列之存储过程

涉及到表的处理请参看原表结构与数据Oracle建表插数据等等 判断是否是素数: create or replace procedure isPrime(x number) as flag number:=1; begin if x<2 then dbms_output.put_line('not prime'); else for i in...

使用Pls_Integer的好处

如果你要做循环的记数器,可以使用pls_integer. pls_interger,binary_integer,number中,pls_integer速度最快。   转的别人的: Binary_Integer 与 Pls_Integer 都是整型类型. Binary_Integer类型变量值计算是由Oracle来执行,不会出现溢出,但是执行速度较慢,因为...

【讲座】朱正江——基于LC-MS的非靶向代谢组学

本次课程主题为《基于LC-MS的非靶向代谢组学》,主要分为代谢组学简介、代谢组学技术简介、非靶向代谢组学方法和数据采集、非靶向代谢组学数据分析和代谢物结构鉴定几个方面。 一、代谢组简介 基因组学——Whatcanhappen;转录组学——Whatappearstobehappening;蛋白组学——Whatmakeithappen;代谢组学——What...

ES数据架构与关系数据库Mysql

ES数据架构的主要概念(与关系数据库Mysql对比)     MySQL     ElasticSearch Database Index Table Type Row Document Column Field Schema Mapping Index Everything is indexed SQL Query DSL...

mysql命令详解

mysqld.exe 和 mysql.exe 有什么区别? mysqld.exe 是MySQL后台程序(即MySQL服务器)。要想使用客户端程序,该程序必须运行,因为客户端通过连接服务器来访问数据库。 mysql.exe 是MySQL自带的命令行客户端工具,是交互式输入SQL语句或从文件以批处理模式执行它们的命令行工具。 简单来说:mysqld是用来启...