永发信息网

讲sqlserver的存储过程转到oracle上

答案:2  悬赏:0  手机版
解决时间 2021-02-26 03:53
create procedure P_DSXXDC
--此处可加入查询条件参数,我省略了
AS
--创建临时表#temp,我取几个字段,其他信息字段可添加到#temp
create table #temp
(
id int identity(1,1) not null,--自增id
dsbh varchar(16) null,--导师编号
dsxm varchar(16) null,--导师姓名
dslbm varchar(2) null,--导师类别
zszydm varchar(30) null,--导师招生专业
yjfx varchar(30) null,--研究方向
pxzszy varchar(30) null,--自定义的一个列,为行转列准备的字段,内容为bscszy1,bscszy2...
pxyjfx varchar(50) null --自定义的一个列,为行转列准备的字段,内容为bsyjfx1,bsyjfx2...
)
--插入数据
insert into #temp select a.DSBH,a.DSXM,b.dslbm,b.zszydm,b.yjfx,'','' from xk_dsxx a left join xk_ds_xkxx b on a.DSBH=b.dsbh where a.DSBH in('10002','10055')
--游标处理px字段,使之成为bscszy1,bscszy2...
DECLARE rs CURSOR LOCAL SCROLL FOR
select id from #temp
OPEN rs
declare @id varchar(20)--定义一个变量
declare @dslbm varchar(2)--定义一个变量
declare @dsbh varchar(16)--定义一个变量
declare @max int--定义一个变量
FETCH NEXT FROM rs INTO @id
WHILE @@FETCH_STATUS = 0
BEGIN
select @dslbm=(select dslbm from #temp where id=@id)
select @dsbh=(select dsbh from #temp where id=@id)
select @max=( select max(cast(right(pxzszy,1) as int)) from #temp where dsbh=@dsbh and dslbm=@dslbm)
if @dslbm='1'
begin
if @max=0
update #temp set pxzszy='bscszy1',pxyjfx='bsyjfx1' where id=@id
else
update #temp set pxzszy='bscszy'+CONVERT(varchar(2),(@max+1)),pxyjfx='bsyjfx'+CONVERT(varchar(2),(@max+1)) where id=@id
end
else
begin
if @max=0
update #temp set pxzszy='sscszy1',pxyjfx='ssyjfx1' where id=@id
else
update #temp set pxzszy='sscszy'+CONVERT(varchar(2),(@max+1)),pxyjfx='ssyjfx'+CONVERT(varchar(2),(@max+1)) where id=@id
end
FETCH NEXT FROM rs INTO @id
END
CLOSE rs
---行转列开始
declare @sql varchar(max)
set @sql = 'select dsbh,dsxm '
select @sql = @sql + ' , max(case pxzszy when ''' + pxzszy + ''' then zszydm else null end) [' + pxzszy + '],max(case pxyjfx when ''' + pxyjfx + ''' then yjfx else null end) [' + pxyjfx + ']'
from (select distinct pxzszy,pxyjfx from #temp) as a
set @sql = @sql + ' from #temp group by dsbh,dsxm'
exec(@sql)
go
--过程到此结束

--执行过程如下:
execute P_DSXXDC
最佳答案
给辛苦费可以考虑给你搞这个,毕竟需要很多调试的时间
全部回答
sqlserver存储过程里能做ddl oracle存储过程里不能直接做ddl
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
大参林沙湖店地址在哪,我要去那里办事
商登高速公路/兰南高速公路(路口)怎么去啊,
武汉市退领住房公积金在什么位置?
2015款天籁2.5的雨刷器尺寸多少,左右尺寸一
梦见私处毛发白又长
Please sing the song happily.的回答相应的
气动三连联件的油杯需不需要加油
山羊座是摩羯座吗
漳州杉源鸭面我想知道这个在什么地方
Kingston牌U盘写保护开关在哪?- -U盘没有小
笨蛋测验召唤兽第二季ED歌词
心动周期中左室容积最大的时期是A.快速射血期
二婚的结婚证和户口本有区别吗
中国建设银行瑞安罗阳支行地址在哪,我要去那
怎么找出志贺氏菌特异性基因序列
推荐资讯
阳光物流配货服务处我想知道这个在什么地方
18岁女孩适合穿什么款式的裙子?
求show by rock全集百度云,谢谢
祥和主题酒店这个地址在什么地方,我要处理点
站在商场自动扶梯上徐徐下降的顾客,看到地面
死人手指能不能解锁
现在房介这么贵?国家对农民工买房有那些优惠
v淘宝网会不会骗人啊
天平座o型血男生喜欢什么样的女生
天娇圣地香烟烟嘴中间有个泡干嘛
整的笔顺笔画顺序
怎么练像甄子丹的腿功
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?