我有一个sql-select(或insert),它多次使用相同的两个参数。 有没有办法避免为每个"?,?,?,?,..."使用多个相同的参数。在列表中?
cursor.execute(statement, list)
我可以想到两个命名参数但没有代码注入的可能性。
在下面的示例中,每个左边"?" RESP。对#34;?"是相同的字符串。我在一个陈述中使用了七个计数以获得一个结果。
select count(case (aart like "1%") and (adatum between ? and ?) when 1 then 1 else null end) as AufExt,
count(case (aart like "1%E") and (adatum between ? and ?) when 1 then 1 else null end) as AufExtE,
count(case (aart like "1%K") and (adatum between ? and ?) when 1 then 1 else null end) as AufExtK,
count(case (aart like "2S%") and (adatum between ? and ?) when 1 then 1 else null end) as AufInt,
count(case (eart like "3%") and (edatum between ? and ?) when 1 then 1 else null end) as EntExt,
count(case (eart like "3%K") and (edatum between ? and ?) when 1 then 1 else null end) as EntExtK,
count(case (eart like "2S%") and (edatum between ? and ?) when 1 then 1 else null end) as EntInt
from tabelle
此问题的相关问题:看起来好像没有在" case"中使用索引。正确的吗?
答案 0 :(得分:1)
?未附加数字的问号会创建一个参数,其数字大于已分配的最大参数编号。 [...]
?NNN 问号后跟一个数字 NNN ,其中包含 NNN -th参数的位置。 [...]
:AAAA 冒号后跟标识符名称,其中包含名称为AAAA的命名参数的位置。命名参数也编号。 [...]为避免混淆,最好避免混合命名参数和编号参数。
答案 1 :(得分:0)
您还可以添加以下子句:
with
parms as (select ? as parm1, ? as parm2)
选择计数(case(aart like“1%”)和(parms.parm1和parms.parm2之间的adatum)当1然后1 else null结束时)作为AufExt ...