Función escalar INSERT
La función INSERT devuelve una secuencia en la que, a partir de inicio en fuente-secuencia, longitud de las unidades de código especificadas se han eliminado y se ha introducido insertar-secuencia.
El esquema es SYSIBM. La versión SYSFUN de la función INSERT continúa estando disponible.
La función INSERT es idéntica a la función OVERLAY, excepto en que el argumento de longitud es obligatorio.
- serie-fuente
- Expresión que especifica la serie fuente. La expresión debe devolver un valor que sea de un tipo de datos de serie incorporada, numérico, booleano o de fecha y hora. Si el valor no es un tipo de datos de serie, se convierte implícitamente a VARCHAR antes de evaluar la función.
- inicio
- Expresión que devuelve un valor entero. El valor entero especifica el punto de partida en la serie fuente donde debe empezar la supresión de unidades de código y la inserción de otra serie. La expresión debe devolver un valor que sea un tipo de datos incorporado numérico, CHAR, VARCHAR, GRAPHIC o VARGRAPHIC. Si el valor no es del tipo INTEGER, se convierte de forma implícita en INTEGER antes de evaluar la función. El valor del número entero es el punto de inicio en las unidades de código mediante el uso de las unidades de serie especificadas. El valor de número entero debe estar entre 1 y la longitud real de fuente-serie en las unidades de serie implícitas o explícitas más uno (SQLSTATE 22001). Si se especifica OCTETS y el resultado son datos gráficos, el valor debe ser un número impar entre 1 y la longitud de octetos real de fuente-serie más uno (SQLSTATE 428GC o 22011).
- longitud
- Expresión que especifica el número de unidades de código (en las unidades de serie especificadas) que se deben suprimir de la serie fuente, a partir de la posición identificada por inicio. La expresión debe devolver un valor que sea un tipo de datos incorporado numérico, CHAR, VARCHAR, GRAPHIC o VARGRAPHIC. Si el valor no es del tipo INTEGER, se convierte de forma implícita en INTEGER antes de evaluar la función. El valor debe ser un entero positivo o cero (SQLSTATE 22011). Si se especifica OCTETS y el resultado son datos gráficos, el valor tiene que ser un número par o cero (SQLSTATE 428GC).
- serie-inserción
- Expresión que especifica la serie que se debe insertar en serie-fuente, a partir de la posición identificada por inicio. La expresión debe devolver un valor que sea de un tipo de datos de serie incorporada, numérico, booleano o de fecha y hora. Si el valor no es un tipo de datos de serie, se convierte implícitamente a VARCHAR antes de evaluar la función.
- CODEUNITS16, CODEUNITS32 u OCTETS
- Especifica la unidad de la serie de inicio y longitud.
CODEUNITS16 especifica que inicio y longitud se expresan en unidades de código UTF-16 de 16 bits. CODEUNITS32 especifica que inicio y longitud se expresan en unidades de código UTF-32 de 32 bits. OCTETS especifica que inicio y longitud se expresan en bytes.
Si la unidad de serie se especifica como CODEUNITS16 o CODEUNITS32 y el resultado es una serie binaria o datos de bit, se devuelve un error (SQLSTATE 428GC). Si la unidad de serie se especifica como CODEUNITS16 o OCTETS, y las unidades de serie de fuente-serie es CODEUNITS32, se devuelve un error (SQLSTATE 428GC). Si la unidad de serie se especifica como OCTETS, la operación se realiza en la página de códigos de la serie-fuente. Si una unidad de serie no se especifica de forma explícita, la unidad de serie de la fuente-serie determina la unidad que se utiliza. Para obtener más información sobre CODEUNITS16, CODEUNITS32, y OCTETS, consulte
Unidades de serie en las funciones integradas
enSeries de caracteres
.
El tipo de datos del resultado depende de los tipos de datos de serie-fuente y serie-inserción, como se muestra en las tablas siguientes de combinaciones de tipos soportadas. La unidad de serie del resultado es la unidad de serie de fuente-serie. Si la fuente-serie o insertar-serie se define como FOR BIT DATA el otro argumento no se puede definir con las unidades de serie de CODEUNITS32.La segunda tabla aplica solamente a las bases de datos Unicode.
| serie-fuente | serie-inserción | Resultado |
|---|---|---|
| CHAR o VARCHAR | CHAR o VARCHAR | VARCHAR |
| GRAPHIC o VARGRAPHIC | GRAPHIC o VARGRAPHIC | VARGRAPHIC |
| CLOB | CHAR, VARCHAR o CLOB | CLOB |
| CHAR o VARCHAR | CLOB | CLOB |
| DBCLOB | GRAPHIC, VARGRAPHIC o DBCLOB | DBCLOB |
| GRAPHIC o VARGRAPHIC | DBCLOB | DBCLOB |
| CHAR o VARCHAR | CHAR FOR BIT DATA o VARCHAR FOR BIT DATA | VARCHAR FOR BIT DATA |
| CHAR FOR BIT DATA o VARCHAR FOR BIT DATA | CHAR, VARCHAR, CHAR FOR BIT DATA o VARCHAR FOR BIT DATA | VARCHAR FOR BIT DATA |
| BINARY o VARBINARY | BINARY o VARBINARY | VARBINARY |
| BLOB | BINARY, VARBINARY o BLOB | BLOB |
| BINARY o VARBINARY | BLOB | BLOB |
| serie-fuente | serie-inserción | Resultado |
|---|---|---|
| CHAR o VARCHAR | GRAPHIC o VARGRAPHIC | VARCHAR |
| GRAPHIC o VARGRAPHIC | CHAR o VARCHAR | VARGRAPHIC |
| CLOB | GRAPHIC, VARGRAPHIC o DBCLOB | CLOB |
| DBCLOB | CHAR, VARCHAR o CLOB | DBCLOB |
Una serie-fuente puede tener una longitud de 0; en este caso, inicio debe ser 1 (como lo implican los vínculos para inicio descritos anteriormente) y el resultado de la función es una copia de la serie-inserción.
Una serie-inserción también puede tener una longitud de 0. Esto tiene el efecto de suprimir las unidades de código identificadas en inicio y longitud de la serie-fuente.
| serie-fuente | serie-inserción | Resultado | |||
|---|---|---|---|---|---|
| Tipo de datos | unidades de serie | Tipo de datos | unidades de serie | atributo de longitud | unidades de serie |
| Serie de caracteres con atributo de longitud A | OCTETS | serie gráfica con atributo de longitud B | CODEUNITS16 | A+3*B | OCTETS |
| Serie de caracteres con atributo de longitud A | OCTETS | serie gráfica con atributo de longitud B | CODEUNITS32 | A+4*B | OCTETS |
| Serie de caracteres con atributo de longitud A | OCTETS | carácter con atributo de longitud B | CODEUNITS32 | A+4*B | OCTETS |
| serie gráfica con atributo de longitud A | CODEUNITS16 | carácter con atributo de longitud B | OCTETS | A+B | CODEUNITS16 |
| serie gráfica con atributo de longitud A | CODEUNITS16 | carácter con atributo de longitud B | CODEUNITS32 | A+2*B | CODEUNITS16 |
| serie gráfica con atributo de longitud A | CODEUNITS16 | serie gráfica con atributo de longitud B | CODEUNITS32 | A+2*B | CODEUNITS16 |
- A1 es la longitud real de serie-fuente
- V2 es el valor de inicio
- V3 es el valor de longitud
- A4 es la longitud real de serie-inserción
Si cualquiera de los argumentos puede ser nulo, el resultado puede ser nulo; si alguno de los argumentos es nulo, el resultado es el valor NULL.
Ejemplos
- Ejemplo 1: Crear las series
INSISTING
,INSISERTING
yINSTING
a partir de la serieINSERTING
insertando texto en la mitad del texto existente.SELECT INSERT('INSERTING',4,2,'IS'), INSERT('INSERTING',4,0,'IS'), INSERT('INSERTING',4,2,'') FROM SYSIBM.SYSDUMMY1 - Ejemplo 2: Crear las series
XXINSERTING
,XXNSERTING
,XXSERTING
yXXERTING
a partir de la serieINSERTING
insertando texto antes del texto existente, utilizando 1 como punto de partida.SELECT INSERT('INSERTING',1,0,'XX'), INSERT('INSERTING',1,1,'XX'), INSERT('INSERTING',1,2,'XX'), INSERT('INSERTING',1,3,'XX') FROM SYSIBM.SYSDUMMY1 - Ejemplo 3: Crear la serie
ABCABCXX
a partir de la serieABCABC
insertando texto después del texto existente. Dado que la serie fuente tiene una longitud de 6 caracteres, establezca la posición inicial en 7 (uno más la longitud de la serie fuente).SELECT INSERT('ABCABC',7,0,'XX') FROM SYSIBM.SYSDUMMY1 - Ejemplo 4: Cambie la serie
Hegelstraße
aHegelstrasse
.SELECT INSERT('Hegelstraße',10,1,'ss',CODEUNITS16) FROM SYSIBM.SYSDUMMY1 - Ejemplo 5: El ejemplo siguiente funciona con la serie
Unicode
&N~AB
, donde&
el carácter de clave G de símbolo musical y~
el carácter de tilde de combinación. En el ejemplo siguiente se muestra esta serie en distintos formatos de codificación Unicode:&
N
~
A
B
UTF-8 X'F09D849E' X'4E' X'CC83' X'41' X'42' UTF-16BE X'D834DD1E' X'004E' X'0303' X'0041' X'0042' Supongamos que las variables UTF8_VAR y UTF16_VAR contienen las representaciones de la serie en UTF-8 y UTF-16BE respectivamente. Utilice la función INSERT para insertar unaC
en la serie Unicode&N~AB
.
devuelve los valoresSELECT INSERT(UTF8_VAR, 1, 4, 'C', CODEUNITS16), INSERT(UTF8_VAR, 1, 4, 'C', CODEUNITS32), INSERT(UTF8_VAR, 1, 4, 'C', OCTETS) FROM SYSIBM.SYSDUMMY1CAB
,CB
yCN~AB
, respectivamente.
devuelve los valoresSELECT INSERT(UTF8_VAR, 5, 1, 'C', CODEUNITS16), INSERT(UTF8_VAR, 5, 1, 'C', CODEUNITS32), INSERT(UTF8_VAR, 5, 1, 'C', OCTETS) FROM SYSIBM.SYSDUMMY1&N~CB
,&N~AC
y&C~AB
, respectivamente.
devuelve los valoresSELECT INSERT(UTF16_VAR, 1, 4, 'C', CODEUNITS16), INSERT(UTF16_VAR, 1, 4, 'C', CODEUNITS32), INSERT(UTF16_VAR, 1, 4, 'C', OCTETS) FROM SYSIBM.SYSDUMMY1CAB
,CB
yCN~AB
, respectivamente.
devuelve los valoresSELECT INSERT(UTF16_VAR, 5, 2, 'C', CODEUNITS16), INSERT(UTF16_VAR, 5, 1, 'C', CODEUNITS32), INSERT(UTF16_VAR, 5, 4, 'C', OCTETS) FROM SYSIBM.SYSDUMMY1&N~C
,&N~AC
y&CAB
, respectivamente.
