Создание хранимой процедуры и SQLite?

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

4 ответов


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

источник : Соответствующее Использование Для SQLite


ответ: нет

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

вы можете, однако, расширить SQLite с вашим собственным пользовательские функции на языке хоста (PHP, Python, Perl, C#,в JavaScript, Рубин и т. д.). Затем вы можете использовать эти пользовательские функции как часть любого SQLite select/update/insert / delete. Я сделать это в C# используя SQLite Деварта для реализации пароля хэширование.


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


еще, можно подделать его использование выделенной таблицы, названной для вашего fake-sp, с триггером AFTER INSERT. Выделенные строки таблицы содержат параметры для вашего поддельного sp, и если ему нужно вернуть результаты, у вас может быть второй (poss. temp) таблица (с именем, связанным с fake-sp), чтобы содержать эти результаты. Для этого потребуется два запроса: первый для вставки данных в таблицу fake-sp-trigger-table, а второй для выбора из таблицы fake-sp-results - table, которая может быть пусто, или есть поле сообщения, если что-то пошло не так.