Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

ISREL LOUIS RAMOS

Problemas na execução de SP vindo valores de csv

Recommended Posts

Criei a tabela tbita_bi_indicPREV com esse formato:


create table pimsprd.tbita_bi_indicPREV (
DATA DATE NOT NULL,
VARIAVEL varchar(30) NOT NULL,
VL_DIA NUMBER (12,5),
VL_MES NUMBER (12,5),
VL_ANO NUMBER (12,5),
CONSTRAINT tbita_bi_indicPREV_PK PRIMARY KEY (VARIAVEL,DATA)
USING INDEX TABLESPACE PIMS_DATA_004)
TABLESPACE pims_indx_004 ;

-----------------------------------------------------------------------------------------------------------------------



Posteriormente eu criei a procedure com esse formato:



create or replace procedure pimsprd.PR_ITABI_PREV(P_DATA in date,

P_VARIAVEL in varchar2,
P_VL_DIA in number,
P_VL_MES in number,
P_VL_ANO in number)


IS
c_count number;
BEGIN
-- Verifica se existe o dado previsto do indicador
Select count(*)
INTO c_count
from pimsprd.tbita_bi_indicPREV PREV
where PREV.DATA = P_DATA
and PREV.VARIAVEL = P_VARIAVEL;


If c_count > 0 then
update pimsprd.tbita_bi_indicPREV
set VL_DIA = P_VL_DIA,
VL_MES = P_VL_MES,
VL_ANO = P_VL_ANO
where DATA = P_DATA
and VARIAVEL = P_VARIAVEL;

Else
insert into pimsprd.tbita_bi_indicPREV
(DATA, VARIAVEL, VL_DIA, VL_MES, VL_ANO)
values
(p_DATA, p_VARIAVEL, p_VL_DIA, P_VL_MES, P_VL_ANO);

end if;
End;


---------------------------------------------------------------------------------------------

Quando vou testar ela com um valor muito grande por exemplo:12345678,90

Elá erro de tamanho especifico da coluna



Quando vou testar ela com um valor com final 00 por exemplo:123456,00

Ela não aceita e da erro.

---------------------------------------------------------------------------------------------

Pensei na hipotese de na SP colocar os valores em number para varchar2 e depois mudar de varchar para number através de cursor, pois ai eu não preciso alterar na tabela, pois na tabela a intenção é que eles sejam valores numéricos.


Isso faz necessário, pois vou importar os dados dela de uma planilha csv, com valores positivos e negativos dos dados.


Estu fazendo correto? alguém tem alguma sugestão?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde,

 

Achei a solução e compartilho.

 

1 - Em relação a especificação da era o tamanho do campo na criação da tabela, alterei de 12 para 25.

 

2 - em relação ao zero, no csv mudei para varchar2 no cursor, com isso ele aceita valores corretos.

 

Segue a nova SP criada.

 

create or replace procedure pimsprd.PR_ITABI_PREV(P_DATA in date,
P_VARIAVEL in varchar2,
P_VL_DIA in varchar2,
P_VL_MES in varchar2,
P_VL_ANO in varchar2)
IS
c_count number;
c_vl_dia number;
c_vl_MES number;
c_vl_ANO number;
BEGIN
c_vl_dia := to_number(p_vl_dia);
c_vl_MES := to_number(p_vl_MES);
c_vl_ANO := to_number(p_vl_ANO);
-- Verifica se existe o dado previsto do indicador
Select count(*)
INTO c_count
from pimsprd.tbita_bi_indicPREV PREV
where PREV.DATA = P_DATA
and PREV.VARIAVEL = P_VARIAVEL;
If c_count > 0 then
update pimsprd.tbita_bi_indicPREV
set VL_DIA = c_vl_dia,
VL_MES = C_VL_MES,
VL_ANO = C_VL_ANO
where DATA = P_DATA
and VARIAVEL = P_VARIAVEL;
Else
insert into pimsprd.tbita_bi_indicPREV
(DATA, VARIAVEL, VL_DIA, VL_MES, VL_ANO)
values
(p_DATA, p_VARIAVEL, c_vl_dia, C_VL_MES, C_VL_ANO);
end if;
End;

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.