Создание хранимой процедуры и SQLite? - PullRequest
155 голосов
/ 26 июля 2010

Можно ли как-нибудь создать хранимую процедуру при использовании SQLite?

Ответы [ 4 ]

193 голосов
/ 26 июля 2010

SQLite пришлось пожертвовать другими характеристиками, которые некоторые люди находят полезными, такими как высокая степень параллелизма, детальное управление доступом, богатый набор встроенных функций, хранимые процедуры особенности эзотерического языка SQL, расширения XML и / или Java, масштабируемость в тера- или петабайтах и ​​т. д.

Источник: Подходящее использование для SQLite

82 голосов
/ 19 февраля 2013

Ответ : НЕТ

Вот почему ... Я думаю, что ключевая причина для хранения процедур в базе данных состоит в том, что вы выполняете код SP в том же процессе, что и механизм SQL. Это имеет смысл для механизмов баз данных, предназначенных для работы в качестве службы, подключенной к сети, но императив для SQLite гораздо меньше, поскольку он запускается как библиотека DLL в процессе приложения, а не в отдельном процессе механизма SQL. Поэтому имеет смысл реализовать всю вашу бизнес-логику, включая то, что было бы кодом SP на языке хоста.

Однако вы можете расширить SQLite с помощью собственных пользовательских функций на языке хоста (PHP, Python, Perl, C #, Javascript , Ruby и т. Д.) , Затем вы можете использовать эти пользовательские функции как часть любого выбора / обновления / вставки / удаления SQLite. Я сделал это в C # , используя SQLite DevArt для реализации хеширования пароля.

17 голосов
/ 19 апреля 2011

Если вам все еще интересно, Крис Вольф создал прототип реализации SQLite с хранимыми процедурами.Подробности можно найти в его сообщении в блоге: Добавление хранимых процедур в SQLite

6 голосов
/ 13 марта 2018

Тем не менее, возможно подделать его , используя специальную таблицу, названную в честь вашего fake-sp, с триггером AFTER INSERT. Строки выделенной таблицы содержат параметры для вашего поддельного sp, и если вам нужно будет возвращать результаты, вы можете иметь вторую (возможную временную) таблицу (с именем, связанным с fake-sp), чтобы содержать эти результаты. Это потребовало бы двух запросов: первый для ВСТАВКИ данных в fake-sp-trigger-table, а второй для SELECT из fake-sp-results-table, который может быть пустым, или с полем сообщения, если что-то пошло не так .

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