TUKE FÓRUM - Fórum pre študentov Technickej Univerzity v Košiciach

FEI archív 2011/2012 => 2. ročník => Topic started by: xxx3 on 16.02.2012, 14:10:05

Title: DBS
Post by: xxx3 on 16.02.2012, 14:10:05
SKusali ste si niekto nahodit Oracle na vlastny komp? TO mam stiahnut tie dva subory co maju spolu 2GB z oracle ? :D

http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html?ssSourceSiteId=ocomen (http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html?ssSourceSiteId=ocomen)
Title: Re: DBS
Post by: veteran on 16.02.2012, 14:14:11
SKusali ste si niekto nahodit Oracle na vlastny komp? TO mam stiahnut tie dva subory co maju spolu 2GB z oracle ? :D

http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html?ssSourceSiteId=ocomen (http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html?ssSourceSiteId=ocomen)
Stačí klient.

Napr. keď chceš 10gR2, tak ideš sem (http://www.oracle.com/technetwork/database/10201winx64soft-090882.html) a vyberieš si len Oracle Database 10g Client Release 2 (10.2.0.1.0). A v prípade Win7 odporúčam inštaláciu spustiť ako správca (ak som to neurobil, zdrbovalo sa mi to...). Takisto aj nainštalovaný SQL Plus treba spúšťať ako správca... Aspoň u mňa.
Title: Re: DBS
Post by: Wolfdale on 18.02.2012, 23:49:12
Aha tak už viem prečo mi to nešlo.  bu Ja som to inštaloval asi 5+ krát a stále mi vypisovalo chybu pri inštalácii. Neskôr mi to však spolubývajúci spravil  br

Title: Re: DBS
Post by: DarthVader on 19.02.2012, 19:28:38
to secky tie oraclacke produkty nainstalovat je umenie, ale ked uz trafis instalacku ta do pohody :D inak ked editnes vlastnosti odkazu, resp. execka co spusta soft tak nemusis zadavat login udaje ta logne automaticky. (to len taky hint :) )
Title: Re: DBS
Post by: xxx3 on 19.02.2012, 20:44:39
hodte sem pls niekto link an konkretneho klienta, ktoreho ste stiahli a ide vam to pod Win 7 64-bit. Diky :D
Title: Re: DBS
Post by: Leclair on 19.02.2012, 21:59:46
pozrite si archiv
Title: Re: DBS
Post by: Wolfdale on 20.02.2012, 13:33:51
hodte sem pls niekto link an konkretneho klienta, ktoreho ste stiahli a ide vam to pod Win 7 64-bit. Diky :D


Oracle Database 10g Release 2 (10.2.0.1.0)  Enterprise/Standard Edition for Microsoft Windows (http://www.oracle.com/technetwork/database/10201winsoft-095341.html)

Inštaluješ to potom pomocou priloženého manuálu na moodli.
Title: Re: DBS
Post by: xxx3 on 23.02.2012, 14:30:42
jak sa da pozriet, ze ake tabulky mam uz vytvorene ?
Title: Re: DBS
Post by: ppeess on 23.02.2012, 14:32:30
jak sa da pozriet, ze ake tabulky mam uz vytvorene ?
Select * from cat;
Title: Re: DBS
Post by: esperian on 23.02.2012, 19:02:35
ako testujete ten autoservis ci ste ho spravili spravne ??
Title: Re: DBS
Post by: veteran on 23.02.2012, 20:22:41
ako testujete ten autoservis ci ste ho spravili spravne ??
Ako testovať? Do úvahy prichádza akurát metóda Kuknem a vidím  ap
Title: Re: DBS
Post by: lecter on 23.02.2012, 20:27:03
to secky tie oraclacke produkty nainstalovat je umenie, ale ked uz trafis instalacku ta do pohody :D inak ked editnes vlastnosti odkazu, resp. execka co spusta soft tak nemusis zadavat login udaje ta logne automaticky. (to len taky hint :) )
developer je v pohode.
Title: Re: DBS
Post by: xxx3 on 23.02.2012, 22:40:01
nejaky priklad ako spravit tie vztahy nemate niekto ?
Title: Re: DBS
Post by: veteran on 24.02.2012, 07:33:05
nejaky priklad ako spravit tie vztahy nemate niekto ?
Dám jeden príklad, ktorý som dávnejšie implementoval pre jeden web.

Majme dve tabuľky: pretekar a vysledky. V tabuľke pretekar je zapísaný akýsi zoznam pretekárov, ktorí sa zúčastnili nejakej série pretekov. V tabuľke vysledky sú zapisované ich výsledky (umiestnenia) z jednotlivých podujatí. Medzi týmito tabuľkami je vzťah - vo výsledkoch musí byť zaznamenané, ktorému z pretekárov ten-ktorý výsledok prislúcha.

Pretekár je v tabuľke pretekar identifikovaný pomocou id, v tabuľke vysledky dajme tomu že cez id_pretekara.

Vzťah vytvoríš nasledovne:

create table vysledky(
.......,
.......,
.......,
id_pretekara number(5) not null references pretekar(id) on delete cascade
)
Title: Re: DBS
Post by: xxx3 on 24.02.2012, 09:43:37
dik.. a co znamena to on deleta cascade ?
Title: Re: DBS
Post by: veteran on 24.02.2012, 09:49:46
dik.. a co znamena to on deleta cascade ?
Keď odstrániš riadok z hlavnej tabuľky, automaticky sa odstránia aj súvisiace riadky zo závislej (závislých) tabuliek.

Teda na predošlom príklade: Z tabuľky pretekar vymažeš pretekára s id dajme tomu 5. Zo závislej tabuľky vysledky sa vymažú všetky výsledky zmazaného pretekára, teda všetky riadky, na ktorých je id_pretekara nastavené na 5.
Title: Re: DBS
Post by: bEnd3r on 25.02.2012, 14:06:06
hovorila akou formou to mame odovzdavat? resp. co vsetko mam odovzdat?
Title: Re: DBS
Post by: veteran on 25.02.2012, 14:17:43
hovorila akou formou to mame odovzdavat? resp. co vsetko mam odovzdat?
Je to v Moodli ;)

Sem odovzdajte riešenia úloh, ktoré sú špecifikované v dokumente Cvičenie 2 v sekcii Úlohy na samostatné riešenie. Termín odovzdania - do polnoci dňa pred nasledujúcim cvičením. Formát - zazipovaný txt súbor s názvom 2012_priezvisko_meno_cv2.zip
Title: Re: DBS
Post by: bEnd3r on 25.02.2012, 14:23:29
aha fakt, diki
prepokladam ze tam len nahadzem prikazy ktore som pouzil na vytvorenie tabuliek, tak?
Title: Re: DBS
Post by: veteran on 25.02.2012, 14:28:35
prepokladam ze tam len nahadzem prikazy ktore som pouzil na vytvorenie tabuliek, tak?
:thumbs-up:
Title: Re: DBS
Post by: xxx3 on 25.02.2012, 16:07:09
nam Lalova hovorila, ze nemame nic na domacu ulohu ...
Title: Re: DBS
Post by: veteran on 25.02.2012, 16:44:11
nam Lalova hovorila, ze nemame nic na domacu ulohu ...
Jak vám fajne  ;D
Title: Re: DBS
Post by: DarthVader on 25.02.2012, 17:37:56
lol ze cviko bez domacej to ja som o takom lem snival :D sme na kazdom mali nove a horsie zadania :D
Title: Re: DBS
Post by: Tren on 25.02.2012, 17:39:13
lol ze cviko bez domacej to ja som o takom lem snival :D sme na kazdom mali nove a horsie zadania :D
skym si mal cviko ?
Title: Re: DBS
Post by: xxx3 on 25.02.2012, 17:47:07
ale si myslim, ze Lalova nam zle povedala :D
Title: Re: DBS
Post by: xxx3 on 25.02.2012, 21:04:43
nepodelil by sa niekto o to ako spravit tie vztahy ? ... nejak si myslim, zeby som spravil ale neviem ci dobre, kedze neviem ako vyskusat ci to mam dobre
Title: Re: DBS
Post by: Wolfdale on 25.02.2012, 21:07:47
Vyskúšaj to tak, že vymaž niečo z tabuľky auto. Ak ti to zmizne v tabuľke auto, aj v tabuľke asz, máš to dobre.
Title: Re: DBS
Post by: xxx3 on 25.02.2012, 21:43:00
a tie vztahy tvorim len cez tie FOREIGN a PRIMARY KEY ? Ale aj nejak inak to treba poprepajat ?
Title: Re: DBS
Post by: Wolfdale on 25.02.2012, 21:48:58
Ja som to riešil cez reference...

Code: [Select]
create table asz(
spz char(10) not null references auto(spz),
.
.
.
primary key(spz,kod_sluzby,datum_sluzby));

Máš teda spz v tabuľke asz, ktoré je prepojené s spz v tabuľke auto.
Ak vymažeš jedno, malo by sa vymazať aj to druhé.
Title: Re: DBS
Post by: xxx3 on 25.02.2012, 21:50:17
aha .. a cez foreign key si nerobil nic ? Lebo nasiel som na w3cschools dobre vysvetlene tie foreign keys a podla nich tvorenie  vtzahov .. ale zas tam som o reference nenasiel nic :D
Title: Re: DBS
Post by: Wolfdale on 25.02.2012, 21:52:58
Cez FOREIGN KEY som nerobil nič...

Ešte poznámka k predošlému postu: spz sa vymaže v oboch tabuľkách len v prípade, ak tam pridáš on delete cascade
Title: Re: DBS
Post by: xxx3 on 25.02.2012, 22:06:43
a co tam je v tabulke ze typ serial ? .. to davas ako number ?
Title: Re: DBS
Post by: Rajo on 25.02.2012, 22:20:25
Tabuľka sluzba
· hodnoty v stĺpci kod_sluzby sú autoincrement

create sequence s_sluzba ... alebo s_kod_sluzby ? názov tabulky alebo názov stĺpca ?
Title: Re: DBS
Post by: Wolfdale on 25.02.2012, 22:20:35
To je logická schéma, kód robíš podľa fyzickej. Vo fyzickej máš všetko + dole máš ešte nejaké poznámky.
Title: Re: DBS
Post by: Wolfdale on 25.02.2012, 22:21:16
Tabuľka sluzba
· hodnoty v stĺpci kod_sluzby sú autoincrement

create sequence s_sluzba ... alebo s_kod_sluzby ? názov tabulky alebo názov stĺpca ?

create sequence s_kod_sluzby.
Title: Re: DBS
Post by: xxx3 on 25.02.2012, 22:22:39
ako s tym serial a money ? Number ?
Title: Re: DBS
Post by: Wolfdale on 25.02.2012, 22:24:10
Hovorím že pozeraj fyzickú schému. Vo fyzickej tam máš number.
Title: Re: DBS
Post by: Rajo on 25.02.2012, 22:30:56
Tabuľka sluzba
· hodnoty v stĺpci kod_sluzby sú autoincrement

create sequence s_sluzba ... alebo s_kod_sluzby ? názov tabulky alebo názov stĺpca ?

create sequence s_kod_sluzby.

