Кастомное "ГДЕ" в хранимой процедуре (Informix)? - PullRequest
1 голос
/ 21 декабря 2009

Я делаю спецификацию для приложения, которое должно искать таблицу с другими условиями в предложении WHERE.

Например (не фактическая таблица):

тип 1

select name from employees where active = true;

или введите 2

select name from employees where idBoss = 3;

Я бы лучше создал одну хранимую процедуру с параметром «тип», чем создал бы две хранимые процедуры с одним и тем же кодом и разными предложениями «где».

Возможно ли это?

Примечание: у меня есть 2 программиста; один знает только Informix, один знает только .NET. Чтобы свести к минимуму проблемы, я делаю все вызовы базы данных с помощью хранимых процедур, чтобы программисту db и программисту .net не приходилось нуждаться в друг друга.

Ответы [ 2 ]

2 голосов
/ 21 декабря 2009

Вы можете использовать динамический SQL в Informix - см. эту ссылку для более подробной информации.

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 голос
/ 21 декабря 2009

Зачем создавать хранимую процедуру для чего-то такого короткого?

Рассмотрите возможность использования Linq. Где просто фильтр, который принимает лямбда / функцию, которая возвращает истину / ложь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...