STRING DE TRADUZIR

A cláusula TRANSLATE STRING permite substituições de string nas colunas de string selecionadas da consulta SQL.

Nas explicações a seguir:
  • replacement_pair fica para a seguinte sequência "nome_coluna | 'literal' [BY nome_coluna | 'literal']".
  • column_spec significa "FOR|EXCETO (coluna [, coluna, coluna ...])"
Um replacement_pair sem column_spec pode ser especificado junto com uma ou mais substitument_pair com column_spec. Em tal cenário, o replacement_pair sem column_spec aplica-se por padrão a todas as colunas não especificadas em uma opção FOR.
Sintaxe
TRADUZIR STRING (SUPERIOR | column_name | 'literal' POR nome_coluna | 'literal' [PAD COM nome_coluna | 'char'] [FOR | EXCETO (nome_coluna)])
TRADUZIR STRING EM "filename"
Variáveis
column_name

O nome de uma coluna na instrução SELECT *.

literal

Uma sequência de caracteres ou um caractere.

'char'

Caráter a ser usado.

"nome do arquivo"

O nome de um arquivo contendo especificações de substituições de strings.

A primeira ocorrência de column_name/'literal ' é o equivalente ao terceiro argumento from-string-exp na função escalar TRANSLATE () Db2® . É uma expressão que especifica os caracteres a serem substituídos a partir da sequência de origem.

A segunda ocorrência de column_name/'literal ' é o equivalente ao segundo argumento to-string-exp na função escalar TRANSLATE () Db2 . É uma expressão que especifica os caracteres a serem utilizados para os substitutos de caracteres.

Padrão
Nenhum.

Opções

MAIÚSCULA
Esta opção permite especificar que os caracteres devem ser convertidos em maié superior.
PAD COM column_name/'char '
Este é o equivalente ao quarto argumento pad-char-exp na função escalar TRANSLATE () Db2 . É uma expressão que especifica o caractere a ser usado como padrão um para os substitutos de caracteres.
PARA (column_name)
Estes lidos são opcionais. Esta opção permite especificar uma ou várias colunas string a cláusula TRANSLATE STRING deve ser aplicada em. Este é o equivalente ao primeiro argumento string-exp na função escalar TRANSLATE () Db2 . É uma expressão que especifica a sequência que os substitutos de caracteres devem ser aplicados em.
EXCETO (column_name)
Estes lidos são opcionais. Esta opção permite especificar uma ou várias colunas string a cláusula TRANSLATE STRING não deve ser aplicada em.
EM "filename"
Os substitutos a serem aplicados em strings são especificados em um arquivo externo.

Conteúdo do arquivo especificado para a opção IN "filename"

Cada substituição de strings neste arquivo deve ser especificada por sua entrada própria e separada, e não pode ser dividida em várias linhas. Pode haver tantas entradas conforme necessário especificado no arquivo. Cada entrada deve ser formatada de acordo com os seguintes modelos:
seek_value:replace_value:pad_value;for:column1,...,columnn
seek_value:replace_value;for:column1,...,columnn
seek_value:replace_value:pad_value;except:column1,...,columnn
seek_value:replace_value;except:column1,...,columnn
seek_value:replace_value:pad_value;
seek_value:replace_value;
O primeiro e o segundo modelos são para uma substituição de cadeia relacionada pela opção FOR para uma lista de nomes de colunas. Os terceiro e quarto modelos são para uma substituição de cadeia relacionada pela opção EXCETO para uma lista de nomes de colunas. E o quinto e sexto modelos são para uma substituição de cadeia não relacionada a qualquer lista de nomes de colunas.

O caractere # pode ser usado para adicionar um comentário ao arquivo.

