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的存储过程转到oracle上
答案:2 悬赏:0 手机版
解决时间 2021-02-26 03:53
- 提问者网友:心如荒岛囚我终老
- 2021-02-26 00:45
最佳答案
- 五星知识达人网友:鸠书
- 2021-02-26 00:56
给辛苦费可以考虑给你搞这个,毕竟需要很多调试的时间
全部回答
- 1楼网友:孤老序
- 2021-02-26 01:42
sqlserver存储过程里能做ddl
oracle存储过程里不能直接做ddl
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