určite ? na cviku sme robili nejake tabulky so sekvenciou a dali sme s_nazov_tabulky ...nie názov stĺpca :) ale keď stĺpec tak stĺpec :P
Title: Re: DBS
Post by: Wolfdale on 25.02.2012, 22:35:03
Nie, ja tak viem, že treba názov stĺpca. A tak mi to aj funguje správne.
Title: Re: DBS
Post by: veteran on 26.02.2012, 09:16:13
Tabuľka sluzba
· hodnoty v stĺpci kod_sluzby sú autoincrement

create sequence s_sluzba ... alebo s_kod_sluzby ? názov tabulky alebo názov stĺpca ?

create sequence s_kod_sluzby.

určite ? na cviku sme robili nejake tabulky so sekvenciou a dali sme s_nazov_tabulky ...nie názov stĺpca :) ale keď stĺpec tak stĺpec :P
V podstate to máš jedno, ako si to pomenuješ. Keď budeš vkladať hodnoty to tabuľky, vložíš len volanie sekvencie s_evc.NEXTVAL. Mne to viac pasuje, keď má sekvencia rovnaké meno ako príslušný stĺpec tabuľky. Ale každý má iný vkus  ;) Tabuľka môže mať aj tak len jeden stĺpec s autoincrementom (ale dá sa to obísť).
Title: Re: DBS
Post by: RiTChi on 26.02.2012, 10:17:06
Tabuľka sluzba
· hodnoty v stĺpci kod_sluzby sú autoincrement

create sequence s_sluzba ... alebo s_kod_sluzby ? názov tabulky alebo názov stĺpca ?

create sequence s_kod_sluzby.

určite ? na cviku sme robili nejake tabulky so sekvenciou a dali sme s_nazov_tabulky ...nie názov stĺpca :) ale keď stĺpec tak stĺpec :P
V podstate to máš jedno, ako si to pomenuješ. Keď budeš vkladať hodnoty to tabuľky, vložíš len volanie sekvencie s_evc.NEXTVAL. Mne to viac pasuje, keď má sekvencia rovnaké meno ako príslušný stĺpec tabuľky. Ale každý má iný vkus  ;) Tabuľka môže mať aj tak len jeden stĺpec s autoincrementom (ale dá sa to obísť).

Odkial vlastne databaza vie, ktory stlpec inkrementovat? Podla PRIMARY KEY? Asi tomu nerozumiem celkom dobre.
Title: Re: DBS
Post by: veteran on 26.02.2012, 10:29:19
Odkial vlastne databaza vie, ktory stlpec inkrementovat? Podla PRIMARY KEY? Asi tomu nerozumiem celkom dobre.

Databáza to vie podľa sekvencie, ktorú si nastavíš. V našom prípade:

Máme tabuľku sluzba:
create table sluzba(
   kod_sluzby .......................,
   nazov_sluzby .......................,
   cena_sluzby .......................,
   ..............................................
);


a sekvenciu:
create sequence s_kod_sluzby
   start with 1
   increment by 1;


Teda, máme vytvorenú tabuľku, zatiaľ v nej nie sú žiadne údaje. Skúsime ich tam vložiť (INSERT budeme riešiť tento týždeň):
insert into sluzba(kod_sluzby,nazov_sluzby,cena_sluzby) values(
s_kod_sluzby.NEXTVAL,
'vymena oleja',
86.99);


A pozrime si výstup:
select * from sluzba;
Quote
KOD_SLUZBY NAZOV_SLUZBY         CENA_SLUZBY
---------- -------------------- -----------
         1 vymena oleja               86,99

Databáza zistila, že v tabuľke nemáme nič. V sekvencii máme nastavené, že začíname od jednotky (start with 1). Teraz vložme druhý údaj (druhú zákazku/službu):
insert into sluzba(kod_sluzby,nazov_sluzby,cena_sluzby) values(
s_kod_sluzby.NEXTVAL,
'vymena pneu',
45.26);


A checknime výstup:
select * from sluzba;
Quote
KOD_SLUZBY NAZOV_SLUZBY         CENA_SLUZBY
---------- -------------------- -----------
         2 vymena pneu                45,26
         1 vymena oleja               86,99

Databáza zistila, že v tabuľke máme zákazku s ev. č. 1 a keďže v sekvencii máme nastavené inkrementovanie po jednej, tak ďalšiemu riadku tabuľky (zákazke/službe) priradí dvojku.

O primary key napíšem do ďalšieho príspevku.
Title: Re: DBS
Post by: veteran on 26.02.2012, 10:34:04
Primary key

To je nejaký primárny kľúč tabuľky, teda stĺpec tabuľky, kde v každom riadku bude jedinečný údaj. V tabuľke sluzba to je stĺpec evc. Každá zákazka/služba bude mať svoje vlastné evidenčné číslo.

Alebo iný príklad. Predstav si db na matrike. Každý človek dostane po narodení svoje rodné číslo, ktoré je jedinečné. Neexistujú dvaja ľudia s rovnakým RČ. Teda v db na matrike je nejaký stĺpec rodne_cislo a je na 100% nastavený ako primary_key. Ak by sme sa tam pokúsili vložiť človeka s rodným číslom, ktoré je už obsadené, vypísalo by to chybu Duplicate entry '......' for key 'PRIMARY' (resp. niečo podobné - toto je hláška z MySQL. Oracle má možno inú. Môžeš si to skúsiť na svojej databáze a uvidíš, čo to bude hlásiť :))

EDIT: No, takže Oracle hádže pri duplicite niečo takéto:
ERROR v riadku 1:
ORA-00001: unique constraint (TvojLogin.SYS_C00243949) violated


Viac o tejto chybe: http://www.dba-oracle.com/sf_ora_00001_unique_constraint_violated.htm (http://www.dba-oracle.com/sf_ora_00001_unique_constraint_violated.htm)
Title: Re: DBS
Post by: xxx3 on 26.02.2012, 10:58:52
sekvencia je na to inkrementovanie, hej ? A vztahy nemaju nic spolocne so sekvenciou, ci? 
Title: Re: DBS
Post by: veteran on 26.02.2012, 11:24:00
sekvencia je na to inkrementovanie, hej ?
Áno. V MySQLku je to lepšie, tam je auto_increment číslo uložené priamo v tabuľke a vôbec sa oňho nestaráš. V Oracle DB si urobíš sekvenciu a potom pri vkladaní údajov do tabuľky ju zavoláš (s_kod_sluzby.NEXTVAL), aby ti inkrementla hodnotu a vložila ju do príslušného stĺpca.

A vztahy nemaju nic spolocne so sekvenciou, ci?
Nemyslím, žeby to spolu nejako súviselo.

Foreign keys slúžia na to, aby databáza vedela dať do súvisu údaje. Napr.: v tabuľke auto máme poznamenanú ŠPZku. Je to PRIMARY KEY - nechceme, aby sme mali v tejto tabuľke nejaké auto dvakrát. ŠPZku máme aj v tabuľke asz. ŠPZ v tabuľke auto je "parent" a ŠPZ v tabuľke asz "child". Na základe tohto vzťahu si vieme zistiť, že auto s nejakou ŠPZkou malo toho a toho dňa takú a takú opravu. Pomocou ďalších vzťahov, ktoré sú v tej schéme predpísané vieme zistiť aj koľko tá oprava stála a kto túto zákazku prijal. To všetko sa dá vypísať do jednej peknej tabuľky pomocou príkazov JOIN, INNER JOIN, LEFT JOIN (ešte o nich bude reč na cvičeniach).

Existujú tri druhy vzťahov - 1:1, 1:n a m:n.

Popíšem na príkladoch.
Vzťah 1:1 - to je napr. vzťah muž:žena. V našej kultúre je zrejmé, že jedna žena má len jedného muža a naopak. Dá sa to aplikovať aj na školu - teda napr. učiteľ je/môže byť triedny len jednej triede a opačne - nejaká trieda má len jedného triedneho učiteľa.
Vzťah 1:n - to je prípad nášho autoservisu na všetkých troch vzťahoch. Jedno auto môže mať v db zapísaných viacero opráv. Jeden zamestnanec môže mať v db zapísaných viacero prijatých zákaziek (no však bodaj by aj nie, ináč by taký autoservis veľmi rýchlo skrachoval  ;D).
Vzťah m:n - toto je prípad vzťahu viac:viac. Teda napr. v škole - každý učiteľ učí veľa žiakov a každý jeden žiak chodí na rôzne hodiny ku viacerým učiteľom.

Sekvencie slúžia čisto len na inkrementáciu hodnôt pri vkladaní údajov do tabuliek.

Heh, som sa nejako rozpísal, tak snáď to niekto dočíta do konca  ;D
Title: Re: DBS
Post by: xxx3 on 26.02.2012, 11:42:52
diky za to rozpisanie, mne to pomohlo
Title: Re: DBS
Post by: RiTChi on 26.02.2012, 12:00:48
Yeah! ^^ Vdaka veteran, normalne sa oplatilo byt za blbeho a opytat sa :D
Title: Re: DBS
Post by: xxx3 on 26.02.2012, 12:24:29
a toto, veteran ... ked je podmienka, ze hodnota v stĺpci cena_sluzby je vždy väčšia ako 0

tak to dam len na koniec tabulky ze CHECK (cena_sluzby>0)  ?  .. elbo niekde som nasiel tak podobnu podmienku, ze constraint cena_sluzby_check CHECK (cena_sluzby>0) ...
Title: Re: DBS
Post by: veteran on 26.02.2012, 12:36:40
Yeah! ^^ Vdaka veteran, normalne sa oplatilo byt za blbeho a opytat sa :D
nz  :) Radšej sa spýtať a byť blbý raz, ako sa nespýtať a byť blbý navždy  ;)

a toto, veteran ... ked je podmienka, ze hodnota v stĺpci cena_sluzby je vždy väčšia ako 0

tak to dam len na koniec tabulky ze CHECK (cena_sluzby>0)  ?  .. elbo niekde som nasiel tak podobnu podmienku, ze constraint cena_sluzby_check CHECK (cena_sluzby>0) ...
Más zrejme na mysli dopyt:
alter table sluzba add constraint cena_sluzby_check CHECK (cena_sluzby>0);

Toto použiješ, keď si CHECK nenastavil pri prvotnej definícii tabuľky. Prípadne, keď potrebuješ zmeniť nejakú podmienku, resp.  nejakú pridať, odobrať a pod.  ;) Volá sa to Out-of-line constraint - integritné obmedzenie vložené do definície tabuľky.
Title: Re: DBS
Post by: gareth on 27.02.2012, 11:23:18
Kto ma zauje .. zadanie PM
Title: Re: DBS
Post by: xxx3 on 27.02.2012, 18:17:04
na linux, konkretne ubuntu niekto skusal davat tu databazu s sql plus ?
Title: Re: DBS
Post by: zaky on 27.02.2012, 18:20:28
vidim ze veteran sa rozbehol tak teda prosim ta ako na to :
• hodnoty v stĺpci evc sú autoincrement
najprv som si vytvoril sekvenciu s_evc start with 1 increment by 1
a teraz si vytvaram tabulku a pre evc mam podla zadania
evc number(6) primary key xxx
ale ma to byt autoincrement, co este mam dopisat namiesto xxx
?
Title: Re: DBS
Post by: veteran on 27.02.2012, 18:45:46
hodnoty v stĺpci evc sú autoincrement
najprv som si vytvoril sekvenciu s_evc start with 1 increment by 1
a teraz si vytvaram tabulku a pre evc mam podla zadania
evc number(6) primary key xxx
ale ma to byt autoincrement, co este mam dopisat namiesto xxx
Nič také ako auto increment tam nemôžeš napísať. Oracle by ti vyhodilo hlášku ORA-00907: missing right parenthesis.

