Zadanie 45.
CREATE TABLE projekty (
projekt_id NUMBER PRIMARY KEY,
nazwa VARCHAR2(100) NOT NULL,
data_startu DATE,
budzet NUMBER(12,2)
);
Zadanie 46.
INSERT INTO projekty VALUES (1, 'Alpha', DATE '2023-01-15', 150000);
INSERT INTO projekty VALUES (2, 'Beta', DATE '2023-06-01', 220000);
INSERT INTO projekty VALUES (3, 'Gamma', DATE '2019-11-30', 80000);
COMMIT;
Zadanie 47.
UPDATE projekty
SET budzet = budzet * 1.20
WHERE projekt_id = 1;
COMMIT;
Zadanie 48.
DELETE FROM projekty
WHERE data_startu < DATE '2020-01-01';
COMMIT;
Zadanie 49.
CREATE TABLE kopia_pracownikow AS
SELECT *
FROM employees
WHERE department_id = 60;
Zadanie 50.
-- Wstaw rekord
INSERT INTO projekty VALUES (4, 'Delta', SYSDATE, 500000);
-- Sprawdź dane
SELECT * FROM projekty WHERE projekt_id = 4;
-- Jeśli poprawne:
COMMIT;
-- Jeśli błąd – wycofaj:
-- ROLLBACK;
📝 Omówienie
DDL (CREATE, ALTER, DROP) automatycznie zatwierdza transakcję (implicit COMMIT). DML (INSERT, UPDATE, DELETE) wymaga jawnego COMMIT lub może być wycofany przez ROLLBACK do momentu zatwierdzenia. CREATE TABLE … AS SELECT to szybki sposób tworzenia kopii danych. PRIMARY KEY zapewnia unikalność i NOT NULL kolumny kluczowej. VARCHAR2 jest preferowanym typem tekstowym w Oracle (zamiast CHAR). NUMBER(12,2) definiuje liczbę o maksymalnie 12 cyfrach, z czego 2 po przecinku.
Kilka zasad ogólnych:
- Kolejność wykonywania zapytania SELECT: FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY
- NULL nie równa się NULL – zawsze używaj IS NULL / IS NOT NULL
- Funkcje agregujące ignorują NULL – COUNT(*) liczy wiersze, COUNT(kolumna) pomija NULL
- COMMIT zatwierdza, ROLLBACK wycofuje transakcję – DDL zawsze kończy bieżącą transakcję
- W Oracle konkatenacja to ||, nie + ani CONCAT (choć CONCAT też działa dla 2 argumentów)
- ROWNUM i FETCH FIRST n ROWS ONLY – dwa sposoby limitowania wyników w Oracle
- DUAL – specjalna tabela z jednym wierszem, przydatna do testowania wyrażeń: SELECT SYSDATE FROM DUAL
