Sql存储过程如何移植到Oracle

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;