1. 程式人生 > >儲存過程中傳參執行sql語句

儲存過程中傳參執行sql語句

CREATE OR REPLACE PROCEDURE XXX.xXX(

//傳進來的引數值,使用逗號隔開 workProSchname in varchar2(200), xuenian in varchar2(200), typeid in varchar2(200), code in varchar2(200), phase in varchar2(200), classname in number(16) ) AUTHID DEFINER  is

//定義一個變數 declare vsql varchar(5000); begin

//拼接字串

vsql:='select o.work_pro_schname,sum(work_pro_schaudit_passnum) as passnum,sum(work_pro_schaudit_faildnum) as faildnum,sum(work_pro_schaudit_dainum) as dainum  from WORKPROGRESS o inner join DEPART d on o.work_pro_schid = d.ID where d.org_code like''%'||code||'%'' and o.work_pro_phase in('||phase||')' ; //判斷傳值是否為null,上面如果沒有條件的話,可以使用where 1=1

    if(workProSchname is not null) then

//符號||代表++,(目前遇到的儲存,傳值如果是String型別,則需要使用'''ss'''三個單引號將其包住)      vsql:=vsql||' and work_pro_schname in ('||workProSchname||')';      end if;     if (xuenian  is not null) then       vsql:=vsql||' and work_pro_xuenian='||xuenian||'';      end if;     if (typeid  is not null) then         vsql:=vsql||' and work_pro_typeid='''||typeid||'''';     end if;     if (classname is not null) then         vsql:=vsql||' and work_pro_classname='''||classname||'''';     end if;

//group by拼接到最後面     vsql:=vsql||'group by  o.work_pro_schname';  //不要丟掉這句話   execute immediate vsql; END;