REPLACE STRING

La cláusula REPLACE STRING permite sustituciones de serie en las columnas de serie seleccionadas de la consulta SQL.

En las explicaciones siguientes:
  • replacement_pair representa la secuencia siguiente "nombre_columna | 'literal' [BY nombre_columna | 'literal']".
  • especif_columna representa "FOR|EXCEPT (column[,columna,columna...])"
Un par_sustitución sin especif_column se puede especificar junto con uno o más par_sustitución con especif_columna. En este caso, el valor de replacement_pair sin column_spec se aplica de forma predeterminada a todas las columnas no especificadas en una opción FOR.
Sintaxis
REPLACE STRING (nombre_columna | 'literal' [BY nombre_columna | 'literal'] [FOR | EXCEPT (nombre_columna)])
REPLACE STRING IN "nombre_archivo"
Variables
nombre_columna

El nombre de una columna en la sentencia SELECT *.

literal

Una serie de caracteres o un carácter.

La primera aparición column_name/'literal ' es el equivalente al segundo argumento search-string en la función escalar REPLACE () Db2® .

La segunda aparición column_name/'literal ' es el equivalente al tercer argumento replace-string en la función escalar REPLACE () Db2 . Cuando se omite esta aparición, la serie de sustitución es una serie vacía.

"filename"

El nombre de un archivo que contiene especificaciones de sustituciones de series.

Valor predeterminado
Ninguna.

Opciones

FOR (nombre_columna)
Esta opción permite especificar una o varias columnas de serie en las que se aplicará la cláusula REPLACE STRING . El nombre_columna es el equivalente del primer argumento source-string en la función escalar REPLACE () Db2 .
EXCEPT (nombre_columna)
Esta opción permite especificar una o varias columnas de serie en las que no se aplicará la cláusula REPLACE STRING .
IN "nombre_archivo"
Las sustituciones que se aplicarán a las series se especifican en un archivo externo.

Contenido del archivo especificado en la opción IN "filename"

Cada sustitución de series en este archivo debe especificarse en su propia entrada y por separado, y no puede dividirse en varias líneas. Puede haber tantas entradas como sea necesario especificadas en el archivo. Cada entrada debe formatearse de acuerdo con los siguientes modelos:
seek_value:replace_value;for:column1,...,columnn
seek_value;for:column1,...,columnn
seek_value:replace_value;except:column1,...,columnn
seek_value;except:column1,...,columnn
seek_value:replace_value;
seek_value;
El primer y segundo modelos son para una sustitución de serie relacionada con la opción FOR en una lista de nombres de columna. El tercer y cuarto modelos son para una sustitución de serie relacionada con la opción EXCEPT en una lista de nombres de columna. Y el quinto y sexto modelos son para una sustitución de cadena no relacionada con ninguna lista de nombres de columna.

El carácter # se puede utilizar para añadir un comentario al archivo.

Una entrada debe contener un carácter de punto y coma (';'), para separar sus dos componentes diferentes (sustitución de serie, columnas), incluso si no es necesario especificar nombres de columna. La sustitución de serie es obligatoria, pero la lista de nombres de columna es opcional. La sustitución de serie debe contener un valor de inicialización y puede contener un valor de sustitución opcional. Si contiene un valor de sustitución, este valor debe estar separado del valor de inicialización por un carácter de dos puntos (':'). Los elementos de las listas de nombres de columna deben estar separados por caracteres de coma (','). Cuando se especifica, una lista de nombres de columna debe ir a continuación de la palabra clave 'for' o 'except' y un carácter de dos puntos (':').

El uso de un archivo externo de este tipo es una alternativa a especificar una cláusula REPLACE STRING completa en un archivo de control. Como resultado, para cualquier entrada en él, el significado de sus dos componentes (sustitución de serie, columnas) es exactamente el mismo que los dos componentes respectivos de una cláusula REPLACE STRING entera.

Reglas

Se mostrará un mensaje de error cuando no se sigan las reglas siguientes:
  • Las opciones FOR o EXCEPT solo se deben usar con una sentencia “SELECT *”.
  • Sólo puede haber una opción EXCEPT en la cláusula REPLACE STRING .
  • Cuando se utilizan las opciones EXCEPT y FOR en una cláusula REPLACE STRING , debe especificarse una columna de serie especificada en una opción FOR en la opción EXCEPT.
  • Puede haber más de una opción FOR en la cláusula REPLACE STRING , pero los nombres de columna de serie especificados sólo pueden aparecer una vez.
  • Solo se permite un par de sustitución sin espec_columna.
Un mensaje informará de que la cláusula REPLACE STRING se ignora cuando se procesa una sentencia SELECT a través de Db2.
Cuando no se especifica ninguna opción FOR o EXCEPT en la cláusula REPLACE STRING , la sustitución de serie se realizará en todas las columnas de serie especificadas en la consulta SQL.

Ejemplos

Mediante una consulta SQL “SELECT *”:
[i1010@lat179(:) ~]$ db2hpu -f sysin -i i1010
INZM031I Optim High Performance Unload for Db2 06.01.00.001(121203)
         64 bits 12/03/12 (Linux lat179 3.1.9-1.4-desktop) x86_64)
INZI473I Memory limitations: 'unlimited' for virtual memory and 'unlimited' for data segment
       ----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+
