`
cd0281
  • 浏览: 122584 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

存储过程样例

阅读更多
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

ALTER PROCEDURE  [dbo].[SP_TMS_AUTO_BILLING] (
   @V_TMS_ORDER_ID              VARCHAR (32),                    --订单主ID
   @V_RETUREN_VALUE             VARCHAR (20)  output                --状态返回
                                            )
AS
   /***********************************************************************
   **  Stored Procedure Documentation
   **  Stored Procedure Name: SP_TMS_AUTO_BILLING
   **  Creation Date: 2010-3-1
   **  Author: 
   **  Program ID:  
   **  Input Parameters:

   **  Output Parameters:

   **  Return Status Values:
   **  Usage:
   **  Local Variables:
   **  Called By:
   **  Calls:
   **  Data Modifications:
   **  Updates:
   ************************************************************************/
	BEGIN

		DECLARE @V_OPERATION_ITEM VARCHAR (30)     ----订单上的费用协议操作项目
		DECLARE @V_SERVICE_TYPE VARCHAR (50)        ----订单上的服务类型
		DECLARE @V_CUSTOMER_CONTRACT VARCHAR(30)   ----订单上的费用协议号
		DECLARE @V_SERVICE_LEVEL VARCHAR(30)       ----订单上的服务时限
		DECLARE @V_CHARGE_UNIT VARCHAR(20)         ----订单上的计件单位
		DECLARE @V_CARGO_TYPE VARCHAR(50)          ----订单上的货物类型
		DECLARE @V_ESTIMATED_CARGO_PACKAGES NUMERIC   ---订单上的货物件数
		DECLARE @V_ESTIMATED_CARGO_WEIGHT NUMERIC     ---订单上的货物重量
		DECLARE @V_ESTIMATED_CARGO_CUBE NUMERIC       ---订单上的货物体积
		DECLARE @V_BILLING_OFFICE VARCHAR(50)         ---订单上的结算公司
		DECLARE @V_HOME_CURRENCY VARCHAR(3)           ---结算公司本位币
 			

		DECLARE @V_CHARGE_CODE VARCHAR(20)       ---客户计费协议费用项目中的费用代码
		DECLARE @V_CHARGE_ITEM_NAME VARCHAR(50)       ---客户计费协议费用项目中的费用名称
		DECLARE @V_RATES_NUMBER     VARCHAR(20)       ---客户计费协议费用项目中的费率号
		DECLARE @V_FRT_NAME_EN      VARCHAR(50)       ---费用英文名称
		
		DECLARE @V_CUST_OPERATION_ITEM_ID VARCHAR(50)    ----操作项的ID
		DECLARE @V_CUST_CONTRACT_ID VARCHAR(50)          ---计费协议ID
		DECLARE @V_CRM_CUST_ID VARCHAR(50)               ---客户ID

		DECLARE @V_CHARGE_QUANTITY NUMERIC               ----结算总量

		DECLARE @V_UNIT_PRICE NUMERIC                    ----费用单价
		DECLARE @V_CHARGE_CURRENCY VARCHAR(20)           ----费用币别
		DECLARE @V_CUST_CODE          VARCHAR(50)           ----客户代码
		DECLARE @V_EXCHANGE_RATE      NUMERIC            ----汇率

		DECLARE @V_CUST_INNER_OUTER   VARCHAR(50)        ----对内或者对外

		DECLARE @V_MIN_RATES NUMERIC                     ----计费协议里面的最低起运价
		DECLARE @V_AMOUNT NUMERIC                        ----费用表里面的amount
 
		---取去订单下需要的数据
		SELECT @V_SERVICE_TYPE = SERVICE_TYPE, @V_CUSTOMER_CONTRACT = CUSTOMER_CONTRACT, 
			   @V_SERVICE_LEVEL = SERVICE_LEVEL, @V_CHARGE_UNIT = CHARGE_UNIT,
			   @V_CARGO_TYPE = CARGO_TYPE, @V_ESTIMATED_CARGO_PACKAGES =ESTIMATED_CARGO_PACKAGES,
			   @V_ESTIMATED_CARGO_WEIGHT = ESTIMATED_CARGO_WEIGHT, @V_ESTIMATED_CARGO_CUBE = ESTIMATED_CARGO_CUBE,
			   @V_BILLING_OFFICE = BILLING_OFFICE, @V_HOME_CURRENCY = HOME_CURRENCY
		from TMS_ORDER
			LEFT JOIN SYS_OFFICE ON BILLING_OFFICE = OFFICE_CODE
		where TMS_ORDER_ID = @V_TMS_ORDER_ID
		
		---判断费用单位对应的结算总量
		IF(@V_CHARGE_UNIT = '件数')
			set @V_CHARGE_QUANTITY = @V_ESTIMATED_CARGO_PACKAGES
		ELSE IF(@V_CHARGE_UNIT = '体积')
			SET @V_CHARGE_QUANTITY = @V_ESTIMATED_CARGO_CUBE
		ELSE
			SET @V_CHARGE_QUANTITY = @V_ESTIMATED_CARGO_WEIGHT 
		

		----将符合的费用查找出来
		DECLARE
			V_CHARGE_CURSOR CURSOR FOR
			SELECT CRM.CHARGE_CODE, CRM.CHARGE_ITEM_NAME, SFD.FRT_NAME_EN, 
				   CRM.RATES_NUMBER, 
				   CUOI.CUST_OPERATION_ITEM_ID, CUOI.CUST_CONTRACT_ID,
				   CC.CUST_CODE, CCC.CRM_CUST_ID, CC.CUST_INNER_OUTER
			FROM CRM_CUST_CHARGE_ITEM CRM 
			LEFT JOIN CRM_CUST_OPERATION_ITEM CUOI ON CRM.CUST_OPERATION_ITEM_ID = CUOI.CUST_OPERATION_ITEM_ID
			LEFT JOIN CRM_CUST_CONTRACT CCC ON CUOI.CUST_CONTRACT_ID = CCC.CUST_CONTRACT_ID
			LEFT JOIN CRM_CUST CC ON CC.CRM_CUST_ID = CCC.CRM_CUST_ID
			LEFT JOIN SB_FRT_DEF SFD ON SFD.FRT_CODE = CRM.CHARGE_CODE
			LEFT JOIN TMS_OPERATION_ITEM TOI ON CUOI.OPERATION_ITEM=TOI.OPERATION_ITEM
			WHERE CCC.CONTRACT_NUMBER = @V_CUSTOMER_CONTRACT
			AND CUOI.SERVICE_TYPE = @V_SERVICE_TYPE
			AND CUOI.SERVICE_PERIOD = @V_SERVICE_LEVEL
			AND CUOI.CARGO_TYPE = @V_CARGO_TYPE
			AND TOI.TMS_ORDER_ID = @V_TMS_ORDER_ID
			/**
			AND EXISTS (SELECT 1 FROM TMS_OPERATION_ITEM TOI 
							WHERE CUOI.OPERATION_ITEM = TOI.OPERATION_ITEM 
							AND TMS_ORDER_ID = @V_TMS_ORDER_ID
						)
			**/

		OPEN V_CHARGE_CURSOR

		FETCH NEXT FROM V_CHARGE_CURSOR 
				INTO @V_CHARGE_CODE, @V_CHARGE_ITEM_NAME, @V_FRT_NAME_EN, @V_RATES_NUMBER, 
					 @V_CUST_OPERATION_ITEM_ID, @V_CUST_CONTRACT_ID, @V_CUST_CODE, @V_CRM_CUST_ID,
					 @V_CUST_INNER_OUTER
		IF(@@FETCH_STATUS!=0)
			set @V_RETUREN_VALUE = '没有匹配操作项'
		WHILE(@@FETCH_STATUS = 0)
			BEGIN
				
				set @V_RETUREN_VALUE = '自动计费完成'
				---取出费率表中符合条件的记录
				SELECT @V_UNIT_PRICE = UNIT_PRICE, @V_CHARGE_CURRENCY = CHARGE_CURRENCY, @V_MIN_RATES = MIN_RATES
				FROM CRM_CUST_CHARGE_RATE
				WHERE CHARGE_UNIT = @V_CHARGE_UNIT
				AND CUST_CONTRACT_ID = @V_CUST_CONTRACT_ID
				AND RATES_NUMBER = @V_RATES_NUMBER
				AND CHARGE_UNIT_FROM < @V_CHARGE_QUANTITY
				AND CHARGE_UNIT_TO >= @V_CHARGE_QUANTITY
				
				---看是否有对应的协议汇率维护
				IF(@V_UNIT_PRICE IS NULL)
					PRINT 'NO DATA'
				ELSE
					BEGIN
					----查询汇率
					SELECT @V_EXCHANGE_RATE = EXCHANGE_RATE
						from CRM_CUST_EXCHANGERATE
					WHERE CRM_CUST_ID = @V_CRM_CUST_ID
					AND LOCAL_CURRENCY_CODE = @V_HOME_CURRENCY
					AND FOREIGN_CURRENCY_CODE = @V_CHARGE_CURRENCY
					
					---如果不存在取系统中的汇率
					IF(@V_EXCHANGE_RATE IS NULL)
						BEGIN
							IF(@V_CUST_INNER_OUTER = 'INTERIOR')   ----判断是对内的还是对外的汇率
								SELECT @V_EXCHANGE_RATE = RATE_IN
								FROM SB_RATE
								WHERE STANDARD_CUR_CODE = @V_HOME_CURRENCY
								AND ORIGINAL_CUR_CODE = @V_CHARGE_CURRENCY
							ELSE
								SELECT @V_EXCHANGE_RATE = RATE
								FROM SB_RATE
								WHERE STANDARD_CUR_CODE = @V_HOME_CURRENCY
								AND ORIGINAL_CUR_CODE = @V_CHARGE_CURRENCY
						END

					IF(@V_EXCHANGE_RATE IS NULL)
						BEGIN
							PRINT @V_HOME_CURRENCY
							print @V_CHARGE_CURRENCY
							PRINT 'SYS NOT EXCHANGE RATE'
							RETURN 1
						END

					print @V_EXCHANGE_RATE

					----判断费用amount是否比最低起运价低,如果低,就取最低起运价,否则却当前值
					SET @V_AMOUNT = @V_UNIT_PRICE*@V_CHARGE_QUANTITY
					IF(@V_AMOUNT IS NOT NULL AND @V_MIN_RATES IS NOT NULL)
						BEGIN
							IF(@V_AMOUNT<@V_MIN_RATES)
								SET @V_AMOUNT = @V_MIN_RATES
						END						
					
					----插入费用表
					INSERT INTO TMS_FREIGHT(TMS_FREIGHT_ID,
											TMS_ORDER_ID,
											FRT_CODE,
											FRT_NAME,
											FRT_NAME_CN,

											RP_IND,
											UNIT_PRICE,
											CHARGE_QUANTITY,
											CHARGE_UNIT,
											BILLING_STATION,
											
											CUST_CODE,
											CURRENCY,
											EXCHANGE_RATE,
											AMOUNT,
											LOCAL_CURRENCY,

											LOCAL_CURRENCY_AMOUNT,
											IS_SHARE,
											NEED_SHARE,
											IS_AUTO,
											IS_SETTLE,

											IS_REVICED,
											RECORD_VERSION
											
											)
					SELECT	NEWID(),
							@V_TMS_ORDER_ID,
							@V_CHARGE_CODE,
							@V_FRT_NAME_EN,
							@V_CHARGE_ITEM_NAME,

							'0',
							@V_UNIT_PRICE,
							@V_CHARGE_QUANTITY,
							@V_CHARGE_UNIT,
							@V_BILLING_OFFICE,

							@V_CUST_CODE,	
							@V_CHARGE_CURRENCY,
							@V_EXCHANGE_RATE,
							@V_AMOUNT,
							@V_HOME_CURRENCY,

							@V_AMOUNT*@V_EXCHANGE_RATE,
							0,
							0,
							1,
							0,

							0,		
							1
				END
				-----插入表结束		
							

				FETCH NEXT FROM V_CHARGE_CURSOR 
				INTO @V_CHARGE_CODE, @V_CHARGE_ITEM_NAME, @V_FRT_NAME_EN, @V_RATES_NUMBER, 
					 @V_CUST_OPERATION_ITEM_ID, @V_CUST_CONTRACT_ID, @V_CUST_CODE, @V_CRM_CUST_ID,
					 @V_CUST_INNER_OUTER
			END
			CLOSE V_CHARGE_CURSOR
			DEALLOCATE V_CHARGE_CURSOR
						
	END
分享到:
评论

相关推荐

    某主流HIS挂号存储过程样例

    过程名称 :预约挂号调用 || 1.获取挂号级别,返回挂号费用总金额 || 2.所有患者按照新病人对待,在数据库取最新的病历号\挂号流水号 || 功能描述 : || 插入挂号表 fin_opr_register || 插入病人基本信息表 ...

    PB9下执行MSSql2005里的存储过程样例

    在PB9(PowerBuilder 9)环境下执行MSSql2005的存储过程是一个常见的数据库操作任务,尤其对于开发人员来说,理解如何正确地实现这一功能至关重要。PowerBuilder是一款强大的客户端/服务器应用程序开发工具,它支持...

    Oracle存储过程基本语法及示例

    ### Oracle存储过程基本语法及示例 在Oracle数据库中,存储过程是一种强大的工具,用于封装一组SQL语句或PL/SQL代码块,以便在数据库服务器上执行特定的任务。存储过程可以提高应用程序性能、确保数据完整性并简化...

    oracle存储过程代码样例.doc

    从给定的文件信息来看,我们正在探讨的是一个在Oracle数据库环境下编写的存储过程,名为`sp_kr_ns_hn_mtv_dtal`。这个存储过程主要服务于河南移动的手机电视专区日累计报表的需求,其设计与实现包含了多个层面的技术...

    mysql复杂存储过程实例(游标、临时表、循环、递归)

    本资源结合实例实现一个复杂的存储过程,存储过程中有用到游标、临时表、循环、递归等知识,sql文件附有实例数据表创建的sql语句。

    sybase基础过程sql

    sybase的一个存储过程样例,供大家参考

    存储过程、函数、触发器、包样例

    在数据库管理中,存储过程、函数、触发器和包是SQL的重要组成部分,它们极大地提高了数据库操作的效率和灵活性。下面将详细阐述这些概念及其在实际应用中的示例。 首先,存储过程(Stored Procedure)是一组预编译...

    分析下面的算法在样例输入情况面程序的执行过程及结果 输入:3 2 #.# ###求不同行不同列#

    首先,程序开始时存储n=3,k=2。接着,初始化一个二维字符数组`chess[][]`为0,同时初始化一个一维整数数组`sign[]`为0。这两个数组分别用于存储棋盘状态和记录已遍历过的“#”字符的位置。 当n和k的值不为-1时,...

    nc文件样例_NC

    它能够存储多维数组数据,并包含了关于数据的元数据,使得数据具有可移植性和可理解性。标题“nc文件样例_NC”表明这是一个关于NetCDF文件的示例集合,可能用于演示或测试NetCDF文件的读取、写入和处理。 描述中的...

    sybase数据库多行合并为一行多列.sql

    sybase数据库是不支持group_concat函数的,此文件为sybase存储过程样例,可以将多行信息按标识合并为一行多列。

    ORACLE SQL 优化 存储过程 PROCEDURE

    ORACLE SQL 优化存储过程 PROCEDURE ORACLE SQL 优化存储过程 PROCEDURE 是一篇结合实际开发经验和理论知识的文章,旨在帮助开发者提高 SQL 开发效率和优化存储过程。文章涵盖了广泛的知识点,从基本的 SQL 语句到...

    DICOM文件样例

    解析过程通常涉及读取DICOM头信息,包括患者信息、检查序列、图像属性等,并正确显示图像数据。 在医疗图像领域,正确解析DICOM文件至关重要,因为图像质量、元数据的完整性和准确性直接影响到医生的诊断。例如,...

    mysql 查询存储过程的 sql 语句.7z

    以下是一些 MySQL 查询存储过程 SQL 语句样例: 创建存储过程: 创建存储过程需要使用 CREATE PROCEDURE 语句。以下是一个创建存储过程的示例: CREATE PROCEDURE GetCustomerOrders ( IN customerId INT )...

    华为存储认证试题样例分析.pdf

    【华为存储认证试题样例分析】 华为存储认证试题主要涵盖了多个关键知识点,旨在评估和提升考生在存储领域的专业技能。以下是对几个样例试题的详细分析: 1. **备份方案**: - 备份是数据保护的重要手段,它通过...

    浏览器样例

    在开发过程中,开发者需要处理各种异常情况,例如网络错误、无效URL以及用户交互。Qt提供了丰富的错误处理机制,如异常类和错误码,以便调试和优化应用。 总的来说,【浏览器样例】项目涵盖了Qt GUI编程、网络通信...

    SQL样例表脚本和资料

    8. **存储过程(Stored Procedure)和触发器(Trigger)**:预编译的SQL语句集合,可以提高效率,执行复杂的业务逻辑,而触发器则在特定事件发生时自动执行。 9. **事务(Transaction)管理**:确保数据的一致性和...

    SSM框架WEB工程样例

    **MyBatis**:MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口...

    castor样例xml to bean和bean to xml样例

    这个过程在处理XML数据时非常有用,尤其是在数据交换、序列化和持久化场景中。 1. XML到Bean转换: 当我们需要将XML文档解析成Java对象时,Castor提供了便利的方法。首先,你需要创建一个描述XML结构与Java类之间...

    魔塔游戏样例(VC2019)

    7. **错误处理和调试**:在开发过程中,良好的错误处理机制和调试工具(如VC2019的调试器)至关重要,帮助找出并修复程序中的问题。 8. **版本控制**:使用Git等版本控制系统管理代码,便于协作开发和版本追踪。 9...

Global site tag (gtag.js) - Google Analytics