Questão FC372901
Considere o código PL/SQL abaixo. DROP TABLE tab; CREATE TABLE tab (ch CHAR(3 CHAR)); DECLARE str VARCHAR2(5 CHAR) := 'DPEAM'; BEGIN INSERT INTO tab(ch) VALUES(str); END; / Executa
Linguagem SQL
FCC · 2018
Considere o código PL/SQL abaixo.
DROP TABLE tab;
CREATE TABLE tab (ch CHAR(3 CHAR));
DECLARE
str VARCHAR2(5 CHAR) := 'DPEAM';
BEGIN
INSERT INTO tab(ch) VALUES(str);
END;
/
Executar o código acima no Oracle 12c, em condições ideais, resulta em
- PL/SQL procedure successfully completed.
- PL/SQL: numeric or value error: character string buffer too large or too small.
- ORACLE table successfully created.
- ERROR: character string buffer too small.
- ERROR: value too large for column.
Mostrar resposta e comentário
Gabarito
Errado
Comentário do professor
O erro ocorre porque a coluna foi criada como CHAR(3 CHAR) (capacidade para 3 caracteres) e a variável contém VARCHAR2(5 CHAR) com o valor 'DPEAM' (5 caracteres).
Ao executar o INSERT, o Oracle verifica o tamanho do dado em caracteres e não realiza truncamento automático; como o valor excede a capacidade da coluna, a operação falha.
Em Oracle 12c isso resulta na mensagem de erro informando que o valor é muito grande para a coluna: ERROR: value too large for column.
Correções possíveis: ajustar a definição da coluna para acomodar 5 caracteres (ex.: CHAR(5) ou VARCHAR2(5)), ou inserir um valor com no máximo 3 caracteres.
Conteúdo do catálogo FC Concursos · Atualizado em