Na auto increment máš práve tú sekvenciu. Do definície tabuľky netreba vpisovať nič. Keď budeš vkladať riadky do tejto tabuľky, potom zavoláš sekvenciu cez s_evc.nextVal. Do evc ti to vloží jednotku a aktuálnu hodnotu sekvencie (s_evc.currVal) inkrementne o 1 (na dvojku). Pri vkladaní ďalšieho riadku do tabuľky bude do evc vložená dvojka a hodnota sekvencie sa inkrementne na trojku.

AUTO_INCREMENT sa do definície tabuľky píše v MySQL. Oracle na to má sekvencie... V MySQL by definícia tabuľky zamestnanec vyzerala asi takto:
CREATE TABLE zamestnanec (
     evc int(6) NOT NULL AUTO_INCREMENT,
     ..................
     PRIMARY KEY (evc)
) ENGINE=MyISAM;
Title: Re: DBS
Post by: xxx3 on 27.02.2012, 20:57:15
s tym editf suborom, do ktoreho sa zapisuje to co pisem do sql plus nemate taky problem, ze sa vam tam zapisuje vsetko len ak zadate tie prikazy
Code: [Select]
set editf c:\temp\ab123cd.txt
set long 100000
spool c:\temp\zaznam.txt

a potom ked zatvorite sql plus a znovu otvorite tak vam to tam uz nezapisuje ? Lebo mne to takto robi .. ze uz po druhom otvoreni mi to tam nezapisuje, musim zas zadat tie prikazy a pritom mi zmaze predchadzajuci obsah toho suboru
Title: Re: DBS
Post by: Domino_666 on 28.02.2012, 01:46:11
s tym editf suborom, do ktoreho sa zapisuje to co pisem do sql plus nemate taky problem, ze sa vam tam zapisuje vsetko len ak zadate tie prikazy
Code: [Select]
set editf c:\temp\ab123cd.txt
set long 100000
spool c:\temp\zaznam.txt

a potom ked zatvorite sql plus a znovu otvorite tak vam to tam uz nezapisuje ? Lebo mne to takto robi .. ze uz po druhom otvoreni mi to tam nezapisuje, musim zas zadat tie prikazy a pritom mi zmaze predchadzajuci obsah toho suboru

po každom spustení SQL+ si tie 3 riadky napíš furt, nepamätá si to...
ďalej, do buffra ide výstup až potom, čo klienta zavrieš, teda ak pracuješ ale SQL+ stále beží, ten súbor sa nezmení, až keď ho zavrieš

a veľmi odporúčam na koniec toho posledného príkazu dopísať app (zrejme od slova append - pridať) - miesto prepísania celého buffru Ti to len pridá na koniec nový obsah, mne je takto lepšie, neviem ako ostatným. Takže posledný riadok bude vyzerať:
spool c:\temp\zaznam.txt app
Title: Re: DBS
Post by: Domino_666 on 28.02.2012, 13:59:59
dá sa nejako aspoň čiastočne zrýchliť INSERT viacerých riadkov? Syntax z MySQL mi nefunguje a pre tento krát som to vložil všetko ako ťulpas manuálne, ale ak existuje elegentnejšie riešenie v oracli, rád sa to naučím...

Ako postupovať v poslednej úlohe? Opäť to nainsertovať manuálne, alebo je na to nejaký iný (aspoň čiastočne automatický) postup, keďže sú tam už nejaké vzťahy (FK) ?
Title: Re: DBS
Post by: veteran on 28.02.2012, 16:33:48
dá sa nejako aspoň čiastočne zrýchliť INSERT viacerých riadkov? Syntax z MySQL mi nefunguje a pre tento krát som to vložil všetko ako ťulpas manuálne, ale ak existuje elegentnejšie riešenie v oracli, rád sa to naučím...
Syntax z MySQL je super, v Oracli je niečo takéto:

insert all
into tablename values (......)
into tablename values (......)
.......
select * from dual;


Takže veľa znakov neušetríš :D

Problém ale nastáva, keď musíš použiť sekvenciu. Predošlý príklad sa v takom prípade použiť nedá. Treba urobiť čosi také:

insert into tablename(id,col2,col3)
      select sequencename, inner_view.*
      from (select 'value_for_col2','value_for_col3' someval from dual union all
            select 'value_for_col2','value_for_col3' someval from dual union all
            .......................................
            select 'value_for_col2','value_for_col3' someval from dual)
inner_view;


Na môj vkus trošku komplikované...
Title: Re: DBS
Post by: esperian on 28.02.2012, 18:12:33
niekto kto sa rozumie do tej autoopravovne ?? potreboval by som skontrolovat to co som spravil  :)

edit// mas to tam , dik  ;)
Title: Re: DBS
Post by: veteran on 28.02.2012, 18:18:34
niekto kto sa rozumie do tej autoopravovne ?? potreboval by som skontrolovat to co som spravil  :)
šup do PM  ;)

edit// nz  ;)
Title: Re: DBS
Post by: DarthVader on 02.03.2012, 14:52:07
lol ze cviko bez domacej to ja som o takom lem snival :D sme na kazdom mali nove a horsie zadania :D
skym si mal cviko ?

ja som mal trosku insie databazy nez inf :D
Title: Re: DBS
Post by: Luk1 on 02.03.2012, 23:27:47
Keby niekto ma problemy, tak http://www.tu-ke.com/forum/2-rocnik-56/ (http://www.tu-ke.com/forum/2-rocnik-56/)!!!!!!!!-databazove-systemy-zadania-!!!!!!!!!-6255/
Title: Re: DBS
Post by: xxx3 on 04.03.2012, 18:22:46
ako zmazat vsetky data z tabulky ? Z asz to islo prikazom truncate table asz; ale z ostanych nejde kvoli tym vztahom, ako to teda odtial zmazem ?
Title: Re: DBS
Post by: veteran on 04.03.2012, 18:58:14
ako zmazat vsetky data z tabulky ? Z asz to islo prikazom truncate table asz; ale z ostanych nejde kvoli tym vztahom, ako to teda odtial zmazem ?
delete from table_name;

Ak si pri vytváraní tabuliek použil ON DELETE CASCADE, tak po vymazaní napr. tabuľky auto, sa vymažú údaje aj z tabuľky asz.
Title: Re: DBS
Post by: xxx3 on 04.03.2012, 19:57:25
nedal som tam to on delete cascade ..

a este nieco ... ako vlozit do asz tabulky nejake hodnoty pre konkretne auto ? Autu KE111-XX boli poskytnuté nasledovné služby:
dna 30.12.2010 vymena oleja zamestnancom Janko Hrasko
dna 2.1.2011 vymena vody zamestnancom Juro Janosik
dna 2.1.2011 vysavanie zamestnancom Juro Janosik
Title: Re: DBS
Post by: veteran on 04.03.2012, 20:30:07
nedal som tam to on delete cascade ..

Fungovať by to aj tak malo  ;) Najprv vymaž asz a potom sa budú dať aj tie ostatné.

a este nieco ... ako vlozit do asz tabulky nejake hodnoty pre konkretne auto ? Autu KE111-XX boli poskytnuté nasledovné služby:
dna 30.12.2010 vymena oleja zamestnancom Janko Hrasko
dna 2.1.2011 vymena vody zamestnancom Juro Janosik
dna 2.1.2011 vysavanie zamestnancom Juro Janosik
Tabuľka asz má stĺpce spz, kod_sluzby, evc, datum_sluzby.

Čiže "dna 30.12.2010 vymena oleja zamestnancom Janko Hrasko":
do stĺpca spz vložíš reťazec KE111-XX. Výmena oleja má v tabuľke sluzba kód 1, teda do stĺpca kod_sluzby vložíš 1. Zákazku vykonal zamestnanec Janko Hraško, ktorý má v tabuľke zamestnanec evc 1, teda do stĺpca evc v tabuľke asz vložíš 1.
Title: Re: DBS
Post by: xxx3 on 04.03.2012, 21:34:47
preco ked napisem: insert into asz values('KE111-XX','22','23','2/1/2011');

mi napise: ORA-02291: integrity constraint (xy123ab.FK_ASZ_ASZ2_SLUZBA) violated - parent
key not found

(cisluje mi od 21 .. a nie je tam '22','22' lebo som spravil preklep pri vkladani Jura Janosika tak preskocilo sa jedno cislo

// prve mi zobralo a toto druhe uz nie
// aj nasledujuce insert into asz values('KE111-XX','29','22','2/1/2011'); mi vezme normalne
// toto tiez neberie: insert into asz values('PO11-XX','23','22','3/1/2011');
// dalsei neberie: insert into asz(spz,kod_sluzby,evc) values('ZA111-XX','26','22');

co s tym moze byt ? ostatne vsetko zobralo
Title: Re: DBS
Post by: esperian on 04.03.2012, 22:22:46
a to tam mas az 22 pracovnikov a 23 sluzieb (alebo naopak nepamatam presne) lebo za normalnych okolnosti tak bolo len okolo  7 pracovnikov a taktiez cca 7 sluzieb... alebo mas tu sekvenciu posunutu ?

// toto tiez neberie: insert into asz values('PO11-XX','23','22','3/1/2011'); - nema tam byt nahodou PO111-XX
// dalsei neberie: insert into asz(spz,kod_sluzby,evc) values('ZA111-XX','26','22'); - nemas tam datum , ak ma bzt aktualny´musis tam dat datasys
Title: Re: DBS
Post by: xxx3 on 04.03.2012, 22:29:30
hej od 21 zacinaju cisla ... aj ked neviem preco
daval som starts with 1 increment by 1
Title: Re: DBS
Post by: esperian on 04.03.2012, 22:34:31
// toto tiez neberie: insert into asz values('PO11-XX','23','22','3/1/2011'); - nema tam byt nahodou PO111-XX
// dalsei neberie: insert into asz(spz,kod_sluzby,evc) values('ZA111-XX','26','22'); - nemas tam datum , ak ma bzt aktualny´musis tam dat datasys,  bez datumu to nemozes dat sa mi zda lebo v tabulke asz je datum not null..

a tu insert into asz values('KE111-XX','22','23','2/1/2011'); skus pozriet ci mas v tabulke sluzba take cislo sluzby, select *from nazov_tabulkz;
Title: Re: DBS
Post by: xxx3 on 04.03.2012, 22:39:04
mal som ... teraz som chcel pozriet a nic z toho co som vkladal mi tam neostalo !!! ako to je mozne ?????
Som dal select * from sluzba; a mi to vypisalo iba jedno co som skusal niekedy minuly tyzden vkladat xD WTF ?
Title: Re: DBS
Post by: esperian on 04.03.2012, 22:41:27
 ;D ;D  zda sa mi ze na cviku nas upozornoval ze po tom ako tam tie svoje hodnoty nahadzes musis zadat prikaz commit; aby sa tie tvoje data realne zapisali a ostali tam..
Title: Re: DBS
Post by: xxx3 on 04.03.2012, 22:47:59
kurnik, to mohla aj Lalova povedat :D ... som sa s tym sral zbytocne, mozem odznova, super :D

do rici ani v tom subore to neni :D
Title: Re: DBS
Post by: esperian on 04.03.2012, 22:51:54
jj no mozes xDD a ukoncuj aj SQLko korektne prikazom exit...
Title: Re: DBS
Post by: xxx3 on 04.03.2012, 22:56:38
fajn, dik
Title: Re: DBS
Post by: Rajo on 04.03.2012, 23:43:52
ja som si pekne sekvencie vymazal a nanovo nahodil aby mi to nehádzalo dementne čísla :P pekne od 1 mi to čisluje a kedže som daval pozor a nepomýlil som sa, tak to mám všetko o +1 inkrementovane a je v tom poriadok :)
Title: Re: DBS
Post by: veteran on 05.03.2012, 07:43:06
preco ked napisem: insert into asz values('KE111-XX','22','23','2/1/2011');

