RAFAEL C D EMELO
Members-
Total de itens
9 -
Registro em
-
Última visita
Tudo que RAFAEL C D EMELO postou
-
[Resolvido] Exception When Dup_Index_Val_On_Index Then Não Funciona
RAFAEL C D EMELO respondeu ao tópico de RAFAEL C D EMELO em Oracle
galera consegui achar o erro no caso a tabela q eu estava fazerndo o insert ja tinha um PK com o mesmo nome entao como essa tabela eu so uso para inserir os dados eu deixei ela sem nenhuma pk e consegui inserir e evitar a insercao duplicada de toda forma obrigado e boa sorte a todos. -
[Resolvido] Exception When Dup_Index_Val_On_Index Then Não Funciona
RAFAEL C D EMELO postou um tópico no fórum Oracle
Bom dia amigos, me deparei com um problema estou criando uma procedure que precisa criar uma PK em uma tabela ja existente e apos isso realizar um insert porem quando existe um dado duplicado por algum motive a exception DUP_VAL_ON_INDEX NAO FUNCIONA o insert funcionou mas quando testo uma situacao de duplicacao eu recebo um erro oracle 02260 e diz que a tabela somente pode ter uma PK porem a exception deveria tartar o erro , eu vou deixar o codigo a baixo par se alguem puder me ajudar isso desde ja agradeco a todos, CREATE OR REPLACE PROCEDURE MANUAL_CLIENT_INSERT_FIP AS Y_CONT NUMBER := 0; W_CONT NUMBER; BEGIN EXECUTE IMMEDIATE 'ALTER TABLE TEMP_FIP_CLIENT_HISTORIC ADD PRIMARY KEY (CLIENTKEY)'; FOR REG IN (SELECT LOADDATE, CLIENTKEY, CLIENTSEGMENT, CLIENTNAME, 'UK' AS COUNTRY, 'FIP' AS PROGRAM, 'TPL' AS COVERAGE FROM TEMP_FIP_CLIENT_HISTORIC ) LOOP BEGIN W_CONT := NVL(W_CONT, 0)+ 1; DBMS_OUTPUT.PUT_LINE('RECORDS' ||'-'|| W_CONT ||' '||REG.LOADDATE||' '||REG.CLIENTKEY||' '||REG.CLIENTSEGMENT||' '|| REG.CLIENTNAME||' '||'UK'||' '||'FIP'||' '||'TPL'); INSERT INTO GV_MANUAL_CLIENT(LOADDATE, CLIENTKEY, CLIENTSEGMENT, CLIENTNAME, COUNTRY, PROGRAM, COVERAGE ) VALUES (SYSDATE, REG.CLIENTKEY, REG.CLIENTSEGMENT, REG.CLIENTNAME, REG.COUNTRY, REG.PROGRAM, REG.COVERAGE); EXCEPTION WHEN DUP_VAL_ON_INDEX THEN DBMS_OUTPUT.PUT_LINE(W_CONT ||' '||'DUPLICATE KEY'); END; END LOOP; END; -
ola pessoal mais uma vez aqui pedindo ajuda !!!! estou com uma tarefa aparentemente simples mas estou travado na conversao dos dados alguem poderia me ajudar DECLARE V_YEAR VARCHAR2(10); V_MONTH VARCHAR2(10); V_PREMIUM_START DATE; V_PREMIUM_END DATE; V_END_MONTH DATE; BEGIN FOR REG IN ( SELECT V.ATC_STARTDATE, V.ATC_ENDDATE, P.PREMIUMSTARTDATE,P.PREMIUMENDDATE,P.YEARPREMIUM,P.MONTHPREMIUM,P.AMOUNT,P.EXPOSURE,P.PAYMENTTYPE, P.FK_CLIENT, C.CLIENTKEY, V.FK_CLIENTKEY FROM GV_MANUAL_PREMIUM P, GV_MANUAL_CLIENT C, GV_MANUAL_VEHICLE V WHERE P.FK_CLIENT = C.CLIENTKEY AND C.CLIENTKEY = V.FK_CLIENTKEY AND P.FK_CLIENT = 'RO14VOH*SME*SME*WARREN FINANCIAL SOLUTIONS LIMITED' AND P.YEARPREMIUM IN (2014) ORDER BY P.YEARPREMIUM, P.MONTHPREMIUM ) LOOP DBMS_OUTPUT.PUT_LINE(REG.ATC_STARTDATE ||' '|| REG.ATC_ENDDATE ||' '|| REG.PREMIUMSTARTDATE ||' '|| REG.PREMIUMENDDATE ||' '|| REG.YEARPREMIUM ||' '|| REG.MONTHPREMIUM ||' '|| REG.AMOUNT ||' '|| REG.EXPOSURE ||' '|| REG.PAYMENTTYPE ||' '|| REG.FK_CLIENT); DBMS_OUTPUT.PUT_LINE('--------------------------------------------------------------------------'); DBMS_OUTPUT.PUT_LINE('--------------------------------------------------------------------------'); IF REG.ATC_STARTDATE > REG.PREMIUMSTARTDATE AND to_char(REG.ATC_STARTDATE, 'MM') = REG.MONTHPREMIUM AND to_char(REG.ATC_STARTDATE , 'YY') = REG.YEARPREMIUM THEN DBMS_OUTPUT.PUT_LINE('ENTER'); else DBMS_OUTPUT.PUT_LINE('not enter'); END IF; END LOOP; END; Eu tenho dois campos uma deles o ATC_STARTDATE seria um campo data = 09-05-2015 e o campo PREMIUMMONTH e um campo varchar2 de 5 eu preciso fazer eles serem do mesmo tipo para comparalos no caso vou comparer o mesmo do campo ATC_STARTDATE usando somente o mes para saber se e igual o mes do campo PREMIUMMONTH DESDE JA AGRADECO QUALQUER AJUDA.
-
comparacao de campo varchar2 com data
RAFAEL C D EMELO respondeu ao tópico de RAFAEL C D EMELO em Oracle
Opa boa tarde Motta de data pra string no caso [e um campo de data q preciso pegar so os digitos meses e transformer em varchar2, O CONTEUDO DO PREMIUMMONTH = meses mas em numerous tipo 1,2,3,4,5 mas foi criado em varchar2 -
Mota muito obrigado eu resolve era um erro de negocio n de programacao.
-
Ola galera estou com uma duvida sou novo trabalhando com Oracle e preciso calcular A diferenca entre datas no caso seria Ver as datas de um contrato e primeiramente calcular se ele esta ativo no mes nesse se sim ele precisaria calcular quantos dias ele esta ativo NO mesmo por exemplo ele pode ter iniciado o contraro no dia 1 ou no dia 16 ai calcularia os dias que ele precisa me pagar pelo seguro mas estou com duvidas de como posso calcular A quantidades de dias nesse caso se alguém puder ajudar fico muito agradecido.
-
Bom dia pessoal ainda estou com algumas duvidas sobre o procedimento que estou razendo no caso estou fazendo alguns checks em uma tablea antes de inserir alguns dados, ums dos checks que preciso fazer e checar se o catrato esta ativo do veiculo ou n no mesmo de janeiro se ele inicia antes do dia primeiro e acaba apos o dia 31 de janeiro ok somente calculo a quantidade de dias esse check esta ok , porme eu tenho que fazer outro que se o contrato por exemplo inicia no dia 10 de Janeiro e acaba apos o dia 31 eu vou calcular somente esses dias de diferenca que seriam 21 dias/365 porme estou com um erro que n acho o motivo vou anexar minha querey alguem com conhecimentos em trabalhar com essas datas pode me ajudar desde ja eu agradeco declare V_RESULT_2 NUMBER(8,4); V_RESULT_1 NUMBER(8,4) ; -- recebe o resultado do calculo V_MONTH DATE ; -- parametro do mes analisado V_DATA_START DATE; -- recebe pelo cursor a data atc_startdate V_DATE_END DATE; --recebe pelo cursor a realenddate V_END_MONTH DATE; --recebe a quantidade de dias dentro do mes begin V_MONTH := '01/01/2019'; SELECT LAST_DAY('01/01/2019')INTO V_END_MONTH FROM DUAL; for reg in (select * from TEMP_MASTER_MONTHLY) loop V_DATA_START:= REG.atc_startdate; V_DATE_END := REG.REALENDDATE; IF V_DATA_START <= V_MONTH AND V_DATE_END >= V_END_MONTH THEN V_RESULT_1 := TO_NUMBER ((V_END_MONTH - V_MONTH)+1)/365; DBMS_OUTPUT.PUT_LINE('-----------'); DBMS_OUTPUT.PUT_LINE(V_DATA_START); DBMS_OUTPUT.PUT_LINE(V_DATE_END); DBMS_OUTPUT.PUT_LINE('EXPOSURE VALUE' ||' '|| V_RESULT_1); DBMS_OUTPUT.PUT_LINE('-----------'); ELSIF V_DATA_START > V_MONTH AND to_date (V_DATA_START = 'JAN/2019')) AND V_DATE_END > V_MONTH then V_RESULT_2 := TO_NUMBER ((V_DATA_START + V_END_MONTH)+1)/365; --V_RESULT_1 := TO_NUMBER ((V_END_MONTH - V_MONTH)+1)/365; DBMS_OUTPUT.PUT_LINE(V_DATA_START); DBMS_OUTPUT.PUT_LINE(V_DATE_END); DBMS_OUTPUT.PUT_LINE(V_RESULT_2); DBMS_OUTPUT.PUT_LINE('W'); ELSE DBMS_OUTPUT.PUT_LINE('N'); DBMS_OUTPUT.PUT_LINE(V_DATA_START); DBMS_OUTPUT.PUT_LINE(V_DATE_END ||' ESTOU AQUI' ); END IF; end loop; end;
-
OK MUITO OBRIGADO MOTA VOU TENTAR AQUI RETORNO SE DER CERTO
-
Opa tudo bem mota seria em dias mas no caso eu precisaria fazer a conta do mesmo mas minhas datas sao as datas do inicio das contratos e as datas do mes corrente entende nesse caso o resultado n seria somente dos dias do mes que e o que eu preciso por exemplo o contrato comecou no dia 14/03/2015 e vai ate o dia 29/08/2020 porem eu recebo o file desse mes e preciso calcular quanto ele tem q pagar pelo seguro eu posso fazer um calculo do inicio do mes ate o fim do mes mesmo com anos diferentes ?