• 两种方式,创建有返回值的DB2函数


    函数场景:路径信息由若干个机构编码组成,且一个机构编码是9位字符。 要求:获取路径信息,并且删除路径中包含‘99’开头的机构编码。

    从客户端及服务器端分别创建ignore99(pathinfo varchar(1800))函数

    1、在DbVisualizer中创建实现上述功能的函数

     1 --/
     2 CREATE FUNCTION ignore99 (pathinfo VARCHAR(1800)) RETURNS VARCHAR(1800) LANGUAGE SQL
     3 BEGIN ATOMIC
     4 DECLARE V_ORGCODE CHAR(9);--
     5 DECLARE I_NUMBER INT;--
     6 DECLARE I_INDEX INT;--
     7 DECLARE V_PATHSTR VARCHAR(1800);--
     8 
     9 set I_NUMBER=length(pathinfo)/9;--
    10 set I_INDEX=0;--
    11 set V_PATHSTR='';--
    12 WHILE I_NUMBER>0 DO--
    13     set V_ORGCODE=substr(pathinfo, I_INDEX*9+1, 9);--
    14     IF V_ORGCODE not like '99%' THEN --
    15     set V_PATHSTR = CONCAT(V_PATHSTR,V_ORGCODE);--
    16     END IF;--
    17     set I_INDEX = I_INDEX + 1;--
    18     set I_NUMBER = I_NUMBER - 1;--
    19 END WHILE;--
    20     RETURN V_PATHSTR;--
    21 END
    22 /

    在DbVisualizer创建函数的几个注意事项
    ①在DbVisualizer创建函数
    以"--/"开头,以"/"结尾
    ②最后的end后面没有";"
    ③传入的参数varchar 型的要定义长度
    ④"BEGIN ATOMIC"表示下面的程序块是一个事务
    ⑤变量的赋值格式: set 变量名=变量值,要加"set"关键字

    2、在Linux服务器端,创建一个成功的DB2函数

    ①先创建Crate_func.sql文件,将ignore99(pathinfo varchar(1800))写入Crate_func.sql文件

    CREATE FUNCTION ignore99 (pathinfo VARCHAR(1800)) RETURNS VARCHAR(1800) LANGUAGE SQL
    BEGIN ATOMIC
    DECLARE V_ORGCODE CHAR(9);--
    DECLARE I_NUMBER INT;--
    DECLARE I_INDEX INT;--
    DECLARE V_PATHSTR VARCHAR(1800);--
    
    set I_NUMBER=length(pathinfo)/9;--
    set I_INDEX=0;--
    set V_PATHSTR='';--
    WHILE I_NUMBER>0 DO--
        set V_ORGCODE=substr(pathinfo, I_INDEX*9+1, 9);--
        IF V_ORGCODE not like '99%' THEN --
        set V_PATHSTR = CONCAT(V_PATHSTR,V_ORGCODE);--
        END IF;--
        set I_INDEX = I_INDEX + 1;--
        set I_NUMBER = I_NUMBER - 1;--
    END WHILE;--
        RETURN V_PATHSTR;--
    END@
    View Code

    ②执行Crate_func.sql文件,命令:db2 -td@ -svf Crate_func.sql
    ③执行成功会显示:DB20000I  The SQL command completed successfully.

    ④注意事项:

    .sql文件以"@"结尾;

    执行@之前需要连接数据库db2 connect to 数据库名称;

  • 相关阅读:
    jQuery:自学笔记(1)——基础入门
    Android开发——Accessibility机制实现模拟点击(微信自动抢红包实现)
    Android开发——常用ADB命令的使用
    虚拟现实开发一些建议
    Android开发——Activity生命周期
    JVM——内存管理和垃圾回收
    2016年工作中遇到的问题41-50:Dubbo注册中心奇葩问题,wifi热点坑了
    2016年工作中遇到的问题41-50:Dubbo注册中心奇葩问题,wifi热点坑了
    Spring核心技术(十)——JSR-330标准注解
    Spring核心技术(九)——Spring管理的组件和Classpath扫描
  • 原文地址:https://www.cnblogs.com/handhead/p/11169596.html
Copyright © 2020-2023  润新知