Buenas caros amigos!!!
Preciso rodar uma DECLARE;
preciso limpar a tabela, identificar nessa tabela os lancamentos impares, contar os lancamentos pares e impares e inserir na tabela os lancamentos de numeros impares.
Afff... está meio confuso mais se puderem me ajudar com um exemplo, serei grato.
Abrax...
Mataveli
DUVIDAS (DECLARE)!!!
-
- Moderador
- Mensagens: 2016
- Registrado em: Qua, 12 Jan 2005 3:25 pm
- Localização: Araraquara - SP
Abraço,
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Brother, beleza?
Cara, dá uma olhada neste tópico abaixo, aqui do fórum, sobre Pares e Ímpares:
http://www.glufke.net/oracle/viewtopic. ... ight=impar
Abaixo, vai uma dica:
Troque onde está o (12 e o 13997) pelo campo da tua tabela e faça um teste.
Talvez o ajude neste caso ai, beleza?
qualquer coisa, manda pra gente.
Cara, dá uma olhada neste tópico abaixo, aqui do fórum, sobre Pares e Ímpares:
http://www.glufke.net/oracle/viewtopic. ... ight=impar
Abaixo, vai uma dica:
-- Se o mod do valor, retornar 0, é Par
SELECT MOD(12,2) FROM dual;
-- Se retornar 1, é Ímpar
SELECT MOD(13997,2) FROM dual;
Talvez o ajude neste caso ai, beleza?
qualquer coisa, manda pra gente.
-
- Rank: Estagiário Sênior
- Mensagens: 10
- Registrado em: Qui, 27 Dez 2007 8:51 am
- Localização: sorocaba
beleza BROW!!! TENHO UM mês DE PL/SQL, TO TENTANDO APRENDER SOZINHO. HEHEHEHE!!! IMBAÇADO...
FIZ UMAS LOUCURAS aí, vê SE TUH CONSEGUE INTENDER ... ABRAÇOSS!!
FIZ UMAS LOUCURAS aí, vê SE TUH CONSEGUE INTENDER ... ABRAÇOSS!!

