CREATE OR REPLACE PROCEDURE STP_TM_TIMEPROM_DTL(P_VERSION_DT IN DATE) IS
VERSION_DT DATE;
V_PRODUCT_TYPE VARCHAR2(20);
SRC_PROVINCE_NAME VARCHAR2(60);
SRC_CITY_NAME VARCHAR2(60);
SRC_AREA_TOWN VARCHAR2(60);
V_SRC_ZONE VARCHAR2(20);
BATCH_CODE VARCHAR2(20);
BEGIN_TM VARCHAR2(30);
LAST_INDEPOT_TM VARCHAR2(30);
END_TIME VARCHAR2(30);
V_CITY_CODE VARCHAR2(20);
AUDIT_FLAG VARCHAR2(20);
EFFIC_NAME VARCHAR2(20);
DEST_PROVINCE_NAME VARCHAR2(60);
DEST_CITY_NAME VARCHAR2(60);
DEST_AREA_TOWN VARCHAR2(60);
SYS_TIMESTANARD VARCHAR2(20);
CUR_TIMESTANARD VARCHAR2(20);
V_RESULT_SUM NUMBER := 0;
--用游标遍历
CURSOR CUR_TM_TIMEPROM_DTL IS
SELECT T.VERSION_DT,
T.PRODUCT_TYPE,
T.SRC_ZONE,
T.BATCH_CODE,
T.BEGIN_TM,
T.LAST_INDEPOT_TM,
T.END_TIME,
T.DEST_CITY,
(CASE T.AUDIT_FLAG
WHEN '1' THEN
'产品时效冲突'
WHEN '2' THEN
'班次时效冲突'
ELSE
'正常'
END),
(CASE T.PROMISE_DAY
WHEN '1' THEN
'即日'
WHEN '2' THEN
'次日'
WHEN '3' THEN
'隔日'
WHEN '4' THEN
'四日'
WHEN '5' THEN
'四日'
WHEN '6' THEN
'六日'
WHEN '7' THEN
'七日'
WHEN '8' THEN
'八日'
WHEN '9' THEN
'九日'
WHEN '10' THEN
'十日'
WHEN '11' THEN
'十一日'
WHEN '12' THEN
'十二日'
WHEN '13' THEN
'十三日'
WHEN '14' THEN
'十四日'
WHEN '15' THEN
'十五日'
else
''
end) || T.PROMISE_TM,
(CASE T.AUDIT_PROMISE_DAY
WHEN '1' THEN
'即日'
WHEN '2' THEN
'次日'
WHEN '3' THEN
'隔日'
WHEN '4' THEN
'四日'
WHEN '5' THEN
'四日'
WHEN '6' THEN
'六日'
WHEN '7' THEN
'七日'
WHEN '8' THEN
'八日'
WHEN '9' THEN
'九日'
WHEN '10' THEN
'十日'
WHEN '11' THEN
'十一日'
WHEN '12' THEN
'十二日'
WHEN '13' THEN
'十三日'
WHEN '14' THEN
'十四日'
WHEN '15' THEN
'十五日'
else
''
end) || T.AUDIT_PROMISE_TM
FROM OMPDW.TM_TIMEPROM_DTL T
WHERE T.VERSION_DT = P_VERSION_DT
AND T.SRC_ZONE IN (SELECT a.zone_code FROM omproute.tmp_main_zone a)
AND T.DEST_CITY IN
(SELECT DISTINCT (T.CITY_CODE) FROM TM_DISTRICT_ZONE T);
BEGIN
EXECUTE IMMEDIATE 'TRUNCATE TABLE TEMP_TIMERESULT';
OPEN CUR_TM_TIMEPROM_DTL;
LOOP
FETCH CUR_TM_TIMEPROM_DTL
INTO VERSION_DT,
V_PRODUCT_TYPE,
V_SRC_ZONE,
BATCH_CODE,
BEGIN_TM,
LAST_INDEPOT_TM,
END_TIME,
V_CITY_CODE,
AUDIT_FLAG,
SYS_TIMESTANARD,
CUR_TIMESTANARD;
SELECT DISTINCT d.PROVINCE_NAME, d.CITY_NAME, d.AREA_TOWN
INTO SRC_PROVINCE_NAME, SRC_CITY_NAME, SRC_AREA_TOWN
FROM OMPROUTE.TM_DISTRICT_ZONE d
WHERE d.ZONE_CODE = V_SRC_ZONE
and ROWNUM = 1;
SELECT COUNT(1)
INTO V_RESULT_SUM
FROM OMPROUTE.TM_DISTRICT_ZONE T
WHERE T.EFFIC_NAME = '主城区'
AND T.PRODUCT_CODE = V_PRODUCT_TYPE
AND T.CITY_CODE = V_CITY_CODE
AND ROWNUM = 1;
IF (V_RESULT_SUM = 0) THEN
DEST_PROVINCE_NAME := '';
DEST_CITY_NAME := '';
DEST_AREA_TOWN := '';
EFFIC_NAME := '';
END IF;
IF (V_RESULT_SUM > 0) THEN
SELECT DISTINCT T.PROVINCE_NAME,
T.CITY_NAME,
T.AREA_TOWN,
T.EFFIC_NAME
INTO DEST_PROVINCE_NAME, DEST_CITY_NAME, DEST_AREA_TOWN, EFFIC_NAME
FROM OMPROUTE.TM_DISTRICT_ZONE T
WHERE T.EFFIC_NAME = '主城区'
AND T.PRODUCT_CODE = V_PRODUCT_TYPE
AND T.CITY_CODE = V_CITY_CODE
AND ROWNUM = 1;
END IF;
--注意这里一定要写,不能放在commit后再写,否则会多一条数据
EXIT WHEN CUR_TM_TIMEPROM_DTL%NOTFOUND; --当游标为空跳出
INSERT INTO TEMP_TIMERESULT
(VERSION_DT,
PRODUCT_TYPE,
PROVINCE_NAME,
CITY_NAME,
AREA_TOWN,
SRC_ZONE,
BATCH_CODE,
BEGIN_TM,
LAST_INDEPOT_TM,
END_TIME,
DEST_PROVINCE_NAME,
DEST_CITY_NAME,
CITY_CODE,
DEST_AREA_TOWN,
EFFIC_NAME,
AUDIT_FLAG,
SYS_TIMESTANARD,
BASE_TIMESTANARD,
CUR_TIMESTANARD)
values
(VERSION_DT,
(CASE trim(V_PRODUCT_TYPE) WHEN 'T1' THEN '顺丰即日(干线)' WHEN 'T4' THEN
'顺丰次日' WHEN 'T6' THEN '顺丰隔日' WHEN 'T8' THEN '顺丰次晨' WHEN 'SP4' THEN
'顺丰次日(陆运件)' ELSE '' END),
SRC_PROVINCE_NAME,
SRC_CITY_NAME,
SRC_AREA_TOWN,
V_SRC_ZONE,
BATCH_CODE,
BEGIN_TM,
LAST_INDEPOT_TM,
END_TIME,
DEST_PROVINCE_NAME,
DEST_CITY_NAME,
V_CITY_CODE,
DEST_AREA_TOWN,
EFFIC_NAME,
AUDIT_FLAG,
SYS_TIMESTANARD,
CUR_TIMESTANARD,
CUR_TIMESTANARD);
COMMIT;
END LOOP;
CLOSE CUR_TM_TIMEPROM_DTL;
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line(V_SRC_ZONE);
END STP_TM_TIMEPROM_DTL;
相关推荐
在本篇讨论中,我们将深入理解Oracle游标、异常处理以及如何在存储过程中使用它们。 1. **Oracle游标**: - **定义**:Oracle游标是数据库系统提供的一种机制,用于在结果集中定位并处理单条记录。它实际上是一个...
在Oracle中,游标对于实现复杂的数据操作和控制流程至关重要,特别是在存储过程和触发器中。 1. **游标简介** 游标提供了一种方式来遍历查询结果集,并允许应用程序一次处理一行。游标有显式和隐式两种类型。显式...
- `FETCH`语句用于从游标中获取数据,并将其存储到变量`v_employee`中。 - 使用`c_employees%NOTFOUND`来判断是否还有数据可取。 ##### 5. 关闭游标 ```sql CLOSE c_employees; ``` #### 四、游标循环 游标循环是...
"Oracle存储过程游标详解" Oracle 存储过程游标是指在 Oracle 数据库中使用游标来实现对结果集的处理和操作。游标可以分为静态游标和REF游标两种类型。静态游标是指结果集已经确实(静态定义)的游标,可以进一步...
以下是关于Oracle游标使用的一些关键知识点: 1. **游标的基本概念**: 游标(Cursor)是一种机制,它允许我们遍历和操作由SQL查询返回的结果集。通过游标,我们可以控制数据的读取顺序,一次只处理一行,或者在...
### Oracle存储过程、游标、函数的详解 #### 一、概述 在Oracle数据库中,存储过程、游标和函数是非常重要的组成部分,它们为数据库管理提供了强大的编程能力。通过学习这些概念,我们可以更加灵活地管理和操作...
Oracle 存储过程调用 CallabledStatement 实用例子(IN OUT 传游标) 一、Oracle 存储过程简介 Oracle 存储过程是一种可以在 Oracle 数据库中存储和执行的程序单元。存储过程可以由多种语言编写,例如 PL/SQL、...
### Oracle 存储过程与游标使用详解 在Oracle数据库管理中,存储过程与游标是两个非常重要的概念。它们可以提高数据处理的效率、增强应用程序的灵活性,并且能够简化复杂的数据库操作。本文将根据提供的内容,深入...
Oracle数据库游标是数据库编程中的一个重要概念,尤其在处理大量数据时,它们提供了一种有效且灵活的方法。游标允许程序逐行访问查询结果集,而不是一次性加载所有数据。这在处理复杂的数据操作,如循环处理、条件...
本篇文章将深入探讨如何使用Java调用Oracle存储过程,并通过游标获取存储过程中返回的临时表数据。 首先,Oracle存储过程是一种在数据库端执行的预编译SQL语句和PL/SQL代码集合。它可以接收参数、执行业务逻辑并...
Oracle 数据库游标、存储过程和触发器 Oracle 数据库是一种关系型数据库管理系统,它提供了多种机制来提高数据库的性能和安全性。在本文中,我们将讨论 Oracle 数据库中的三个重要概念:游标、存储过程和触发器。 ...
在Java编程中,调用Oracle数据库的存储过程并处理返回的游标是一项常见的任务。Oracle存储过程可以封装复杂的业务逻辑,而游标则用于在结果集上进行迭代,特别是当结果集太大,不适合一次性加载到内存时。下面将详细...
存储过程 游标 oracle 存储过程 游标 oracle 存储过程 游标 oracle 存储过程 游标 oracle
在"游标.txt"文件中,可能包含了更多关于Oracle游标的使用实例和技巧,包括游标的声明、动态游标、游标变量、游标表达式以及游标在存储过程和函数中的应用。这些内容可以帮助你更深入地理解和掌握Oracle游标,提高你...
游标是Oracle数据库中一个重要的概念,它是一种在内存中用于存储SQL查询结果的临时工作区域。使用游标可以方便地访问查询结果集中的每一行,这对于处理大量数据是非常有用的。游标主要分为两种类型:显式游标和隐式...
标题:“oracle存储过程使用游标对多表操作例子”直接指出了文章的主题是关于在Oracle环境下,如何利用存储过程和游标实现跨多个表的数据处理。描述部分重复了标题内容,强调了示例性质,表明文章将通过具体实例来...
本主题将深入探讨Oracle中的几个核心概念:函数、存储过程、游标以及简单的实例,这些都是数据库管理员和开发人员日常工作中不可或缺的部分。 首先,我们来了解**Oracle函数**。函数是预定义的代码块,接受零个或多...
在`CURSOR_TEST2.txt`中,我们可能看到一个或多个带有“Out”游标的存储过程的定义。Out游标允许存储过程将查询的结果集作为输出参数返回。在PL/SQL中,声明一个Out类型的游标变量,然后在存储过程中打开这个游标...
Oracle游标是数据库编程中非常重要的一个概念,主要用于处理SQL查询的结果集。游标允许我们按需逐行处理数据,而不是一次性加载所有结果。这里详细介绍了Oracle中的三种游标类型:隐式游标、显式游标和REF游标。 1....
Oracle数据库作为广泛应用的关系型数据库管理系统,其游标、存储过程和SQL优化是提升系统性能的关键技术。本文将深入探讨这些概念及其在实际工作中的应用。 首先,游标是数据库操作中一种处理数据集的方式,允许...