sql >> Base de Datos >  >> RDS >> Database

Insertar DML con variable de vinculación:Cláusula USING de instrucción de ejecución inmediata

Insertar DML con variable de vinculación:¿por qué?

¡Vamos a cortar por lo sano! Las dos mayores ventajas de las variables de vinculación son la seguridad contra las inyecciones de SQL y la mejora del rendimiento al reducir el análisis difícil. Debido a estas ventajas, el uso de variables de vinculación en su código no solo se sugiere sino que también se recomienda.

¿No sería una guinda del pastel si pudiéramos encontrar una manera de usar Bind Variables con Native Dynamic SQL? Si se lo preguntan, mis queridos amigos, están en el lugar correcto, ya que vamos a hacer exactamente eso en este blog.

¿Qué es una variable de vinculación?

Podemos definir la variable de vinculación como la variable que creamos en SQL*Plus y luego la referenciamos en PL/SQL. Además, podemos declarar una variable Bind en cualquier lugar del entorno del host. Por lo tanto, las variables de vinculación también se conocen como variables de host.

Puede leer más sobre las variables de vinculación en el tutorial 6 de PL/SQL aquí.

¿Cómo usar una variable de vinculación con Native Dynamic SQL?

Para usar la variable de vinculación en SQL dinámico, necesitamos la ayuda de “Cláusula de uso ” de Ejecutar sentencia inmediata.

¿Qué es esta declaración de cláusula de uso de ejecución inmediata?

En SQL estático, teníamos que especificar el valor de la variable de vinculación después de la ejecución del programa PL/SQL. Mientras que en Dynamic SQL tenemos que mencionar los valores de antemano para todas las variables de vinculación. Los mismos que se utilizan en la sentencia SQL que deseamos ejecutar dinámicamente mediante Execute Immediate.

Por lo tanto, para especificar los valores para todas las variables de enlace, tomamos la ayuda de la cláusula USING de Execute Immediate Statement. Al aplicar la cláusula 'USO', enumeramos todos los valores para cada variable de vinculación utilizada en la instrucción SQL que deseamos ejecutar dinámicamente.

Ahora que hemos aprendido qué son las variables de vinculación y el uso de la cláusula de ejecución inmediata, hagamos un ejemplo.

Ejemplo de ejecución inmediata con cláusula de uso

Para la demostración insertaremos los datos en una tabla. Y para eso usaremos la instrucción Execute Immediate. Además, para mejorar la seguridad y el rendimiento, utilizaremos la variable de vinculación con Insertar DML.

Para hacer eso, primero necesitaremos una tabla en la que podamos insertar los datos. Por lo tanto, vamos a crear uno rápidamente. Y como siempre, mantendré el código lo más simple posible para facilitar la comprensión del concepto.

Paso 1:Crea una tabla

CREATE TABLE stu_info(
    student_name    VARCHAR2 (20)
);

Paso 2:preparar la declaración DML

Es una buena práctica de programación preparar de antemano la instrucción SQL que desea ejecutar utilizando la ejecución inmediata. De esta manera reducirá las posibilidades de errores de sintaxis.

La restricción para escribir DML para Ejecución inmediata seguirá siendo la misma que para la instrucción DDL. Similar a la declaración DDL La declaración DML no debe terminar con un punto y coma. Por lo tanto, teniendo eso en cuenta, escribamos la instrucción INSERT.

INSERT INTO stu_info (student_name) VALUES (:stu_name)

En INSERT DML estándar, generalmente escribimos los datos en la cláusula de paréntesis de valores. Además, en la ejecución, estos datos se insertarán en la columna correspondiente. Pero como puede ver, aquí hemos usado una variable de vinculación “:stu_name” en lugar de codificar cualquier valor específico para insertarlo en la tabla.

Paso 3:Escriba el código PL/SQL

El último paso del ciclo es ejecutar INSERT DML con la variable de vinculación aplicando la cláusula USING de Execute Immediate Statement of Native Dynamic SQL.

SET SERVEROUTPUT ON;
DECLARE
    sql_smt VARCHAR2 (150);
BEGIN
    sql_smt :=  'INSERT INTO stu_info (student_name) VALUES (:stu_name)';
    EXECUTE IMMEDIATE sql_smt USING 'Steve';
END;
/

Comprendamos qué sucederá con la ejecución de este bloque PL/SQL. Cuando ejecute este programa, el motor PL/SQL sustituirá este valor 'Steve' en lugar de la variable de vinculación :stu_name y luego ejecutará INSERT DML que insertará este valor en la tabla mencionada.

Además, hay algunas cosas de las que debe ocuparse mientras escribe el programa PL/SQL anterior en su extremo.

  1. Asegúrese de incluir la instrucción INSERT DML o Any SQL que desea ejecutar mediante Execute Immediate en un par de comillas simples. Además, recuerde finalizar la declaración de asignación (línea 5), ​​así como su declaración Ejecutar inmediatamente con un punto y coma.
  2. El valor que está asignando a su variable de vinculación a través de la cláusula USING debe ser el mismo o compatible con el tipo de datos de la columna de la tabla en la que lo está insertando. Por ejemplo, en nuestro caso, estamos insertando el nombre 'Steve', que es una cadena de caracteres en la columna nombre_estudiante de la tabla stu_info, que es del tipo de datos Varchar2. El tipo de datos de caracteres es muy compatible con el tipo de datos Varchar2.

A través de este programa aprendimos dos cosas muy importantes.

  1. Cómo usar un INSERTAR DML con Ejecución inmediata de SQL dinámico y
  2. Cómo aplicar la cláusula USING para asignar valores a la variable de enlace utilizada en la consulta SQL que deseamos ejecutar dinámicamente.

Además, asegúrese de revisar el video, ya que allí he discutido cómo lidiar con el error "ORA-01008:no todas las variables están vinculadas". Apuesto a que no querrá perderse la solución a este error, ya que es muy importante desde la perspectiva de la certificación de la base de datos de Oracle.

Además, permanezca atento, ya que en el siguiente tutorial aprenderemos a manejar múltiples variables de vinculación aplicando la cláusula de uso de ejecución inmediata en Oracle Database.

Espero que hayas aprendido algo valioso de este blog. Mientras tanto, compártalo con sus amigos en su Facebook, Twitter, WhatsApp o cualquier medio que le resulte conveniente. Además, suscríbete a mi canal de YouTube para obtener tutoriales más rápidos e interesantes. ¡Gracias y que tengas un gran día!