<html>
<head> <title>INSERT</title> </head> <BODY BGCOLOR="#000000" TEXT="#FFFFFF" LINK="#0099FF" VLINK="#AA0000"> <p align="left">⚠ <b>
<span class="titulo">INSERT </span>⚠ </b>
</p>
<p align="left">⚠ <b>
Definicin⚠ </b>
</p>
<p align="left">Se utiliza para insertar lneas en una tabla interna
antes de una posicin determinada.</p>
<p align="left">⚠ <b>
Sintaxis:⚠ </b>
</p>
rea de trabajo que vamos a insertar. Si omitimos esta opcin, el rea de trabajo que se va a insertar ser la asociada con la tabla interna. El significado de las clusulas es el siguiente:</p>
<ul>
<li> <p align="left">INITIAL LINE TO -> inserta una lnea con los valores iniciales de cada campo. </li> <li> <p align="left">INDEX -> Inserta una lnea antes de la posicin indicada en <ndice> y la nueva tiene el ndice <ndice>. </li>
</ul>
<p align="left">Si la tabla tiene <ndice> - 1 entradasla lnea se insertara en la ltima posicin. Si la tabla tiene menos de <ndice> - 1 posiciones la lnea no se insertara. Si se produce algn error al insertar la lnea la variable SY-SUBRC valdr 4, en caso contrario valdr 0.</p>
<p align="left">Si la sentencia se utiliza sin la clusula INDEX
slo se podr utilizar en un LOOP .. ENDLOOP. El sistema insertara la lnea antes de la lnea tratada en el bucle.</p>
<pre>INSERT LINES OF <tabla1> [ FROM <n1> ] [ TO <n2> ] INTO <tabla2> [ INDEX <ndice> ]</pre>
<ul><li> <p align="left">Si no se especifican las clusulas FROM <n1> y TO <n2> la tabla <tabla1> se inserta entera sobre la tabla <tabla2>. Especificando estas clusulas se puede indicar la primera y la ltima lnea que se va insertar. <n1> y <n2> son ndice de la tabla interna. </li> <li> <p align="left">Si especificamos la clusula INDEX <ndice>, la lnea se insertar antes de la lnea con el ndice <ndice>. Si la sentencia INSERT se utiliza sin la clusula INDEX slo se podr ser utilizada en un bucle⚠ <a href="loop_endloop.htm" tppabs="loop_endloop.htm">
LOOP .. ENDLOOP⚠ </a>
. El sistema inserta la lnea tratada en el bucle. Despus de ejecutarse la sentencia la variable del sistema SY-TABIX tiene el ndice de la ltima lnea aadida. Dependiendo del tamao de la tabla interna que hay que copiar, con este mtodo el proceso en 20 veces ms rpido que insertarlas lnea a lnea. </li>
</ul>
<p align="left">La sentencia INSERT puede ser utilizada para insertaruna o varias lneas (a partir de una tabla interna) en una tabla de la base de datos. Si no sabemos si la clave primaria existe, se debe utilizar la sentencia⚠ <a href="modify.htm" tppabs="modify.htm">
MODIFY⚠ </a>
. Se puede utilizar una vista como especificacin de tabla, siempre y cuando la vista haga referencia a una sola tabla.</p>
<pre>INSERT INTO { <tabla> | (<campo>) } [ CLIENT SPECIFIED ] VALUES <rea>.</pre>
<p align="left">Esta sentencia se utiliza para insertar una lneaa una tabla de diccionario. El contenido del rea de trabajo <rea> ser escrito en la tabla de la base de datos <tabla>. La tabla tiene que estar declarada en la sentencia⚠ <a href="tables.htm" tppabs="tables.htm">
TABLES⚠ </a>
y la rea de trabajo <rea> tiene que tener la misma estructura que <tabla> (se recomienda utilizar el operador LIKE en la sentencia⚠ <a href="data.htm" tppabs="data.htm">
DATA⚠ </a>
para declararla de la misma estructura).</p>
<p align="left">Si la tabla no contiene una lnea con la misma
clave primaria que la especificada en el rea de trabajo <rea>, la variable SY-SUBRC valdr 0, en caso contrario, la lnea no se insertara y la variable SY-SUBRC valdr 4.</p>
<p align="left">Para especificar el nombre de la tabla en tiempo
de ejecucin utilizaremos la opcin (<campo>). En tiempo de ejecucin se debe rellenar con el nombre de la tabla donde realizaremos la operacin de insercin.</p>
<pre>INSERT { <tabla> | (<campo>) } [ CLIENT SPECIFIED ] [ FROM <field-string> ].</pre>
<p align="left">Esta variante tiene el mismo efecto que la variantevista anteriormente.</p>
<ul>
<li> <p align="left">Se trata de una versin⚠ <i>
simplificada⚠ </i>
donde la clusula INTO no se especifica y en lugar de VALUES se pone FROM. </li> <li> <p align="left">Si no se especifica la clusula FROM, los datos que hay que insertar sern los del rea de trabajo de la tabla <tabla>. Si especificamos el nombre de la tabla en tiempo de ejecucin, la clusula FROM es obligatoria. </li>
</ul>
<pre>INSERT { <tabla> | (<campo>) } [ CLIENT SPECIFIED ] FROM TABLE <tabla-interna> [ ACCEPTING DUPLICATE KEYS].</pre> <p>En esta variante se puede insertar ms de una lnea en la tablade diccionario. La estructura de la tabla interna debe ser la misma que la estructura de la tabla en la que se van a insertar lneas. Las lneas sern ejecutadas en una sola operacin. Si la sentencia se ejecuta correctamente SY-SUBRC valdr 0, en caso contrario valdr 4. </p>
<p>Si alguna de las lneas de la tabla interna no puede ser insertada,
el sistema activa un error en tiempo de ejecucin (suele ser por duplicacin de claves). Para evitar este error en tiempo de ejecucin, se utiliza la clusula ACCEPTING DUPLICATE KEYS. Con estos forzamos al sistema a saltar las lneas que no puede insertar. La variable SY-DBCNT tendremos las lneas insertadas y la variable SY-SUBRC valdr 4 cuando se salte alguna lnea.</p>
<p>Es ms eficiente utilizar esta ltima sentencia para insertar
un conjunto de lneas, que utilizar las otras variantes que las insertara de en una en una.</p>
<p align="left">⚠ <b>
Ejemplo 1:⚠ </b>
</p>
ITAB TYPE I OCCURS 100 WITH HEADER LINE.</pre>
<pre>ITAB = 5.
VALUE = 36.</pre> <pre>INSERT ITAB INDEX 1. INSERT VALUE INTO ITAB INDEX 2. INSERT INITIAL LINE INTO ITAB INDEX 2.</pre> <p align="left">⚠ <b>
Ejemplo 2:⚠ </b>
</p>
<pre>TYPES NAME(10) TYPE C.</pre>
<pre>DATA: NAME_TAB_1 TYPE NAME OCCURS 5,
NAME_TAB_2 TYPE NAME OCCURS 5.</pre>
<pre>APPEND 'Alice' TO NAME_TAB_1.
APPEND 'Martha' TO NAME_TAB_1. APPEND 'Ruth' TO NAME_TAB_1.</pre> <pre>APPEND 'Harry' TO NAME_TAB_2. APPEND 'Walter' TO NAME_TAB_2.</pre> <pre>INSERT LINES OF NAME_TAB_1 FROM 2 INTO NAME_TAB_2 INDEX 2.</pre> <p align="left">⚠ <b>
Vase tambin:⚠ </b>
⚠ <a href="append.htm" tppabs="append.htm">
APPEND⚠ </a>
,
⚠ <a href="collect.htm" tppabs="collect.htm">
COLLECT⚠ </a>
,⚠ <a href="modify.htm" tppabs="modify.htm">
MODIFY⚠ </a>
,⚠ <a href="loop_endloop.htm" tppabs="loop_endloop.htm">
LOOP⚠ </a>
,⚠ <a href="read_table.htm" tppabs="read_table.htm">
READ TABLE⚠ </a>
.</p>
</body>
</html>