SQL czas jak zrobić

0

Witam próbuję zrobić blok który będzie wyświetla << napis teraz jest 24>> << napis teraz jest 25>>...... i tak dalej i bardzo nie mam pomysłu jak to ugryźć

tak podstawa programu to. Tylko jak dalej ruszyć próbowałem jeszcze zagnieździć w różne pętle ale brak mojego efektu
Ktoś ukierunkuje ??? Czy dodać jeszcze jedną daną zawierającą czas +1 s ???


declare 
a date;
begin 
select SYSDATE()  into a  FROM DUAL;
for czas in 1..60 loop 
DBMS_OUTPUT.PUT_LINE('Teraj  jest sekunda : '|| to_char(a,'SS'));
select SYSDATE()  into a  FROM DUAL;
end loop; 
end ;
2

ale to nie ma sensu. Jeśli to zadanie domowe czy coś takiego to zmień książkę/stronę z której się uczysz. Jeśli sam sobie to wymyśliłeś to zacznij wymyślać "życiowe" problemy (nikt nie robi zegara w SQLu). Jest jeszcze trzecia opcja - podaj treść zadania, które masz wykonać - być może próbujesz zrobić coś bardzo na około.

0
  1. W oracle dbms_output masz buforowany, więc ta informacja pojawi się na standardowym wyjściu po wykonaniu bloku.
  2. Powinieneś włączyć wypisywanie na ekran, np.:
dbms_output.enable(buffer_size=>100000);
  1. Możesz próbować pewnego tricku z transakcjami autonomicznymi (nie wiem czy zadziała, nie mam oracle pod ręką żeby sprawdzić):
begin 
  dbms_output.enable(buffer_size=>100000);
  for i in 1..60 loop
    declare
      pragma autonomous_transaction;
    begin
     dbms_output.put_line('Iteracja i='||i);
    end;
  end;
end;
/

--- Edited:
Acha, jak chcesz mieć opóźnienie 1 sekundę, to możesz skorzystać z pakietu: dbms_lock i wywołać np. dbms_lock.sleep(1);

0
abrakadaber napisał(a):

ale to nie ma sensu. Jeśli to zadanie domowe czy coś takiego to zmień książkę/stronę z której się uczysz. Jeśli sam sobie to wymyśliłeś to zacznij wymyślać "życiowe" problemy (nikt nie robi zegara w SQLu). Jest jeszcze trzecia opcja - podaj treść zadania, które masz wykonać - być może próbujesz zrobić coś bardzo na około.

hehe zgadłeś to nie jest zad ani z książki , ani domowe. Golnie sam próbuję się nauczyć z internetu i trafiłem na takie zadanie :

. Napisz program, który będzie działał tak długo, jak długo nie nadejdzie 25 sekunda dowolnej minuty.
Napisałem takie rozwiązanie

declare
b date;
begin 
<<etykieta>>
select SYSDATE()  into b FROM DUAL;
if to_char(b,'ss') = 25 then 
dbms_output.put_line('Już pora bo jest sekunda '||TO_char(b, 'SS') );
else goto etykieta;
end if;
end;

I działa ale dopóki nie nadejdzie 25 sec to program "Czeka" i wtedy naszła myśl a gdyby tak wstawić zegar albo odliczanie i zacząłem kombinować ale skończyło się postem tutaj

0
yarel napisał(a):
  1. W oracle dbms_output masz buforowany, więc ta informacja pojawi się na standardowym wyjściu po wykonaniu bloku.
  2. Powinieneś włączyć wypisywanie na ekran, np.:
dbms_output.enable(buffer_size=>100000);
  1. Możesz próbować pewnego tricku z transakcjami autonomicznymi (nie wiem czy zadziała, nie mam oracle pod ręką żeby sprawdzić):
begin 
  dbms_output.enable(buffer_size=>100000);
  for i in 1..60 loop
    declare
      pragma autonomous_transaction;
    begin
     dbms_output.put_line('Iteracja i='||i);
    end;
  end;
end;
/

--- Edited:
Acha, jak chcesz mieć opóźnienie 1 sekundę, to możesz skorzystać z pakietu: dbms_lock i wywołać np. dbms_lock.sleep(1);

Dzięki wieczorem spróbuję,

Jednak to za wysoki poziom jeszcze na mnie

Nie mogę ogarnąć tego mógłbyś powiedzieć w jakim celu zwiększamy bufor ? oraz co nam daje <pragma autonomous_transaction;> bo z tego co wyczytałem jest to blok który wykonuje się poza głównym mechanizmem.i działa niezależnie od programu głównego

1 użytkowników online, w tym zalogowanych: 0, gości: 1