Importar substr para campo number com decimal

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
pnet1
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 73
Registrado em: Qui, 23 Jan 2020 9:12 pm

Tenho um campo declarado assim:

Selecionar tudo

VL_VALOR NUMBER(13,2)
Tenho uma proc, que extrai de um arquivo txt que o SAP envia e faço assim

Selecionar tudo

V_VL_VALOR_D  := TO_NUMBER(SUBSTR(V_REG, 310, 13))
Acho que isso está errado, pois dá erro no insert, algo assim que peguei num bloco anônimo
Error report -
ORA-06502: PL/SQL: numeric or value error: character string buffer too small
ORA-06512: at line 87
06502. 00000 - "PL/SQL: numeric or value error%s"
*Cause: An arithmetic, numeric, string, conversion, or constraint error
occurred. For example, this error occurs if an attempt is made to
assign the value NULL to a variable declared NOT NULL, or if an
attempt is made to assign an integer larger than 99 to a variable
declared NUMBER(2).
*Action: Change the data, how it is manipulated, or how it is declared so
that values do not violate constraints.
Como eu faço para resolver a questão de campos decimais?
pnet1
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 73
Registrado em: Qui, 23 Jan 2020 9:12 pm

Começo a acreditar que não é isso, pois antes do Insert eu tenho os parâmetros com os valores corretos(DBMS_OUTPUT.PUT_LINE), mas após o Insert depois do values, coloquei o debug(DBMS_OUTPUT.PUT_LINE) e os valores estavam Nulos. Não sei o que é
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Pois é, eu queria ver o que está vindo do arquivo.
As vezes arquivos texto vem SEM casas decimais.
Por exemplo: No arquivo vem 25210, e isso se traduz para 252.10.

No seu caso, você criou um NUMBER(13,2), sendo que o TOTAL é 13 dígitos, sendo 2 casas decimais. (11 + 2).

Veja:

Selecionar tudo

SQL> declare
  2    vnum number (3,2);
  3  begin
  4    vnum :=10;
  5  end;
  6  /
declare
  vnum number (3,2);
begin
  vnum :=10;
end;

ORA-06502: PL/SQL: numeric or value error: number precision too large
ORA-06512: at line 4
Mesmo erro que está acontecendo pra você.

Se eu tentar inserir 1.23, daí aceita.

Selecionar tudo

SQL> declare
  2    vnum number (3,2);
  3  begin
  4    vnum :=1.23;
  5  end;
  6  /

PL/SQL procedure successfully completed
Resumindo. Talvez você tenha que dividir por 100 o seu número.
EU disse TALVEZ. Quem define isso é a especificação do arquivo.
pnet1
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 73
Registrado em: Qui, 23 Jan 2020 9:12 pm

Eu criei uma nova table, mas todas as condições dessa, constraints e etc e funciona o insert, mas essa table não. Acho que algo aconteceu que não dizer o que é
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Mas o erro é bem específico.
Está tentando colocar um valor X que não cabe na variável ou campo.

Selecionar tudo

ORA-06502: PL/SQL: numeric or value error: character string buffer too small
ORA-06512: at line 87
Ele disse até o número da linha onde deu o problema.
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 4 visitantes