Truncar um Varchar para o comprimento específico no derby automaticamente
Pergunta
Como posso truncar um VARCHAR para o comprimento do campo da tabela automaticamente no derby usando o SQL?
Para ser específico:
CREATE TABLE A ( B VARCHAR(2) );
INSERT INTO A B VALUES ('1234');
lançaria uma SQLEXCECTION:
A truncation error was encountered trying to shrink VARCHAR '123' to length 2.
Existe uma maneira fácil de suprimir essa exceção?
Solução
Não. Você deve cortá-lo depois de verificar os metadados. Ou, se você não quiser verificar os meta-dados sempre, deve manter seu código e banco de dados em sincronia. Mas isso não é grande coisa, é uma prática usual em validadores.
Outras dicas
Você pode aparar o Varchar antes de inseri -lo. Use a função de acabamento em seu script/procedimento Inserir.
Não estou familiarizado com o Derby, mas no MSSQL eu faço exatamente a mesma coisa, usando o TRIM para evitar o erro de truncamento (apenas onde não preciso dos dados completos), é muito mais preferível aumentar o comprimento do Varchar
Você pode usar SUBSTR
:
CREATE TABLE A ( B VARCHAR(2) );
INSERT INTO A B VALUES (SUBSTR('1234', 1, 2));
Caso você use declarações preparadas:
INSERT INTO A B VALUES (SUBSTR(?, 1, 2));