喜欢漓 2018-10-29 03:59 采纳率: 0%
浏览 518

SqlServer存储过程转为Oracle?

ALTER proc [dbo].[sp_bookview]
AS
DECLARE @Balance FLOAT
create table #tmp(
rownum int IDENTITY(1,1),
remark varchar(100),
AcctDate char(10),
VoucherStr varchar(20),
VoucherNum varchar(20),
period int,
debit float,
Credit float
)
--查询年初余额
select @Balance = FPreBalance from CN_AcctInfoView where id=3
--将日记账数据排好序放入临时表中
insert into #tmp( remark, AcctDate, VoucherStr,VoucherNum,period,debit,Credit)
SELECT tbl.Summary as remark,CONVERT(char(10), acctDate, 120)as AcctDate, VoucherStr,VoucherNum, period, debit, Credit
FROM CN_AcctBookView tbl WHERE AcctID = 3 order by AcctDate

SELECT * from (

select '前期余额' AS remark,'' AcctDate,'' VoucherStr,'' VoucherNum,'' period,null as debit, null as Credit, @Balance as balance
union all
select remark, AcctDate, VoucherStr,VoucherNum,period,debit,Credit,(select @Balance+ sum(debit)-sum(Credit) from #tmp where rownum<=a.rownum) as balance from #tmp a
union all
select '日合计' as remark,CONVERT(char(10), acctDate, 120) + '合计' as AcctDate,
'' VoucherStr,'' VoucherNum,'' period,sum(debit) debit, sum(Credit) as Credit,
(select @Balance+ sum(debit)-sum(Credit) from #tmp where acctDate<=a.acctDate) as balance
from #tmp a group by CONVERT(char(10), acctDate, 120)

union all
select '月合计' as remark,CONVERT(char(7), acctDate, 120) + '合计'as AcctDate,
'' VoucherStr,'' VoucherNum,'' period,sum(debit) debit, sum(Credit) as Credit,
(select @Balance+ sum(debit)-sum(Credit) from #tmp where CONVERT(char(7), acctDate, 120)<= CONVERT(char(7), a.acctDate, 120)) as balance
from #tmp a group by CONVERT(char(7), acctDate, 120)

union all
select '年合计' as remark,CONVERT(char(4), acctDate, 120) + '合计' as AcctDate,
'' VoucherStr,'' VoucherNum,'' period,sum(debit) debit, sum(Credit) as Credit,
(select @Balance+ sum(debit)-sum(Credit) from #tmp where CONVERT(char(4), acctDate, 120)<= CONVERT(char(4), a.acctDate, 120)) as balance
from #tmp a group by CONVERT(char(4), acctDate, 120)
) b order by AcctDate

--删除临时表
drop table #tmp


  • 写回答

1条回答 默认 最新

  • lshen01 2023-03-16 10:07
    关注

    参考GPT和自己的思路:

    您好!针对您的问题,我了解到您希望将一个 SqlServer 的存储过程转为 Oracle 平台可用的存储过程。根据代码中的内容来看,该存储过程是查询会计凭证的信息,并生成一份账目余额表。根据语法来看,大部分语句都是通用的,但还是存在一些差异。我将分别针对这些不同点给您解答:

    1. #tmp 表

    在 SqlServer 中,#tmp 表是一种临时表,它的数据只能在当前 session 中使用,并随着 session 关闭而被销毁。在 Oracle 中,您可以使用 Global Temp Table(即全局临时表)来替代 #tmp 表。它的使用方法与普通表类似,但是需要在表名前加上 “##” 前缀,例如“##tmp”。

    1. CONVERT 函数

    在 SqlServer 中,CONVERT 函数用于将数据类型转换为指定类型,例如将日期类型转换为字符类型。在 Oracle 中,您可以使用 TO_CHAR 函数来达到同样的效果,具体语法可参考 Oracle 文档。

    1. order by 子句

    在 SqlServer 中,order by 子句的默认排序方式是升序(ASC),而在 Oracle 中默认排序方式是降序(DESC)。因此,在 Oracle 中您需要为 order by 子句添加 ASC 关键字来达到升序排序的效果。

    综上所述,您需要针对以上差异对 SqlServer 中的存储过程进行相应调整,使其能够在 Oracle 平台中正确运行。您可以参考上述解答进行修改,或者请专业人士对其进行转换。希望我的回答能够对您有所帮助!

    评论

报告相同问题?

悬赏问题

  • ¥15 MATLAB动图的问题
  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名