Uma entrada deve conter um caractere de ponto e vírgula (';'), a fim de separar seus dois componentes diferentes (substituição de string, colunas), mesmo que não seja necessário especificar nomes de colunas. A substituição da cadeia é obrigatória, mas a lista de nomes de colunas é opcional. A substituição da cadeia deve conter um valor seeked e um valor de substituição separados por um caractere de dois pontos (':'), e pode conter um valor de preenchimento opcional. Se ele contém um valor de preenchimento, este valor deve ser separado do valor de substituição por um caractere de dois pontos (':'). Os itens nas listas de nomes de colunas devem ser separados por caracteres de vírgula (','). Ao ser especificado, uma lista de nomes de colunas deve seguir a palavra-chave 'para' ou 'exceto' e um caractere de colon (':').

O uso de tal arquivo externo é uma alternativa de especificação de uma cláusula inteira TRANSLATE STRING em um arquivo de controle, além de sua opção UPPER. Como resultado, para qualquer entrada nele, o significado de seus dois componentes (substituição string, colunas) é exatamente o mesmo que os respectivos dois componentes de uma cláusula inteira TRANSLATE STRING .

Regras

As opções FOR ou EXCETO podem ser usadas apenas com um "SELECT *".

Quando as opções EXCETO e FOR são usadas em uma cláusula TRANSLATE STRING , uma coluna string especificada em uma opção FOR deve ser especificada na opção EXCETO.

Só pode haver uma opção EXCETO na cláusula TRANSLATE STRING .

Pode haver mais de uma opção FOR na cláusula TRANSLATE STRING . E os nomes da coluna string especificados nas várias opções de FOR podem aparecer apenas uma vez em uma determinada opção FOR, e também apenas uma vez em todas as opções FOR.

Quando nenhuma opção FOR ou EXCETO é especificada na cláusula TRANSLATE STRING , os substitutos dos caracteres serão feitos em todas as colunas string especificadas na consulta SQL.

É permitida apenas uma substituição de caracteres sem qualquer opção FOR ou EXCETO.

Se houver um ou mais nomes de colunas string especificados na opção EXCETO e se houver pelo menos uma opção FOR e esses nomes de colunas string não estiverem presentes em uma opção FOR, então dois casos são possíveis para estas colunas string:
  • se uma especificação de substituição de caracteres for feita sem nenhuma opção FOR ou EXCETO na cláusula TRANSLATE STRING , então esta substituição de caracteres será aplicada nas colunas string em questão.
  • se não houver substituição de caracteres especificados sem qualquer opção EXCETO ou FOR na cláusula TRANSLATE STRING , nenhum substituição de caracteres será aplicado às colunas string em questão.

Quando uma instrução SELECT é processada por meio do Db2, a cláusula TRANSLATE STRING é ignorada.

Exemplos