mi napise: ORA-02291: integrity constraint (xy123ab.FK_ASZ_ASZ2_SLUZBA) violated - parent
key not found
Prečo si dával čísla 22 a 23 do apostrofov? Nie sú tie hodnoty náhodou typu number()?

;D ;D  zda sa mi ze na cviku nas upozornoval ze po tom ako tam tie svoje hodnoty nahadzes musis zadat prikaz commit; aby sa tie tvoje data realne zapisali a ostali tam..

jj no mozes xDD a ukoncuj aj SQLko korektne prikazom exit...
Doteraz som commit nikdy nedával a vždy mi všetko ostalo tak, ako som to vložil. Problém je presne v tom príkaze exit. Ak vypneš SQL+ červeným krížikom, nič sa neuloží.
Title: Re: DBS
Post by: xxx3 on 05.03.2012, 11:10:00
ja som si myslel, ze vsetky hodnoty treba davat do apostrofov :D
Title: Re: DBS
Post by: xxx3 on 05.03.2012, 11:19:36
ako sa da skontrolovat struktura tabulky?

3. skontrolujte štruktúru tabulky zam
Title: Re: DBS
Post by: veteran on 05.03.2012, 11:23:11
ja som si myslel, ze vsetky hodnoty treba davat do apostrofov :D
Len reťazce (stringy - varchar, char a dátumy). Čísla idú bez úvodzoviek.

ako sa da skontrolovat struktura tabulky?

3. skontrolujte štruktúru tabulky zam
desc zam;
Title: Re: DBS
Post by: xxx3 on 05.03.2012, 19:20:49
ked mam tie vztahy ... M:N sa robi cez dalsiu tabulku
ale tie 1:1 a 1:N sa ako robia v SQL ?

iba dam to tej dabulky kde je ten vztah ku stlpcu, ze REFERENCES nazov_tabulky(stlpec) ? Ci nejak inac sa robi 1:N a 1:1 ?
Title: Re: DBS
Post by: veteran on 05.03.2012, 19:24:21
ked mam tie vztahy ... M:N sa robi cez dalsiu tabulku
ale tie 1:1 a 1:N sa ako robia v SQL ?

iba dam to tej dabulky kde je ten vztah ku stlpcu, ze REFERENCES nazov_tabulky(stlpec) ? Ci nejak inac sa robi 1:N a 1:1 ?
Vzťah 1:n - jeden zamestnanec môže mať zapísaných viac vykonaných služieb v autoservise. Teda ináč povedané, evc zamestnanca v tabuľke asz nie je primary key. Ak by bolo, tak by mohol mať každý jeden zamestnanec zapísanú len jednu vykonanú službu (vzťah 1:1).
Title: Re: DBS
Post by: xxx3 on 05.03.2012, 19:32:40
hej chapem co to znamena, ale keby nieco take bolo, ze mas napriklad tabulku zamestnanec kd eje evc, meno, priezvisko a tabulku sluzba kde je cislo_sluzby, nazov_sluzby ... a vztah 1:N ... cize jeden zamestnanec moze vykonavat viac sluzieb ... tak ako sa to zapise v SQL ?
Title: Re: DBS
Post by: veteran on 05.03.2012, 20:41:45
hej chapem co to znamena, ale keby nieco take bolo, ze mas napriklad tabulku zamestnanec kd eje evc, meno, priezvisko a tabulku sluzba kde je cislo_sluzby, nazov_sluzby ... a vztah 1:N ... cize jeden zamestnanec moze vykonavat viac sluzieb ... tak ako sa to zapise v SQL ?
Pri vzťahu 1:n platí, že primary key zo strany 1 musí byť pridaný na stranu n ako foreign key.

Odporúčam preštudovať toto: http://db.grussell.org/section006.html#_Toc67114425 (http://db.grussell.org/section006.html#_Toc67114425)
Title: Re: DBS
Post by: maros67 on 08.03.2012, 15:46:57
mozete mi niekto pomoct?
ked napisem : insert into asz values('KE111-XX',1,1,'30-12-2010');
tak mi vyhodi chybu : ERROR na øádku 1:
ORA-02291: integrity constraint (MK405ZK.SYS_C00252427) violated - parent key
not found
co asi mam zle?
Title: Re: DBS
Post by: veteran on 08.03.2012, 15:51:08
mozete mi niekto pomoct?
ked napisem : insert into asz values('KE111-XX',1,1,'30-12-2010');
tak mi vyhodi chybu : ERROR na øádku 1:
ORA-02291: integrity constraint (MK405ZK.SYS_C00252427) violated - parent key
not found
co asi mam zle?
V tabuľke auto nemáš auto s ŠPZ KE111-XX.

http://ora-02291.ora-code.com/ (http://ora-02291.ora-code.com/)
Cause: A foreign key value has no matching primary key value.
Action: Delete the foreign key or add a matching primary key.
Title: Re: DBS
Post by: maros67 on 08.03.2012, 15:59:22
mozete mi niekto pomoct?
ked napisem : insert into asz values('KE111-XX',1,1,'30-12-2010');
tak mi vyhodi chybu : ERROR na øádku 1:
ORA-02291: integrity constraint (MK405ZK.SYS_C00252427) violated - parent key
not found
co asi mam zle?
V tabuľke auto nemáš auto s ŠPZ KE111-XX.

http://ora-02291.ora-code.com/ (http://ora-02291.ora-code.com/)
Cause: A foreign key value has no matching primary key value.
Action: Delete the foreign key or add a matching primary key.
nechapem, ved insertoval som tam tu spz,
tu je select * from auto:

SPZ      T ROK_VYRO
-------- - --------
KE111-XX o 01.02.90
KE222-XX O 11.12.99
KE111-YY o 01.05.89
PO111-XX N 01.02.91
PO333-XX o 01.05.90
NR111-XX p 12.06.98
ZA111-XX O 22.11.99
KE111-ZZ n 01.02.90
NR111-YY o 01.02.91
KE100-XX P 01.02.92
Title: Re: DBS
Post by: veteran on 08.03.2012, 16:04:16
Aha, no chyba môže byť aj v tom, že ti chýba služba s kódom 1 alebo zamestnanec s kódom 1.
Title: Re: DBS
Post by: maros67 on 08.03.2012, 16:09:51
Aha, no chyba môže byť aj v tom, že ti chýba služba s kódom 1 alebo zamestnanec s kódom 1.
no v tom tiez nie je chyba

SQL> select * from sluzba;

KOD_SLUZBY NAZOV_SLUZBY         CENA_SLUZBY
---------- -------------------- -----------
         1 vymena oleja                  55


SQL> select * from zam;

       EVC MENO       PRIEZVISKO
---------- ---------- -------------
         1 Janko      Hrasko
Title: Re: DBS
Post by: veteran on 08.03.2012, 16:25:34
Fúha. Nechápem potom, prečo vypisuje takú chybu...

Quote
For an insert statement, this ORA-02291 error is common when you are trying to insert a child without a matching parent, as defined by a foreign key constraint.  In that case, you need to add the parent row to the table and then re-insert your child table row.

Ešte by som skúsil zadať insert takto (vrátane vymenovania stĺpcov):
insert into asz (spz,kod_sluzby,evc,datum_sluzby) values ('KE111-XX',1,1,'30/12/10');
Title: Re: DBS
Post by: xxx3 on 08.03.2012, 17:59:19
mne to tiez robilo a nevedel som co s tym mam robit ... potom som zmazal vsetky tabulky a sekvencie a nahodil ich znova a uz to islo
Title: Re: DBS
Post by: xxx3 on 12.03.2012, 19:43:48
Vie mi niekto vysvetlit aky je to:
slaby vztah
supertyp, subtyp

?
Aj na priklade, napr. v scheme autoservis, s ktorou robime ktory vztah tam je slaby a ktory supertyp ak tam su take ?
Title: Re: DBS
Post by: elvolcanoik on 19.03.2012, 17:07:08
pri zadaniach si dajte pozor na intregitu databazy (referencna, domenova, entitna integrita atd) ... vela ludi na to zabuda a sposobuje to problemy pri aktualizovani udajov v databaze (insert, update, delete)
Title: Re: DBS
Post by: xxx3 on 19.03.2012, 21:35:57
ako spravim toto? zotrieďte podľa oddelenia a v rámci oddelenia podľa priezviska. Pre kontrolu vypíšte aj oddelenie.
Title: Re: DBS
Post by: xxx3 on 19.03.2012, 21:43:38
hlavne to ma zaujima, ze ako roztriedit dvakrat .. ze najprv podla department_id a potom podla priezviska
Title: Re: DBS
Post by: veteran on 19.03.2012, 21:43:46
ako spravim toto? zotrieďte podľa oddelenia a v rámci oddelenia podľa priezviska. Pre kontrolu vypíšte aj oddelenie.
select last_name, department_id from hr.employees order by 2,1;
Title: Re: DBS
Post by: xxx3 on 19.03.2012, 21:52:24
dik .. a do toho zapisu relacnej algebry sa nezapisuje to order by nijak ?
Title: Re: DBS
Post by: veteran on 19.03.2012, 21:57:19
dik .. a do toho zapisu relacnej algebry sa nezapisuje to order by nijak ?
Zapisuje sa, ale na prednáške to nebolo, takže som to nepísal.  ;)
Title: Re: DBS
Post by: xxx3 on 19.03.2012, 22:14:27
6. uloha: Zistite first_name, last_name zamestnancov, ktorí nie sú v žiadnom oddelení. Pre kontrolu vypíšte aj id oddelenia.

som dal:  select first_name, last_name, department_id from hr.employees where department_id is null;

a mi dalo len jeden riadok ... vo vysledkoch je, ze ma byt 72 raidkov .... co mam zle ?
Title: Re: DBS
Post by: veteran on 19.03.2012, 22:23:19
6. uloha: Zistite first_name, last_name zamestnancov, ktorí nie sú v žiadnom oddelení. Pre kontrolu vypíšte aj id oddelenia.

som dal:  select first_name, last_name, department_id from hr.employees where department_id is null;

a mi dalo len jeden riadok ... vo vysledkoch je, ze ma byt 72 raidkov .... co mam zle ?
Mám pocit, že chyba bude vo výsledkoch. Keď si dám vypísať všetkých zamestnancov (select first_name, last_name, department_id from hr.employees), tak NULL pri department_id má len jeden (Grant Kimbereley).

