Oracle - 根据输入值过滤记录

时间:2015-12-08 10:59:57

标签: sql oracle

在下面的sql语句中,person_id的值是动态传递的。

SELECT * FROM person WHERE person_id = '&PERSON_ID';

有一项要求,当用户为person_id输入%时,应返回所有记录。它应该执行以下查询:

SELECT * FROM person;

任何人都可以知道这个伎俩吗?

1 个答案:

答案 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);