存储过程(Informix)中的自定义“WHERE”?

时间:2009-12-21 02:51:27

标签: sql stored-procedures informix

我正在为必须在WHERE子句中搜索具有不同条件的表的应用程序做规范。

例如(不是实际的表格):

输入1

select name from employees where active = true;

或输入2

select name from employees where idBoss = 3;

我宁愿使用参数“type”创建一个存储过程,而不是使用相同的代码和不同的“where”子句创建两个存储过程。

这可能吗?

注意:我有2个程序员;一个人只知道Informix,只知道.NET。为了最大限度地减少问题,我正在使用存储过程对数据库进行所有调用,因此db程序员和.net程序员不需要彼此需要。

2 个答案:

答案 0 :(得分:2)

您可以在informix中使用动态SQL - 有关详细信息,请参阅this link

DEFINE v_sql VARCHAR(250);

LET v_sql = "select name from employees";

IF IN_PARAMETER = 1 THEN
   LET v_sql = v_sql || " WHERE active = true"
ELSE
   LET v_sql = v_sql || " WHERE idboss = 3"
END IF;

PREPARE stmt FROM v_sql;
EXECUTE stmt;

FREE stmt;

如果你不能使用动态SQL,那么下一个最好的事情就是:

IF IN_PARAMETER = 1 THEN
   select name from employees WHERE active = true;
ELSE
   select name from employees WHERE idboss = 3;
END IF;

答案 1 :(得分:1)

为什么要为这么短的东西创建存储过程?

考虑使用Linq。哪里只是一个过滤器,它接受一个返回true / false的lambda /函数。