• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

PL/SQL zadanie

Object Storage Arubacloud
0 głosów
447 wizyt
pytanie zadane 1 czerwca 2016 w SQL, bazy danych przez Lukasz95 Bywalec (2,160 p.)

Mam takie oto zadanie , lecz nie jestem pewien czy dobrze to próbuję zrobić, help.(emp_new to tabela, a salary to kolumna)

Napisać blok PL/SQL, który zmodyfikuje zarobki pracowników:
a) dla zarabiających poniżej ½ średniej wszystkich zarobków, wprowadzi podwyżkę o 20%;
b) dla zarabiających pomiędzy ½ a ⅚ średniej, wprowadzi podwyżkę o 10%;
c) dla pozostałych pracowników wprowadzi podwyżkę o 5%. 

 

BEGIN
  
  FOR i in (SELECT salary from emp_new)
  LOOP
    IF salary<(1/2*AVG(salary)) THEN
    {
      UPDATE emp_new SET salary=salary*1.20;
    }
    ELSIF (salary<(5/6*AVG(salary))) AND (salary>(1/2*AVG(salary))) THEN
    {
      UPDATE emp_new SET salary=salary*1.10;
    }
    ELSE 
    {
     UPDATE emp_new SET salary=salary*1.05;
    }
  END LOOP;
END;

 

komentarz 1 czerwca 2016 przez Lukasz95 Bywalec (2,160 p.)
Nikt?

2 odpowiedzi

0 głosów
odpowiedź 1 czerwca 2016 przez mrcnsct Nałogowiec (36,390 p.)
edycja 1 czerwca 2016 przez mrcnsct
Pewny nie jestem, ale:

-Czy te klamry są potrzebne?

-Pętla for może też wyglądać for i in 1..jakasliczba. Może na początku zapisać liczbę rekordów do jakasliczba (select into).

-Jeśli zmieniasz zarobki to avg po każdym sprawdzeniu jest inne, może na początku zapisać avg do jakiejś zmiennej, a później z nią porównywać.

-W każdym obiegu pętli pobieraj zarobki z jednego rekordu (zapisz do zmiennej), "i" z pętli for może się przydać, tak samo aktualizuj po jednym rekordzie (where).

-Brak end if.
0 głosów
odpowiedź 22 maja 2018 przez Catalonya1992 Mądrala (5,440 p.)
declare
v_srednia number;

BEGIN
   
   select avg(salary)
   into v_srednia
   from emp_new;
   
  FOR i in (SELECT employee_id from emp_new)
  LOOP
    IF salary<(1/2*v_srednia) THEN
        UPDATE emp_new SET salary=salary*1.20 where employee_id = i.employee_id;
      
   ELSIF salary=(1/2*v_srednia) then
        UPDATE emp_new SET salary=salary*1.10 where employee_id = i.employee_id;
    
    ELSE
        UPDATE emp_new SET salary=salary*1.05 where employee_id = i.employee_id;
     
    end if;
    
  END LOOP;
END;

Tak to powinno wyglądać. Pamiętaj też o commicie, żeby zatwierdzić modyfikację. Jeśli chciałbyś nauczyć się więcej SQL-a to zapraszam na https://www.youtube.com/watch?v=M8WNqp5XLM8

Podobne pytania

0 głosów
0 odpowiedzi 687 wizyt
pytanie zadane 17 listopada 2016 w SQL, bazy danych przez marcinhaha Nowicjusz (240 p.)
+4 głosów
1 odpowiedź 634 wizyt
pytanie zadane 15 marca 2021 w Nasze poradniki przez Catalonya1992 Mądrala (5,440 p.)
0 głosów
0 odpowiedzi 630 wizyt
pytanie zadane 4 lipca 2020 w SQL, bazy danych przez Shiro Stary wyjadacz (10,300 p.)

92,615 zapytań

141,465 odpowiedzi

319,779 komentarzy

61,997 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...