儲存過程中傳參執行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
//符號||代表++,(目前遇到的儲存,傳值如果是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;