- Este tópico contém 7 respostas, 3 vozes e foi atualizado pela última vez 11 anos, 1 mês atrás por Andrei Rubino.
-
AutorPosts
-
6 de outubro de 2013 às 6:38 am #105957EricParticipante
So iniciante na area de pl/sql queria saber como crio um bloco anônimo que exiba durante 365 dias (1 ano) apenas as datas que caem no sábado e domingo, após a entrada de uma data. Após a solicitação da entrada da data, exibir sequencialmente a data e o dia da semana que representa essa data. Eu sei que consigo fazer apenas com um loop mas nao to acertando, os valores teriam que esta em ordem de data
7 de outubro de 2013 às 5:04 am #105958Sergio WilliansMestre@Eric Araujo
Cole para nós o que você já montou. Até para podermos orientá-lo melhor.
9 de outubro de 2013 às 9:33 am #105990EricParticipanteAté agora isso
declare
v_Data VARCHAR2(20);
BEGIN
FOR i IN 1..365 LOOP
IF( to_char(sysdate-1+i,’DAY’) NOT IN (‘SATURDAY’, ‘SUNDAY’) ) THEN
v_data := to_char(sysdate-1+i,’DAY’);
dbms_output.put_line (v_data);
END IF;
END LOOP;
END;9 de outubro de 2013 às 4:15 pm #105991Andrei RubinoParticipante@Eric Araujo
Acredito que seja isso que você quer, veja se atende suas necessidades.
DECLARE
v_DATA DATE;
v_DATA_FIM DATE;
BEGIN
v_DATA := SYSDATE;
v_DATA_FIM := ADD_MONTHS(V_DATA, 12);
WHILE (V_DATA < V_DATA_FIM) LOOPIF (TO_CHAR(v_DATA, 'D') IN (1,7) ) THEN
DBMS_OUTPUT.PUT_LINE(TO_CHAR(V_DATA,'DAY') || ' - ' || v_DATA);
END IF;v_DATA := v_DATA + 1;
END LOOP;
END;
/
10 de outubro de 2013 às 11:40 pm #106003EricParticipanteObrigado pela ajuda, atendeu perfeitamente o que queria esse loop
Preciso evoluir esse programa para exibir os feriados e sua descrição. eu criei uma tabela feriado, com data e descrição mas não consigo trazer essas informações, alguma idéia ou outra forma de fazer.
create table feriado
( dt date,
descricao varchar2(50)
);
insert into feriado values ( to_date(’01/01/2011′,’dd/mm/yyyy’), ‘Confraternização Universal’);
insert into feriado values ( to_date(’25/01/2011′,’dd/mm/yyyy’), ‘Aniversário de São Paulo’ );
insert into feriado values ( to_date(’08/03/2011′,’dd/mm/yyyy’), ‘Carnaval’);
insert into feriado values ( to_date(’21/04/2011′,’dd/mm/yyyy’), ‘Tiradentes’);
insert into feriado values ( to_date(’22/04/2011′,’dd/mm/yyyy’), ‘Sexta-feira da Paixão’);
insert into feriado values ( to_date(’01/05/2011′,’dd/mm/yyyy’), ‘Dia do Trabalho’);
insert into feriado values ( to_date(’23/06/2011′,’dd/mm/yyyy’), ‘Corpus Christi’);
insert into feriado values ( to_date(’07/09/2011′,’dd/mm/yyyy’), ‘Independência do Brasil’);
insert into feriado values ( to_date(’12/10/2011′,’dd/mm/yyyy’), ‘Nossa Senhora Aparecida’);
insert into feriado values ( to_date(’02/11/2011′,’dd/mm/yyyy’), ‘Finados’);
insert into feriado values ( to_date(’25/12/2011′,’dd/mm/yyyy’), ‘Natal’);10 de outubro de 2013 às 11:46 pm #106004Andrei RubinoParticipante@Eric Araujo
Exibir como via DBMS_OUTPUT.PUT_LINE mesmo ?11 de outubro de 2013 às 4:42 pm #106005EricParticipanteSim isso mesmo, to tentando via select into.
11 de outubro de 2013 às 5:32 pm #106006Andrei RubinoParticipante@Eric
Para você fazer isso vai precisar de um cursor veja.
Procure mais sobre Cursores para entender o código.
DECLARE
CURSOR C1 IS
SELECT DT,
DESCRICAO
FROM FERIADO
ORDER BY DT;
R1 C1%ROWTYPE;
BEGIN
OPEN C1;
FETCH C1 INTO R1;
WHILE C1%FOUND LOOP
DBMS_OUTPUT.PUT_LINE('DATA:'||R1.DT||' DESCRIÇÃO: '||R1.DESCRICAO);
FETCH C1 INTO R1;
END LOOP;
CLOSE C1;
END;
-
AutorPosts
- Você deve fazer login para responder a este tópico.