开发者博客:www.developsearch.com
-------------------------------------------------- -- 批量生成协议配置 -- 2013-11-29 -- 陈昕 -------------------------------------------------- DECLARE CURSOR C_CDH_CUSTOMER IS SELECT C.* FROM CDH_CUSTOMER C WHERE C.CUSTOMER_CODE IN ('0650000718','7556054455'); V_CDH_CUSTOMER CDH_CUSTOMER%ROWTYPE; v_period_type CDH_ACCOUNT.Period_Type%TYPE; v_account_code CDH_ACCOUNT.Billing_Code%TYPE; v_account_period CDH_ACCOUNT.Account_Period%TYPE; V_PROTOCOL_ID CDH_NEWRBT_PROTOCOL.PROTOCOL_ID%TYPE; V_CREATOR CDH_NEWRBT_PROTOCOL.CREATOR%TYPE; V_START_DT CDH_NEWRBT_FREIGHT_CFG.START_DT%TYPE; V_END_DT CDH_NEWRBT_FREIGHT_CFG.END_DT%TYPE; -- 时间分段 v_time_segment_id CDH_NEWRBT_TIME_SEGMENT.Time_Segment_Id%TYPE; TYPE one_time_segment IS RECORD( START_DT CDH_NEWRBT_FREIGHT_CFG.START_DT%TYPE, END_DT CDH_NEWRBT_FREIGHT_CFG.START_DT%TYPE ); TYPE time_segment_array IS TABLE OF one_time_segment INDEX BY BINARY_INTEGER; segment_rec_array time_segment_array; segment_rec one_time_segment; -- 组合 v_freight_set_id CDH_NEWRBT_FREIGHT_SET.Freight_Set_Id%TYPE; type set_array is varray(3) of Varchar2(60); var_set_array set_array := set_array('QAAFJ100380','Q-1FJ100381','LCN100440'); v_set_id CDH_NEWRBT_FREIGHT_SET.Set_Id%TYPE; v_rebate_rate CDH_NEWRBT_FREIGHT_RATE.Rebate_Rate%TYPE; V_COUNT NUMBER; BEGIN V_START_DT := TO_DATE('2013-11-15', 'yyyy-mm-dd'); V_END_DT := TO_DATE('2014-2-14', 'yyyy-mm-dd'); V_CREATOR := '337068'; segment_rec.START_DT := TO_DATE('2013-11-15', 'yyyy-mm-dd'); segment_rec.END_DT := TO_DATE('2013-11-30', 'yyyy-mm-dd'); segment_rec_array(1) := segment_rec; segment_rec.START_DT := TO_DATE('2013-12-01', 'yyyy-mm-dd'); segment_rec.END_DT := TO_DATE('2013-12-31', 'yyyy-mm-dd'); segment_rec_array(2) := segment_rec; segment_rec.START_DT := TO_DATE('2014-01-01', 'yyyy-mm-dd'); segment_rec.END_DT := TO_DATE('2014-01-31', 'yyyy-mm-dd'); segment_rec_array(3) := segment_rec; segment_rec.START_DT := TO_DATE('2014-02-01', 'yyyy-mm-dd'); segment_rec.END_DT := TO_DATE('2014-02-14', 'yyyy-mm-dd'); segment_rec_array(4) := segment_rec; OPEN C_CDH_CUSTOMER; LOOP FETCH C_CDH_CUSTOMER INTO V_CDH_CUSTOMER; EXIT WHEN C_CDH_CUSTOMER%NOTFOUND; SELECT A.BILLING_CODE,A.PERIOD_TYPE,A.ACCOUNT_PERIOD INTO v_account_code,v_period_type,v_account_period FROM CDH_ACCOUNT A WHERE A.BILLING_CODE = V_CDH_CUSTOMER.CUSTOMER_CODE; -- 判断折扣协议是否存在。 SELECT COUNT(1) INTO V_COUNT FROM CDH_NEWRBT_PROTOCOL P WHERE P.CUSTOMER_CODE = V_CDH_CUSTOMER.CUSTOMER_CODE; -- 如果协议存在,使用已有协议ID。 IF V_COUNT = 1 THEN SELECT P.PROTOCOL_ID INTO V_PROTOCOL_ID FROM CDH_NEWRBT_PROTOCOL P WHERE P.CUSTOMER_CODE = V_CDH_CUSTOMER.CUSTOMER_CODE; -- 判断标准运费配置是否存在(如果存在,不作处理) SELECT COUNT(1) INTO V_COUNT FROM CDH_NEWRBT_FREIGHT_CFG C WHERE C.PROTOCOL_ID = V_PROTOCOL_ID; IF V_COUNT = 0 THEN -- 插入标准运费 INSERT INTO cdh_newrbt_freight_cfg (ID, protocol_id, start_dt, end_dt, valid_flg, is_segment, rebate_type, creator, create_tm, modifier, modify_tm) VALUES (SEQ_CDH_NEWRBT.Nextval, v_protocol_id, v_start_dt, v_end_dt, '1', '1', NULL, V_Creator, SYSDATE, V_Creator, SYSDATE); -- 插入时间分段 FOR i IN 1..segment_rec_array.count LOOP SELECT SEQ_CDH_NEWRBT.NEXTVAL INTO v_time_segment_id FROM DUAL; INSERT INTO cdh_newrbt_time_segment (time_segment_id, protocol_id, start_dt, end_dt, rebate_type, session_id, create_tm) VALUES (v_time_segment_id, v_protocol_id, segment_rec_array(i).START_DT, segment_rec_array(i).END_DT, 1, NULL, SYSDATE); -- 插入组合 for i in 1..var_set_array.count loop SELECT SEQ_CDH_NEWRBT.NEXTVAL INTO v_freight_set_id FROM DUAL; SELECT t.set_id INTO v_set_id FROM CDH_NEWRBT_SET t WHERE t.name = var_set_array(i); INSERT INTO cdh_newrbt_freight_set (freight_set_id, protocol_id, time_segment_id, set_id, session_id, create_tm) VALUES (v_freight_set_id, v_protocol_id, v_time_segment_id, v_set_id, NULL, SYSDATE); --dbms_output.put_line('start:'||v_rebate_rate); IF var_set_array(i) = 'QAAFJ100380' THEN v_rebate_rate := 0.9; END IF; IF var_set_array(i) = 'Q-1FJ100381' THEN v_rebate_rate := 0.95; END IF; IF var_set_array(i) = 'LCN100440' THEN v_rebate_rate := 0.8; END IF; --dbms_output.put_line('end:'||v_rebate_rate); -- 插入折扣率 INSERT INTO cdh_newrbt_freight_rate (rate_id, protocol_id, time_segment_id, freight_set_id, min_total_amt, max_total_amt, min_amt, max_amt, rebate_rate_type, rebate_rate, session_id, create_tm) VALUES (SEQ_CDH_NEWRBT.NEXTVAL, v_protocol_id, v_time_segment_id, v_freight_set_id, 0, 100000000, 0, 100000000, 3, v_rebate_rate, NULL, SYSDATE); end loop; END LOOP; END IF; -- 如果协议不存在 ELSIF V_COUNT = 0 THEN -- 插入协议 SELECT SEQ_CDH_NEWRBT.NEXTVAL INTO V_PROTOCOL_ID FROM DUAL; INSERT INTO cdh_newrbt_protocol (protocol_id, customer_id, customer_code, cus_valid_flag, account_code, dept_code, period_type, account_period, balance_cycle, creator, create_tm, modifier, modify_tm) VALUES (V_PROTOCOL_ID, V_CDH_CUSTOMER.customer_id, V_CDH_CUSTOMER.customer_code, '0', v_account_code, V_CDH_CUSTOMER.Current_Department,v_period_type, v_account_period, '1', v_creator, SYSDATE, v_creator, SYSDATE); -- 插入标准运费 INSERT INTO cdh_newrbt_freight_cfg (ID, protocol_id, start_dt, end_dt, valid_flg, is_segment, rebate_type, creator, create_tm, modifier, modify_tm) VALUES (SEQ_CDH_NEWRBT.Nextval, v_protocol_id, v_start_dt, v_end_dt, '1', '1', NULL, V_Creator, SYSDATE, V_Creator, SYSDATE); -- 插入时间分段 FOR i IN 1..segment_rec_array.count LOOP SELECT SEQ_CDH_NEWRBT.NEXTVAL INTO v_time_segment_id FROM DUAL; INSERT INTO cdh_newrbt_time_segment (time_segment_id, protocol_id, start_dt, end_dt, rebate_type, session_id, create_tm) VALUES (v_time_segment_id, v_protocol_id, segment_rec_array(i).START_DT, segment_rec_array(i).END_DT, 1, NULL, SYSDATE); -- 插入组合 for i in 1..var_set_array.count loop SELECT SEQ_CDH_NEWRBT.NEXTVAL INTO v_freight_set_id FROM DUAL; SELECT t.set_id INTO v_set_id FROM CDH_NEWRBT_SET t WHERE t.name = var_set_array(i); INSERT INTO cdh_newrbt_freight_set (freight_set_id, protocol_id, time_segment_id, set_id, session_id, create_tm) VALUES (v_freight_set_id, v_protocol_id, v_time_segment_id, v_set_id, NULL, SYSDATE); IF var_set_array(i) = 'QAAFJ100380' THEN v_rebate_rate := 0.9; END IF; IF var_set_array(i) = 'Q-1FJ100381' THEN v_rebate_rate := 0.95; END IF; IF var_set_array(i) = 'LCN100440' THEN v_rebate_rate := 0.8; END IF; -- 插入折扣率 INSERT INTO cdh_newrbt_freight_rate (rate_id, protocol_id, time_segment_id, freight_set_id, min_total_amt, max_total_amt, min_amt, max_amt, rebate_rate_type, rebate_rate, session_id, create_tm) VALUES (SEQ_CDH_NEWRBT.NEXTVAL, v_protocol_id, v_time_segment_id, v_freight_set_id, 0, 100000000, 0, 100000000, 3, v_rebate_rate, NULL, SYSDATE); end loop; END LOOP; END IF; COMMIT; END LOOP; CLOSE C_CDH_CUSTOMER; EXCEPTION WHEN OTHERS THEN ROLLBACK; DBMS_OUTPUT.PUT_LINE(SQLCODE || SQLERRM); END;
开发者博客:www.developsearch.com
相关推荐
5. **性能优化**:通过合理使用绑定变量(bind variables)、预编译的SQL语句(prepare statement)和批量处理(array fetch size)等技术,可以提高DBD::Oracle的执行效率。 6. **安全考虑**:在编写数据库操作...
2. **工具选择**:有许多工具可以用来批量执行SQL脚本,如MySQL的`mysql`命令行客户端,SQL Server的`sqlcmd`,Oracle的`sqlplus`,或者通用的数据库管理工具如Navicat、DBeaver等。这些工具通常支持读取文本文件中...
在批量操作时,可以结合T-SQL和存储过程,或者使用SQL Server Management Studio(SSMS)的脚本功能来生成和执行批量操作的脚本。 然而,创建索引并非总是有益的。虽然索引加快了查询速度,但它们也会占用磁盘空间...
Oracle P/L SQL是一种在Oracle数据库环境中编写存储过程和函数的语言,它扩展了SQL的功能,使得在数据库内部可以执行复杂的业务逻辑和数据处理。在本场景中,"Oracle P/L SQL实现PDF报表内容生成"指的是利用Oracle的...
批量生成触发器同样需要编写SQL脚本,其中包含`CREATE TRIGGER`语句,为每个需要的触发器定义其触发条件、执行的动作和时间点。 3. **序列(Sequence)**:Oracle序列是一种自增数字生成器,常用于生成唯一的ID,...
这篇博客文章“Oracle SQL自动调优生成报告和SQL语句的脚本”提供了有关如何利用Oracle自带的工具进行SQL优化的具体步骤和脚本示例。 在Oracle数据库中,SQL调优主要包括以下几个方面: 1. **SQL分析**:通过执行`...
最后,在应用阶段,SQL Optimizer在特定情况下可以自动将最优方案应用到原始代码,包括Send Back(直接返回)、Generate Script(生成脚本)以及结合Oracle Outline。无论代码是否可修改,都能通过SQL Optimizer将...
"可执行(尽可能)的sql输出"可能指的是这个库尝试生成的SQL语句是可直接在数据库管理工具中执行的,这意味着输出的SQL语句格式化良好,没有程序内部处理的额外信息,方便开发者理解和测试。 从标签"sqlserver ...
**Oracle SQL Developer 详解** Oracle SQL Developer 是一款强大的、免费的可视化数据库管理工具,由 Oracle 公司提供,主要用于管理 Oracle 数据库系统。版本号 "23.1.0.097.1607-x64" 表明这是一款针对 64 位...
本文将深入探讨如何利用一条SQL语句在Oracle中快速生成10万条测试数据,这对于数据库管理员和开发人员来说是一项极为实用的技能。 ### 核心知识点:使用SQL生成大量测试数据 #### 1. **理解ROWNUM和CONNECT BY ...
Oracle数据库在存储大对象...总之,批量导出Oracle数据库中的BLOB字段生成图片涉及到了数据库连接、SQL查询、BLOB数据处理和文件I/O等多个技术环节。掌握这些知识点对于管理和维护包含二进制数据的数据库系统至关重要。
在Oracle数据库中,通过一条SQL语句快速生成大量测试数据是一项非常实用的技能。本文将详细介绍如何利用Oracle中的特性来实现这一目标。 ### 核心知识点:使用一条SQL语句快速生成10万条测试数据 #### 1. 使用`...
Oracle客户端是用于与Oracle数据库服务器进行通信的软件组件,它提供了连接到服务器并执行SQL查询、数据操作和其他数据库管理任务的能力。在Oracle客户端11g版本中,有一些关键知识点值得我们深入了解。 首先,...
MyBatis动态SQL和批量插入的应用 MyBatis是一款功能强大且灵活的持久层框架,提供了多种方式来对数据库进行交互。其中,动态SQL是一种非常强大的特性,能够根据不同的条件生成不同的SQL语句。下面将详细介绍MyBatis...
在Oracle数据库管理中,批量生成帐户脚本是一项常见的任务,尤其在大型企业环境中,需要为众多用户创建数据库账户以确保安全性和权限控制。Oracle数据库提供了丰富的SQL和PL/SQL语法来实现这样的需求。本文将深入...
由于项目需求,需要将Excel中的数据进过一定转换导入仅Oracle数据库中。考虑到当Excel数据量较大时,循环Insert语句效率太低,故采用批量插入的方法。在插入操作运行时,会造成系统短暂的“卡死”现象。为了让用户...
Oracle SQL Developer 是一款由Oracle公司推出的免费数据库管理工具,它为数据库管理员(DBA)和开发人员提供了一个全面的集成环境,以便于管理和操作Oracle数据库。这个工具的强大之处在于其直观的用户界面和广泛的...
本教程将详细讲解如何批量导出Oracle数据库中的BLOB字段并生成文件,适用于需要定期或一次性处理大量图片或其他BLOB数据的场景。 首先,确保你已经在本地安装了Oracle客户端。Oracle客户端提供了SQL*Plus和其他工具...
Profiler结果的图形化展现、SQL语句自动优化器、批量重组对象、创建新表重组单个表、修复行链接、资源规划、Oracle调优建议器、Unix内核参数和Windows注册表参数变更等功能。 报告功能能够帮助DBA生成生产报告,并...
直接路径插入则是一种高效的批量插入方法,能够减少日志的生成,提高插入操作的性能。 7. **数据库备份与升级** 维护笔记中可能包含了数据库备份、升级以及密码管理等相关内容,这对于确保数据库安全性、完整性和...