TIPTOP之分割split函数方法、getIndexOf、subString、replace、临时表创建;
范例(cnmq001):
原:每次查询都把数据全部查询到临时表后再筛选;
现:查询到临时表的时候,增加可行的筛选条件,再二次筛选临时表的数据,进行优化;
1)临时表创建:
PRIVATE FUNCTION cnmq001_cr_tmp() DROP TABLE cnmq001_tmp CREATE TEMP TABLE cnmq001_tmp( nmbc002 LIKE nmbc_t.nmbc002, nmbc002_desc LIKE type_t.chr500, nmbc005 LIKE nmbc_t.nmbc005, nmbcdocno LIKE nmbc_t.nmbcdocno, nmbcseq LIKE nmbc_t.nmbcseq, nmbc006 LIKE nmbc_t.nmbc006, nmbc007 LIKE nmbc_t.nmbc007, nmbc007_desc LIKE nmajl_t.nmajl003, nmbcud001 LIKE nmbc_t.nmbcud001, nmbc003 LIKE nmbc_t.nmbc003, nmbc003_desc LIKE type_t.chr80, inamt LIKE type_t.num20_6, nmbc100 LIKE nmbc_t.nmbc100, nmbc101 LIKE nmbc_t.nmbc101, outamt LIKE type_t.num20_6, nmbccrtid LIKE nmbc_t.nmbccrtid, nmbccrtid_desc LIKE type_t.chr30, nmbccrtdt LIKE nmbc_t.nmbccrtdt ) BEGIN WORK #-# 放到事务里 CALL cnmq001_ins_tmp() COMMIT WORK END FUNCTION
2)TIPTOP没有直接的split分割函数,所以走点弯路:
PRIVATE FUNCTION split_itemcount(p_arg1,p_arg2)
DEFINE p_arg1 STRING
DEFINE p_arg2 STRING
DEFINE l_cnt INT
DEFINE tok BASE.StringTokenizer
#LET tok = base.StringTokenizer.create(p_arg1,p_arg2)
LET tok = base.StringTokenizer.createExt(p_arg1,p_arg2,"",TRUE)
LET l_cnt = tok.countTokens()
RETURN l_cnt
END FUNCTION
PRIVATE FUNCTION split(p_arg1,p_arg2,p_arg3)
DEFINE p_arg1 STRING
DEFINE p_arg2 STRING
DEFINE p_arg3 INT
DEFINE l_cnt INT
DEFINE l_idx INT
DEFINE l_retstr STRING
DEFINE l_str STRING
DEFINE tok BASE.StringTokenizer
INITIALIZE l_retstr TO NULL
#LET tok = base.StringTokenizer.create(p_arg1,p_arg2)
LET tok = base.StringTokenizer.createExt(p_arg1,p_arg2,"",TRUE)
LET l_cnt = tok.countTokens()
IF (p_arg3 <= ) OR (l_cnt <= ) OR (p_arg3 > l_cnt) THEN
LET l_retstr = NULL
ELSE
LET l_idx =
WHILE tok.hasMoreTokens()
LET l_str = tok.nextToken()
IF l_idx = p_arg3 THEN
LET l_retstr = l_str
EXIT WHILE
END IF
LET l_idx = l_idx +
END WHILE
END IF
RETURN l_retstr
END FUNCTION
3)本人愚笨,试了几种方法,最后只能通过系统组合出来的条件,进行分割,再重组成自己所需的条件,用在临时表的查询上:
PRIVATE FUNCTION cnmq001_ins_tmp()
DEFINE l_sql STRING
DEFINE l_nmch006 LIKE nmch_t.nmch006
DEFINE l_nmcq006 LIKE nmcq_t.nmcq006
DEFINE l_nmck042 LIKE nmck_t.nmck042
DEFINE l_apde010 LIKE apde_t.apde010
DEFINE l_nmbb025 LIKE nmbb_t.nmbb025
DEFINE lr_tmp RECORD
nmbc002 LIKE nmbc_t.nmbc002,
nmbc002_desc LIKE type_t.chr500,
nmbc005 LIKE nmbc_t.nmbc005,
nmbcdocno LIKE nmbc_t.nmbcdocno,
nmbcseq LIKE nmbc_t.nmbcseq,
nmbc006 LIKE nmbc_t.nmbc006,
nmbc007 LIKE nmbc_t.nmbc007,
nmbc007_desc LIKE nmajl_t.nmajl003,
nmbcud001 LIKE nmbc_t.nmbcud001,
nmbc003 LIKE nmbc_t.nmbc003,
nmbc003_desc LIKE type_t.chr80,
inamt LIKE type_t.num20_6,
nmbc100 LIKE nmbc_t.nmbc100,
nmbc101 LIKE nmbc_t.nmbc101,
outamt LIKE type_t.num20_6,
nmbccrtid LIKE nmbc_t.nmbccrtid,
nmbccrtid_desc LIKE type_t.chr30,
nmbccrtdt LIKE nmbc_t.nmbccrtdt
END RECORD
#TEST by ljr
DEFINE l_wc STRING
DEFINE l_wc2 STRING
DEFINE l_wc3 STRING
DEFINE l_i INT
INITIALIZE l_wc3 TO NULL
CALL cl_replace_str(g_wc,"and","|") RETURNING l_wc
FOR l_i= TO split_itemcount(l_wc,"|")
LET l_wc2 = split(l_wc,"|",l_i)
IF l_wc2.getIndexOf()> AND l_wc2.getIndexOf()<= THEN
LET l_wc3 = l_wc3,l_wc2," and "
ELSE
IF l_wc2.getIndexOf()> THEN
LET l_wc3 = l_wc3,l_wc2," and "
ELSE
IF l_wc2.getIndexOf()> THEN
LET l_wc3 = l_wc3,l_wc2," and "
ELSE
IF l_wc2.getIndexOf()> THEN
LET l_wc3 = l_wc3,l_wc2," and "
ELSE
IF l_wc2.getIndexOf()> AND l_wc2.getIndexOf()<= THEN
LET l_wc3 = l_wc3,l_wc2," and "
END IF
END IF
END IF
END IF
END IF
END FOR
IF NOT cl_null(l_wc3) THEN
LET l_wc3 = l_wc3.subString(,l_wc3.getLength()-)
ELSE
LET l_wc3 = " 1=1 "
END IF
#-#---begin---insert放入excute
LET l_sql = " INSERT INTO cnmq001_tmp VALUES (?,?,?,?,?, ?,?,?,?,?, ?,?,?,?,?, ?,?,? )"
PREPARE cnmq001_ins_tmp2 FROM l_sql
#-#---end---
LET l_sql = " SELECT UNIQUE nmbc002,'',nmbc005,nmbcdocno,nmbcseq,nmbc006,nmbc007,'',nmbcud001, ",
" nmbc003,'',decode(nmbc006,'1',nmbc103,0) inamt,nmbc100,nmbc101,decode(nmbc006,'2',nmbc103,0) outamt,nmbccrtid,'',nmbccrtdt ",
" FROM nmbc_t ",
" WHERE nmbcent = ? AND nmbccomp = ? AND ",l_wc3
PREPARE cnmq001_ins_tmp FROM l_sql
DECLARE ins_curs CURSOR FOR cnmq001_ins_tmp
OPEN ins_curs USING g_enterprise,g_site
FOREACH ins_curs INTO lr_tmp.*
SELECT ooag011 INTO lr_tmp.nmbccrtid_desc
FROM ooag_t WHERE ooagent=g_enterprise
AND ooag001 = lr_tmp.nmbccrtid
SELECT nmaal003 INTO lr_tmp.nmbc002_desc
FROM nmaal_t WHERE nmaalent=g_enterprise
AND nmaal001= lr_tmp.nmbc002
SELECT nmajl003 INTO lr_tmp.nmbc007_desc
FROM nmajl_t WHERE nmajlent=g_enterprise
AND nmajl001= lr_tmp.nmbc007
AND nmajl002 = g_lang
IF NOT cl_null(lr_tmp.nmbc003) THEN
IF lr_tmp.nmbc003='EMPL' THEN
SELECT apca014 INTO lr_tmp.nmbc003 FROM apca_t
WHERE apcaent=g_enterprise
AND apcadocno=lr_tmp.nmbcdocno
SELECT ooag011 INTO lr_tmp.nmbc003_desc FROM ooag_t
WHERE ooagent=g_enterprise AND ooag001 = lr_tmp.nmbc003
ELSE
LET lr_tmp.nmbc003_desc = s_desc_get_trading_partner_full_desc(lr_tmp.nmbc003)
END IF
END IF
#新增摘要
IF cl_null(lr_tmp.nmbcud001) THEN
#.包括其他收支单作业anmt310,客户收款单作业anmt540,抓取的是表nmbb_t,抓取的栏位是nmbb025,
#如果抓取不到则再去到下一项
LET l_nmbb025=''
LET l_apde010=''
LET l_nmck042=''
LET l_nmcq006=''
LET l_nmch006=''
SELECT nmbb025 INTO l_nmbb025 FROM nmbb_t
WHERE nmbbent=g_enterprise
AND nmbbdocno=lr_tmp.nmbcdocno
AND nmbbseq=lr_tmp.nmbcseq
IF cl_null(l_nmbb025) THEN
#.应付单aapt330,aapt331,aapt310,aapt301,都是应付单,抓取的表都是apde_t,
#抓取的栏位都是apde010,如果抓取不到则再去到下一项
SELECT apde010 INTO l_apde010 FROM apde_t
WHERE apdeent=g_enterprise
AND apdedocno=lr_tmp.nmbcdocno
AND apdeseq=lr_tmp.nmbcseq
IF cl_null(l_apde010) THEN
#汇款单anmt460,抓取表nmck_t,抓取的栏位是nmck042,如果抓取不到则再去到下一项
SELECT nmck042 INTO l_nmck042 FROM nmck_t
WHERE nmckent=g_enterprise
AND nmckdocno=lr_tmp.nmbcdocno
IF cl_null(l_nmck042) THEN
#.应收票据兑现单,抓取表nmcq_t,抓取栏位是nmcq006,如果抓取不到则再去到下一项
SELECT nmcq006 INTO l_nmcq006 FROM nmcq_t
WHERE nmcqent=g_enterprise
AND nmcqdocno=lr_tmp.nmbcdocno
IF cl_null(l_nmcq006) THEN
#.应付票据兑现单,抓取表nmch_t,抓取栏位是nmch006
SELECT nmch006 INTO l_nmch006 FROM nmch_t
WHERE nmchent=g_enterprise
AND nmchdocno=lr_tmp.nmbcdocno
LET lr_tmp.nmbcud001=l_nmch006
ELSE
LET lr_tmp.nmbcud001=l_nmcq006
END IF
ELSE
LET lr_tmp.nmbcud001=l_nmck042
END IF
ELSE
LET lr_tmp.nmbcud001=l_apde010
END IF
ELSE
LET lr_tmp.nmbcud001=l_nmbb025
END IF
END IF
#-#
#INSERT INTO cnmq001_tmp VALUES(lr_tmp.*)
EXECUTE cnmq001_ins_tmp2 USING lr_tmp.*
END FOREACH
END FUNCTION
分隔符
DEFINE tok base.StringTokenizer
LET tok = base.StringTokenizer.create(l_cltname, '.')
WHILE tok.hasMoreTokens()
LET g_tc_img.tc_imgtype = tok.nextToken()
END WHILE
TIPTOP之分割split函数方法、getIndexOf、subString、replace、临时表创建;的更多相关文章
- oracle实现split函数功能
转载: http://blog.csdn.net/jojo52013145/article/details/6758279在实际的应用中,为了让PL/SQL 函数返回数据的多个行,必须通过返回一个 R ...
- js使用split函数按照多个字符对字符串进行分割的方法
这篇文章主要介绍了js使用split函数按照多个字符对字符串进行分割的方法,实例分析了split函数的使用技巧,非常具有实用价值,需要的朋友可以参考下 本文实例讲述了js使用split函数按照多个 ...
- SQL中实现SPLIT函数几种方法
例1 代码如下 复制代码 create function f_split(@SourceSql varchar(8000),@StrSeprate varchar(10))returns @temp ...
- 举例详解Python中的split()函数的使用方法
这篇文章主要介绍了举例详解Python中的split()函数的使用方法,split()函数的使用是Python学习当中的基础知识,通常用于将字符串切片并转换为列表,需要的朋友可以参考下 函数:sp ...
- javascript 中 split 函数分割字符串成数组
分割字符串成数组的方法有很多,不过使用最多的还是split函数 <script language="javascript"> str="2,2,3,5,6,6 ...
- Delphi 正则表达式之TPerlRegEx 类的属性与方法(7): Split 函数
Delphi 正则表达式之TPerlRegEx 类的属性与方法(7): Split 函数 //字符串分割: Split var reg: TPerlRegEx; List: TStrings; ...
- 【转载】C#使用Split函数根据特定分隔符分割字符串
在C#程序开发过程中,很多时候可能需要将字符串根据特定的分割字符分割成字符或者List集合,例如根据逗号将字符串分割为数组,或者根据竖线将字符串分割成数组,C#中提供了Split()函数来快速将字符串 ...
- Python中的split()函数的使用方法
函数:split() Python中有split()和os.path.split()两个函数,具体作用如下:split():拆分字符串.通过指定分隔符对字符串进行切片,并返回分割后的字符串列表(lis ...
- Android 使用split函数进行多个空格分割
在项目中经常会遇到按字符分割字符串的情况,可以使用String对象的split函数进行分割. 先看实际情况: String str = "关键词1 关键词2 关键词3"; Stri ...
随机推荐
- How to do Deep Learning on Graphs with Graph Convolutional Networks
翻译: How to do Deep Learning on Graphs with Graph Convolutional Networks 什么是图卷积网络 图卷积网络是一个在图上进行操作的神经网 ...
- solr系列之solr-5.5.5 window单机版jdk-1.7 tomcat8安装
一.Solr5.5.5.Tomcat8-x64.jdk-1.7-64单机部署 1.准备安装包,下载solr和tomcat的安装,直接解压即可(上篇一提供solr的下载路径) 2.在Solr5之前都还存 ...
- js中几种动态创建元素并设置文本内容的比较,及性能测试。
内容 1 appendChild (都兼容) 2.insertAdjacentHTML (都兼容) 3.innerHTML (都兼容) 4.createDocumentFragment (都兼容) 动 ...
- Python之Javascript
1.JavaScript 被设计用来向 HTML 页面添加交互行为. 2.JavaScript 是一种脚本语言(脚本语言是一种轻量级的编程语言). 3.JavaScript 由数行可执行计算机代码组成 ...
- ubuntu18.04安装mysql以及重置密码创建新用户
1.安装mysqlsudo apt-get install mysql-serversudo apt-get install mysql-clientsudo apt-get install libm ...
- 用hugo搭建个人博客
这几天研究了用hugo搭建个人博客. 简单的整理了一下. 1.安装hugo(windows 请查看官网介绍 https://gohugo.io/getting-started/installing/) ...
- 查看MySQL 连接信息--连接空闲时间及正在执行的SQL
MySQL 客户端与MySQL server建立连接后,就可以执行SQL语句了. 如何查看一个连接上是否正在执行SQL语句,或者连接是否处于空闲呢? 下面我们做下测试. 1.查看连接的空闲时间 首先看 ...
- 青岛和深圳,两座条件相似的城市,为何GDP相差这么大
深圳和青岛,是一对非常有意思的城市.两者都是沿海城市:两者都是所在省的经济强市:两者都是副省级城市,但都不是省会:两者GDP都超过所在省的省会城市.当然,两个城市也有相当大的差距,一个位于南方,一个位 ...
- RabbitMQ 使用参考
http://www.zouyesheng.com/rabbitmq.html 安装 基本概念 基本形式 持久化 调度策略 5.1. fanout 5.2. direct 5.3. topic 5.4 ...
- AngularJS ng-disabled在a内无效
在AngularJS中,对a添加ng-disabled,在disabled情况下,虽显示了不可用的样式,但点击了依旧能触发绑定在a上的ng-click事件. 解决方式:将a改为button.