PL/SQL - zapytania

R7
  • Rejestracja:ponad 9 lat
  • Ostatnio:około 9 lat
  • Postów:11
0

Mam takie zadania

1 Utworzyć tabele tmp_prac
2 W tabeli tmp_prac dla pracowników którzy zarabiają mniej niz 10000 zł zwiększyć pensje o 20 % . Wykonać przy pomocy PL/SQL
3 Z tabeli tmp_prac wyświetlić na konsoli imiona nazwiska i wynagrodzenia pracowników zarabiających powyżej 12000 . Wykonać przy pomocy PL/SQL
4 Usunąć tabele tmp_prac

1 CREATE TABLE tmp_prac;
2 Co do drugiego mam tyle

select employee_id , salary
from tmp_prac
where salary<10000;

3 załącznik
4 DROP TABLE tmp_prac;

Marcin.Miga
  • Rejestracja:prawie 17 lat
  • Ostatnio:17 dni
  • Postów:2792
0

Czemu PL/SQL? Zwykły SQL wystarczy...

  1. Źle. Znaczy się dobrze, ale w kontekście następnych pytań, to źle.
  2. SELECT dobrze. Trzeba na UPDATE zamienić.
  3. nie widzę.
  4. dobrze
FI
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 6 lat
  • Postów:88
0

CREATE TABLE tmp_prac (
Employee_id int
,Salary int
,Imie varchar (32)
,Nazwisko varchar (64)
)

INSERT INTO tmp_prac (Employee_id,Salary,Imie,Nazwisko) VALUES (1,9000,'Jan','Nowacki'),(2,11000,'Michał','Kowalski'),(3,14000,'Krzysztof','Mączyński')

SELECT employee_id , salary
FROM tmp_prac
WHERE salary < 10000;

UPDATE tmp_prac SET salary = salary * 1.2 WHERE salary < 10000;

SELECT Imie, Nazwisko, salary
FROM tmp_prac
WHERE salary > 12000;


Szkolenia, audyty, konsultacje SQL Server
Radkomp, sqlszkolenia
MCTS, MCiTP, MCSA, MCSE, MCT
http://sqlszkolenia.pl
edytowany 1x, ostatnio: firefox
woolfik
  • Rejestracja:ponad 17 lat
  • Ostatnio:około 11 godzin
  • Postów:1598
0

Co do punktu 3 to zapewne chodzi o dbms_output stąd polecenie wyświetlić w konsoli chyba, że chodzi o sqlplus. Uściślij proszę

R7
Masz racje chodzi o dbms_output
woolfik
  • Rejestracja:ponad 17 lat
  • Ostatnio:około 11 godzin
  • Postów:1598
0

Co do punktu 3 to coś takiego:

Kopiuj
BEGIN
  DBMS_OUTPUT.PUT_LINE('start');
  FOR x IN (SELECT  t.imie, t.nazwisko
                    FROM tmp_prac t
                    where salary < 12000;
                    order by t.nazwisko) LOOP
      DBMS_OUTPUT.PUT_LINE(x.imie||' '||x.nazwisko);
   END LOOP;
END;

Pisałem z głowy więc sprawdź sobie na jakimś sqlfiddle czy to działa

Co do reszty to już Ci chłopaki wcześniej podali gotowe rozwiązania chyba, że chodzi o to żeby z tego procedurę/funkcję PL/SQL zrobić ale to też musisz napisać co jeszcze potrzebujesz

W kontekście Twojego komentarza @Ronaldo7 rozumiem, że rozwiązanie podane przez @firefox odpada i trzeba to przez for zrobić więc ja bym zrobił coś w ten deseń:

Kopiuj
BEGIN 
  for rec in (SELECT employee_id , salary FROM tmp_prac WHERE salary <= 10000) loop
    UPDATE tmp_prac SET salary = salary * 1.2 WHERE employee_id = rec.employee_id ;
   END LOOP;
END;
edytowany 2x, ostatnio: woolfik
R7
Co do drugiego tez ma być w PL/SQl\

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.