/*Primjer 1
Kreiranje tabele projekti
*/
CREATE TABLE projekti (
projekat_id NUMBER,
naziv VARCHAR2(100),
broj_zaposlenih NUMBER,
status_projekta CHAR(1),
datum_pocetka DATE,
datum_kraja DATE,
odgovorna_osoba VARCHAR2(50)
);
--Struktura tabele projekti
SELECT column_name, data_type, data_length, nullable
FROM all_tab_columns
WHERE table_name='PROJEKTI';
SELECT * FROM projekti;
/*
Primjer 2.
Neka je potrebno kreirati tabelu naziva numericki_tip koja posjeduje
ukupno 7 kolona, naziva kolonai, i =1,...,7. Neka su tipovi podataka kolona
respektivno: NUMBER, NUMBER(*,1), NUMBER(9), NUMBER(9,2), NUMBER(9,1),
NUMBER(6), NUMBER(7,-2). U tabelu unijeti ukupno 7 zapisa, pri cemu i-ti
zapis u i-tu kolonu unosi broj 7,456,123.89, a u ostale kolone broj 0.
*/
CREATE TABLE numericki_tip (
kolona1 NUMBER,
kolona2 NUMBER(*,1),
kolona3 NUMBER(9),
kolona4 NUMBER(9,2),
kolona5 NUMBER(9,1),
kolona6 NUMBER(6),
kolona7 NUMBER(7,-2)
);
--Struktura tabele numericki_tip
SELECT column_name, data_type, data_length, nullable, data_precision, data_scale
FROM all_tab_columns
WHERE table_name='NUMERICKI_TIP';
SELECT * FROM numericki_tip;
--Unos redova u tabelu numericki_tip
--OK
INSERT INTO numericki_tip
VALUES(7456123.89,0,0,0,0,0,0);
--OK
INSERT INTO numericki_tip
VALUES(0,7456123.89,0,0,0,0,0);
--OK
INSERT INTO numericki_tip
VALUES(0,0,7456123.89,0,0,0,0);
--OK
INSERT INTO numericki_tip
VALUES(0,0,0,7456123.89,0,0,0);
--OK
INSERT INTO numericki_tip
VALUES(0,0,0,0,7456123.89,0,0);
--Greska!
INSERT INTO numericki_tip
VALUES(0,0,0,0,0,7456123.89,0);
--OK
INSERT INTO numericki_tip
VALUES(0,0,0,0,0,0,7456123.89);
SELECT * FROM numericki_tip;
--Kreiranje tabela upotrebom podupita
/*
Primjer 3.
Neka je potrebno kreirati novu tabelu zaposlenih koja ce sadrzavati sifru
zaposlenog, naziv zaposlenog, platu, sifru odjela, naziv odjela, sifru posla
i naziv posla svih zaposlenih koji dobivaju dodatak na platu.
*/
CREATE TABLE zaposleni (
sifra_zaposlenog,
naziv_zaposlenog,
plata,
sifra_odjela,
naziv_odjela,
sifra_posla,
naziv_posla) AS
SELECT e.employee_id,
e.first_name || ' ' || e.last_name,
e.salary,
d.department_id,
d.department_name,
j.job_id,
j.job_title
FROM employees e, departments d, jobs j
WHERE e.department_id = d.department_id AND e.job_id = j.job_id AND e.commission_pct IS NOT NULL;
SELECT * FROM zaposleni;
SELECT Count(*) FROM employees WHERE commission_pct IS NOT NULL;
SELECT * FROM employees WHERE department_id IS NULL;
--Umjesto da smo nazive kolona precizirali u CREATE TABLE dijelu, moguce je samo navesti odgovarajuce alijase za kolone u podupitu
CREATE TABLE zaposleni2 AS
SELECT e.employee_id sifra_zaposlenog,
e.first_name || ' ' || e.last_name naziv_zaposlenog,
e.salary plata,
d.department_id sifra_odjela,
d.department_name naziv_odjela,
j.job_id sifra_posla,
j.job_title naziv_posla
FROM employees e, departments d, jobs j
WHERE e.department_id = d.department_id AND e.job_id = j.job_id AND e.commission_pct IS NOT NULL;
SELECT * FROM zaposleni2;
--ALTER TABLE iskaz
/*
Primjer 4.
Neka je potrebno izvrsiti odredjene modifikacije nad prethodno kreiranom tabelom projekti:
a) Dodati novu kolonu naziva opis koja je tipa VARCHAR2(150).
b) Promijeniti kolonu odgovorna_osoba tako da bude tipa NUMBER.
c) Obrisati kolonu naziv.
d) Proglasiti kolonu status projekta neupotrebljivom, a onda obrisati tu kolonu.
e) Preimenovati tabelu projekti u company_projects.
f) Obrisati kompletnu tabelu company_projects.
*/
SELECT * FROM projekti;
SELECT column_name, data_type, data_length, nullable
FROM all_tab_columns
WHERE table_name='PROJEKTI';
--a)
ALTER TABLE projekti ADD (opis VARCHAR2(150));
--b)
ALTER TABLE projekti MODIFY (odgovorna_osoba NUMBER);
--c)
ALTER TABLE projekti DROP COLUMN naziv;
--d)
ALTER TABLE projekti SET unused (status_projekta);
--Prikaz broja kolona koje su oznacene kao neupotrebljive
SELECT * FROM user_unused_col_tabs;
ALTER TABLE projekti DROP unused COLUMNS;
--e)
RENAME projekti TO company_projects;
SELECT * FROM company_projects;
--f)
DROP TABLE company_projects;
--Komentari za tabele i kolone
/*
Primjer 5.
Neka je potrebno dodati komentar za tabelu zaposlenih 'Tabela svih zaposlenih u
korporaciji XYZ', i za kolonu sifra_zaposlenog komentar 'Kolona koja jednoznacno
odredjuje sve ostale atribute tabele'.
*/
COMMENT ON TABLE zaposleni IS 'Tabela svih zaposlenih u korporaciji XYZ';
COMMENT ON COLUMN zaposleni.sifra_zaposlenog IS 'Kolona koja jednoznacno odredjuje sve ostale atribute u tabeli';
--Prikaz svih komentara za kolone
SELECT * FROM all_col_comments;
--Prikaz korisnicki definiranih komentara za kolone
SELECT * FROM user_col_comments;
--Prikaz svih komentara za tabele
SELECT * FROM all_tab_comments;
--Prikaz korisnicki definiranih komentara za tabele
SELECT * FROM user_tab_comments;
--Prikaz svih korisnicki definiranih tabela
SELECT * FROM user_tables;
SELECT * FROM user_catalog;
--Prikaz svih korisnicki definiranih objekata baze podataka
SELECT * FROM user_objects;
--NULL vrijednost u kolonama
/*
Primjer 6.
Neka je potrebno kreirati novu tabelu informacija sa kolonom info koja ne smije sadrzavati NULL vrijednost.
*/
CREATE TABLE informacije (
info VARCHAR2(100) NOT NULL
);
SELECT column_name, data_type, data_length, nullable
FROM all_tab_columns
WHERE table_name='INFORMACIJE';