web-dev-qa-db-fra.com

Création de procédure stockée et SQLite?

Est-il possible de créer une procédure stockée avec SQLite?

159
grady

SQLite a dû sacrifier d'autres caractéristiques jugées utiles par certaines personnes, telles que la haute concurrence, le contrôle d'accès à granularité fine, un riche ensemble de fonctions intégrées, stockées procédures , fonctionnalités ésotériques du langage SQL, extensions XML et/ou Java, évolutivité en téra ou en péta-octets, etc.

Source: tilisations appropriées pour SQLite

195
h3xStream

Réponse : NON

Voici pourquoi ... Je pense que l'une des principales raisons d'avoir des procs stockées dans une base de données est que vous exécutez du code SP dans le même processus que le code SQL. moteur. Cela est logique pour les moteurs de base de données conçus pour fonctionner comme un service connecté au réseau, mais l'impératif pour SQLite est beaucoup moins important étant donné qu'il s'exécute en tant que DLL dans votre processus d'application plutôt que dans un processus de moteur SQL distinct. Il est donc plus logique d'implémenter toute votre logique métier, y compris le code qui aurait été SP dans le langage hôte.

Vous pouvez cependant étendre SQLite avec vos propres fonctions définies par l'utilisateur dans le langage hôte (PHP, Python, Perl, C #, Javascript , Ruby etc) . Vous pouvez ensuite utiliser ces fonctions personnalisées dans le cadre de n’importe quelle sélection/mise à jour/insertion/suppression de SQLite. J'ai fait cela en C # en utilisant SQLite de DevArt pour implémenter le hachage du mot de passe.

83
Tony O'Hagan

Si vous êtes toujours intéressé, Chris Wolf a mis au point un prototype d’implémentation de SQLite avec procédures stockées. Vous pouvez trouver les détails sur son blog: Ajout de procédures stockées à SQLite

17
torial

Pourtant, il est possible de le simuler en utilisant une table dédiée, nommée en fonction de votre pseudonyme fake-sp, avec un déclencheur AFTER INSERT. Les lignes de la table dédiée contiennent les paramètres de votre faux sp. Si elle doit renvoyer des résultats, vous pouvez avoir une seconde table (poss. Temp) (avec un nom associé à fake-sp) pour contenir ces résultats. Il faudrait deux requêtes: premièrement pour INSÉRER des données dans la fake-sp-trigger-table et la deuxième pour SELECT dans la fake-sp-results-table, qui pourrait être vide, ou pour avoir un champ de message en cas de problème. .

6
slashmais