// EDIT: Inak, IMO je chyba aj pri 6. cvičení v 12. úlohe (má byť 11 výsledkov, v skutočnosti je ich ale až 16).
Title: Re: DBS
Post by: xxx3 on 19.03.2012, 22:39:31
a este s tymto by som potreboval pomoct: 11. Vypíšte spz áut, ktorým boli poskytnuté služby. Duplicity vylúčte.

Ako vylucim duplicity ? ... iba tam dam DISTINCT ?
Title: Re: DBS
Post by: veteran on 19.03.2012, 22:42:30
a este s tymto by som potreboval pomoct: 11. Vypíšte spz áut, ktorým boli poskytnuté služby. Duplicity vylúčte.

Ako vylucim duplicity ?
SELECT UNIQUE alebo SELECT DISTINCT. Ak si old-school, tak použi to prvé, ak chceš ísť podľa najnovších Oracle trendov, použi to druhé  ;D Sú to ekvivalentné príkazy  ;)
Title: Re: DBS
Post by: xxx3 on 19.03.2012, 22:53:09
ok, dakujem ... a este toto, ze ked pisem tu relacnu algebru tak je jedno ci naskor vyberiem stlpce cez "PI" a az potom robim tu podmienku alebo opacne ?
Title: Re: DBS
Post by: veteran on 19.03.2012, 23:10:43
ok, dakujem ... a este toto, ze ked pisem tu relacnu algebru tak je jedno ci naskor vyberiem stlpce cez "PI" a az potom robim tu podmienku alebo opacne ?
Nie je to jedno.
Title: Re: DBS
Post by: xxx3 on 19.03.2012, 23:14:28
nie ? A kedy je to ako ? ... nie je jedno ci naskor vyberiem stlpce z tabulky ktore mi treba a potom z nich povyberam len tie raidky, ktore splnaju pomienku ... alebo ci najskor vyberiem vsetky raidky splnajuce podmienku a potom z niych vyberiem len tie stlpce ktore potrebujem vypisat ?

vysledok je rovnaky, nie ?
Title: Re: DBS
Post by: veteran on 20.03.2012, 00:34:09
nie ? A kedy je to ako ? ... nie je jedno ci naskor vyberiem stlpce z tabulky ktore mi treba a potom z nich povyberam len tie raidky, ktore splnaju pomienku ... alebo ci najskor vyberiem vsetky raidky splnajuce podmienku a potom z niych vyberiem len tie stlpce ktore potrebujem vypisat ?

vysledok je rovnaky, nie ?
A čo v prípade, ak máš vypísať len také stĺpce, ktorých sa netýka podmienka?  ;) Dajme tomu, že máš vybrať first_name a last_name, ale podmienka sa týka napr. hire_date. Ty si najprv vyberieš všetky riadky z tabuľky, ale v nich len stĺpce first_name a last_name. Ako z tohto výberu potom určíš, či je splnená daná podmienka pre hire_date? Nijak. Musíš to urobiť presne opačne. Najprv otestovať podmienku a z riadkov, ktoré ju spĺňajú povyberať tie stĺpce, ktoré treba.
Title: Re: DBS
Post by: xxx3 on 20.03.2012, 00:37:10
no to mas pravdu, ale take v tych ulohach tusim nie je :D

... ale tak radsej davam vsade nasjkor podmienku a potom vyberanie ... tak to nemoze byt zle, snad
Title: Re: DBS
Post by: veteran on 20.03.2012, 00:41:32
... ale tak radsej davam vsade nasjkor podmienku a potom vyberanie ... tak to nemoze byt zle, snad
Existujú určite prípady, kedy je to oveľa výhodnejšie písať opačne (nič konkrétne mi ale nenapadá :D). Ale nemyslím, že sa dá niečo pokaziť tým, že sa to napíše "štandardne" (PROJECT stĺpce (SELECT podmienky)).

Takto vyzerá štandardné mapovanie selekcie a projekcie:
(https://www.tu-ke.com/forum/proxy.php?request=http%3A%2F%2Fdb.grussell.org%2Fco22001%2520notes_files%2Fimage118.gif&hash=0e8444c6a182f9249f9ec6dff1b5a402496aeb9e)
Title: Re: DBS
Post by: maros67 on 20.03.2012, 23:03:52
Ako uplne odstranim tabulku?? myslim tym aj tie haky baky co tam ostanu ked dam select * from cat; ?
Title: Re: DBS
Post by: veteran on 20.03.2012, 23:39:59
Ako uplne odstranim tabulku?? myslim tym aj tie haky baky co tam ostanu ked dam select * from cat; ?
purge recyclebin;
Title: Re: DBS
Post by: esperian on 22.03.2012, 21:51:57
cv6 - 6. uloha mate to tak ako vo vysledkoch ??
Title: Re: DBS
Post by: veteran on 22.03.2012, 22:00:39
cv6 - 6. uloha mate to tak ako vo vysledkoch ??
Ja mám o jeden výsledok viac (16). Ten posledný už (pre dnešný deň) pracuje viac ako 200 mesiacov (200 mesiacov a 9 dní).
Title: Re: DBS
Post by: Rajo on 23.03.2012, 14:47:08
cv6 - 6. uloha mate to tak ako vo vysledkoch ??
Ja mám o jeden výsledok viac (16). Ten posledný už (pre dnešný deň) pracuje viac ako 200 mesiacov (200 mesiacov a 9 dní).

tak, tak, bohvie kedy to ona selectovala a preto sa to môže líšiť...a inak, ten Current Date čo trebalo zapísať v tvare "201237" tak to ste ako riešili ? lebo ja som to riešil tak, že mi to píše v tvare "YYYYMMDD" čiže pre dnešny dátum by mi vypisalo "20120323" ... a ona nulu nemá vo výsledku, vadí to? :D alebo ako to ona riešila?
Title: Re: DBS
Post by: Cici on 23.03.2012, 18:57:22
ta forma je vecou systemu ako ten datum reprezentuje. Myslim ze to je dobre tak
Title: Re: DBS
Post by: veteran on 23.03.2012, 20:51:36
lebo ja som to riešil tak, že mi to píše v tvare "YYYYMMDD" čiže pre dnešny dátum by mi vypisalo "20120323" ... a ona nulu nemá vo výsledku, vadí to? :D alebo ako to ona riešila?
AFAIK, v Oracli existuje len jedna číselná reprezentácia mesiaca a to MM (no a ptm ešte RM, rímske čísla). Aj mne to píše 03, ale myslím, že je to OK.
Title: Re: DBS
Post by: Rajo on 24.03.2012, 01:56:27
lebo ja som to riešil tak, že mi to píše v tvare "YYYYMMDD" čiže pre dnešny dátum by mi vypisalo "20120323" ... a ona nulu nemá vo výsledku, vadí to? :D alebo ako to ona riešila?
AFAIK, v Oracli existuje len jedna číselná reprezentácia mesiaca a to MM (no a ptm ešte RM, rímske čísla). Aj mne to píše 03, ale myslím, že je to OK.

lenže ak si extractuješ mesiac napríkald zo sysdate tak ti vypíše "3" , nie "03" ...
Code: [Select]
select EXTRACT(MONTH FROM sysdate) from dual;
Title: Re: DBS
Post by: veteran on 24.03.2012, 02:17:19
lenže ak si extractuješ mesiac napríkald zo sysdate tak ti vypíše "3" , nie "03" ...
Code: [Select]
select EXTRACT(MONTH FROM sysdate) from dual;
Problém je, že z extractu vieš vydolovať len jeden údaj :D
Title: Re: DBS
Post by: xxx3 on 24.03.2012, 23:02:03
jak spravim toto: 5. Ohraničte last_name spredu aj zozadu symbolom * ?

LPAD a RPAD su na doplnenie, lenze tam treba zadat dlzku, aku maju mat vsetky retazce a zvysok mi doplni hviezdickami ...
Title: Re: DBS
Post by: veteran on 24.03.2012, 23:07:58
jak spravim toto: 5. Ohraničte last_name spredu aj zozadu symbolom * ?

LPAD a RPAD su na doplnenie, lenze tam treba zadat dlzku, aku maju mat vsetky retazce a zvysok mi doplni hviezdickami ...
Dáš funkciu concat do funkcie concat (najprv hviezdička z jednej strany, potom z druhej).
Title: Re: DBS
Post by: xxx3 on 24.03.2012, 23:11:36
a ta dalsia uloha, mam toto: SQL>  SELECT employee_id,last_name, TRUNC(MONTHS_BETWEEN(SYSDATE, HIRE_DATE)) "MESIACE" from hr.employees WHERE XXX>200 order by "MESIACE" DESC;

co mam dat miesto XXX ? ... "MESIACE" to neberie

a dik za ten concat
Title: Re: DBS
Post by: veteran on 24.03.2012, 23:26:30
a ta dalsia uloha, mam toto: SQL>  SELECT employee_id,last_name, TRUNC(MONTHS_BETWEEN(SYSDATE, HIRE_DATE)) "MESIACE" from hr.employees WHERE XXX>200 order by "MESIACE" DESC;

co mam dat miesto XXX ? ... "MESIACE" to neberie

a dik za ten concat
"Mesiace" tam dať nemôžeš, pretože najskôr sa vykonáva klauzula WHERE a vtedy ešte nepoznáme kolónku "Mesiace" (v tom čase to meno ešte nemá)  ;) Za XXX dosaď to, čo neskôr pomenuvávaš ako "Mesiace", teda TRUNC(MONTHS_BETWEEN(SYSDATE, HIRE_DATE)). Nie je to síce pekné riešenie, ale funguje. Krajšie sa to dá urobiť jedine cez two-level select-y (IMHO zbytočná robota).
Title: Re: DBS
Post by: Rajo on 25.03.2012, 01:35:42
lenže ak si extractuješ mesiac napríkald zo sysdate tak ti vypíše "3" , nie "03" ...
Code: [Select]
select EXTRACT(MONTH FROM sysdate) from dual;
Problém je, že z extractu vieš vydolovať len jeden údaj :D

Code: [Select]
select to_char(sysdate,'YYYYfmMmfmDd') "Current Date"from dual; :trestac:
Title: Re: DBS
Post by: veteran on 25.03.2012, 03:12:37
lenže ak si extractuješ mesiac napríkald zo sysdate tak ti vypíše "3" , nie "03" ...
Code: [Select]
select EXTRACT(MONTH FROM sysdate) from dual;
Problém je, že z extractu vieš vydolovať len jeden údaj :D

