Ответы:
SQLite пришлось пожертвовать другими характеристиками, которые некоторые люди считают полезными, такими как высокая степень параллелизма, детализированное управление доступом, богатый набор встроенных функций, хранимые процедуры , эзотерические функции языка SQL, расширения XML и / или Java, тера или петабайтная масштабируемость и т. д.
Источник: подходящее использование для SQLite
Ответ : НЕТ
Вот почему ... Я думаю, что ключевой причиной хранения процедур в базе данных является то, что вы выполняете код SP в том же процессе, что и механизм SQL. Это имеет смысл для механизмов баз данных, предназначенных для работы в качестве службы, подключенной к сети, но императив для SQLite гораздо меньше, поскольку он запускается как DLL в процессе приложения, а не в отдельном процессе механизма SQL. Поэтому имеет смысл реализовать всю вашу бизнес-логику, включая то, что было бы SP-кодом на языке хоста.
Однако вы можете расширить SQLite своими собственными пользовательскими функциями на главном языке (PHP, Python, Perl, C #, Javascript , Ruby и т. Д.). Затем вы можете использовать эти пользовательские функции как часть любого SQLite select / update / insert / delete. Я сделал это в C # с использованием SQLite DevArt для реализации хеширования паролей.
Если вам все еще интересно, Крис Вольф создал прототип реализации SQLite с хранимыми процедурами. Подробности можно найти в его сообщении в блоге: Добавление хранимых процедур в SQLite
Тем не менее, его можно подделать, используя специальную таблицу, названную по имени вашего fake-sp, с триггером AFTER INSERT. Строки выделенной таблицы содержат параметры для вашего поддельного sp, и если ему нужно вернуть результаты, у вас может быть вторая (возможная временная) таблица (с именем, связанным с fake-sp), чтобы содержать эти результаты. Для этого потребуются два запроса: первый для ВСТАВКИ данных в fake-sp-trigger-table, а второй для SELECT из fake-sp-results-table, которая может быть пустой, или с полем сообщения, если что-то пошло не так ,