Boa tarde!
SET SERVEROUTPUT ON;
DECLARE
v_ID VARCHAR(10) := 'Novo programa PL/SQL';
BEGIN
dbms_output.put_line(v_ID);
v_ID := 2 ;
dbms_output.put_line(v_ID);
END;
Executando o script no ambiente online (https://freesql.com/), inicialmente o erro gerado foi o seguinte:
ORA-06502: PL/SQL: value or conversion error: character string buffer too small
ORA-06512: at line 2
https://docs.oracle.com/error-help/db/ora-06502/
Error at Line: 1 Column: 1
Então, modifiquei o código, para atribuir à variável, dentro do bloco BEGIN, um valor do tipo "char", como segue:
SET SERVEROUTPUT ON;
DECLARE
v_ID VARCHAR(10) := 'Novo programa PL/SQL';
BEGIN
dbms_output.put_line(v_ID);
v_ID := '2' ;
dbms_output.put_line(v_ID);
END;
Então, foi gerado um outro erro:
ORA-06502: PL/SQL: value or conversion error: character string buffer too small
ORA-06512: at line 2
https://docs.oracle.com/error-help/db/ora-06502/
Error at Line: 1 Column: 1
Concluí que o problema principal não é de conversão. Basta ajustar o tamanho da variável no bloco DECLARE para que caiba a expressão inicial ("Novo programa PL/SQL"), para que o script seja executado corretamente:
SET SERVEROUTPUT ON;
DECLARE
v_ID VARCHAR(20) := 'Novo programa PL/SQL';
BEGIN
dbms_output.put_line(v_ID);
v_ID := '2' ;
dbms_output.put_line(v_ID);
END;