zl程序教程

您现在的位置是:首页 >  后端

当前栏目

sql中参数过多利用变量替换参数的方法

方法SQL变量 利用 参数 替换 过多
2023-06-13 09:15:16 时间
工作中遇到一个需求,需要非常多的参数,例如如下sql,
复制代码代码如下:

select
ff.fundsc||"-"||ff.fundtzfs||"-"||ff.fundcjfl||"-"||ff.fundonefl||"-"||ff.fundtowflcatagory,
sf.scode,replace(sf.fund5,"型证券投资基金","")fund5,sf.fund4,sf.fund10,
(selectto_date(tradedate,"yyyy-MM-dd")fromsdc_fundnetassetvaluewherescode=sf.scodeandtradedatein
(selectmax(tradedate)fromsdc_fundnetassetvaluewherescode=sf.scodeandto_date(tradedate,"yyyyMMdd")>=(to_date(20120801,"yyyyMMdd")-10)andtradedate<=20120801)andrownum<2)trdatedate,
(selectunitvaluefromsdc_fundnetassetvaluewherescode=sf.scodeandtradedatein
(selectmax(tradedate)fromsdc_fundnetassetvaluewherescode=sf.scodeandto_date(tradedate,"yyyyMMdd")>=(to_date(20120801,"yyyyMMdd")-10)andtradedate<=20120801)andrownum<2)fejz,
(selectaccumulatedunitvaluefromsdc_fundnetassetvaluewherescode=sf.scodeandtradedatein
(selectmax(tradedate)fromsdc_fundnetassetvaluewherescode=sf.scodeandto_date(tradedate,"yyyyMMdd")>=(to_date(20120801,"yyyyMMdd")-10)andtradedate<=20120801)andrownum<2)feljjz,
(selectf30004_30002fromsi_fund_30002wheref_fundcode=sf.scodeandf_type=0andf_tradingdatein
(selectmax(f_tradingdate)fromsi_fund_30002wheref_fundcode=sf.scodeandto_date(f_tradingdate,"yyyyMMdd")>=(to_date(20120801,"yyyyMMdd")-10)andf_tradingdate<=20120801)andrownum<2)gqyzjzzzl,
(selectf30006_30002fromsi_fund_30002wheref_fundcode=sf.scodeandf_type=0andf_tradingdatein
(selectmax(f_tradingdate)fromsi_fund_30002wheref_fundcode=sf.scodeandto_date(f_tradingdate,"yyyyMMdd")>=(to_date(20120801,"yyyyMMdd")-10)andf_tradingdate<=20120801)andrownum<2)gqyyjzzzl,
decode((selectf30007_30002fromsi_fund_30002wheref_fundcode=sf.scodeandf_type=0andf_tradingdatein
(selectmax(f_tradingdate)fromsi_fund_30002wheref_fundcode=sf.scodeandto_date(f_tradingdate,"yyyyMMdd")>=(to_date(20120801,"yyyyMMdd")-10)andf_tradingdate<=20120801)andrownum<2),
null,"-",to_char((selectf30007_30002fromsi_fund_30002wheref_fundcode=sf.scodeandf_type=0andf_tradingdatein
(selectmax(f_tradingdate)fromsi_fund_30002wheref_fundcode=sf.scodeandto_date(f_tradingdate,"yyyyMMdd")>=(to_date(20120801,"yyyyMMdd")-10)andf_tradingdate<=20120801)andrownum<2),"fm999999990.9999"))gqsgyjzzzl,
row_number()over(partitionbyff.fundsc||"-"||ff.fundtzfs||"-"||ff.fundcjfl||"-"||ff.fundonefl||"-"||ff.fundtowfl
orderbydecode((selectf30007_30002fromsi_fund_30002wheref_fundcode=sf.scodeandf_type=0andf_tradingdatein
(selectmax(f_tradingdate)fromsi_fund_30002wheref_fundcode=sf.scodeandto_date(f_tradingdate,"yyyyMMdd")>=(to_date(20120801,"yyyyMMdd")-10)andf_tradingdate<=20120801)andrownum<2),
null,"-",to_char((selectf30007_30002fromsi_fund_30002wheref_fundcode=sf.scodeandf_type=0andf_tradingdatein
(selectmax(f_tradingdate)fromsi_fund_30002wheref_fundcode=sf.scodeandto_date(f_tradingdate,"yyyyMMdd")>=(to_date(20120801,"yyyyMMdd")-10)andf_tradingdate<=20120801)andrownum<2),"fm999999990.9999"))desc)sgy,
decode((selectf30008_30002fromsi_fund_30002wheref_fundcode=sf.scodeandf_type=0andf_tradingdatein
(selectmax(f_tradingdate)fromsi_fund_30002wheref_fundcode=sf.scodeandto_date(f_tradingdate,"yyyyMMdd")>=(to_date(20120801,"yyyyMMdd")-10)andf_tradingdate<=20120801)andrownum<2),
null,"-",to_char((selectf30008_30002fromsi_fund_30002wheref_fundcode=sf.scodeandf_type=0andf_tradingdatein
(selectmax(f_tradingdate)fromsi_fund_30002wheref_fundcode=sf.scodeandto_date(f_tradingdate,"yyyyMMdd")>=(to_date(20120801,"yyyyMMdd")-10)andf_tradingdate<=20120801)andrownum<2),"fm999999990.9999"))gqbnjzzzl,
row_number()over(partitionbyff.fundsc||"-"||ff.fundtzfs||"-"||ff.fundcjfl||"-"||ff.fundonefl||"-"||ff.fundtowfl
orderbydecode((selectf30008_30002fromsi_fund_30002wheref_fundcode=sf.scodeandf_type=0andf_tradingdatein
(selectmax(f_tradingdate)fromsi_fund_30002wheref_fundcode=sf.scodeandto_date(f_tradingdate,"yyyyMMdd")>=(to_date(20120801,"yyyyMMdd")-10)andf_tradingdate<=20120801)andrownum<2),
null,"-",to_char((selectf30008_30002fromsi_fund_30002wheref_fundcode=sf.scodeandf_type=0andf_tradingdatein
(selectmax(f_tradingdate)fromsi_fund_30002wheref_fundcode=sf.scodeandto_date(f_tradingdate,"yyyyMMdd")>=(to_date(20120801,"yyyyMMdd")-10)andf_tradingdate<=20120801)andrownum<2),"fm999999990.9999"))desc)bn,
decode((selectF30017_30003fromsi_fund_30003wheref_fundcode=sf.scodeandf_type=0andf_tradingdatein
(selectmax(f_tradingdate)fromsi_fund_30003wheref_fundcode=sf.scodeandto_date(f_tradingdate,"yyyyMMdd")>=(to_date(20120801,"yyyyMMdd")-10)andf_tradingdate<=20120801)andrownum<2),
null,"-",to_char((selectF30017_30003fromsi_fund_30003wheref_fundcode=sf.scodeandf_type=0andf_tradingdatein
(selectmax(f_tradingdate)fromsi_fund_30003wheref_fundcode=sf.scodeandto_date(f_tradingdate,"yyyyMMdd")>=(to_date(20120801,"yyyyMMdd")-10)andf_tradingdate<=20120801)andrownum<2),"fm999999990.9999"))jinnian,
row_number()over(partitionbyff.fundsc||"-"||ff.fundtzfs||"-"||ff.fundcjfl||"-"||ff.fundonefl||"-"||ff.fundtowfl
orderbydecode((selectF30017_30003fromsi_fund_30003wheref_fundcode=sf.scodeandf_type=0andf_tradingdatein
(selectmax(f_tradingdate)fromsi_fund_30003wheref_fundcode=sf.scodeandto_date(f_tradingdate,"yyyyMMdd")>=(to_date(20120801,"yyyyMMdd")-10)andf_tradingdate<=20120801)andrownum<2),
null,"-",to_char((selectF30017_30003fromsi_fund_30003wheref_fundcode=sf.scodeandf_type=0andf_tradingdatein
(selectmax(f_tradingdate)fromsi_fund_30003wheref_fundcode=sf.scodeandto_date(f_tradingdate,"yyyyMMdd")>=(to_date(20120801,"yyyyMMdd")-10)andf_tradingdate<=20120801)andrownum<2),"fm999999990.9999"))desc)jn,
decode((selectf30009_30002fromsi_fund_30002wheref_fundcode=sf.scodeandf_type=0andf_tradingdatein
(selectmax(f_tradingdate)fromsi_fund_30002wheref_fundcode=sf.scodeandto_date(f_tradingdate,"yyyyMMdd")>=(to_date(20120801,"yyyyMMdd")-10)andf_tradingdate<=20120801)andrownum<2),
null,"-",to_char((selectf30009_30002fromsi_fund_30002wheref_fundcode=sf.scodeandf_type=0andf_tradingdatein
(selectmax(f_tradingdate)fromsi_fund_30002wheref_fundcode=sf.scodeandto_date(f_tradingdate,"yyyyMMdd")>=(to_date(20120801,"yyyyMMdd")-10)andf_tradingdate<=20120801)andrownum<2),"fm999999990.9999"))gqynjzzzl,
row_number()over(partitionbyff.fundsc||"-"||ff.fundtzfs||"-"||ff.fundcjfl||"-"||ff.fundonefl||"-"||ff.fundtowfl
orderbydecode((selectf30009_30002fromsi_fund_30002wheref_fundcode=sf.scodeandf_type=0andf_tradingdatein
(selectmax(f_tradingdate)fromsi_fund_30002wheref_fundcode=sf.scodeandto_date(f_tradingdate,"yyyyMMdd")>=(to_date(20120801,"yyyyMMdd")-10)andf_tradingdate<=20120801)andrownum<2),
null,"-",to_char((selectf30009_30002fromsi_fund_30002wheref_fundcode=sf.scodeandf_type=0andf_tradingdatein
(selectmax(f_tradingdate)fromsi_fund_30002wheref_fundcode=sf.scodeandto_date(f_tradingdate,"yyyyMMdd")>=(to_date(20120801,"yyyyMMdd")-10)andf_tradingdate<=20120801)andrownum<2),"fm999999990.9999"))desc)gqyn,
decode((selectf30010_30002fromsi_fund_30002wheref_fundcode=sf.scodeandf_type=0andf_tradingdatein
(selectmax(f_tradingdate)fromsi_fund_30002wheref_fundcode=sf.scodeandto_date(f_tradingdate,"yyyyMMdd")>=(to_date(20120801,"yyyyMMdd")-10)andf_tradingdate<=20120801)andrownum<2),
null,"-",to_char((selectf30010_30002fromsi_fund_30002wheref_fundcode=sf.scodeandf_type=0andf_tradingdatein
(selectmax(f_tradingdate)fromsi_fund_30002wheref_fundcode=sf.scodeandto_date(f_tradingdate,"yyyyMMdd")>=(to_date(20120801,"yyyyMMdd")-10)andf_tradingdate<=20120801)andrownum<2),"fm999999990.9999"))gqlnjzzzl,
row_number()over(partitionbyff.fundsc||"-"||ff.fundtzfs||"-"||ff.fundcjfl||"-"||ff.fundonefl||"-"||ff.fundtowfl
orderbydecode((selectf30010_30002fromsi_fund_30002wheref_fundcode=sf.scodeandf_type=0andf_tradingdatein
(selectmax(f_tradingdate)fromsi_fund_30002wheref_fundcode=sf.scodeandto_date(f_tradingdate,"yyyyMMdd")>=(to_date(20120801,"yyyyMMdd")-10)andf_tradingdate<=20120801)andrownum<2),
null,"-",to_char((selectf30010_30002fromsi_fund_30002wheref_fundcode=sf.scodeandf_type=0andf_tradingdatein
(selectmax(f_tradingdate)fromsi_fund_30002wheref_fundcode=sf.scodeandto_date(f_tradingdate,"yyyyMMdd")>=(to_date(20120801,"yyyyMMdd")-10)andf_tradingdate<=20120801)andrownum<2),"fm999999990.9999"))desc)gqln,
decode((selectf30011_30002fromsi_fund_30002wheref_fundcode=sf.scodeandf_type=0andf_tradingdatein
(selectmax(f_tradingdate)fromsi_fund_30002wheref_fundcode=sf.scodeandto_date(f_tradingdate,"yyyyMMdd")>=(to_date(20120801,"yyyyMMdd")-10)andf_tradingdate<=20120801)andrownum<2),
null,"-",to_char((selectf30011_30002fromsi_fund_30002wheref_fundcode=sf.scodeandf_type=0andf_tradingdatein
(selectmax(f_tradingdate)fromsi_fund_30002wheref_fundcode=sf.scodeandto_date(f_tradingdate,"yyyyMMdd")>=(to_date(20120801,"yyyyMMdd")-10)andf_tradingdate<=20120801)andrownum<2),"fm999999990.9999"))gqsnjzzzl

from
(select
b.scode,b.fund5,b.fund4,b.fund10
from
sdc_fundbasebleftjoinsdc_securityaonb.scode=a.scodeandb.mktcode=a.mktcodeandb.fund49=a.stype
where
b.scodein(selectt.fundcodefromfund_fundcategoryonetwhere(t.fundtzfs="开放式"ort.fundtzfs="封闭式")andt.fundonefl!="货币市场基金"andt.fundonefl!="交易类")
and(a.enddate>=to_date(20120801,"yyyy-MM-dd")ora.enddateisnullora.enddate=to_date(19000101,"yyyy-MM-dd"))
anda.stypein(6,7)orderbyscode
)sf
leftjoinfund_fundcategoryoneffonsf.scode=ff.fundcodeandff.fundonefl!="交易类"

非常复杂,不仔细介绍,此时需要将20120801处全部变成参数传入,,只写参数就得累死我,下面方法可以节省我的好多工作量,在最内部函数中修改select
b.scode,b.fund5,b.fund4,b.fund10,20120801tdate
from
将20120801用tdate变量来代替,这样传入的参数就用tdate来表示就可以了。