REPLACE STRING
La cláusula REPLACE STRING permite sustituciones de serie en las columnas de serie seleccionadas de la consulta SQL.
- replacement_pair representa la secuencia siguiente "nombre_columna | 'literal' [BY nombre_columna | 'literal']".
- especif_columna representa "FOR|EXCEPT (column[,columna,columna...])"
- Sintaxis
- REPLACE STRING (nombre_columna | 'literal' [BY nombre_columna | 'literal'] [FOR | EXCEPT (nombre_columna)])
- Variables
- nombre_columna
El nombre de una columna en la sentencia SELECT *.
- 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"
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.
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.000000sMediante 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.000000sUtilizando 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';