¿Es de alguna manera posible crear un procedimiento almacenado cuando se usa SQLite?¿Crear procedimiento almacenado y SQLite?
Respuesta
SQLite ha tenido que sacrificar otras características que algunas personas encuentran útiles, tales como alta concurrencia, de grano fino control de acceso, un rico conjunto de funciones incorporadas, procedimientos almacenados, las características del lenguaje SQL esotéricos , XML y/o extensiones de Java, o tera- peta bytes escalabilidad, y así sucesivamente
Fuente: Appropriate Uses For SQLite
SQLite does not have sprocs.
Este enlace está muerto ahora –
Si bien este enlace puede responder a la pregunta, es mejor para incluir las partes esenciales de la respuesta aquí y proporcionar el enlace de referencia. Las respuestas de solo enlace pueden dejar de ser válidas si la página vinculada cambia. - [De la crítica] (/ review/low-quality-posts/19047098) –
Si todavía está interesado, Chris Wolf realizó una implementación prototipo de SQLite con procedimientos almacenados. Puede encontrar los detalles en su blog: Adding Stored Procedures to SQLite
El artículo está muerto ahora, pero el proyecto está en https://github.com/wolfch/sqlite-3.7.3.p1. El archivo Léame implica que esto no está listo para producción, ni tampoco es para experimentación.Parece que es más una prueba de concepto. – pqsk
respuesta: NO
He aquí por qué ... Creo que una razón clave para tener procedimientos almacenados en una base de datos es que eres ejecutando código SP en el mismo proceso que el motor SQL. Esto tiene sentido para los motores de bases de datos diseñados para funcionar como un servicio conectado a la red, pero el imperativo para SQLite es mucho menor dado que se ejecuta como una DLL en su proceso de aplicación en lugar de en un proceso separado de motor SQL. Por lo tanto, tiene más sentido implementar toda la lógica de su negocio, incluido lo que hubiera sido el código SP en el idioma del host.
Sin embargo, puede extender SQLite con su propio user defined functions en el idioma del host (PHP, Python, Perl, C#, Javascript, Ruby, etc.). A continuación, puede usar estas funciones personalizadas como parte de cualquier SQLite select/update/insert/delete. Tengo done this in C# usando DevArt's SQLite para implementar hashing de contraseña.
Para aclarar ... No estoy diciendo que NO haya ningún motivo para implementar SP en SQLite, sino mucho menos que en otros motores de DB. –
La razón principal para tener procedimientos almacenados es prevenir contra la inyección de SQL. Sin embargo, hay muchas otras razones. Por ejemplo, poder compartir las consultas relevantes incrustándolas en el archivo sqlite. No hay absolutamente ninguna diferencia entre una consulta estándar que se ejecuta en el contexto de SQL Engine y la selección de un SP. Ambos funcionan en SQL ENGINE. – Dan
@Dan En primer lugar, los SP existían mucho antes de que se pensara siquiera en la inyección de SQL. Se han creado miles de aplicaciones basadas en SQL sin ellas, que son seguras contra este ataque. También revisé el código de los SP inseguros que son vulnerables a la inyección de SQL (generalmente basados en SQL dinámico). Entonces no, no, esta es una razón principal. Hay muchas otras maneras de evitar este ataque en la parte superior de la pila. –
El hecho de que la mayoría de las aplicaciones que usan SQLite no usan procesos almacenados no significa que no sean útiles.
Uno de los usos principales que tengo para ellos es que no tengo que volver a distribuir una aplicación completa cuando una consulta cambia ligeramente. Solo el DB cambia, y ese es un script simple, generalmente menos de 1k.
Estoy considerando si debo publicar mi código almacenado Proc C#/SQL. Encontré este hilo cuando estaba buscando para ver si alguien más lo había hecho.
No estoy en desacuerdo con la idea de que las personas (a veces) quieran que sproc se ejecute en el mismo espacio de ejecución que el servidor, pero SQLite está, por definición, en el mismo espacio que la aplicación.
- 1. Magento: Crear procedimiento almacenado
- 2. hibernar y procedimiento almacenado
- 3. Procedimiento almacenado al ejecutar otro procedimiento almacenado
- 4. t-sql procedimiento almacenado crear scripts
- 5. Crear procedimiento almacenado en MS Access?
- 6. Cómo crear un procedimiento almacenado dentro de otro procedimiento almacenado en SQL Server 2008
- 7. Cómo llamar a un procedimiento almacenado desde otro procedimiento almacenado?
- 8. Ejecutar un procedimiento almacenado dentro de un procedimiento almacenado
- 9. Desaparición del procedimiento almacenado
- 10. Procedimiento almacenado roto guardado
- 11. IF/ELSE Procedimiento almacenado
- 12. Transacción de procedimiento almacenado
- 13. Procedimiento almacenado y permisos: ¿es suficiente EJECUTAR?
- 14. Seleccionar y actualizar en un procedimiento almacenado
- 15. Procedimiento almacenado NULL Parámetro
- 16. procedimiento almacenado devuelve varchar
- 17. Procedimiento almacenado asincrónico Llamadas
- 18. TSQL: llame a un procedimiento almacenado desde otro procedimiento almacenado y lea el resultado
- 19. Crear procedimiento almacenado en otra base de datos
- 20. Crear todo el conjunto de datos del procedimiento almacenado existente
- 21. Tipos no coinciden para crear un procedimiento almacenado CLR
- 22. procedimiento almacenado con resultados condicionales
- 23. ¿Cómo crear un procedimiento almacenado MySQL desde PHP?
- 24. ¿Cómo programar un procedimiento almacenado?
- 25. procedimiento almacenado no devuelve nada
- 26. Procedimiento almacenado consulta de eliminación
- 27. ¿El procedimiento almacenado más ejecutado?
- 28. Cómo guardar un procedimiento almacenado?
- 29. Suprimir transacción en procedimiento almacenado
- 30. Buscar procedimiento almacenado por nombre
Puede usar el equivalente SQLite de las funciones SQL CLR para lograr el mismo objetivo (http://stackoverflow.com/questions/172735/create-use-user-defined-functions-in-system-data-sqlite). – devinbost
@bostIT Gracias por la adición. Ref para System.Data.SQLite http://system.data.sqlite.org/index.html/doc/trunk/www/index.wiki – h3xStream