精华内容
下载资源
问答
  • DB2创建存储过程

    千次阅读 2020-04-26 17:55:47
    声明一个存储过程:CREATE PROCEDURE 存储过程名(IN 输入变量名 输入变量类型,OUT 输出变量名 输出变量类型) 存储过程名后面是存储过程属性列表,常用的有:LANGUAGE SQL、MODIFIES SQL DATA、RESULT SETS 1(返回结果...

    DB2中创建存储过程:

    创建存储过程: CREATE OR REPLACE PROCEDURE/CREATE PROCEDURE 存储过程名(IN 输入变量名 输入变量类型 | OUT 输出变量名 输出变量类型)

    存储过程名后面是存储过程属性列表,常用的有:LANGUAGE SQL、MODIFIES SQL DATA、RESULT SETS 1(返回结果集个数)

    存储过程主体以begin开始,以end结束

    调用存储过程:CALL 存储过程名(参数1,参数2,参数n)

    刚开始接触存储过程,了解下存储过程的语法,存储过程主体的逻辑能用SQL写出来,存储过程就好创建了

    CREATE PROCEDURE TDW.P_XXXX_DD(IN parameter1 data_type1,parameter2 data_type2...) --指定存储过程输入参数的个数、数据类型
    SPECIFIC  TEST_CREATE_PROCEDURE --给存储过程指定别名
    LANGUAGE SQL --指定用纯SQL编写存储过程
    NOT DETERMINISTIC --表示存储过程是非动态的
    EXTERNAL ACTION  --表示存储过程可执行一些不通过数据库管理器管而改变数据库状态的活动 ;存储过程的EXTERNAL ACTION or NO EXTERNAL ACTION 默认是EXTERNAL ACTION
    MODIFIES SQL DATA  --表示存储过程可以执行任何SQL语句
    
    BEGIN  --例如存储过程的主体是 对数据库中的数据按要求加工一下insert到另一张表中
    delete from TDW.P_XXXX_DD where DT_DAY_ID between parameter1 and parameter2;
    INSERT INTO TDW.P_XXXX_DD (DT_DAY_ID, ORG_COMPANY_ID, ORDER_QTY, ...)
    SELECT c.DT_DAY_ID, b.ORG_COMPANY_ID, a.ORDER_QTY, ... FROM TDW.DW_XX_MX a 
    	left join TDW.DW_XX_TEMP b on a.ID = b.ID 
    	inner join 
    	(select ORDER_CD, DT_DAY_ID , sum()... from TDW.DW_XX_ORDER where ORDER_QTY <> 0 group by ORDER_CD,DT_DAY_ID,...) c on a.XXA = c.XXC
    	where c.DT_DAY_ID between parameter1 and parameter2
    	group by c.DT_ORDERDAY_ID,b.ID,...;
    
    END
    
    

    存储过程语法参数说明:

    • DETERMINISTIC or NOT DETERMINISTIC :表示存储过程是动态或者非动态的。动态的返回的值是不确定的;非动态的存储过程每次执行返回的值是相同的。
    • INHERIT SPECIAL REGISTERS :表示继承专用寄存器。
    • SPECIFIC specific_name 特定名称 别名,这个特定名称用于dorp存储过程,或者给存储过程添加注释用;但不能调用存储过程。如果不指定,则数据库会自动生成一个yymmddhhmmsshhn时间戳(例如SQL200318161629437)名字。
    • EXTERNAL ACTION or NO EXTERNAL ACTION :表示存储过程是否不通过数据库管理器管执行改变数据库状态的活动;默认是 EXTERNAL ACTION;如果指定为 NO EXTERNAL ACTION,则数据库会确定最最佳优化方案。
    • DYNAMIC RESULT SETS INTEGER:指定存储过程返回结果的最大数量;存储过程中虽然没有return语句,但是却能返回结果集
    • CONTAINS SQL: 指定存储过程中的SQL访问级别,这个表示存储过程可以执行中,既不可读取SQL数据,也不可修改SQL的数据。
    • READS SQL DATA: 表示存储过程可以执行中,可读取SQL,但不可修改SQL的数据。
    • MODIFIES SQL DATA: 表示存储过程可以执行任何SQL语句;可以对数据库中的数据进行增加、删除和修改。
    • CALLED ON NULL INPUT:表示可以调用存储过程而不管任何的输入参数是否为 NULL,并且任何参数可以返回一个NULL或者非空值。检验参数是否为NULL是在过程中进行的。
    • LANGUAGE SQL:指定程序的主体用的是SQL语言
    • 存储过程变量的定义:变量使用前必须先定义,方法为:DECLARE 变量名 变量的数据类型 (default 默认值)
      DECLARE Var1 INTEGER DEFAULT 0;
      DECLARE Var2  char(8);
    

    存储过程主体中常用的逻辑表达式:

    1.if 表达式:

     if 条件1 then
          结果1
        elseif 条件2 then
          结果2
        else
          结果3
        end if;
    

    2.case表达式:

        case 变量名 when
               变量值1 then
               . . .
        when
               变量值2 then
               . . .
        else
               . . .
        end case;
    

    or

        case when
               变量名=变量值1 then
               . . .
        when
               变量名=变量值2 then
               . . .
        else
               . . .
        end case;
    

    3.for 表达式:

        for 循环名 as
           游标名或select 表达式
        do
           sql表达式
        end for;
    
    

    4.while表达式:

        while 条件表达式 do
               逻辑体;
         end while

    5.LOOP表达式:

       LOOP... END LOOP

    存储过程中关于游标:
    定义游标:DECLARE 游标名 CURSOR FOR Select 语句;
    打开游标: OPEN 游标名;
    取值:FETCH 游标名 INTO 变量列表
    注:游标的申明如果放在中间段,要用begin。。。end; 段分割标志分割开;

    存储过程中建立临时表:
    DECLARE GLOBAL TEMPORARY TABLE TABLE_NAME --指定临时表的名称.
    AS (FULLSELECT) DEFINITION ONLY --指定临时表的定义
    EXCLUDING IDENTITY COLUMN ATTRIBUTES --指定不是从源表定义中复制的恒等列.
    ON COMMIT DELETE ROWS --指定如果沒有打开WITH GOLD光标,则刪除表的所有行
    NOT LOGGED IN 临时表空间名 with replace; --指定不对表的改变进行记录,With replace选项会隐式的自动删除该临时表

    DB2存储过程中的几个全局变量:
    ROW_COUNT --影响行数
    RETURN_STATUS --返回状态
    SQLSTATE—SQL --返回错误代码 注:使用前必先定义 declare sqlstate char(5); declare state char(5);

    DECLARE not_found CONDITION FOR SQLSTATE '53089'; --储存过程指定的宿主变量参数的个数不等于预期的参数个数
    DECLARE not_found CONDITION FOR SQLSTATE '02000'; --没有找到满足SQL语句的行
    DECLARE EXIT HANDLER FOR NOT FOUND SET  Salary = 6666;
    

    抽取、提交存储过程:

    db2 "get routine into 文件名 from procedure 存储过程名" --抽取存储过程
    db2 "put routine from 文件名" --提交存储过程

    展开全文
  • DB2存储过程基本语法

    2013-10-08 20:23:38
    DB2 存储过程的基本语法,简单 易学。
  • db2构建存储过程过程:先用自己的翻译命令把.spp 文件翻译生成.sqc文件,然后用预编译命令编译生成.c文件,然后用绑定命令生成绑定.bnd文件,然后从DB2_SQLROUTINE_COMPILER_PATH参数指定的文件中所描述的路径中去...

    db2构建存储过程过程:先用自己的翻译命令把.spp 文件翻译生成.sqc文件,然后用预编译命令编译生成.c文件,然后用绑定命令生成绑定.bnd文件,然后从DB2_SQLROUTINE_COMPILER_PATH参数指定的文件中所描述的路径中去寻找c的编译器(window 下是vcvars32.bat,unix 下是sr_cpath文件),如果DB2_SQLROUTINE_COMPILER_PATH指定什么文件,则用默认的文件,win下是sr_cpath.mak(实例名SQLLIBfunctionroutine),unix下是sr_path(实例名/sqllib/function/routine/),

    编译成功后生成.dll,并帮定到数据库上,就成功了。

    spp-->.sqc->.c和.bnd->.dll(window下)

    .spp用的是纯sql,开发速度快易阅读,但是翻译成的.sqc文件很累赘,没有自己写的.sqc精练,执行效率也相应较低,java的IDE环境容易死掉。

    下面是我们的实例:

    AIX上db2没有设置DB2_SQLROUTINE_COMPILER_PATH这个参数,

    也就是说AIX上db2编译存储的时候用的参数是值,就是

    实例名/sqllib/function/routine/sr_cpath 这个文件

    sr_cpath的内容如下:

    bin/sh

    PATH=$PATH:/usr/vacpp/bin

    PATH=$PATH:/usr/ibmcxx/bin

    PATH=$PATH:/usr/lpp/xlC/bin

    export PATH

    就是设置AIX上的编译路径,sr_cpath的功能就像是我们win上vcvars32.bat。

    你可以在window的机器上的:”实例名SQLLIBfunctionroutinesqlproc数据库名模式名“下找到编译好的*.dll文件还有一些中间文件.sqc和c。

    再看一下.log文件,里面就有整个编译的过程,就知道在window下db2编译存储过程的整个步骤了。

    这个.log文件也可以在AIX上相应的位置找到,通过这个文件就可以知道在AIX上用的是什么编译指令来编译你的存储过程了。

    也可以看到B2_SQLROUTINE_COMPILER_PATH这个参数的内容。

    所以我估计在AIX上可以成功编译,就是就是装了一些c的编译软件,所以编译的时候db2用sr_cpath的内容搜索c编译器的位置就可以找到了。

    在hp上也有这个文件其内容是

    #!/bin/sh

    PATH=/opt/aCC/bin:$PATH

    # PATH=$PATH:/opt/ansic/bin

    export PATH

    在.log文件找到了编译的指令:

    aCC +DAportable +a1 +z -ext -I/db2inst/db2inst1/sqllib/include P0538300.c -b -o P0538300 -L/db2inst/db2inst1/sqllib/lib -ldb2

    db2就会在sr_cpath所指定的路进去找aCC这编译的文件,aCC是hp自己的c++编译器。但是在这边hp机器上没有找到sr_cprog指定的c++编译器aCC。不过在hp上还有一个c的编译文件ld ,我编的一个hello程序就是用他编译通过的。

    注:我编译的时候还是用cc命令编译的,shell会根据当前系统的编译器安装情况来决定cc编译指令调用的是那个编译器(可能是一个变量)。

    展开全文
  • DB2存储过程

    千次阅读 2018-05-12 16:21:59
    存储过程可以提高程序性能,存储过程创建及运行在数据库服务器上,可以减少数据库存取流量。并且可以帮助集中处理业务逻辑,如果对存储过程进行更改,则使用该存储过程的所有客户机应用都立即可以应用这些更改。存储...

    存储过程可以提高程序性能,存储过程创建及运行在数据库服务器上,可以减少数据库存取流量。并且可以帮助集中处理业务逻辑,如果对存储过程进行更改,则使用该存储过程的所有客户机应用都立即可以应用这些更改。
    存储过程分为外部存储过程和SQL存储过程,SQL存储过程由SQL语句和控制SQL语句组成。SQL存储过程必须用CREATE PROCEDURE语句进行注册。一旦存储过程注册后,在系统索引表中的信息就会独立于程序而存在
    存储过程的创建语法:
    create procedure procedure_name
    ({[in|out]parameter_name datatype}[...n])
    [specific specific_name]
    [dynamic result sets [0|integer]]
    SQL_procedure_body

    procedure_name:存储过程名称,不能存在存储过程名字和参数数目都相同的存储过程,即使参数的类型不同也不可以。
    specific_name:存储过程别名,别名可以用于drop存储过程或者给存储过程添加注释,但是不能调用。在同名存储过程时最好起上别名,若没有指定,则会自动分配类似与"SQL180512150922456",既SQL+时间戳"yymmddhhmmsshhn"
    dynamic result sets:指定存储过程返回结果集的最大数量,存储过程虽然没有return语句,但是可以返回结果集。
    SQL_procedure_body:存储过程的主体,其核心是一组复合语句,以关键字 beginend定界,这些语句可以是atomic或者not atomic的,默认是not  atomic
    存储过程的调用:
    CALL procedure_name (入参,?)
    规则:
    变量和参数必须严格匹配
    所有参数都必须有值(out参数需要占位符?)
    重载存储过程的区分和参数的匹配取决于参数的目录.
    1:创建无参存储过程
    DB2语法:
    --/
    CREATE  PROCEDURE pro2()
    	BEGIN
    		UPDATE t_cps_cupsicacinfo SET CHKDATE='20180511';
    	END;
    /
    调用:db2 "call pro2()"

    附Mysql创建方式:
    mysql语法:
    DELIMITER //
    CREATE  PROCEDURE pro2()
    	BEGIN
    		UPDATE t_cps_cupsicacinfo SET CHKDATE='20180511';
    	END;//
    DELIMITER ;
    调用:call pro2();

    2:创建出参存储过程
    DB2语法:
    --/
    CREATE  PROCEDURE pro1(out v_result VARCHAR(10))
     BEGIN
         if ((select count(THIRDSYSTIME) from T_CPS_CUPSICACINFO where THIRDSYSTIME='20180511')<=5)
         then set v_result='昨天交易笔数小于5';
         else set v_result='昨天交易笔数大于5';
         end if;
    END;
    /
    调用:db2 "call pro1(?)"

    附Mysql创建方式:
    mysql语法:
    DELIMITER //
    CREATE  PROCEDURE pro1(out v_result VARCHAR(10))
     BEGIN
         if ((select count(THIRDSYSTIME) from T_CPS_CUPSICACINFO where THIRDSYSTIME='20180511')<=5)
         then set v_result='昨天交易笔数小于5';
         else set v_result='昨天交易笔数大于5';
         end if;
    END;//
    DELIMITER ;
    调用:call pro1(@a);
    select @a;

    Mysql带返回参数的存储过程调用是@+占位参数,并且需要在Call之后进行Select才可以看见返回结果
    3:创建入参存储过程
    
    CREATE  PROCEDURE pro3(IN CHKDATE VARCHAR(10))  
        BEGIN  
            UPDATE t_cps_cupsicacinfo SET CHKDATE=CHKDATE;  
        END;//  
    



    展开全文
  • DB2存储过程官方教程

    2012-11-13 17:38:21
    DB2存储过程基础文档、基本变量定义、基本语法描述。适合初学者。
  • DB2存储过程-基础教程

    2013-04-23 17:23:47
    在本教程中,您学习了用于编写过程、用户定义函数和触发器的SQL Procedural Language。您学习了SQL Procedure Language 的所有基本要素,包括变量声明和赋值、语法和使用以及用于控制过程逻辑的流程的条件语句和迭代...
  • db2存储过程开发

    2017-12-06 16:50:47
    银行db2存储过程开发内部专用指导手册,难得的内部规范材料
  • 1.连接好db2数据库后,选中希望创建存储过程的schemas,右击Stored Procedures,选中create procedures, 会创建出一个基础格式的db2存储过程,如下图: 2.修改BEGIN 和END之间的sql语句 DECLARE clientcur ...

    使用的是DbVisualizer来编写db2的存储过程

    1.连接好db2数据库后,选中希望创建存储过程的schemas,右击Stored Procedures,选中create procedures,

      会创建出一个基础格式的db2存储过程,如下图:

    2.修改BEGIN 和END之间的sql语句

    DECLARE clientcur CURSOR WITH RETURN TO CALLER
    FOR SELECT ORGANNO, SUPORGANNO FROM BS_ORG;
    OPEN clientcur;

    3.点击保存并执行,会提示如下警告,警告的意思是需要设置返回结果集的数量

    OK. No rows were affected
    SQLWarning: 
    Code: 464 SQL State: 0100E --- Procedure "TEST" returned "1" query result sets, which exceeds the defined limit "0".. SQLCODE=464, SQLSTATE=0100E, DRIVER=4.22.29

    4.设置结果集数量(DYNAMIC RESULT SETS 数量):这个数量代表的是结果集的个数,不是结果集中有多少条的意思

    点击保存运行就可以看到查询的结果

    5.附(DYNAMIC RESULT SETS 2)测试结果

     

     

    展开全文
  • 博文链接:https://acme1921209.iteye.com/blog/97776
  • db2 存储过程 db2 存储过程 db2 存储过程
  • db2存储过程简单写法

    千次阅读 2019-02-28 17:22:01
    创建存储过程db2 " CREATE OR REPLACE PROCEDURE p_company( ) begin DECLARE v_company varchar(8); FOR V AS MYCURSOR CURSOR FOR SELECT ClaimSequenceNo, userCode FROM CALClaimStatus where COMPANYCODE...
  • 在针对 DB2 存储过程的开发中您是否觉得 DB2 提供的开发工具虽然功能强大但是执行速度较慢稍显笨重而我们的日常开发中仅仅使用了一些比较常用的功能你是否觉得虽然其工具操作起来比较直观但是在处理大量创建修改操作...
  • 创建存储过程语句中提供必要的参数最佳实践2:对输入参数进行必要的的检查和预处理最佳实践3:正确设定游标的返回类型最佳实践4:异常(condition)处理最佳实践5:合理使用临时表最佳实践6:寻找并rebind非法的...
  • DB2存储过程精简教程

    2017-12-22 18:13:50
    DB2存储过程精简教程,DB2存储过程精简教程,DB2存储过程精简教程
  • DB2存储过程中日志表建表语句: create table db2inst1.dim_proc_run_log ( proc_name varchar(200) , proc_para varchar(20) , step_no integer , step_desc varchar(100) , step_over_time timestamp , ...
  • DB2存储过程——参数详解

    千次阅读 2018-05-15 20:04:00
    语法说明1、procedure-name: 存储过程的名字,在同一个数据库的同一模式下,不能存在存储过程名相同参数数目相同的存储过程,即使参数的类型不同也不行。2、(IN | OUT | INOUT parameter-name data-type,...) :传入...
  • DB2 存储过程 教程

    2013-08-26 16:09:24
    DB2 存储过程 教程DB2 存储过程 教程DB2 存储过程 教程
  • db2存储过程

    2019-05-27 03:10:05
    NULL 博文链接:https://jzj41232216.iteye.com/blog/610911
  • 工作需要首次接触DB2存储过程(随笔) 存储案例分析语法知识 CREATE OR REPLACE PROCEDURE PRO_DAT_BATCH() --创建名为PRO_DAT_BATCH的存储过程 BEGIN --存储过程开始标志 DECLARE sqlcode INTEGER ...
  • 1.1 SQL 1.1 SQL过程的结构 过程的结构 命名规则 命名规则 1 1清洗过程名称命名 清洗过程名称命名 PROC_ _ PROC_JY_KJYRLJB PROC_ _ PROC_JY_KJYRLJB 业务主题 目标表 交易主题的卡交易日类聚表 业务主题 目标表 ...
  • DB2存储过程游标使用

    2019-09-02 18:05:03
    最近在做把sas转换为db2存储过程的工作,额,对于之前没写过存储过程的我来说是一次锻炼,下面是简单的DB2存储过程游标的使用 CREATE OR REPLACE PROCEDURE ***.ZXMCOURE1 ( ) SPECIFIC ZXMCOURE1 LANGUAGE SQL ...
  • 高性能的SQL过程是数据库开发人员所追求的,我将不断把学到的,或在实际开发中用到的一些提高SQL过程性能的技巧整理出来,温故而知新. 1,在只使用一条语句即可做到时避免使用多条语句 让我们从一个简单的编码技巧...
  • DB2 存储过程返回结果集

    千次阅读 2018-05-14 21:26:21
    但是并未明确定义out参数的情况下,要正确获取到结果集,则必须明确设置返回结果集个数:result set 结果集个数如果没有声明返回结果集个数,那么存储过程中定义的游标是获取不到其值的1:创建存储过程create ...
  • 记一次DB2存储过程创建

    千次阅读 2017-12-12 09:01:09
    如今换了家对银行业务的公司,由于工作需要DB2存储过程,所以采用自上而下有针对的学习方式进行补习,贴上学习笔记。/**变量赋值*/ SET SCHEMA = 'BCAS'; /**专用寄存器*/ SET CURRENT PATH = "SYSIBM",...
  • DB2存储过程及编程基础

    千次阅读 2018-04-17 08:53:33
    如何声明一个存储过程CREATE PROCEDURE 存储过程名(IN 输入变量名 输入变量类型,OUT 输出变量名 输出变量类型)紧跟其后的是存储过程属性列表 常用的有:LANGUAGE SQL、MODIFIES SQL DATA、RESULT SETS 1(返回结果集...
  • DB2存储过程基础培训

    2014-02-21 15:41:35
    DB2存储过程基础培训
  • db2存储过程基础

    2013-07-17 18:51:04
    db2存储过程基础
  • 大多数主要的关系型数据库管理系统,包括DB2forLinux,UNIX,andWindows,依赖于一种基于成本的优化器设计。该优化器基于一些条件来评估成本,包括CPU并行性和速度、I/O存储特征和通信...存储过程是数据库系统的另一个有

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 41,872
精华内容 16,748
关键字:

db2存储过程