当前位置: 代码迷 >> DB2 >> ,oracle/SQLServer语法的函数、视图转为DB2语法的脚本
  详细解决方案

,oracle/SQLServer语法的函数、视图转为DB2语法的脚本

热度:2529   发布时间:2013-02-26 00:00:00.0
求救,oracle/SQLServer语法的函数、视图转为DB2语法的脚本
没有办法,小生之前没有接触过DB2语法,我这里有两套SQL脚本,一个是SQLServer的,一个是Oracle的,都是完成一样的事情,有没有大牛帮忙转换一下呢,谢谢啦
SQLServer的
SQL code
--1: 创建函数F_ConcatedTagname--drop function F_ConcatedTagname;create function F_ConcatedTagname(    @ItemNumber numeric(9)    ) returns varchar(8000) as begindeclare @ret varchar(8000)select @ret = '' select @ret = @ret + tagname + ';' from xwcmdoctag where docid = @ItemNumber and taggingnum>0return @retendgo--2: 创建函数F_GetRecId--drop function dbo.F_GetRecIdcreate function F_GetRecId(@docid numeric(9),@chnlid numeric(9)) returns  numeric(9)as begindeclare @ret  numeric(9)select @ret = 0select @ret=recid from wcmchnldoc where chnlId = @chnlid and docid= @docidreturn @retendgo--3: 创建函数F_GetModal--drop function dbo.F_GetModalcreate function F_GetModal(@docid numeric(9),@chnlid numeric(9)) returns  numeric(9)as begindeclare @ret  numeric(9)select @ret = 0select @ret=modal from wcmchnldoc where chnlId = @chnlid and docid= @docidreturn @retendgo--4: 创建函数F_GetDocOrderPri--drop function dbo.F_GetDocOrderPricreate function F_GetDocOrderPri(@docid numeric(9),@chnlid numeric(9)) returns  numeric(9)as begindeclare @ret  numeric(9)select @ret = 0select @ret=docorderpri from wcmchnldoc where chnlId = @chnlid and docid= @docidreturn @retendgo--5: 创建函数F_GetStatus-- drop function dbo.F_GetStatuscreate function F_GetStatus (@docid numeric(9),@chnlid numeric(9)) returns  numeric(9)as begindeclare @ret  numeric(9)select @ret = 0select @ret=docstatus from wcmchnldoc where chnlId = @chnlid and docid= @docidreturn @retendgo--6: 创建视图--drop view V_WCMDocumentAndTags;create view V_WCMDocumentAndTagsasSELECT WCMDOCUMENT.*,kmdoctags.DocTags AS DocTags,dbo.F_GetStatus(WCMDOCUMENT.DocId,WCMDOCUMENT.DocChannel) as docstatus1,dbo.F_GetRecId(WCMDOCUMENT.DocId,WCMDOCUMENT.DocChannel) as RecId,dbo.F_GetDocOrderPri(WCMDOCUMENT.DocId,WCMDOCUMENT.DocChannel) as DocorderPri,dbo.F_GetModal(WCMDOCUMENT.DocId,WCMDOCUMENT.DocChannel) as ModalFROM WCMDOCUMENT LEFT OUTER JOIN        (SELECT docid, DocTags =dbo.F_ConcatedTagname(docid)         FROM xwcmdoctag         GROUP BY docid) kmdoctags ON       WCMDOCUMENT.DOCID = kmdoctags.docidWHERE (WCMDOCUMENT.DOCSTATUS > 0)Go



Oracle的
SQL code
--1: 创建函数F_ConcatedTagnamecreate or replace function  F_ConcatedTagname(f_DocId in NUMBER) return varchar2 isv_Result varchar2(8000);v_TagName varchar2(255);CURSOR c_DocTag IS SELECT tagname FROM xwcmdoctag where docid=f_DocId and taggingnum>0;begin  OPEN c_DocTag;    LOOP      FETCH c_DocTag INTO v_TagName;      EXIT WHEN  c_DocTag%NOTFOUND;      v_Result := CONCAT(v_Result,nvl(v_TagName,''));             v_Result := CONCAT(v_Result,';');          END LOOP;  CLOSE c_DocTag;  return nvl(v_Result,'');end F_ConcatedTagname;--2: 创建函数F_GetRecIdcreate or replace function F_GetRecId(Idocid in numeric,Ichnlid in numeric) return numeric is Result numeric(9); begin select recid into Result from wcmchnldoc where chnlId = Ichnlid and docid= Idocid;return(Result); end F_GetRecId;--3: 创建函数F_GetModalcreate or replace function F_GetModal(Idocid in numeric,Ichnlid in numeric) return numeric is Result numeric(9); begin select modal into Result from wcmchnldoc where chnlId = Ichnlid and docid= Idocid;return(Result); end F_GetModal;--4: 创建函数F_GetDocOrderPricreate or replace function F_GetDocOrderPri(Idocid in numeric,Ichnlid in numeric) return numeric is Result numeric(9); begin select docorderpri into Result from wcmchnldoc where chnlId = Ichnlid and docid= Idocid;return(Result); end F_GetDocOrderPri;--5: 创建函数F_GetStatuscreate or replace function F_GetStatus(Idocid in numeric,Ichnlid in numeric) return numeric is Result numeric(9); begin select docstatus into Result from wcmchnldoc where chnlId = Ichnlid and docid= Idocid;return(Result); end F_GetStatus;--6: 创建视图--drop view V_WCMDocumentAndTags;create view V_WCMDocumentAndTagsasSELECT WCMDOCUMENT.*,kmdoctags.DocTags AS DocTags,F_GetStatus(WCMDOCUMENT.DocId,WCMDOCUMENT.DocChannel) as docstatus1,F_GetRecId(WCMDOCUMENT.DocId,WCMDOCUMENT.DocChannel) as RecId,F_GetDocOrderPri(WCMDOCUMENT.DocId,WCMDOCUMENT.DocChannel) as DocorderPri,F_GetModal(WCMDOCUMENT.DocId,WCMDOCUMENT.DocChannel) as ModalFROM WCMDOCUMENT ,        (SELECT docid,F_ConcatedTagname(docid) DocTags         FROM xwcmdoctag         GROUP BY docid) kmdoctags where WCMDOCUMENT.DOCID = kmdoctags.docid(+)  and WCMDOCUMENT.DOCSTATUS > 0;
  相关解决方案