000001 GLOBAL CONNECT TO SAMPLE;
000002 UNLOAD TABLESPACE
000003 DB2 NO
000004 LOCK NO
000005 FLUSH BUFFERPOOLS NO
000006 SELECT * FROM EMPLOYEE;
000007 REPLACE STRING ('E' BY 'e' FOR (FIRSTNME), 'A' BY 'a' EXCEPT(FIRSTNME, JOB), 'R' BY 'r')
000008 FORMAT DEL;

INZU462I HPU control step start: 10:34:09.780.
INZU463I HPU control step end  : 10:34:09.783.
INZU464I HPU run step start    : 10:34:09.794.
"000010","CHRISTINe","I","HaaS","a00","3978","1995-01-01","PrES    ","18","F","1963-08-24","152750.00","1000.00","4220.00"
"000020","MICHAeL","L","THOMPSON","B01","3476","2003-10-10","MANAGEr ","18","M","1978-02-02","94250.00","800.00","3300.00"
"000030","SALLY","a","KWaN","C01","4738","2005-04-05","MANAGEr ","20","F","1971-05-11","98250.00","800.00","3060.00"
...
INZU410I HPU utility has unloaded 42 rows on lat179 host for I1010.EMPLOYEE in stdout.
INZU465I HPU run step end      : 10:34:09.799.
INZI441I HPU successfully ended: Real time -> 0m0.018693s
User time -> 0m0.018997s : Parent -> 0m0.018997s, Children -> 0m0.000000s
Syst time -> 0m0.015997s : Parent -> 0m0.015997s, Children -> 0m0.000000s
Mediante una consulta SQL personalizada:
[i1010@lat179(:) ~]$ db2hpu -f sysin -i i1010
INZM031I Optim High Performance Unload for Db2 06.01.00.001(121203) 
         64 bits 12/03/12 (Linux lat179 3.1.9-1.4-desktop x86_64)
INZI473I Memory limitations: 'unlimited' for virtual memory and 'unlimited' for data segment
       ----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+
000001 GLOBAL CONNECT TO SAMPLE;
000002 UNLOAD TABLESPACE
000003 DB2 NO
000004 LOCK NO
000005 FLUSH BUFFERPOOLS NO
000006 SELECT EMPNO, FIRSTNME, LASTNAME FROM EMPLOYEE;
000007 REPLACE STRING ('A' BY 'a') 
000008 FORMAT DEL;

INZU462I HPU control step start: 10:37:33.573.
INZU463I HPU control step end  : 10:37:33.598.
INZU464I HPU run step start    : 10:37:33.600.
"000010","CHRISTINE","HaaS"
"000020","MICHaEL","THOMPSON"
"000030","SaLLY","KWaN"
...
INZU410I HPU utility has unloaded 42 rows on lat179 host for I1010.EMPLOYEE in stdout.
INZU465I HPU run step end      : 10:37:33.604.
INZI441I HPU successfully ended: Real time -> 0m0.030913s
User time -> 0m0.023996s : Parent -> 0m0.023996s, Children -> 0m0.000000s
Syst time -> 0m0.009998s : Parent -> 0m0.009998s, Children -> 0m0.000000s
Utilizando la cláusula REPLACE STRING que hace referencia a un archivo externo. El contenido de este archivo externo es equivalente a la especificación de la cláusula REPLACE STRING en el primer ejemplo anterior:
[i1111@lat117]$ db2hpu -f SYSIN52 -i i1111
INZM031I Optim High Performance Unload for Db2 06.05.00.002.05(220405)
         64 bits 04/06/2022 (Linux lat117 3.10.0-957.21.3.el7.x86_64)
INZI473I Memory limitations: 'unlimited' for virtual memory and 'unlimited' for data segment
       ----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+
000001 GLOBAL CONNECT TO SAMPLE;
000002 UNLOAD TABLESPACE
000003 DB2 NO
000004 SELECT * FROM EMPLOYEE;
000005 REPLACE STRING IN "/home/i1111/Test/replace.txt"
000006 FORMAT DEL;

INZU462I HPU control step start: 04/06/2022 16:33:23.224.
INZU463I HPU control step end  : 04/06/2022 16:33:23.347.
INZU464I HPU run step start    : 04/06/2022 16:33:23.939.
"000010","CHRISTINe","I","HaaS","a00","3978",19950101,"PrES    ",18,"F",19630824,+0152750.00,+0001000.00,+0004220.00
"000020","MICHAeL","L","THOMPSON","B01","3476",20031010,"MANAGEr ",18,"M",19780202,+0094250.00,+0000800.00,+0003300.00
"000030","SALLY","a","KWaN","C01","4738",20050405,"MANAGEr ",20,"F",19710511,+0098250.00,+0000800.00,+0003060.00
...
INZU410I HPU utility has unloaded 42 rows on lat117 host for I1111.EMPLOYEE in stdout.
INZU465I HPU run step end      : 04/06/2022 16:33:23.949.
INZI441I HPU successfully ended: Real time -> 0m0.725769s
User time -> 0m0.065579s : Parent -> 0m0.065579s, Children -> 0m0.000000s
Syst time -> 0m0.023567s : Parent -> 0m0.023567s, Children -> 0m0.000000s
[i1111@lat117]$
[i1111@lat117]$ cat replace.txt
'E':'e';for:firstnme
'A':'a';except:firstnme,job
'R':'r';