DECLARE
CURSOR C_LANCTO IS
SELECT NUM_LIGACAO,
NUM_AVISO,
ANO_LANCTO,
mês_LANCTO,
VAL_LANCTO
FROM LANCAMENTO_TMP
WHERE ANO_LANCTO = 2007 AND
mês_LANCTO = 10;
v_num_ligacao NUMBER(9);
v_num_aviso NUMBER(9);
v_ano_lancto NUMBER(4);
v_mês_lancto NUMBER(2);
v_val_lancto NUMBER(15,2);
BEGIN
OPEN C_LANCTO;
LOOP
FETCH C_LANCTO
INTO v_num_ligacao,
v_num_aviso,
v_ano_lancto,
v_mês_lancto,
v_val_lancto;
EXIT WHEN C_LANCTO%NOTFOUND;
-------------- aqui EU PRECISO LIMPAR A TABELA LANCAMENTO_TMP.
BEGIN
DELETE FROM LANCAMENTO_TMP;
EXCEPTION
WHEN OTHERS THEN
--------------------------------------------
END;
------------ PRECISO IDENTIFICAR O NUMERO DE AVISO IMPAR DA REFERENCIA 2007.
BEGIN
SELECT NUM_AVISO
FROM LANCAMENTO
WHERE NUM_AVISO MOD(10,2) = 0 AND
ANO_LANCTO = 2007;
------------------------------------------------------
---------------------------PRECISO CONTAR OS LANCAMENTOS PARES E IMPARES.
SELECT COUNT(1) VAL_LANCTO
FROM LANCAMENTO
WHERE VAL_LANCTO MOD(10,2) = 0 , MOD(9,2) = 1;
----------------------------aqui INSERIR NA TABELA OS LANCAMENTOS DE NUM_AVISO IMPAR.
INSERT INTO LANCAMENTO_TMP
(VAL_LANCTO)
SELECT VAL_LANCTO
FROM LANCAMENTO_TMP
WHERE NUM_AVISO MOD(9,2) = 1;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(v_num_ligacao||' | '||v_num_aviso||' | '||v_ano_lancto||',
||v_mês_lancto);
END;
IF MOD(
END LOOP;
CLOSE C_LANCTO;
END;
/
-
- Moderador
- Mensagens: 2016
- Registrado em: Qua, 12 Jan 2005 3:25 pm
- Localização: Araraquara - SP
Abraço,
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Brow,
Fiz um exemplo aqui pra você...
Vê se consegue adaptar ai.
qualquer coisa, manda ai.
Fiz um exemplo aqui pra você...
Vê se consegue adaptar ai.
CREATE TABLE teste (v_valor NUMBER, v_ano number);
INSERT INTO teste (v_valor, v_ano) VALUES (1, 2007);
INSERT INTO teste (v_valor, v_ano) VALUES (2, 2007);
INSERT INTO teste (v_valor, v_ano) VALUES (3, 2007);
INSERT INTO teste (v_valor, v_ano) VALUES (1, 2006);
INSERT INTO teste (v_valor, v_ano) VALUES (2, 2006);
INSERT INTO teste (v_valor, v_ano) VALUES (3, 2006);
COMMIT;
SELECT *
FROM teste;
DECLARE
CURSOR CUR_PARES
IS
SELECT V_VALOR,
V_ANO
FROM TESTE
WHERE V_ANO = 2007
AND MOD(V_VALOR,2) = 0;
BEGIN
FOR X IN CUR_PARES
LOOP
dbms_output.put_line('Listando os PARES de 2007. VALOR => ' || X.V_VALOR);
-- aqui você pode inserir na tua tabela...
END LOOP;
END;
-
- Moderador
- Mensagens: 2016
- Registrado em: Qua, 12 Jan 2005 3:25 pm
- Localização: Araraquara - SP
Abraço,
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Brother,
É só trocar o MOD que eu coloquei pros PARES, como 1:
Ele só irá listar no LOOP os ímpares, daí você dá o insert no ponto que marquei pra você no código anterior, beleza?
qualquer coisa, manda ai.
É só trocar o MOD que eu coloquei pros PARES, como 1:
AND MOD(V_VALOR,2) = 1;
qualquer coisa, manda ai.
-
- Moderador
- Mensagens: 2016
- Registrado em: Qua, 12 Jan 2005 3:25 pm
- Localização: Araraquara - SP
Abraço,
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Brother,
Posta teu código completo aqui pra gente, pode seR?
Posta teu código completo aqui pra gente, pode seR?
-
- Rank: Estagiário Sênior
- Mensagens: 10
- Registrado em: Qui, 27 Dez 2007 8:51 am
- Localização: sorocaba
TO ALUGANDO você HJ... VLW A ATENÇÃO BROW!!!
---------------------------------
---------------------------------
DECLARE
CURSOR C_LANCTO IS
SELECT NUM_LIGACAO,
NUM_AVISO,
ANO_LANCTO,
mês_LANCTO,
VAL_LANCTO
FROM LANCAMENTO_TMP
WHERE ANO_LANCTO = 2007 AND
mês_LANCTO = 10;
v_num_ligacao NUMBER(9);
v_num_aviso NUMBER(9);
v_ano_lancto NUMBER(4);
v_mês_lancto NUMBER(2);
v_val_lancto NUMBER(15,2);
BEGIN
OPEN C_LANCTO;
LOOP
FETCH C_LANCTO
INTO v_num_ligacao,
v_num_aviso,
v_ano_lancto,
v_mês_lancto,
v_val_lancto;
EXIT WHEN C_LANCTO%NOTFOUND;
BEGIN
DELETE FROM LANCAMENTO_TMP;
EXCEPTION
WHEN OTHERS THEN
END;
BEGIN
SELECT NUM_AVISO
FROM LANCAMENTO
WHERE mês_LANCTO = 10 AND
ANO_LANCTO = 2007 AND
MOD(9,2) = 1;
SELECT COUNT(1) VAL_LANCTO
FROM LANCAMENTO
WHERE VAL_LANCTO MOD(10,2) = 0 AND
MOD(9,2) = 1;
DBMS_OUTPUT.PUT_LINE('Listando os PARES e IMPARES de 2007');
INSERT INTO LANCAMENTO_TMP
(VAL_LANCTO)
SELECT VAL_LANCTO
FROM LANCAMENTO_TMP
WHERE NUM_AVISO MOD(9,2) = 1;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(v_num_ligacao||' | '||v_num_aviso||' | '||v_ano_lancto||', ||v_mês_lancto);
END;
END LOOP;
CLOSE C_LANCTO;
END;
-
- Rank: DBA Sênior
- Mensagens: 365
- Registrado em: Ter, 24 Mai 2005 2:24 pm
- Localização: Araraquara - SP
Cristiano (Tineks)
Araraquara - SP
Araraquara - SP
O erro está abaixo do insert da LANCAMENTO_TMP, logo depois do insert tem um dbms_output, nele está faltando fechar as aspas.
[]'s
ex: DBMS_OUTPUT.PUT_LINE(v_num_ligacao||' | '||v_num_aviso||' | '||v_ano_lancto||','||v_mês_lancto);
-
- Rank: Estagiário Sênior
- Mensagens: 10
- Registrado em: Qui, 27 Dez 2007 8:51 am
- Localização: sorocaba
aí GALERA, EU COLOCO PRA RODAR ESSA DECLARE SÓ Q ESTA RETORNANDO VALOR INSERIDOS 0. alguém SABE O POR QUE???
AGUARDO... ABRAÇO!
AGUARDO... ABRAÇO!
---------------------------------------------------------
DECLARE
CURSOR C_LANCTO IS
SELECT NUM_LIGACAO,
NUM_AVISO,
ANO_LANCTO,
mês_LANCTO,
VAL_LANCTO
FROM LANCAMENTO
WHERE ANO_LANCTO = 2007 AND
mês_LANCTO = 10 AND
COD_GRUPO = 9;
v_num_ligacao NUMBER(9);
v_num_aviso NUMBER(9);
v_ano_lancto NUMBER(4);
v_mês_lancto NUMBER(2);
v_val_lancto NUMBER(15,2);
v_count_par NUMBER := 0;
v_count_impar NUMBER := 0;
BEGIN
OPEN C_LANCTO;
DELETE FROM LANCAMENTO_TMP; -- LIMPA TABELA!
COMMIT;
LOOP
FETCH C_LANCTO
INTO v_num_ligacao,
v_num_aviso,
v_ano_lancto,
v_mês_lancto,
v_val_lancto;
EXIT WHEN C_LANCTO%NOTFOUND;
IF MOD(v_num_aviso,2) = 1 THEN -- SE IMPAR INSERIR!
BEGIN
INSERT INTO LANCAMENTO_TMP
(num_aviso,
ano_lancto,
mês_lancto,
num_ligacao,
val_lancto)
VALUES (v_num_aviso,
v_ano_lancto,
v_mês_lancto,
v_num_ligacao,
v_val_lancto);
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('ERRO AO INSERIR EM TABELA O CDC: ' ||v_num_ligacao);
END;
--DBMS_OUTPUT.PUT_LINE ('INSERIDO:' || v_num_ligacao);
v_count_impar := v_count_impar + 1;
ELSE
v_count_par := v_count_par + 1;
END IF;
END LOOP;
DBMS_OUTPUT.PUT_LINE (' INSERIDOS: ' || v_count_par);
DBMS_OUTPUT.PUT_LINE (' INSERIDOS: ' || v_count_impar);
CLOSE C_LANCTO;
END;
-
- Moderador
- Mensagens: 2016
- Registrado em: Qua, 12 Jan 2005 3:25 pm
- Localização: Araraquara - SP
Abraço,
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Brother,
Este trecho abaixo retorna algo?
Outra coisa, mês_LANCTO é do tipo NUMBER?
Este trecho abaixo retorna algo?
SELECT NUM_LIGACAO,
NUM_AVISO,
ANO_LANCTO,
mês_LANCTO,
VAL_LANCTO
FROM LANCAMENTO
WHERE ANO_LANCTO = 2007 AND
mês_LANCTO = 10 AND
COD_GRUPO = 9;
-
- Rank: DBA Sênior
- Mensagens: 365
- Registrado em: Ter, 24 Mai 2005 2:24 pm
- Localização: Araraquara - SP
Cristiano (Tineks)
Araraquara - SP
Araraquara - SP
Os contadores
estão apresentando a quantidade de registros inseridos? você está dando um commit depois de executar o seu script?
[]'s
DBMS_OUTPUT.PUT_LINE (' INSERIDOS: ' || v_count_par);
DBMS_OUTPUT.PUT_LINE (' INSERIDOS: ' || v_count_impar);
[]'s
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante