OBP - LV8 uvod

 avatar
unknown
sql
3 years ago
5.7 kB
15
Indexable
/*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';