Вопрос

Я пишу модуль 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.

Попробуй !!!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с dba.stackexchange
scroll top