En MariaDB Server 10.3, agregamos un nuevo modo SQL (SQL_MODE=ORACLE) para proporcionar compatibilidad con un subconjunto de Oracle PL/SQL, una extensión de procedimiento del lenguaje de consulta estructurado (SQL). Con el reciente lanzamiento de MariaDB Community Server 10.6, continuamos nuestro viaje para expandir la compatibilidad PL/SQL de MariaDB agregando varias funciones como ROWNUM()
, ADD_MONTHS()
y TO_CHAR()
. Esto es genial por varias razones, pero para empezar, MariaDB sigue siendo la única base de datos que implementa la compatibilidad con Oracle de código abierto, por lo que esta funcionalidad está disponible para todos. Para comprender realmente lo que eso significa, es importante que demos un breve paso atrás para que sepas por qué. empezamos por este camino para empezar.
El poder de la programación procesal y declarativa
Al combinar el poder de manipulación de datos del lenguaje SQL con capacidades de procedimiento, los desarrolladores tienen una plétora de nuevas y emocionantes oportunidades. Al usar PL/SQL, los desarrolladores tienen la capacidad de ejecutar instrucciones SQL que se enfocan en el enfoque declarativo de "qué hacer" y, al mismo tiempo, tienen la capacidad de controlar el flujo de operaciones o "cómo hacerlo".
¿Esperar lo? Bien, considera lo siguiente tradicional Sentencia SQL.
SELECT id, name, has_kids FROM friends;
Simple, elegante y eficaz. SQL es un hermoso lenguaje, pero tiene sus limitaciones. Por ejemplo, ¿qué pasaría si quisiera recorrer los resultados devueltos por SELECT
? ejecución de declaraciones? Y luego, mientras analiza los resultados, verifique cada resultado usando una declaración condicional (por ejemplo, si has_kids
es cierto) para que pueda realizar operaciones específicas basadas en esas condiciones?
Nota rápida :Esto es puramente hipotético. Seguro que si tienes amigos con hijos y amigos sin hijos los tratas a todos por igual. Pero, por el bien de este ejemplo, digamos que no. ¿DE ACUERDO? Está bien, genial.
Pero con todas esas iteraciones y condiciones sucediendo, es posible que te encuentres con un error. ¿No sería bueno si pudiera manejar errores (es decir, excepciones) directamente en el lado de la base de datos, sin tener que devolver primero los resultados originales al código de la aplicación para que se procesen? Bueno, eso es una lástima, porque estás usando SQL simple y nada de eso es posible.
¡No temáis! En lugar de eso, ¡ven conmigo al maravilloso mundo de PL/SQL!
Mediante el uso de algo conocido como bloque PL/SQL, puede combinar el SQL que conoce y ama con las capacidades de procedimiento que le permitirán controlar el flujo de operaciones utilizando funciones como la capacidad de declarar variables, manejar condiciones, bucle a través de datos, administrar excepciones y mucho más.
Los bloques PL/SQL se manejan dentro de MariaDB Server, donde las declaraciones de procedimiento y SQL se analizan y ejecutan en consecuencia.
Bastante genial, ¿verdad? ¡Se pone mucho mejor! Pero volvamos a nuestro ejemplo anterior. Puede usar un solo bloque PL/SQL para lograr todo lo que indiqué antes.
Por ejemplo:
DELCARE CURSOR c IS SELECT id, name, has_kids FROM friends; BEGIN FOR friend_row IN c LOOP IF friend_row.has_kids == true THEN /* Do something */ ELSE /* Do something else */ END IF; END LOOP; EXCEPTION WHEN no_data_found THEN /* Handle no data found */ WHEN others THEN /* Handle all other kinds of exceptions */ END;
Más información
Cosas poderosas, ¿verdad? Bueno, esta publicación de blog es realmente solo la punta del iceberg. Algo para abrir el apetito, por así decirlo. Pero si desea obtener más información, le recomiendo ver un seminario web que presentamos recientemente, MariaDB y PL/SQL:Combinando el poder de SQL y las declaraciones de procedimiento. En él, profundizamos en muchos más detalles sobre por qué nuestra misión es agregar y ampliar la compatibilidad con PL/SQL e incluimos una variedad de ejemplos y una demostración de codificación en vivo, que le brindan una visión de primera mano de cómo ¡Puedes usar PL/SQL dentro de MariaDB! ¡Feliz codificación, amigos!