SQL server函数转Oracle问题之一,强行使用临时表

本文介绍了在将SQL Server数据库迁移至Oracle过程中遇到的临时表函数转换问题。作者分享了如何在Oracle中实现类似的功能,并提到了在Oracle中使用临时表和自治事务的解决方案,以解决调用函数时出现的查询或DML错误。
摘要由CSDN通过智能技术生成

SQL server函数转Oracle问题之一,强行使用临时表
(多次修改,现在可以用了)
1.工作中遇见的问题,背景是客户的数据库迁移,SQL server迁到Oracle。网上没有对应的办法,也不知对不对,至少不报BUG了,分享给大家

流程如下图
在这里插入图片描述

这种创建方法百度“Oracle函数返回结果集(或临时表)”有一堆,不重复说了。

注意:

临时表函数中还要定义,格式如下:

在这里插入图片描述

(就像JAVA的定义)

然后剩余步骤:

在这里插入图片描述
*****************分割线
在这里插入图片描述
*****************分割线
在这里插入图片描述
*****************分割线
在这里插入图片描述
*****************分割线
在这里插入图片描述
*****************分割线
在这里插入图片描述

sqlserver源码:

CREATE function [dbo].[fn_g_CompareAllData](@pk_corp varchar(20),@BeginDate datetime,@EndDate datetime)
returns @tem table
(
	SN bigint,
	--csalereceiveid char(20),				--发货单主键
	vreceivecode char(30),					--发货单号
	nnumber decimal(20,0),					--数量
	ntotaloutinvnum decimal(20,0),		--数量
	ntotaltransnum decimal(20,0),		--累计运输数量
	--csaleid char(20),							--发货单主键				
	--pk_transport_h char(20),			--运输单主键
	vbillcode_t char(30),						--运输单号
	ntotalnumber decimal(20,0),			--存货总数量
	reserve5 decimal(20,0),					--周转桶数
	--transportcode char(20),				--运输单主键
	vbillcode_r char(30),						--回收单号
	ntotalnumber2 numeric(28,0),			--发货单数量
	backwaternum numeric(28,0),			--退水数量
	exwaternum numeric(28,0),			--换水数量
	yabucketnum numeric(28,0),			--押退桶数量
	getbucketnum numeric(28,0),			--借/还桶数量
	sendbucketnum numeric(28,0),		--赠桶数量
	backbucketnum numeric(28,0),		--回桶数量
	notclearnum numeric(28,0)				--车辆未结清数量
)
begin
	--set @pk_corp = '3001'
	--set @BeginDate = '2013-08-01'
	--set @EndDate = '2013-08-11'

	set @pk_corp = (select top 1 pk_corp from bd_corp where unitcode = @pk_corp);

	declare @All table
	(
		SN bigint identity(1,1),
		csalereceiveid char(20),				--发货单主键
		vreceivecode char(30),					--发货单号
		nnumber decimal(20,0),					--数量
		ntotaloutinvnum decimal(20,0),		--数量
		ntotaltransnum decimal(20,0),		--累计运输数量
		csaleid char(20),							--发货单主键				
		pk_transport_h char(20),				--运输单主键
		vbillcode_t char(30),						--运输单号
		ntotalnumber decimal(20,0),			--存货总数量
		reserve5 decimal(20,0),					--周转桶数
		transportcode char(20),				--运输单主键
		vbillcode_r char(30),						--回收单号
		ntotalnumber2 numeric(28,0),			--发货单数量
		backwaternum numeric(28,0),			--退水数量
		exwaternum numeric(28,0),			--换水数量
		yabucketnum numeric(28,0),			--押退桶数量
		getbucketnum numeric(28,0),			--借/还桶数量
		sendbucketnum numeric(28,0),		--赠桶数量
		backbucketnum numeric(28,0),		--回桶数量
		notclearnum numeric(28,0)				--车辆未结清数量
	);
	with so_salereceive_w as
	(
		select 
			b.csalereceiveid,
			b.vreceivecode,
			sum(c.nnumber) as nnumber,
			sum(c.ntotaloutinvnum) as ntotaloutinvnum,
			sum(c.ntotaltransnum) as ntotaltransnum
		from	so_salereceive b with(nolock)
		inner join so_salereceive_b c with(nolock) on b.csalereceiveid = c.csalereceiveid
		inner join bd_invbasdoc d with(nolock) on c
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值