Code: [Select]
select to_char(sysdate,'YYYYfmMmfmDd') "Current Date"from dual; :trestac:
No paráda  :hug: Tu (http://ss64.com/ora/syntax-fmt.html) teda asi nebudú vypísané všetky formáty  ;D
Title: Re: DBS
Post by: Rajo on 25.03.2012, 16:33:03
lenže ak si extractuješ mesiac napríkald zo sysdate tak ti vypíše "3" , nie "03" ...
Code: [Select]
select EXTRACT(MONTH FROM sysdate) from dual;
Problém je, že z extractu vieš vydolovať len jeden údaj :D

Code: [Select]
select to_char(sysdate,'YYYYfmMmfmDd') "Current Date"from dual; :trestac:
No paráda  :hug: Tu (http://ss64.com/ora/syntax-fmt.html) teda asi nebudú vypísané všetky formáty  ;D

Quote
Formats that start with FM - zeros and blanks are suppressed.
e.g.
to_char(sysdate, 'FMMonth DD, YYYY'); will return 'June 9, 2005' not 'June 09 2005'
Title: Re: DBS
Post by: xxx3 on 25.03.2012, 18:39:21
ked posielate ulohy na DBS tak tam davate len tie priakzy, ktore zadavate alebo aj vysledok, ktory vam ten prikaz vypise ?

+ 14. uloha - nemate tam uplne ine nazvy department name ?
Title: Re: DBS
Post by: Rajo on 25.03.2012, 19:18:37
ked posielate ulohy na DBS tak tam davate len tie priakzy, ktore zadavate alebo aj vysledok, ktory vam ten prikaz vypise ?

+ 14. uloha - nemate tam uplne ine nazvy department name ?

veď výsledok máš vypísany v tom pdf na moodli "Vypracovane výsledky"

14. úloha je výsledok opak 14tky, ktorá tam je napísana :D tam je výsledok IS NOT NULL a my máme dať IS NULL :D

Title: Re: DBS
Post by: xxx3 on 25.03.2012, 19:23:28
aha, aj ma to napadlo, ze to bude opak, len som bol lenivy to vyskusat :D
Title: Re: DBS
Post by: Schat on 28.03.2012, 14:15:54
Prosim vas, ake je heslo do moodla ? zacina na "d" 
vopred dik =) A este ak si to pamatate kedy ma pani T. konzultacne hodiny.
Title: Re: DBS
Post by: Wolfdale on 28.03.2012, 14:50:49
Ak sa dobre pamätám, každá skupina má iné heslo.
Title: Re: DBS
Post by: zaky on 01.04.2012, 20:35:11
7. select avg(salary) from hr.employees where department_id = 50;
MV1 ← σ department_id=50 (employees)
V   ← F AVG salary (MV1)

8. select department_id, avg(salary) from hr.employees
group by department_id
order by 2;
V(department_id, priemer) ← department_id F AVG salary (employees)

mam dotaz, ze preco v tom druhom je tam v tej zatvorke V( priemer) a v prvom nieje, resp. kedy sa to dava, pls skuste mi vysvetlit
to su vzorove riesene priklady z moodla
Title: Re: DBS
Post by: veteran on 01.04.2012, 20:41:31
7. select avg(salary) from hr.employees where department_id = 50;
MV1 ← σ department_id=50 (employees)
V   ← F AVG salary (MV1)

8. select department_id, avg(salary) from hr.employees
group by department_id
order by 2;
V(department_id, priemer) ← department_id F AVG salary (employees)

mam dotaz, ze preco v tom druhom je tam v tej zatvorke V( priemer) a v prvom nieje, resp. kedy sa to dava, pls skuste mi vysvetlit
to su vzorove riesene priklady z moodla
Ak sa nemýlim, tak je to preto, lebo v sedmičke pracuješ len s jedným stĺpcom. Teda do zátvorky nemusíš nič písať. Akonáhle robíš s viacerými stĺpcami, musíš to uviesť do zátvorky.
Title: Re: DBS
Post by: Luk1 on 01.04.2012, 20:52:58
mozete tu postnut to pdfko s tymi vzorovymi prikladmi ? dik
Title: Re: DBS
Post by: xxx3 on 01.04.2012, 20:56:21
tu je, niekde ku koncu su tie priklady
Title: Re: DBS
Post by: Rajo on 02.04.2012, 00:54:31
select max(salary), round(avg(salary)) from hr.employees;

algebra bude:
V(max(salary),round(avg(salary)) ) <-- F MAX salary, AVG salary (employees)
alebo:
V(max(salary),round(priemer) ) <-- F MAX salary, AVG salary (employees)
alebo:
V(round(priemer) ) <-- F MAX salary, AVG salary (employees)
Title: Re: DBS
Post by: veteran on 02.04.2012, 01:01:13
select max(salary), round(avg(salary)) from hr.employees;

algebra bude:
V(max(salary),round(avg(salary)) ) <-- F MAX salary, AVG salary (employees)
alebo:
V(max(salary),round(priemer) ) <-- F MAX salary, AVG salary (employees)
alebo:
V(round(priemer) ) <-- F MAX salary, AVG salary (employees)
Ja by som dal

V(maximum,round(priemer)) <-- F MAX salary, AVG salary (employees)
Title: Re: DBS
Post by: Wolfdale on 02.04.2012, 03:49:05
Tiež tak som to dal.
Title: Re: DBS
Post by: xxx3 on 02.04.2012, 17:05:51
toto mam dobre takto?

select AVG(salary), COUNT(*) "Total" from hr.employees where department_id=60;

MV1 ← sigma department_id=60 (employees)
V ← F AVG salary, F COUNT employee_id (MV1)
Title: Re: DBS
Post by: veteran on 02.04.2012, 17:15:31
toto mam dobre takto?

select AVG(salary), COUNT(*) "Total" from hr.employees where department_id=60;

MV1 ← sigma department_id=60 (employees)
V ← F AVG salary, F COUNT employee_id (MV1)
DDL skript je OK. V RA netreba písať pred každou agg. funkciou F. Stačí raz.
Title: Re: DBS
Post by: xxx3 on 02.04.2012, 17:35:45
dik .. a je to zle ked tam je viackrat ?  .. ci je to jedno ?
Title: Re: DBS
Post by: veteran on 02.04.2012, 17:52:30
dik .. a je to zle ked tam je viackrat ?  .. ci je to jedno ?
Nvm či je to zle, ale čo sú vzorové príklady ku cvičeniam, tak tam je F len raz. Takže by som sa toho radšej držal ;)
Title: Re: DBS
Post by: xxx3 on 02.04.2012, 17:55:25
no ja v tych vyriesenych prikladoch nevidim taky priklad kde by boli v jednom priklade pouzite dve funkcie  .. vsade je len po jednej ... kde tam vidis taky priklad ? .. tu je pouzite AVG aj COUNT .. ale v tych vzorovych je vsade len bud AVG alebo COUNT ... nikde nie su obe v jednom
Title: Re: DBS
Post by: veteran on 02.04.2012, 18:58:04
no ja v tych vyriesenych prikladoch nevidim taky priklad kde by boli v jednom priklade pouzite dve funkcie  .. vsade je len po jednej ... kde tam vidis taky priklad ? .. tu je pouzite AVG aj COUNT .. ale v tych vzorovych je vsade len bud AVG alebo COUNT ... nikde nie su obe v jednom
8. cvičenie, príklady na cvičenie, príklad č. 5, strana 10/13
Title: Re: DBS
Post by: xxx3 on 02.04.2012, 19:12:47
aha, OK ... 8. cviko som este nepozeral
Title: Re: DBS
Post by: xxx3 on 02.04.2012, 19:14:42
este toto, dobre je takto? asi 11. uloha

select SUM(salary), department_id from hr.employees group by department_id;
V(sucet, department_id) ← F SUM salary, department_id (employees)
Title: Re: DBS
Post by: veteran on 02.04.2012, 19:24:08
este toto, dobre je takto? asi 11. uloha

select SUM(salary), department_id from hr.employees group by department_id;
V(sucet, department_id) ← F SUM salary, department_id (employees)
Skript OK. V RA treba department_id písať pred F, tam nemáš nijakú agg. funkciu. Teda:

V(sucet, department_id) ← department_id F SUM salary (employees)
Title: Re: DBS
Post by: esperian on 04.04.2012, 00:53:33

select department_id, job_id, count(*) from hr.employees group by department_id, job_id order by 1;

V(department_id, job_id, pocet) ← department_id, job_id F COUNT employee_id (employees)

1. do zatvorky k V piseme len vtedy ak mame viac stlpcov, alebo aj vtedy ak mame len jeden ?
2. department_id, job_id ktore je pred Fkom, je tam preto lebo je to group podla department_id, job_id ?
3. za Fko davam vsetky "stlpce" ale kedze department_id, job_id je uz red fkom, tak to tam uz dalsi krat nedavam ?

dobre rozumiem ?
Title: Re: DBS
Post by: veteran on 04.04.2012, 01:25:07
1. do zatvorky k V piseme len vtedy ak mame viac stlpcov, alebo aj vtedy ak mame len jeden ?
Zátvorka nemusí byť len pri V, ale aj pri akomkoľvek MVx. ;)

Platí, že do zátvorky sa píšu názvy stĺpcov vtedy, ak je na pravej strane agregačná funkcia. A potom tú zátvorku opakuješ pri ďalších nasledujúcich MVx a na konci aj pri V.

Keď máš len jeden stĺpec, väčšinou nepíšeš nič. To sa stáva vtedy, keď máš len jednu agregačnú funkciu, ktorá je zároveň jediným stĺpcom na výpis.

Ak máš však vypísať len round(count(employee_id)), tak v RA ku V napíšeš zátvorku: V(round(pocet)) ← F COUNT employee_id (employees), hoci tam máš len jediný stĺpec.

2. department_id, job_id ktore je pred Fkom, je tam preto lebo je to group podla department_id, job_id ?
V podstate áno. Za GROUP BY píšeš všetky stĺpce zo SELECTu okrem agregačných. Agregačné funkcie (za Fkom) sa píšu na konci, aby boli od "neagragačných stĺpcov" oddelené. Ak to napíšeš opačne, vyzeralo by to tak, že ideš počítať COUNT aj department_id aj job_id


3. za Fko davam vsetky "stlpce" ale kedze department_id, job_id je uz red fkom, tak to tam uz dalsi krat nedavam ?
To Fko označuje, že za ním budeš definovať agregačné funkcie (COUNT, AVG, SUM, MAX, MIN a pod.). Nič viac.
Title: Re: DBS
Post by: esperian on 04.04.2012, 01:27:08
dik
Title: Re: DBS
Post by: Rajo on 06.04.2012, 23:51:46
select first_name,last_name,job_title, department_name from hr.employees join hr.jobs using (job_id) join hr.departments using (department_id) where job_title like '%Manager%';

RA:
Code: [Select]
MV1 <-- σ job_title like '%Manager%' jobs
MV2 <-- employees  |><|  job_id = jov_id jobs
MV3 <-- MV2 |><| department_id = department_id departments
V <-- π first_name,last_name,job_title, department_name (MV3)

alebo:
Code: [Select]
MV1 <-- employees  |><|  job_id = jov_id jobs
MV2 <-- MV1 |><| department_id = department_id departments
MV3 <-- σ job_title like '%Manager%' jobs
V <-- π first_name,last_name,job_title, department_name (MV3)
Title: Re: DBS
Post by: veteran on 07.04.2012, 00:16:17
Quote
MV1 <-- employees  |><|  job_id = jov_id jobs
MV2 <-- MV1 |><| department_id = department_id departments
MV3 <-- σ job_title like '%Manager%' jobs
V <-- π first_name,last_name,job_title, department_name (MV3)


Keď v MV3 zmeníš to jobs na konci na MV2, bude to "nagyon jó"  ;)
Title: Re: DBS
Post by: Rajo on 07.04.2012, 00:45:18
Quote
MV1 <-- employees  |><|  job_id = jov_id jobs
MV2 <-- MV1 |><| department_id = department_id departments
MV3 <-- σ job_title like '%Manager%' jobs
V <-- π first_name,last_name,job_title, department_name (MV3)


Keď v MV3 zmeníš to jobs na konci na MV2, bude to "nagyon jó"  ;)

