Sql存储过程怎么移植到Oracle?USE [Pica2.0]GO/****** Object:StoredProcedure [dbo].[GetSitePV]Script D
Sql存储过程怎么移植到Oracle?
USE [Pica2.0]
GO
/****** Object: StoredProcedure [dbo].[GetSitePV] Script Date: 05/07/2013 14:43:19 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:<Author,,Name>
-- Create date: <Create Date,,>
-- Description:<Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[GetSitePV]
-- Add the parameters for the stored procedure here
@NodeId int
AS
begin
Create Table #Temp1(NewsId int, NodeId int, Title nvarchar(200), SubTitle varchar(200), Author nvarchar(50), Editor nvarchar(50), Sources nvarchar(50), Photographer nvarchar(50),
BriefContent nvarchar(1000), Content text, State nvarchar(10), Keyword nvarchar(200),
Deliveries nvarchar(200), CreateTime date, PublishTime date, NewsTop bit, NewsOrder int, NewsSecurity int)
insert into #temp1
exec [LatestNews1]
@nodeId=@NodeId,
@outCount = 999999
select * from PageView where PageView.NewsId in (select #Temp1.newsid from #Temp1)
end
USE [Pica2.0]
GO
/****** Object: StoredProcedure [dbo].[LatestNews1] Script Date: 05/07/2013 17:11:58 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:<Author,,Name>
-- Create date: <Create Date,,>
-- Description:<Description,标题相同数据>
-- =============================================
ALTER PROCEDURE [dbo].[LatestNews1]
@nodeId int,
@outCount int
AS
BEGIN
SET NOCOUNT ON;
create table #temp(nodeid int, url nvarchar(2000))
insert into #temp select @nodeId, dbo.getnodeurl(@nodeId)
--统计以缓存表为父级的子集node条数
declare @two int
select @two=COUNT(nodeid) from Nodes where NodeID not in (select nodeid from #temp) and FatherId in (select NodeID from #temp)
while(@two <> 0)
begin
insert into #temp select nodeid,dbo.getnodeurl(NodeID) from nodes where NodeID not in (select nodeid from #temp) and FatherId in (select NodeID from #temp)
select @two=COUNT(nodeid) from Nodes where NodeID not in (select nodeid from #temp) and FatherId in (select NodeID from #temp)
end
declare @sql nvarchar(2000)
--select * from #temp
set @sql = 'select top ' + Convert(nvarchar(20), @outCount)+ 'News.* from News,#temp where News.NodeId = #temp.nodeId and news.State = ''发布'' order by News.PublishTime desc'
print @sql
exec(@sql)
drop table #temp
END
求大神帮忙把这2个Sql存储改成Oracle存储。万分感谢
[解决办法]
给你写个大概的。。。。希望楼主以后多熟悉下oracle,这样就不会临阵慌忙了。
oracle的临时表没有sqlserver好用,所以直接建2个基本表吧。。
另外我觉得1个存储过程就够了。。
create table TEMP1
(
newsid INTEGER,
nodeid INTEGER,
title VARCHAR2(200),
subtitle VARCHAR2(200),
author VARCHAR2(50),
editor VARCHAR2(50),
sources VARCHAR2(50),
photographer VARCHAR2(50),
briefcontent VARCHAR2(1000),
content CLOB,
state VARCHAR2(10),
keyword VARCHAR2(200),
deliveries VARCHAR2(200),
createtime DATE,
publishtime DATE,
newstop INTEGER,
newsorder INTEGER,
newssecurity INTEGER
)
create table TEMP
(
nodeid INTEGER,
url VARCHAR2(2000)
)
create or replace procedure GetSitePV(i_nodeid varchar2,
o_cur out sys_refcursor) is
v_count number;
begin
execute immediate 'truncate table temp';
execute immediate 'truncate table temp1';
insert into temp
select i_nodeid, dbo.getnodeurl(i_nodeid);
select COUNT(nodeid)
into v_count
from Nodes
where NodeID not in (select nodeid from temp)
and FatherId in (select NodeID from temp);
if (v_count <> 0) then
insert into temp
select nodeid, dbo.getnodeurl(NodeID)
from nodes
where NodeID not in (select nodeid from temp)
and FatherId in (select NodeID from temp);
select COUNT(nodeid)
into v_count
from Nodes
where NodeID not in (select nodeid from temp)
and FatherId in (select NodeID from temp);
end if;
insert into temp1
select *
from (select News.*, rownum rn
from News, temp
where News.NodeId = temp.nodeId
and news.State = ' 发布 '
order by News.PublishTime desc) t
where t.rn <= 999999;
commit;
open o_cur for
select *
from PageView
where PageView.NewsId in (select Temp1.newsid from Temp1);
end;
[解决办法]
把这个建表脚本改成如下就可以了:
create global temporary table TEMP1
(
newsid INTEGER,
nodeid INTEGER,
title VARCHAR2(200),
subtitle VARCHAR2(200),
author VARCHAR2(50),
editor VARCHAR2(50),
sources VARCHAR2(50),
photographer VARCHAR2(50),
briefcontent VARCHAR2(1000),
content CLOB,
state VARCHAR2(10),
keyword VARCHAR2(200),
deliveries VARCHAR2(200),
createtime DATE,
publishtime DATE,
newstop INTEGER,
newsorder INTEGER,
newssecurity INTEGER
) on commit preserve rows;
