代码之家  ›  专栏  ›  技术社区  ›  sergiogx

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

  •  1
  • sergiogx  · 技术社区  · 16 年前

    我正在为一个应用程序编写规范,该应用程序必须在WHERE子句中搜索具有不同条件的表。

    例如(不是实际的表):

    类型1

    select name from employees where active = true;
    

    select name from employees where idBoss = 3;
    

    我宁愿创建一个带有参数“type”的存储过程,也不愿创建两个具有相同代码和不同“where”子句的存储过程。

    这可能吗?

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

    2 回复  |  直到 16 年前
        1
  •  2
  •   OMG Ponies    16 年前

    您可以在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;
    
        2
  •  1
  •   Hamish Grubijan    16 年前

    为什么要为这么短的内容创建存储过程?

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

    推荐文章