raz má selekciu v tých riešených úlohach ako prvú a raz pod join...kedy ma byť tak a kedy tak? :D
Title: Re: DBS
Post by: veteran on 07.04.2012, 00:53:48
raz má selekciu v tých riešených úlohach ako prvú a raz pod join...kedy ma byť tak a kedy tak? :D
Vo väčšine prípadov dá použiť aj jeden, aj druhý spôsob (ale nemusí to platiť vždy). Potom ale:

MV1 <-- σ job_title like '%Manager%' jobs
MV2 <-- employees  ⋈  job_id = job_id jobs   <--- MV1
MV3 <-- MV2 ⋈ department_id = department_id departments
V <-- π first_name,last_name,job_title, department_name (MV3)


Ja to ale riešim na istotu, že si najprv spravím join a až potom selekciu.

Title: Re: DBS
Post by: Rajo on 07.04.2012, 01:45:00
select first_name,last_name,job_title, department_name from hr.employees join hr.jobs using (job_id) join hr.departments using (department_id) where job_title like '%Manager%';

a nie náhodou:
MV1 <-- σ job_title like '%Manager%' (jobs)
MV2 <-- MV1  ⋈  job_id = job_id jobs
MV3 <-- MV2 ⋈ department_id = department_id departments
V <-- π first_name,last_name,job_title, department_name (MV3)


 ???

lebo:
select spz,typ,count(*) from auto join asz using (spz) where typ in ('o','O') group by spz,typ having count(*) = 2;

MV1<-- σ s typ = 'o' OR typ = 'O' (auto)
MV2 <-- MV1 ⋈ spz = spz asz
MV3(spz,typ,pocet) <-- spz, typ F COUNT spz (MV2)
V(spz,typ,pocet) <-- s pocet = 2(MV3)
Title: Re: DBS
Post by: veteran on 07.04.2012, 02:08:24

a nie náhodou:
MV1 <-- σ job_title like '%Manager%' (jobs)
MV2 <-- MV1  ⋈  job_id = job_id jobs <---- employees
MV3 <-- MV2 ⋈ department_id = department_id departments
V <-- π first_name,last_name,job_title, department_name (MV3)


Ak narážaš na poradie MV1 a tej druhej tabuľky (má tam byť employees, nie jobs), tak je to v tomto prípade IMHO jedno. Je jedno, či ku medzivýsledku pripojíš employees alebo ku employees medzivýsledok. Výsledok z toho bude rovnaký.
Title: Re: DBS
Post by: xxx3 on 09.04.2012, 19:17:10
skontrolovali by ste mi toto prosim, ci to mam OK ?

Code: [Select]
select department_name, city, count(*)
from hr.employees OUTER join hr.departments using (department_id) join hr.locations using (location_id)
where city like 'Seattle'
group by department_name, city
having count(*)>=1 AND count(*)<=4
order by 3;

MV1 <- employees OUTER JOIN department_id=department_id departments
MV2 <- MV1 JOIN location_id=location_id locations
MV3 <- sigma city like 'Seattle' (MV2)
MV4(department_name, city, pocet) <- department_name, city, F count employee_id (MV3)
V(department_name, city, pocet) <- sigma pocet between 1 and 4 (MV4)   
Title: Re: DBS
Post by: veteran on 09.04.2012, 20:06:40
skontrolovali by ste mi toto prosim, ci to mam OK ?

Code: [Select]
select department_name, city, count(*)
from hr.employees OUTER join hr.departments using (department_id) join hr.locations using (location_id)
where city like 'Seattle'
group by department_name, city
having count(*)>=1 AND count(*)<=4
order by 3;

MV1 <- employees OUTER JOIN department_id=department_id departments
MV2 <- MV1 JOIN location_id=location_id locations
MV3 <- sigma city like 'Seattle' (MV2)
MV4(department_name, city, pocet) <- department_name, city, F count employee_id (MV3)
V(department_name, city, pocet) <- sigma pocet between 1 and 4 (MV4)   
Je to dobre, ale nie je potrebné dávať tam OUTER JOIN. Stačí JOIN.
Title: Re: DBS
Post by: xxx3 on 09.04.2012, 21:29:05
ked tam nedam OUTER ale iba JOIN tak sa to berie automaticky ako OUTER JOIN ? alebo INNER ?
Title: Re: DBS
Post by: veteran on 09.04.2012, 22:01:00
ked tam nedam OUTER ale iba JOIN tak sa to berie automaticky ako OUTER JOIN ? alebo INNER ?
INNER.

Písať "OUTER JOIN" je zbytočné. Pri OUTER JOINe treba vždy špecifikovať o aký typ OUTER JOINU ide - LEFT (OUTER) JOIN, RIGHT (OUTER) JOIN, FULL (OUTER) JOIN. Bez toho to nemá zmysel ani písať. Kľúčové slovo OUTER je nepovinné, písať ho netreba, ale keď ho napíšeš bez špecifikácie (LEFT, RIGHT, FULL), to je akoby si ho ani nenapísal.

JOIN = INNER JOIN
LEFT JOIN = LEFT OUTER JOIN
RIGHT JOIN = RIGHT OUTER JOIN
FULL JOIN = FULL OUTER JOIN
Title: Re: DBS
Post by: xxx3 on 14.04.2012, 23:20:14
uloha na dalsi tyzden: vytvorte fyzický (relačný) model tak, aby platili všetky integritné obmedzenia

to akoze fyzicku schemu treba spravit ? Taku ako je na moodle Schéma hr (fyzická schéma) pdf ??
Title: Re: DBS
Post by: veteran on 14.04.2012, 23:22:55
to akoze fyzicku schemu treba spravit ? Taku ako je na moodle Schéma hr (fyzická schéma) pdf ??
Áno.
Title: Re: DBS
Post by: xxx3 on 15.04.2012, 00:01:57
do tabulky zamul treba pridat stlpce idz a idul ?

a d ozamestnanec evrp ?
Title: Re: DBS
Post by: Wolfdale on 15.04.2012, 00:02:56
Yep.
Title: Re: DBS
Post by: Rajo on 15.04.2012, 02:22:30
a nie idz do rod_prislusnik ?
Title: Re: DBS
Post by: Wolfdale on 15.04.2012, 02:41:51
Ja mám idz aj v zamul aj v rod_prislusnik.
Title: Re: DBS
Post by: veteran on 15.04.2012, 15:19:03
a nie idz do rod_prislusnik ?
idz musí ísť aj do rod_prislusnik, aj do zamul. V tabuľke zamul sa evidujú informácie o tom, koľko ktorý zamestnanec odpracoval na nejakej úlohe (bez idz by to asi nešlo :)). zamul je teda "sprostredkovateľom" vzťahu m:n medzi tabuľkami zamestnanec a uloha.
Title: Re: DBS
Post by: xxx3 on 15.04.2012, 16:28:15
a toto ako spravit pri create table ?
atribúty datum_narodenia, start_date, ende_date sú v tvare: dd.mm.yyyy

// a teda to predosle takto:
do zamul: idul, idz
do zamestnanec: evrp
do rod_prislusnik: idz 

a primary key v zamul bude (idul, idz) ?

takto je to spravne ? urcite aj v rod_prislusnik ma byt idz ? .. lebo ked si pozriete hr schemu tak medzi EMPLOYEES a JOBS je taky isty vztah ako medzi ZAMESTNANEC a ROD_PRISLUSNIK ... a tam je iba z tabulky JOBS, JOB_ID v EMPLOYESS, ale v JOBS nie je EMPLOYEE_ID ...

+ vkladali ste tam aj nejake data do tych tabuliek ? :D ... sice to tam nepise, ale potom by bola blbost robit selecty
Title: Re: DBS
Post by: veteran on 15.04.2012, 17:08:25
a toto ako spravit pri create table ?
atribúty datum_narodenia, start_date, ende_date sú v tvare: dd.mm.yyyy
I have no idea  ???

// a teda to predosle takto:
do zamul: idul, idz
do zamestnanec: evrp
do rod_prislusnik: idz 

takto je to spravne ?

Nie. Do tabuľky zamestnanec sa nedáva žiaden FK.

urcite aj v rod_prislusnik ma byt idz ? .. lebo ked si pozriete hr schemu tak medzi EMPLOYEES a JOBS je taky isty vztah ako medzi ZAMESTNANEC a ROD_PRISLUSNIK ... a tam je iba z tabulky JOBS, JOB_ID v EMPLOYESS, ale v JOBS nie je EMPLOYEE_ID ...
V rod_prislusnik bezpodmienečne musí byť idz. Inak, by si nevedel priradiť rodinného príslušníka ku zamestnancovi.

Medzi hr.employees a hr.jobs je presne opačný vzťah, ako pri zamestnanec a rod_prislusnik.

v hr-schéme: Jeden zamestnanec má jeden job, ale jeden job môže robiť viacero zamestnancov.
v tejto úlohe: Jeden zamestnanec môže mať viacero rod. príslušníkov, ale daný rod. príslušník má väzbu len s jedným zamestnancom

Teda hr.employees akoby zodpovedalo tabuľke rod_prislusnik a hr.jobs zodpovedá tabuľke zamestnanec.

+ vkladali ste tam aj nejake data do tych tabuliek ? :D ... sice to tam nepise, ale potom by bola blbost robit selecty

Nepíše to tam, ale keď nechceš robiť selecty naslepo, tak by bolo dobré si tam nejaké dáta vložiť ;)
Title: Re: DBS
Post by: xxx3 on 15.04.2012, 17:10:46
ok, diky ... som si to zle pozrel v tej hr scheme ... a co si daval ako primary key v zamul ?
Title: Re: DBS
Post by: veteran on 15.04.2012, 17:14:41
ok, diky ... som si to zle pozrel v tej hr scheme ... a co si daval ako primary key v zamul ?
Všetky stĺpce od zloženého PK.
Title: Re: DBS
Post by: xxx3 on 15.04.2012, 17:20:18
aj hodiny ?
Title: Re: DBS
Post by: veteran on 15.04.2012, 17:33:33
aj hodiny ?
Tam je to také divné...

Primárny kľúč by mala mať každá tabuľka. Ak by sme dali do PK len idz a idul, dosiahli by sme tým to, že daný zamestnanec by už druhýkrát nemohol vykonať tú istú úlohu. Ak dáme do zloženého PK aj hodiny, bude to "menej škodlivé", lebo tým vylúčime "len" to, že daný zamestnanec nebude môcť vykonávať opakovane tú istú úlohu za ten istý odpracovaný čas.

Najideálnejší by tam bol ďalší stĺpec (nejaké idzamul), ktorý by bol jediným PK v tabuľke. Taký stĺpec ale v schéme nie je, takže by sa nemal vytvárať.
Title: Re: DBS
Post by: razer08 on 16.04.2012, 02:18:10
no to aby akceptoval len taky date format to sa neda v oracle...lebo oracle ma fixny format a len pri inserte sa da formatovat...alebo cez alter session set nls_date_format='tu zapises date format';...inak sa neda
Title: Re: DBS
Post by: xxx3 on 21.04.2012, 23:53:17
ako spravit toto?

6. Zistite priemerný základný plat manažérov. (11800)

Title: Re: DBS
Post by: veteran on 22.04.2012, 00:19:50
ako spravit toto?

