一个关于native sql的程序
*&---------------------------------------------------------------------*
*& Report ZHR_BPM11 业务行事日历同步
*&
*&---------------------------------------------------------------------*
*&创建者:caizjian 日期:20141010
*&
*&---------------------------------------------------------------------* REPORT zhr_bpm11. TYPES:BEGIN OF typ_db,
pernr TYPE pa0001-pernr, "员工号
datum TYPE ptpsp-datum, "计划工作时间
tprog TYPE ptpsp-tprog, "工作计划规则
timestamp TYPE timestamp, "JOB同步时间
END OF typ_db. TYPES:BEGIN OF typ_yg,
pernr TYPE pa0001-pernr,
END OF typ_yg. DATA:gt_db TYPE TABLE OF typ_db,
gs_db LIKE LINE OF gt_db,
gt_yg TYPE TABLE OF typ_yg,
gs_yg LIKE LINE OF gt_yg. DATA:con_ora_name TYPE dbcon_name VALUE 'BPMFLOW',
tp_time1() TYPE c, "开始插入时间
tp_time2() TYPE c. "结束插入时间 data: exc_ref TYPE ref TO cx_sy_native_sql_error,
error_text TYPE string. INITIALIZATION.
IF sy-mandt EQ ''.
MOVE 'PORTAL' TO con_ora_name.
ENDIF. START-OF-SELECTION. PERFORM get_data.
PERFORM frm_connect.
*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM get_data .
DATA:l_datum1 TYPE sy-datum,
l_datum2 TYPE sy-datum,
l_return TYPE bapireturn1,
lt_perws TYPE TABLE OF ptpsp,
ls_perws LIKE LINE OF lt_perws. *员工号
SELECT pernr INTO TABLE gt_yg
FROM pa0001
WHERE begda <= sy-datum
AND endda >= sy-datum
AND persk LIKE '%3'. l_datum1 = sy-datum.
l_datum2 = l_datum1 + . LOOP AT gt_yg INTO gs_yg. CLEAR:lt_perws,
l_return. CALL FUNCTION 'ZHR_GET_DWS'
EXPORTING
pernr = gs_yg-pernr
begda = l_datum1
endda = l_datum2
IMPORTING
return = l_return
TABLES
perws = lt_perws. LOOP AT lt_perws INTO ls_perws.
gs_db-pernr = gs_yg-pernr.
gs_db-datum = ls_perws-datum.
gs_db-tprog = ls_perws-tprog.
APPEND gs_db TO gt_db.
CLEAR:gs_db, ls_perws.
ENDLOOP.
ENDLOOP. ENDFORM. " GET_DATA
*&---------------------------------------------------------------------*
*& Form FRM_CONNECT
*&---------------------------------------------------------------------*
FORM frm_connect .
DATA:l_emp_id TYPE char8,
l_time TYPE char8,
l_error TYPE c. DATA:wa_log TYPE zhrbpm_log,
l_timestamp TYPE string. TRY .
EXEC SQL.
CONNECT TO: CON_ORA_NAME.
ENDEXEC.
IF sy-subrc <> .
* 出错时
RAISE EXCEPTION TYPE cx_sy_native_sql_error.
ENDIF.
EXEC SQL.
OPEN dbcur for
select Emp_id from EMP_WORK_SCHEDULE
ENDEXEC.
DO.
EXEC SQL.
FETCH NEXT dbcur INTO :L_Emp_id
ENDEXEC.
IF sy-subrc <> .
EXIT.
ENDIF.
ENDDO.
EXEC SQL.
CLOSE dbcur
ENDEXEC. * 获取开始插入时间
GET TIME.
CONCATENATE sy-datum+()
sy-datum+()
sy-datum+()
INTO tp_time1
SEPARATED BY '-'.
CLEAR l_time.
CONCATENATE sy-uzeit+()
sy-uzeit+()
sy-uzeit+()
INTO l_time
SEPARATED BY ':'.
CONCATENATE tp_time1
l_time
INTO tp_time1
SEPARATED BY space.
EXEC SQL.
UPDATE SYNC_RECORD_TBL set START_TIME = to_date(:TP_TIME1,'YYYY-MM-DD HH24:MI:SS') WHERE SID = ''
ENDEXEC.
EXEC SQL.
COMMIT
ENDEXEC.
IF l_emp_id IS NOT INITIAL.
EXEC SQL.
DELETE FROM EMP_WORK_SCHEDULE
ENDEXEC.
ENDIF.
IF sy-subrc <> .
l_error = 'X'.
ENDIF.
IF l_error IS INITIAL.
LOOP AT gt_db INTO gs_db.
IF gs_db-pernr IS INITIAL OR gs_db-datum IS INITIAL.
CLEAR gs_db.
CONTINUE.
ENDIF.
CALL FUNCTION 'CONVERT_INTO_TIMESTAMP' "获取时间戳
EXPORTING
i_datlo = sy-datum
i_timlo = sy-uzeit
i_tzone = 'UTC+8'
IMPORTING
e_timestamp = gs_db-timestamp.
EXEC SQL.
INSERT INTO EMP_WORK_SCHEDULE(EMP_ID,WORK_DATE,WORK_RULE,CREATE_DATE)
values:(:gs_db-PERNR,:gs_db-DATUM,:gs_db-TPROG,:gs_db-timestamp)
ENDEXEC.
IF sy-subrc <> .
l_error = 'X'.
" CRQ000000003316-HR抛BPM出错写日志
wa_log-prog = sy-repid."当前程序名
wa_log-tabnam = 'EMP_WORK_SCHEDULE'."表名
l_timestamp = gs_db-timestamp.
CONCATENATE gs_db-pernr
gs_db-datum
gs_db-tprog
l_timestamp
INTO wa_log-msg
SEPARATED BY '/'. PERFORM write_bpm_log USING wa_log.
EXIT.
ENDIF.
ENDLOOP.
ENDIF.
IF l_error IS INITIAL.
* 获取插入结束时间
CONCATENATE sy-datum+()
sy-datum+()
sy-datum+()
INTO tp_time2
SEPARATED BY '-'.
CLEAR l_time.
GET TIME.
CONCATENATE sy-uzeit+()
sy-uzeit+()
sy-uzeit+()
INTO l_time
SEPARATED BY ':'.
CONCATENATE tp_time2
l_time
INTO tp_time2
SEPARATED BY space.
EXEC SQL.
UPDATE SYNC_RECORD_TBL set END_TIME = to_date(:TP_TIME2,'YYYY-MM-DD HH24:MI:SS') WHERE SID = ''
ENDEXEC. EXEC SQL.
COMMIT
ENDEXEC.
WRITE: '插入数据成功!'.
ELSE.
EXEC SQL.
ROLLBACK
ENDEXEC.
WRITE: '插入数据失败!'.
ENDIF.
EXEC SQL.
DISCONNECT :CON_ORA_NAME
ENDEXEC.
CATCH cx_sy_native_sql_error INTO exc_ref.
error_text = exc_ref->get_text( ).
EXEC SQL.
ROLLBACK
ENDEXEC.
IF sy-batch = 'X'.
WRITE: '插入数据失败!',
/ error_text.
ELSE.
MESSAGE error_text TYPE 'I'.
ENDIF.
LEAVE PROGRAM. ENDTRY. ENDFORM. " FRM_CONNECT
*&---------------------------------------------------------------------*
*& Form WRITE_BPM_LOG
*&---------------------------------------------------------------------*
FORM write_bpm_log USING wa TYPE zhrbpm_log.
CALL FUNCTION 'ZHR_BPM_WLOG'
EXPORTING
wa_log = wa
EXCEPTIONS
nodata =
OTHERS = .
IF sy-subrc <> .
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF. ENDFORM. " WRITE_BPM_LOG
一个关于native sql的程序的更多相关文章
- 第一个 Asp.Net vNext 应用程序
要说免费的虚拟主机的话,最好的服务商应该就是Microsoft Azure(不是Windows Azure由世纪互联运营),提供免费的1GB .NET/Java/Python/Php空间,日流量有限制 ...
- Native SQL
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- JNI编程(一) —— 编写一个最简单的JNI程序
来自:http://chnic.iteye.com/blog/198745 忙了好一段时间,总算得了几天的空闲.貌似很久没更新blog了,实在罪过.其实之前一直想把JNI的相关东西整理一下的,就从今天 ...
- NHibernate构建一个ASP.NET MVC应用程序
NHibernate构建一个ASP.NET MVC应用程序 什么是Nhibernate? NHibernate是一个面向.NET环境的对象/关系数据库映射工具.对象/关系数据库映射(object/re ...
- 13.hibernate的native sql查询(转自xiaoluo501395377)
hibernate的native sql查询 在我们的hibernate中,除了我们常用的HQL查询以外,还非常好的支持了原生的SQL查询,那么我们既然使用了hibernate,为什么不都采用hi ...
- 【翻译】Sencha Touch 2入门:创建一个实用的天气应用程序之三
原文:Getting Started with Sencha Touch 2: Build a Weather Utility App (Part 3) 作者:Lee BoonstraLee is a ...
- 一个特殊的SQL Server阻塞案例分析
上周,在SQL Server数据库下面遇到了一个有意思的SQL阻塞(SQL Blocking)案例.其实个人对SQL Server的阻塞还是颇有研究的.写过好几篇相关文章. 至于这里为什么要总结一下这 ...
- 【ASP.NET】第一个ASP.NET MVC应用程序
本系列目录:ASP.NET MVC4入门到精通系列目录汇总 开发流程 新建Controller 创建Action 根据Action创建View 在Action获取数据并生产ActionResult传递 ...
- Open SQL和Native SQL到底有什么本质的区别
1.個人愚見:它們只是在实现的方式上,执行效率上不同,有的书上还说native sql存在一定风险 *& 20170521 171300 1.Open sql 是由创建数据库数据的ABAP命令 ...
随机推荐
- CentOS 6.4安装(超级详细图解教程)
链接地址:http://www.osyunwei.com/archives/5855.html CentOS 6.4安装(超级详细图解教程) 附:CentOS 6.4下载地址 32位:http://m ...
- VM添加e1000e驱动网卡
关闭虚拟机 打开VMware 虚拟机配置 (.vmx),如
- source insight 中文注释为乱码解决
1. source insight 中文注释为乱码解决 http://blog.csdn.net/bingfeng1210/article/details/7527059 2. Source Insi ...
- 【转】[Mysql] Linux Mysql 日志专题
原文链接:http://blog.csdn.net/xiaoxu0123/article/details/6258538 1, 设置存放的目录: [root@Linux etc]# more /etc ...
- 无法从“const char *”转换为“char *”
写了如下的一段代码: const char *str; char *p=str; 提示错误: const char* 不能用于初始化char *类型的实体.这是为什么?我想应该是const char ...
- 什么是DNS劫持
我们知道,某些网络运营商为了某些目的,对DNS进行了某些操作,导致使用ISP的正常上网设置无法通过域名取得正确的IP地址.常用的手段有:DNS劫持和DNS污染. 什么是DNS劫持 DNS劫持就是通过劫 ...
- keepavlied一些参数
priority 表示优先级 virtual_ipaddress 虚拟的IP地址(VIP) delay_loop 每个2秒检查一次real_server状态 notify_down 检测到服务down ...
- 初探 插头DP
因为这题,气得我火冒三丈! 这数据是不是有问题啊!我用cin代替scanf后居然就AC了(本来一直卡在Test 18)!导致我调(对)试(排)了一个小时!! UPD:后来细细想想,会不会是因为scan ...
- C++中用rand()和srand()产生随机数方法介绍
标准库<cstdlib>(被包含于<iostream>中)提供两个帮助生成伪随机数的函数: 函数一:int rand(void): 从srand (seed)中指定的see ...
- 区间dp-zoj3541-The Last Puzzle
题目链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3541 题目大意: 在数轴上,有n个按钮,位置递增为d1,d2, ...