База данных агностик условной
-
16-10-2019 - |
Вопрос
Я пишу модуль Drupal и хочу, чтобы он был агностиком между PostgreSQL и MySQL. У меня есть поле, которое получает свою ценность от условного, и я изначально написал его как IF()
. Анкет Тогда я узнал, что IF()
это mysql-ism. Итак, я посмотрел условия для PostgreSQL и CASE
Казалось, был лучшим инструментом.
Однако я заметил, что CASE
заканчивается END
в Postgresql, пока в Mysql это заканчивается END CASE
. Анкет Будет ли это уничтожить мои надежды на агностицизм базы данных? Могу ли я написать агностический запрос с условным?
Решение
Если вы используете выражения корпуса в операторе SELECT, вы должны смотреть на эта страница в документах MySQL. Анкет Как показано там, вы используете END
Чтобы положить конец выражению случая.
Если, с другой стороны, вы используете Case как часть оператора управления потоком (как вы можете использовать в хранимой процедуре для условного выполнения других операторов), обе базы данных будут использовать END CASE
Чтобы положить конец заявлению дела.
Другие советы
Синтаксис функции SQL между MySQL и PostgreSQL никогда не будет сходиться, как вы хотите, если вы не хотите рискнуть на какой -то странный способ эмулировать функцию if () в запутанной манере:
Напишите сохраненную функцию !!!
Условную функцию, если можно назвать MyIF и сделать следующее:
- Вы можете передать необходимые параметры Myif
- Определите любую структуру случая или логику сохраненной процедуры, которую вы хотите
- Вам придется определить хранимую функцию MYIF в MySQL и PostgreSQL
Следовательно, запрос может показаться агностическим при вызове функции MYIF.
Попробуй !!!