6. Zistite priemerný základný plat manažérov. (11800)
Vypíšeš AVG salary tých zamestnancov, ktorých employee_id sa nachádza v subqery (select manager_id from hr.employees).
Title: Re: DBS
Post by: xxx3 on 22.04.2012, 00:30:35
dik
Title: Re: DBS
Post by: xxx3 on 22.04.2012, 00:47:58
a s dalsou ulohou mi nevies helpnut?

skusal som toto:
select department_name, min(salary)
from hr.employees join hr.departments using (department_id)
where min(salary) >= (select min(salary) from hr.employees where department_id=80 ) group by department_name;


ale pise mi chybu pri tom where min(salary), ze nie je tam povolena ta dunkcia ... a ked ju tam nedam tak mam iny vysledok
Title: Re: DBS
Post by: veteran on 22.04.2012, 00:56:16
a s dalsou ulohou mi nevies helpnut?

skusal som toto:
select department_name, min(salary)
from hr.employees join hr.departments using (department_id)
where min(salary) >= (select min(salary) from hr.employees where department_id=80 ) group by department_name;


ale pise mi chybu pri tom where min(salary), ze nie je tam povolena ta dunkcia ... a ked ju tam nedam tak mam iny vysledok
Agregačné funkcie nesmú ísť do where - na to je určená klauzula having. Takisto ti tam chýba group by. (beriem späť :))
Title: Re: DBS
Post by: xxx3 on 22.04.2012, 01:14:15
ok, mam to diky :)
Title: Re: DBS
Post by: xxx3 on 22.04.2012, 01:17:58
este s tymto mi nevies heplnut? 11. Vypíšte priezviská tých zamestnancov, ktorí opravovali tie isté autá ako Janko Hrasko.

uz len to mi chyba :)
Title: Re: DBS
Post by: veteran on 22.04.2012, 01:29:33
este s tymto mi nevies heplnut? 11. Vypíšte priezviská tých zamestnancov, ktorí opravovali tie isté autá ako Janko Hrasko.

Spojíš tabuľky zam a asz. No a odtiaľ budeš hľadať takú spz, pre ktorú platí, že auto, ktoré ju nosí, opravoval zamestnanec s menom Janko a priezviskom Hrasko (čiže v subquery musíš zjoinovať opäť zam a asz). Na výpis dáš potom meno a priezvisko, ktoré by mali byť unique.
Title: Re: DBS
Post by: xxx3 on 22.04.2012, 02:30:16
no to mi je jasne, ael ako to zapisem ?

hlavne to, ze auto opravoval zamestnanec janko hrasko
Title: Re: DBS
Post by: veteran on 22.04.2012, 02:47:58
no to mi je jasne, ael ako to zapisem ?

hlavne to, ze auto opravoval zamestnanec janko hrasko
select ....... from ..........
where spz in
(select spz from ........
where ((meno = 'Janko')
and (priezvisko = 'Hrasko')));
Title: Re: DBS
Post by: xxx3 on 22.04.2012, 04:35:39
mi to hodi Janosik a Hrasko ... to je dobre ... Hrasko tam tiez ma byt ?
Title: Re: DBS
Post by: veteran on 22.04.2012, 14:39:02
mi to hodi Janosik a Hrasko ... to je dobre ... Hrasko tam tiez ma byt ?
Jááj, na to som zabudol :) Úplne na koniec (za subquery) ešte má byť napísané and priezvisko not like 'Hrasko'
Title: Re: DBS
Post by: Raynoko on 24.04.2012, 06:18:36
Dobrovolnik, ktory by mi zrobil zadanie... samozrejme finacna odmena ho neminie....viac info cez spravy
Title: Re: DBS
Post by: Luk1 on 24.04.2012, 19:43:49
ako by ste spravili relacnu z tohoto ?
Code: [Select]
SELECT meno,priezvisko,
(
SELECT count(t.transakcia_id)
FROM Zamestnanec z, Evidencia e, Transakcia t
WHERE z.zamestnanec_id=e.zamestnanec_id AND e.transakcia_id=t.transakcia_id AND transakcia_nazov LIKE 'Výdaj' AND z.zamestnanec_id=f.zamestnanec_id
)
as "Pocet_vydajov",
(
SELECT count(t.transakcia_id)
FROM Zamestnanec z, Evidencia e, Transakcia t
WHERE z.zamestnanec_id=e.zamestnanec_id AND e.transakcia_id=t.transakcia_id AND transakcia_nazov LIKE 'Príjem' AND z.zamestnanec_id=f.zamestnanec_id
) as "Pocet_prijmov"
FROM Zamestnanec f;
Title: Re: DBS
Post by: Wolfdale on 24.04.2012, 21:19:05
Niekto, kto má zadanie byt2.pdf?  br
Title: Re: DBS
Post by: veteran on 24.04.2012, 22:06:41
Niekto, kto má zadanie byt2.pdf?  br
Ja  :D A okrem toho ešte ďalšie tri  ;D

ako by ste spravili relacnu z tohoto ?
Code: [Select]
SELECT meno,priezvisko,
(
SELECT count(t.transakcia_id)
FROM Zamestnanec z, Evidencia e, Transakcia t
WHERE z.zamestnanec_id=e.zamestnanec_id AND e.transakcia_id=t.transakcia_id AND transakcia_nazov LIKE 'Výdaj' AND z.zamestnanec_id=f.zamestnanec_id
)
as "Pocet_vydajov",
(
SELECT count(t.transakcia_id)
FROM Zamestnanec z, Evidencia e, Transakcia t
WHERE z.zamestnanec_id=e.zamestnanec_id AND e.transakcia_id=t.transakcia_id AND transakcia_nazov LIKE 'Príjem' AND z.zamestnanec_id=f.zamestnanec_id
) as "Pocet_prijmov"
FROM Zamestnanec f;
Najprv by som urobil RA pre subqueries (V1, V2) a potom do finálneho výsledku V <--- sigma meno, priezvisko, V1, V2.
Title: Re: DBS
Post by: Luk1 on 02.05.2012, 22:53:49
Caute, mal niekto zadanie banka1 ? Ako ste pls riesili tie zostatky a zosttaok_na_ucte ? Z toho zadania neviem presne urcit ako to ma byt a Telepevska nikdy nie je spokojna :D cize v prilohe jeto zadanie keby niekto chcel nieco navrhnut :D dik
Title: Re: DBS
Post by: veteran on 02.05.2012, 23:24:30
Do tabuľky, kde sú informácie o účte, by som do stĺpca zostatok vložil niečo takéto:

počiatočný zostatok - (SELECT SUM(suma_transakcie) FROM ... WHERE id_uctu = ...)

No ale teda subquery v inserte, to je už iné kafíčko... Ech juch...  ap
Title: Re: DBS
Post by: Luk1 on 02.05.2012, 23:29:56
Do tabuľky, kde sú informácie o účte, by som do stĺpca zostatok vložil niečo takéto:

počiatočný zostatok - (SELECT SUM(suma_transakcie) FROM ... WHERE id_uctu = ...)

No ale teda subquery v inserte, to je už iné kafíčko... Ech juch...  ap
jas om to riesil cez trigger ktory pri vkladani do transakcie automaticky upravil zostatok len ona tam chce este zostaty pri kazdej transakcii ci co... aby som tam mal 10 stlpcov ze zostatok dpc
Title: Re: DBS
Post by: veteran on 02.05.2012, 23:42:36
Do tabuľky, kde sú informácie o účte, by som do stĺpca zostatok vložil niečo takéto:

počiatočný zostatok - (SELECT SUM(suma_transakcie) FROM ... WHERE id_uctu = ...)

No ale teda subquery v inserte, to je už iné kafíčko... Ech juch...  ap
jas om to riesil cez trigger ktory pri vkladani do transakcie automaticky upravil zostatok len ona tam chce este zostaty pri kazdej transakcii ci co... aby som tam mal 10 stlpcov ze zostatok dpc
Triggre Telepovská zakázala  ;D

Takže ona chce mať pri každej transakcii zaevidovaný aktuálny zostatok na účte? No tak potom to treba urobiť opačne, než som napísal:

V tabuľke s transakciami treba urobiť stĺpec akt_zostatok a tam potom vkladať
(SELECT pociatocny_zostatok FROM banka WHERE id_uctu = ...) - zadávaná suma transakcie
Title: Re: DBS
Post by: orsi on 03.05.2012, 03:50:37
stači ked mam jednu sekvenciu pouzitu? aj ked by sa dalo aj viac, ale tam mam normalne 1,2,3 napisane cisla.
Title: Re: DBS
Post by: veteran on 03.05.2012, 12:43:05
stači ked mam jednu sekvenciu pouzitu? aj ked by sa dalo aj viac, ale tam mam normalne 1,2,3 napisane cisla.
Záleží od toho, čo tie čísla označujú, či sú primárny kľúč, atď. Ale ak tam máš takú vec, že ti s každým riadkom v tabuľke číslo narastá, mala by tam byť sekvencia.
Title: Re: DBS
Post by: orsi on 05.05.2012, 05:44:48
okej, takže tak musím pridať hodne veľa sekvencií  :D si ma nepotešil.
Title: Re: DBS
Post by: esperian on 14.05.2012, 16:18:04
inak nevie niekto kolko casu budeme mat na skuske ??  ???
Title: Re: DBS
Post by: xxx3 on 14.05.2012, 17:21:25
a kolko uloh ma byt ?
Title: Re: DBS
Post by: veteran on 14.05.2012, 17:30:55
To všetko som mal napísané na nejakom zdrape, ale už ho neviem nájsť :D

Zdá sa mi, že by na to malo byť 60 minút. Počet otázok si nepamätám, ale polovica by mala byť na selecty a druhá polovica z teórie. Dopisovacie otázky na selecty budú viac bodové ohodnotené, ako TiposBingoOtázky. Tiež sa mi dačo marí o 6 dopisovacích selectoch a 6 TiposBingo selectoch.

Viac si už nepamätám, nemám fotopamäť  :D
Title: Re: DBS
Post by: esperian on 14.05.2012, 17:40:30
tak co som pozeral v archive, tak tam pisali ze
30 uloh

15 teoria + 15 selekty {cca na polovicu na dopisovanie a dalsie na najdenie spravneho z moznosti}
Title: Re: DBS
Post by: xxx3 on 14.05.2012, 17:43:08
ale je to tak, ze polovica bodov je za teoriu a polovca za selecty ? .. len tie selecty, ktore bude treba dopisovat budu viac ohodnotene ako tie, pri ktorych budu moznosti ?
Title: Re: DBS
Post by: esperian on 14.05.2012, 17:44:20
zda sa mi aj ze tie dopisovacie selekty boli po 4b ale to si teraz niesom isty..
Title: Re: DBS
Post by: Rajo on 14.05.2012, 17:47:07
to "dáva logiku", že dopisovacie selecty budú za najviac bodov pričom ani SQL nebudeme môcť používať  :whacko:
Title: Re: DBS
Post by: veteran on 14.05.2012, 18:14:16
ale je to tak, ze polovica bodov je za teoriu a polovca za selecty ? .. len tie selecty, ktore bude treba dopisovat budu viac ohodnotene ako tie, pri ktorych budu moznosti ?
Teoretické otázky budú všetky checkbox/radiobutton. Selecty checkbox a textfield. Za textfieldové otázky bude viac bodov. Keďže pomer otázok teória:selecty má byť fifty-fifty, vychádza mi, že za selecty bude viac bodov, než za teóriu.