En esta oportunidad dedicaré el artículo a la cláusula returning de la sentencia INSERT. ¿La conocías? Cuando opero sobre una sola fila puedo apoyarme en la cláusula returning para recuperar y almacenar en variables los valores de las columnas afectadas. Las variables pueden ser PL/SQL u otro lenguaje. Veamos un ejemplo con SqlPlus. Supongamos que tengo la siguiente tabla con información de mis libros: SQL> desc libros Name Null? Type ------------------------ -------- ---------------------------- CODIGO NUMBER(10) TITULO VARCHAR2(40) Voy a definir un par de variables para almacenar los valores que recuperaré tras la operación de inserción: SQL> variable codigo_var number SQL> variable titulo_var varchar2(40) A continuación ejecuto la sentencia INSERT con la cláusula returning . SQL> insert into libros values (1, 'El filo de la navaja') returning codigo, titulo into :codigo_var, :titulo_var 2 / 1 row created. Luego puedo consultar por el valor de las variables: SQL> print codigo_var CODIGO_VAR ---------- 1 SQL> print titulo_var TITULO_VAR ----------------------- El filo de la navaja El escenario que acabo de presentar puede resultar un poco trivial. Pero hay situaciones en las cuales la utilidad de la cláusula returning se hace mucho más visible y evidente. Supongamos el caso de una tabla cuya columna CODIGO contiene un valor por defecto obtenido a partir de una secuencia. Ejemplifiquemos: SQL> create sequence libros_seq start with 2; Sequence created. SQL> alter table libros modify (codigo default libros_seq.nextval); Table altered. SQL> insert into libros (titulo) values ('La vida, instrucciones de uso') returning codigo, titulo into :codigo_var, :titulo_var; 1 row created. SQL> print codigo_var CODIGO_VAR ---------- 2 Gracias a la cláusula returning pude obtener muy fácilmente el valor retornado por la secuencia. Nos vemos!
↧