Usando uma consulta SQL "SELECT *":
[i1111@lat117 Test]$ db2hpu -f sysin -i i1111
INZM031I Optim High Performance Unload for Db2 06.05.00.002.01(210726) 
         64 bits 07/27/2021 (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----+
000001 GLOBAL CONNECT TO SAMPLE;
000002 UNLOAD TABLESPACE
000003 DB2 NO
000004 LOCK NO
000005 FLUSH BUFFERPOOLS NO
000006 SELECT * FROM EMPLOYEE;
000007 TRANSLATE STRING ('EA' BY 'ea' FOR (FIRSTNME), 'TN' BY 'tn' EXCEPT (FIRSTNME, JOB), 'MG' BY 'mg')
000008 FORMAT DEL;

INZU462I HPU control step start: 07/27/2021 17:37:34.819.
INZU463I HPU control step end  : 07/27/2021 17:37:35.104.
INZU464I HPU run step start    : 07/27/2021 17:37:35.246.
"000020","MICHaeL","L","tHOMPSOn","B01","3476",20031010,"mANAgER ",18,"M",19780202,+0094250.00,+0000800.00,+0003300.00
"000060","IRVING","F","StERn","D11","6423",20030914,"mANAgER ",16,"M",19750707,+0072250.00,+0000500.00,+0002580.00
"000090","eILeeN","W","HEnDERSOn","E11","5498",20000815,"mANAgER ",16,"F",19710515,+0089750.00,+0000600.00,+0002380.00
…
INZU410I HPU utility has unloaded 42 rows on lat117 host for I1111.EMPLOYEE in stdout.
INZU465I HPU run step end      : 07/27/2021 17:37:35.262.
INZI441I HPU successfully ended: Real time -> 0m0.443222s
User time -> 0m0.178133s : Parent -> 0m0.178133s, Children -> 0m0.000000s
Syst time -> 0m0.066422s : Parent -> 0m0.066422s, Children -> 0m0.000000s
Usando uma consulta SQL customizada:
[i1111@lat117 Test]$ db2hpu -f sysin -i i1111
INZM031I Optim High Performance Unload for Db2 06.05.00.002.01(210726) 
         64 bits 07/27/2021 (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----+
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 TRANSLATE STRING ('EA' BY 'ea')
000008 FORMAT DEL;

INZU462I HPU control step start: 07/27/2021 17:45:51.253.
INZU463I HPU control step end  : 07/27/2021 17:45:51.619.
INZU464I HPU run step start    : 07/27/2021 17:45:52.371.
"000020","MICHaeL","THOMPSON"
"000060","IRVING","STeRN"
"000090","eILeeN","HeNDeRSON"
…
INZU410I HPU utility has unloaded 42 rows on lat117 host for I1111.EMPLOYEE in stdout.
INZU465I HPU run step end      : 07/27/2021 17:45:52.385.
INZI441I HPU successfully ended: Real time -> 0m1.131917s
User time -> 0m0.176899s : Parent -> 0m0.176899s, Children -> 0m0.000000s
Syst time -> 0m0.064598s : Parent -> 0m0.064598s, Children -> 0m0.000000s
Usando uma cláusula TRADUZIR STRING referindo-se a um arquivo externo. O conteúdo deste arquivo externo é equivalente à especificação da cláusula TRANSLATE STRING no primeiro exemplo acima:
[i1111@lat117 Test]$ db2hpu -f SYSIN53 -i i1111
INZM031I Optim High Performance Unload for Db2 06.05.00.002.05(220413) 
         64 bits 04/15/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----+
000001 GLOBAL CONNECT TO SAMPLE;
000002 UNLOAD TABLESPACE
000003 DB2 NO
000004 LOCK NO
000005 FLUSH BUFFERPOOLS NO
000006 SELECT * FROM EMPLOYEE;
000007 TRANSLATE STRING IN "/home/i1111/Test/translate.txt"
000008 FORMAT DEL;

INZU462I HPU control step start: 04/15/2022 16:49:55.676.
INZU463I HPU control step end  : 04/15/2022 16:49:55.803.
INZU464I HPU run step start    : 04/15/2022 16:49:56.391.
"000020","MICHaeL","L","tHOMPSOn","B01","3476",20031010,"mANAgER ",18,"M",19780202,+0094250.00,+0000800.00,+0003300.00
"000060","IRVING","F","StERn","D11","6423",20030914,"mANAgER ",16,"M",19750707,+0072250.00,+0000500.00,+0002580.00
"000090","eILeeN","W","HEnDERSOn","E11","5498",20000815,"mANAgER ",16,"F",19710515,+0089750.00,+0000600.00,+0002380.00
…
INZU410I HPU utility has unloaded 42 rows on lat117 host for I1111.EMPLOYEE in stdout.
INZU465I HPU run step end      : 04/15/2022 16:49:56.402.
INZI441I HPU successfully ended: Real time -> 0m0.725356s
User time -> 0m0.063835s : Parent -> 0m0.063835s, Children -> 0m0.000000s
Syst time -> 0m0.026162s : Parent -> 0m0.026162s, Children -> 0m0.000000s
[i1111@lat117 Test]$
[i1111@lat117 Test]$ cat translate.txt
'EA':'ea';for:firstnme
'TN':'tn';except:firstnme,job
'MG':'mg';