在下面的sql语句中,person_id的值是动态传递的。
SELECT * FROM person WHERE person_id = '&PERSON_ID';
有一项要求,当用户为person_id输入%时,应返回所有记录。它应该执行以下查询:
SELECT * FROM person;
任何人都可以知道这个伎俩吗?
答案 0 :(得分:1)
您可以在where子句中使用Case语句来欺骗它。
如果变量PERSON_ID为'%',则它将等于同一列,就像1 = 1为真。
[Errno 2] No such file or directory
如果变量PERSON_ID为空而不是'null',它仍将显示所有结果,如下所示。
SELECT * FROM person WHERE person_id = (CASE WHEN '&PERSON_ID' = '%' THEN person_id ELSE '&PERSON_ID' END);