<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl-pl">
<link rel="self" type="application/atom+xml" href="https://forum.atnel.pl/feed.php?f=48&amp;t=4264&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-05-20T22:35:11+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=48&amp;t=4264&amp;mode</id>
<entry>
<author><name><![CDATA[Malutki_27]]></name></author>
<updated>2014-05-20T22:35:11+01:00</updated>
<published>2014-05-20T22:35:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4264&amp;p=81898#p81898</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4264&amp;p=81898#p81898"/>
<title type="html"><![CDATA[Re: SQL - ORACLE]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4264&amp;p=81898#p81898"><![CDATA[
Nadal uważam że zmienna o tak dużej dokładności jest zbędna <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br />Ale to nie ja projektuję więc ........ <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />A co do jednej kolumny z czasem to przecież nie problem bo zawsze można walnąć <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />np.:<br />[syntax=sql]select to_char(SYSDATE, 'YYYY-MM-DD ') as &quot;Data&quot;,to_char(SYSDATE, 'HH24:MM:SS ') as &quot;Time&quot; from dual;[/syntax]<br />(Pisane z głowy)<br /><br />Co do poradnika do już od jakiegoś czasu noszę się z tym aby go skończyć , ale jakoś nie mogę się zmusić do powtórnego zainstalowania Oracle <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=225">Malutki_27</a> — 20 maja 2014, o 22:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[DonieQ]]></name></author>
<updated>2014-05-20T20:27:16+01:00</updated>
<published>2014-05-20T20:27:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4264&amp;p=81871#p81871</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4264&amp;p=81871#p81871"/>
<title type="html"><![CDATA[Re: SQL - ORACLE]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4264&amp;p=81871#p81871"><![CDATA[
Dzięki wielkie za odpowiedź! <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />Nie było innej możliwości i po prostu zamiast osobnych kolumn &quot;data&quot; i &quot;godzina&quot;, mam kolumnę &quot;czas&quot; typu TIMESTAMP <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />Pozdrawiam! <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4433">DonieQ</a> — 20 maja 2014, o 20:27</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Malutki_27]]></name></author>
<updated>2014-05-18T14:12:16+01:00</updated>
<published>2014-05-18T14:12:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4264&amp;p=81578#p81578</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4264&amp;p=81578#p81578"/>
<title type="html"><![CDATA[Re: SQL - ORACLE]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4264&amp;p=81578#p81578"><![CDATA[
Jeżeli chodzi o Oracle to niestety nie występuje typ Time znany o ile mnie pamięć nie myli w MySql.<br /><br />Co do przechowywania godziny , bo domniemam że o nią chodzi <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> , to masz dwie możliwości albo użyć typu Date który także ma możliwość przechowywania czasu oprócz daty. I osobiście chyba poszedłbym w tym kierunku. <br />Druga możliwość to przechowywanie czasu jako varchar2 ale taki sposób tworzy raczej więcej problemów niż to jest warte <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br />I oczywiście pozostaje ci także tym timestamp który przechowuje dokładnie to samo co typ date ale robi to bardziej dokładnie.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=225">Malutki_27</a> — 18 maja 2014, o 14:12</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[DonieQ]]></name></author>
<updated>2014-05-18T01:59:17+01:00</updated>
<published>2014-05-18T01:59:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4264&amp;p=81525#p81525</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4264&amp;p=81525#p81525"/>
<title type="html"><![CDATA[Re: SQL - ORACLE]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4264&amp;p=81525#p81525"><![CDATA[
Witam! <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Mam problem z datą, a dokładniej nie da się w tworzonej tabeli dać typu TIME, wyskakuje błąd &quot;invalid datatype&quot; bardzo proszę o dokończenie wątku, bo akurat na datach stanęło <img src="https://forum.atnel.pl/images/smilies/icon_razz.gif" alt=":P" title="Pokazuje język" /> Z góry dziękuję za odpowiedź! <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4433">DonieQ</a> — 18 maja 2014, o 01:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Malutki_27]]></name></author>
<updated>2013-09-27T14:57:09+01:00</updated>
<published>2013-09-27T14:57:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4264&amp;p=51119#p51119</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4264&amp;p=51119#p51119"/>
<title type="html"><![CDATA[Re: SQL - ORACLE]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4264&amp;p=51119#p51119"><![CDATA[
Tym razem zajmieny się funkcjami skalarnymi związanymi z liczbami, tekstem, datami, porównującymi, konwersji i co tam jeszcze wymyślono.<br />Radzę się dobrze z nimi zapoznać, bo według mnie to własnie one są istotą baz danych <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Hmmm ... może zacznijmy od tych co znają wszyscy <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br /><strong>Trunc(p1,p2)</strong> - definicja mówi że obcina liczbę p1 do p2 miejsc po przecinku, co nie do końca jest prawdą <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Weźmy sobie przykład który jest nie jako przełożeniem definicji<br />[syntax=sql]SELECT Trunc(112.123456,3) AS trunc FROM dual;[/syntax]<br />Działa jak powiedzieli <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ale sprawdździe co się stanie jeśli obetniecie tą liczbę np: do -2 czy do -3<br />Wniosek jest jeden, można można obcinać cześci ułamkowe, ale też dziesiątki, setki itd...<br /><br /><strong>Round(p1,p2)</strong> - zaokrągla liczbę p1, do p2 miejsc (specjalnie nie napisałem &quot;miejsc dzisiętnych&quot; bo z zaokrągleniami sytuacja jest analogiczna co w TRUNC)<br />[syntax=sql]SELECT round(112.123456,2) AS trunc FROM dual;[/syntax]<br /><br /><strong>MOD(p1,p2)</strong> -  zwraca resztę z dzielania całkowitego p1 przez p2<br /><br />Przykład<br />[syntax=sql]SELECT Mod(14589,5)AS mod FROM dual;[/syntax]<br /><br />I bardziej pokręcony przykład(Wybieramy co piąty wiersz z tabeli elementy):<br />[syntax=sql]SELECT * <br />FROM (<br />      SELECT  ROWNUM AS lp,<br />              p.* <br />      FROM elementy p) tab<br />WHERE  Mod( lp , 5 ) = 0;[/syntax]<br /><br /><strong>ABS(p1)</strong> - zwraca wartość bezwzględną liczby<br /><br />[syntax=sql]SELECT  ABS(14) AS DODATNIA, <br />        ABS(-14) AS UJEMNA <br />FROM dual;[/syntax]<br /><br /><strong>SIGN(p1)</strong> - zwarca znak liczby, przy dodatniej wynikiem będzie 1, przy ujemnej wynikiem będzie -1<br /><br />[syntax=sql]SELECT  SIGN(14) AS DODATNIA,<br />        SIGN(0) AS ZEROWA, <br />        SIGN(-14) AS UJEMNA <br />FROM dual;[/syntax]<br /><br /><strong>SQRT(p1)</strong> - zwraca pierwiastek kwadratowy z liczby p1<br /><br />[syntax=sql]SELECT Sqrt(9) AS Sqrt FROM dual;[/syntax]<br />A właśnie, pierwiastek kwadratowy możemy obliczyć bo mamy do tego opdowiednią funkcję, a jak obliczyć dowolnego stopnia ? o tym za chwilę <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br /><strong>POWER(p1,p2)</strong> - zwraca liczbę p1 podniesioną do potęgi p2<br /><br />[syntax=sql]SELECT Power(10,3) AS Potega FROM dual;[/syntax]<br /><br />A teraz pierwisatek dowolnego stopnia <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br />[syntax=sql]SELECT Power(Power(10,3),1/3) AS &quot;Pierwiastek dowolnego stopnia&quot; FROM dual;[/syntax]<br />Dlaczego tak ? Bo przecież pierwiastek jest odwrotnością potęgi <img src="https://forum.atnel.pl/images/smilies/icon_razz.gif" alt=":P" title="Pokazuje język" /> więc po co wymyślać jakąś dodatkową funkcje <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Jednak jak już uruchomimy to zapytanie to sie okaże że wynik jest jakis dziwny (ci co odpalili zapytanie wiedzą o czym mówię), a ja zapewniam was że wynik jest prawidłowy z punktu widzenia programowania i pozwólcie<br />że tym razem nie wyjaśnie dlaczego tak się dzieje, niech to będzie hmmm.... wasze zadanie domowe <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />Powiem tylko tyle że dosyć często ten bardzo boli programostów nie tylko w sql ale wszędzie gdzie się używa liczb w programach.<br /><br />No dobra z cyferkami już skończyliśmy teraz czas wziąc się za tekst.<br /><br />Na początek weżmy pod lupę trzy funkcje, są nimi:<br /><br /><strong>UPPER(ciąg_znaków)</strong> - ZMIENIA WSZYSTKIE LITERY NA DUŻE<br /><strong>LOWER(ciąg_znaków)</strong> - zmienia wszytskie litery na małe<br /><strong>INITCAP(ciąg_znaków)</strong> - Pierwsza Litera Każdego Wyrazu Jest Z Dużej Litery<br /><br />Hehehe no to załatwimy te trzy funkcje jednym przykładem <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br />[syntax=sql]SELECT  opis AS &quot;Nie zmieniony&quot;,<br />        Upper(opis) AS &quot;WSZYSTKIE DUŻE&quot;,<br />        Lower(opis) AS &quot;wszystkie małe&quot;,<br />        InitCap(opis) AS &quot;Pierwsza Litera Z Dużej&quot;<br />FROM projekty;[/syntax]<br /><br />No może jeszcze jednym ale ten będzie bardziej praktyczny, taka trochę inna forma DISTINCT<br />[syntax=sql]SELECT Upper(producent) AS Producent <br />FROM elementy<br />GROUP BY Upper(producent);[/syntax]<br /><br />Skoro już wywołaliśmy DISTINCT do tablicy to czemu nie użyć <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />[syntax=sql]SELECT DISTINCT Upper(producent) AS Producenci FROM elementy;[/syntax]<br /><br />Dobrze jak się już pobawiliśmy, to jedziemy dalej.<br /><br />Następne w kolejce są LPAD i RPAD.<br />LPAD (ciąg_znaków,p1[,ciąg_znaków_2]) - wynikiem tej funkcji jest ciąg znaków o długości p1 który zostaje utworzony przez dodatnie z lewej strony znaków z ciągu_znaków_2. <br />Jeżeli ciąg ten nie zostanie zdefinowany wtedy zostaną użyte spacje.<br />LPAD (ciąg_znaków,p1[,ciąg_znaków_2]) - ta samo historia co z LPAD tylko wszytsko się dzieje po prawej stronie<br /><br />[syntax=sql]SELECT  ID, <br />        LPad(id,20,'0') AS &quot;Uzupełnienie z lewej&quot;, <br />        RPad(id,20,'0') AS &quot;Uzupełnienie z prawej&quot;<br />        FROM autorzy;[/syntax]<br /><br />Dalej mamy LTRIM i RTRIM które są dokładnie odwrotnością LPAD oraz RPAD, mają postać<br /><br /><strong>LTRIM(ciąg_znaków[,ciąg_znaków_2])</strong> - usuwa z ciąg_znaków z lewej strony znaki zawarte w ciąg_znaków_2<br /><strong>RTRIM(ciąg_znaków[,ciąg_znaków_2])</strong> - to samo co wyżej tylko że po prawej stronie<br />I dla obydwóch przypadków jeżeli nie wymienimy ciąg_znaków_2 to domyślnie będą usuwane spacje. <br /><br />[syntax=sql]SELECT  ID, <br />        LTrim(LPad(id,20,'0'),'0') AS &quot;Obcięcie z lewej&quot;, <br />        RTrim(RPad(id,20,'0'),'0') AS &quot;Obcięcie z prawej&quot;<br />        FROM projekty;[/syntax]<br />Ciekawe kto zauważy co z tym zapytaniem jest nie tak <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br /><br />Dobrze, to pozostały nam jeszcze:<br /><br /><strong>SUBSTR(ciąg_znaków,p1[,p2])</strong> - wybiera z ciąg_znaków, p2 znaków od pozycji p1 , w przypadku braku p2 wybiera zanki do końca(ale prąbana definicja)<br />W praktyce to jest tak, podajesz pozycję od której ma pobierać znaki i ile znaków ma pobrać, co w praktyce wygląda tak:<br />[syntax=sql]SELECT  opis,<br />        substr(opis,2,5) AS &quot;Fragment tekstu&quot;,<br />        substr(opis,2) AS &quot;Od znaku do końca&quot;<br />FROM projekty;[/syntax]<br /><br /><strong>INSTR(ciąg_znaków,ciąg_znaków_2[,p1,p2])</strong> - Szuka p2-wystąpienia ciąg_znaków_2 w ciągu_znaków od pozycji p1. Domyślnie p1 i p2 mają wartość 1.<br />W praktyce podaje nam pozycję na której znajduje się początek ciągu znaków.<br />[syntax=sql]SELECT  opis,<br />        InStr(opis,'ray',5) AS &quot;Fragment tekstu&quot;<br />FROM projekty[/syntax]<br /><br /><strong>LENGTH(ciąg_znaków)</strong> - zwarca długość ciągu znaków<br />[syntax=sql]SELECT opis , Length(opis) AS &quot;długość opisu&quot; FROM projekty;[/syntax]<br /><br /><strong>REPLACE(ciąg_znaków,ciąg_znaków_2[,ciąg_znaków_3])</strong> - zmienia wszytskie wystąpienia ciąg_znaków_2 w ciąg_znaków na ciąg_znaków_3, wprzypadku braku ciąg_znakó_3 wstawia pusty znak czi nic<br />[syntax=sql]SELECT opis, REPLACE(opis,'Zasil','    AAAAAAAAA    ') FROM projekty;[/syntax]<br /><br /><strong>TRANSLATE(ciąg_znaków,ciąg_znaków_2,ciąg_znaków_3)</strong> - zmienia ciąg_znaków_2 na ciąg_znaków_3 w ciąg_znaków<br />A po ludzku, można napisać tak, że np: ciąg_znaków_2 = &quot;ABC&quot; natomiast ciąg_znaków_2 = &quot;123&quot; to A zostanie zastąpine przez 1, B przez 2, C przez 3<br />[syntax=sql]SELECT  opis, <br />        Translate(opis,'stab','STAB') AS &quot;s = S, t = T, a = A, b = B&quot;,<br />        Translate(opis,'P','8') AS &quot;P = 8&quot;,<br />      Translate(opis,'aL','WX') AS &quot;a = W, L = X&quot;<br />FROM projekty;[/syntax]<br />No dobra i chyba na tym etapie zakończymy poznawanie funkcji tekstowych, pozostaje nam jeszcze zabawa z datami, ale o tym napiszę już innym razem.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=225">Malutki_27</a> — 27 wrz 2013, o 14:57</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Malutki_27]]></name></author>
<updated>2013-09-27T11:28:28+01:00</updated>
<published>2013-09-27T11:28:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4264&amp;p=51070#p51070</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4264&amp;p=51070#p51070"/>
<title type="html"><![CDATA[Re: SQL - ORACLE]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4264&amp;p=51070#p51070"><![CDATA[
<strong>SELEKCJA</strong><br /><br />A cóż to takiego ? <br />Jest to wyświetlenie a raczej ograniczanie zapytania tylko do tych wierszy które spełniają określony warunek lub warunki, natomiast pozostałe zostają odfiltrowane.<br />Warunek selekcji może przyjąć jedną z trzech możliwych wartości, są nimi: <br />- true - wiersz jest zwracany jako wynik<br />- false - wiersz jest pomijany <br />- null - wiersz jest pomijany<br /><br />Do utworzenia warunku selekcji wykorzystujemy operatory:<br />- porównań<br />- Dopasowania wzorca<br />- Logiczne<br />- Sprawdzenia wartości null<br /><br />Co to dla nas oznacza ?<br />W praktyce oznacza to tylko tyle że na podstawie określonych warunków logicznych możemy wyselekcjonować sobie te wiersze które nas interesują.<br />Ponieważ tutaj sprawa jest prosta to pokażę kilka przykładów zamiast się rozpisywać<br /><br />Wyświetla wszystkie elementy z lokalizacji 10 <br />[syntax=sql]SELECT * FROM elementy WHERE lokalizacja_id=10;[/syntax]<br /><br />Wyświetla wszystkie elementy z lokalizacji 11 które mają ilość wiekszą niż 30<br />[syntax=sql]SELECT * FROM elementy WHERE ilosc &gt; 30 AND lokalizacja_id = 11;[/syntax]<br /><br />Wyświetla wszystkie elementy które mają pustą kolumnę Producent<br />[syntax=sql]SELECT * FROM elementy WHERE producent IS null;[/syntax]<br />Tutaj podam jeszcze błędne zapytanie które nie generuje błędu ale wyświetla zły wynik<br />[syntax=sql]SELECT * FROM elementy WHERE producent = '';[/syntax]<br />Dlaczego tak się dzieje ? Dlatego że pusty ciąg znaków nie jest wartością null ponieważ null jest równocześnie pusty ale też nie pusty znaczy się taki nie wiadomo jaki.<br /><br /><br />Wyświetla wszystkie elementy które moją wypełnioną kolumnę Producent<br />[syntax=sql]SELECT * FROM elementy WHERE producent IS NOT null;[/syntax]<br /><br />Teraz zajmiemy się operatorem dopasowania LIKE<br /><br />Dzięki temu operatorowi który ma możliwość przyjęcia w swojej składni tzw. znaków specjalnych % (zastępuje dowolny ciąg znaków) oraz _ (zastępuje pojedynczy znak), <br />które umożliwiają nam elastyczniejsze podejście do wartości tekstowych podczas filtrowania. Podczas używania LIKE należy pamiętać że wielkość liter ma znaczenie.<br /><br />[syntax=sql]SELECT * FROM elementy WHERE kod LIKE 'REZ%';[/syntax]<br /><br />[syntax=sql]SELECT * FROM elementy WHERE Producent LIKE 'SE_KA';[/syntax]<br /><br /><br /><strong>SORTOWANIE</strong><br /><br />Czasami do prawidłowej prezentacji wyników potrzebne jest nam sortowanie. Okazuje się że taki mechanizm jest wbudowany w sql i ma następującą składnie:<br /><br />SELECT ... FROM tabela ORDER BY kolumna [ASC | DESC]{,kolumna [ASC | DESC]}<br /><br />W praktyce użycie tej składni wygląda tak:<br /><br />[syntax=sql]SELECT * FROM Projekty ORDER BY autor_id ASC, KOD DESC;[/syntax]<br /><br />Przy sortowaniu należy zwrócić uwagę na kolejność kolumn wymienionych za ORDER BY dlatego że sortowanie będzie się odbywało od lewej do prawej.<br />Czyli w przypadku jak wyżej, najpierw tabela zostanie posortowana według ID autora, następnie &quot;wewnątrz&quot; danego autora odbędzie się sortowanie projektów według ich kodu<br /><br />ORDER BY umożliwia nam odwołanie się także po numerze kolumny zamiast po nazwie<br />[syntax=sql]SELECT * FROM Projekty ORDER BY 4 ASC;[/syntax]<br /><br />oraz po aliasie kolumny<br />[syntax=sql]SELECT imie AS IM ,nazwisko AS NAZW FROM autorzy ORDER BY IM ASC;[/syntax]<br /><br />Należy wspomnieć że nie wymienienie kierunku sortowania skutkuje sortowaniem rosnącym.<br /><br />PSEUDOKOLUMNY<br /><br />Najkrócej można by powiedzieć że to taka kolumna którą można wykorzystać w zapytaniu i której wartość jest generowana podczas wykonywania zapytania.<br />Do takich kolumn należą np:<br />- ROWNUM<br />- ROWID<br />- LEVEL<br /><br />Na pierwszy ogień weźmiemy ROWNUM, jak sama nazwa wskazuje służy do numeracji wierszy które są wyświetlane w wyniku zapytania.<br /><br />Jak zwykle przykład wykorzystania<br />[syntax=sql]SELECT  ROWNUM AS lp ,<br />        p.* <br />FROM projekty p <br />WHERE autor_id = 1;[/syntax]<br /><br />Jak wynika z zapytania, wybraliśmy rekordy z tabeli projekty dla autora o id = 1 następnie tym wierszom nadaliśmy liczbę porządkową za pomocą ROWNUM.<br /><br />Prawda że proste <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> , jednak nie ma róży bez kolców, i tak jest w tym przypadku. Dodajmy do naszego zapytania sortowanie po kolumnie KOD.<br />[syntax=sql]SELECT  ROWNUM AS lp ,<br />        p.* <br />FROM projekty p <br />WHERE autor_id = 1<br />ORDER BY kod;[/syntax]<br /><br />I co się okazuje że naszą LP szlag trafił <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /> , dzieje się tak z kolejności wykonywania poszczególnych składowych zapytania gdzie ROWNUM niestety jest gdzieś po środku, a dokładnie rzecz biorąc jest wykonywane <br />za przefiltrowaniem rekordów (klauzula WHERE), a sortowaniem (ORDER BY).<br /><br />No to co teraz ? To znaczy że nie da się użyć ROWNUM ? A jak je użyjemy to nie można sortować ?<br />Otóż i na to jest rozwiązanie, co prawda troszkę na &quot;okrętkę&quot;, ale się da <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> , pomocą przychodzą nam tzw. podzapytania.<br />Tutaj należy wam się małe wyjaśnienie co to podzapytanie, otóż jest to nic innego jak zapytanie które podstawiamy w nawiasach zamiast tabeli za klauzulą from. Pisząc to jeszcze prościej, jest to &quot;wirtualna tabela&quot; stworzona z naszego zapytania.<br /><br />A teraz przykład użycia takiego podzapytania razem z naszą pseudo kolumną <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br />[syntax=sql]SELECT  ROWNUM AS lp,<br />        p.* <br />FROM (  SELECT * FROM projekty <br />        WHERE autor_id = 1<br />        ORDER BY kod) p;[/syntax]<br /><br />Dało się ? Dało <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Hmmm ... można zadać pytanie czy ROWNUM tylko do tego służy ? Otóż nie ..., ROWNUM można także użyć do limitowania wierszy.<br />Jeżeli np. chcemy aby nasze zapytanie w wyniku zwróciło pierwsze trzy wiersze to wystarczy skonstruować odpowiedni warunek WHERE co macie pokazane w kodzie poniżej.<br />[syntax=sql]SELECT  ROWNUM AS lp,<br />        p.* <br />FROM projekty p<br />WHERE autor_id=1 AND ROWNUM &lt;= 3;<br />&#91;/synatx&#93;<br /><br />Hehehee , ale jak to zwykle bywa i tutaj czyha na nas jakaś pułapka ;) . Spróbujcie wybrać np. drugi wiersz z zapytania, albo wszystkie wiersze które mają wartość rownum większą od 3 na podstawie kodu który podałem wyżej.<br /><br />No i co ? Nie dało się :( , a dzieje się tak dlatego że w momencie nadania wartości dla ROWNUM jest sprawdzany warunek WHERE dla tej kolumny gdzie wartość będzie zawsze jeden.<br />To jak sobie z tym poradzić ? No jak to jak .... trzeba znowu użyć podzapytania :P<br />&#91;syntax=sql&#93;<br />SELECT * FROM (SELECT  ROWNUM AS lp,<br />                       p.* <br />               FROM projekty p<br />               WHERE autor_id=1)<br />WHERE lp &gt; 3;[/syntax]<br /><br />No dobra poznaliście już użyteczne ROWNUM, to teraz by wypadało opisać ROWID, ale musze się przyznać szczerze że nie bardzo ma pomysł jak to ładnie opisać <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><br />Więc na razie napiszę że teoretycznie rowid można użyć jako kluczy głównych w tabelach ponieważ rowid jest znacznie szybsze od dedykowanych kolumn z kluczami głównymi ponieważ rowid fizycznie identyfikuje poszczególne wiersze w bazie danych i może na tą chwile poprzestańmy na tym.<br /><br />Ok to teraz czas na LEVEL.<br />Wyobraźmy sobie że mamy tabelę która ma odwołanie (klucz obcy) do samej siebie, w Naszej bazie taką tabelą jest &quot;Lokalizacje&quot;, gdzie przechowujemy strukturę naszych magazynów które są wyposażone w regały, a one z kolei mają półki.<br /><br />Moglibyśmy zapisać te dane w postaci kolumn, gdzie każda następna kolumna byłaby odpowiednikiem naszej półki w regale, pół biedy jak by jeszcze te regały miały taką samą długość i ilość półek, ale już totalną masakrą miały różną ilość (tych półek).<br />Nie wspomnę już nawet o tym że do dyspozycji mamy ograniczoną ilość kolumn która może się nam skończyć. Wiec co zrobić ?<br />No skoro nie opłaca się iść wszerz to może pójść wzdłuż, czyli zapisać dane w postaci hierarchicznej wiersz po wierszu, czyli element podrzędny (półka) będzie przechowywał id elementu nadrzędnego (regał) a ten z kolei id swojego elementu nadrzędnego (magazyn).<br />Jak pewnie zauważyliście taką hierarchię można rozbudowywać w dół do dowolnego poziomu jaki nam będzie potrzebny. No tak ale jak teraz sprawdzić który jest tym ostatnim ? I tu z pomocą przychodzi nam właśnie wspomniana wcześniej pseudo kolumna LEVEL która nam grzecznie poda numer poziomu dla danej gałęzi <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Oto przykład kodu<br />[syntax=sql]SELECT <br />      ID, <br />      super,<br />      Kod,<br />      Nazwa,<br />      LEVEL AS &quot;Poziom w hierarchii&quot;<br />FROM lokalizacje<br />CONNECT BY PRIOR<br />    id=super<br />START WITH super IS NULL<br />ORDER BY level;[/syntax]<br /><br />Co prawda składnia jest deczko skomplikowana , ale na szczęście jest tak tylko na pierwszy rzut oka <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Składni od SELECT do FROM nie ma co wyjaśniać więc zacznijmy od razu od CONNECT BY PRIOR, jest to nic innego jak podanie złączenia pomiędzy poziomami naszych lokalizacji (czyli łączymy np. magazyn z jego regałami, a regały z półkami)<br /><br />START WITH super IS NULL - jest to nic innego jak podanie od którego poziomu ma się rozpocząć łączenie. W naszym przypadku jest to wartość null ponieważ nasze magazyny w hierarchii nie mają już nic nad sobą więc nie mają także przypisanego &quot;rodzica&quot;.<br /><br />Należy pamiętać że zamiast wartości null możemy przyporządkować dowolny &quot;poziom&quot; od którego chcemy zacząć np. od magazynu części <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br />[syntax=sql]SELECT <br />      ID, <br />      super,<br />      Kod,<br />      Nazwa,<br />      LEVEL AS &quot;Poziom w hierarchii&quot;<br />FROM lokalizacje<br />CONNECT BY PRIOR<br />    id=super<br />START WITH super = (SELECT id FROM lokalizacje WHERE kod='MAG1')<br />ORDER BY level;[/syntax]<br /><br />albo magazynu projektów<br />[syntax=sql]SELECT <br />      ID, <br />      super,<br />      Kod,<br />      Nazwa,<br />      LEVEL AS &quot;Poziom w hierarchii&quot;<br />FROM lokalizacje<br />CONNECT BY PRIOR<br />    id=super<br />START WITH super = 2<br />ORDER BY level;[/syntax]<br /><br /><br />Uhhh ..... , no to pozostała nam do omówienia jeszcze jedna rzecz o której nic nie pisałem, a bez której chyba by nie istniał Oracle <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Jest nią bardzo użyteczna tabela dual. Jak się dało zauważyć podczas moich wypocin na temat operatorów arytmetycznych, użyliśmy takiego zapytania<br />[syntax=sql]SELECT 100 - 9 * 5 / 3 + 15 AS &quot;Wynik&quot; FROM autorzy;[/syntax]<br /><br />w rezultacie otrzymaliśmy wynik naszych obliczeń, ale zamiast w jednym wierszu, był on widoczny aż w 8. Dlaczego tak się dzieje ? Dlatego że nasz wynik był generowany dla każdego wiersza który jest w tabeli.<br />No dobrze, a jak byśmy chcieli żeby w jednym wierszu, to co zrobić ? Użyć do tego tabeli dual;<br />[syntax=sql]SELECT 100 - 9 * 5 / 3 + 15 AS &quot;Wynik&quot; FROM dual;[/syntax]<br /><br />No ok ... ale dlaczego tak jest ? Dlatego że tak sobie wymyślili twórcy Oracle, że jak w zapytaniu jest SELECT to musi być też informacja skąd wziąć nasze rekordy co oznacza obowiązkową klauzule FROM, skoro już napisaliśmy FROM no to musimy tez podać jakieś źródło rekordów.  <br />Co w oczywisty sposób utrudniło pewne operacje w bazie, dlatego mądrzy ludzie poszli po rozum do głowy i stworzyli tabelę dual <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />Sama tabela dual nie jest niczym nadzwyczajnym, jest to po prostu tabela która zawiera jedną kolumnę i jeden wiersz w którym jest wpisany &quot;X&quot; <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=225">Malutki_27</a> — 27 wrz 2013, o 11:28</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Malutki_27]]></name></author>
<updated>2013-09-25T12:42:23+01:00</updated>
<published>2013-09-25T12:42:23+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4264&amp;p=50777#p50777</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4264&amp;p=50777#p50777"/>
<title type="html"><![CDATA[Re: SQL - ORACLE]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4264&amp;p=50777#p50777"><![CDATA[
Kolej na następna część <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Ale zanim przejdziemy do meritum potrzeba nam będzie jakaś baza danych, dlatego otwórzcie SQLTOOLS, podłączcie się do bazy i odpalcie przez F5<br />ten skrypt:<br />[syntax=sql]DROP TABLE dzialy;<br />CREATE TABLE dzialy(<br />      ID INTEGER NOT null,<br />      KOD VARCHAR2(20) NOT null,<br />      OPIS VARCHAR2(150),<br />      CONSTRAINT dzialy_pk PRIMARY KEY(ID),<br />      CONSTRAINT dzialy_uk UNIQUE(kod)<br />);<br /><br />DROP SEQUENCE Dzialy_ID;<br />CREATE SEQUENCE Dzialy_ID;<br /><br /><br /><br /><br />INSERT INTO dzialy (ID, KOD, OPIS)<br />            VALUES (dzialy_id.NEXTVAL, 'Rozwoj', 'Dział Rozwoju');<br />INSERT INTO dzialy (ID, KOD, OPIS)<br />            VALUES (dzialy_id.NEXTVAL, 'Dystrybucja', 'Dział Dystrybucji projektów');<br />INSERT INTO dzialy (ID, KOD, OPIS)<br />            VALUES (dzialy_id.NEXTVAL, 'Projekty', 'Dział PROJEKTOWY');<br />INSERT INTO dzialy (ID, KOD, OPIS)<br />            VALUES (dzialy_id.NEXTVAL, 'Wdrażania', 'Dział odPOwiedzialny za WDROŻENIE PROJEKTÓW');<br /><br /><br /><br />DROP TABLE Autorzy;<br />CREATE TABLE Autorzy (<br />    ID INTEGER NOT NULL ,<br />    IMIE VARCHAR2(20),<br />    NAZWISKO VARCHAR2(100),<br />    DZIAL  INTEGER NOT NULL,<br />    CONSTRAINT Autorzy_pk PRIMARY KEY(ID),<br />    CONSTRAINT Autorzy_uk UNIQUE(IMIE,NAZWISKO)<br />);<br /><br />DROP SEQUENCE Autorzy_ID;<br />CREATE SEQUENCE Autorzy_ID;<br /><br />INSERT INTO Autorzy (ID,IMIE, NAZWISKO, DZIAL)<br />            VALUES (Autorzy_ID.NEXTVAL, 'Jan', 'Kowalski',1 );<br />INSERT INTO Autorzy (ID,IMIE, NAZWISKO, DZIAL)<br />            VALUES (Autorzy_ID.NEXTVAL, 'Wirgiliusz', 'IksIński',1 );<br />INSERT INTO Autorzy (ID,IMIE, NAZWISKO, DZIAL)<br />            VALUES (Autorzy_ID.NEXTVAL, 'Bronisław', 'Kowalski',1 );<br />INSERT INTO Autorzy (ID,IMIE, NAZWISKO, DZIAL)<br />            VALUES (Autorzy_ID.NEXTVAL, 'Jerzy', 'Nowak',2 );<br />INSERT INTO Autorzy (ID,IMIE, NAZWISKO, DZIAL)<br />            VALUES (Autorzy_ID.NEXTVAL, 'Katarzyna', 'dąbrowska',2 );<br />INSERT INTO Autorzy (ID,IMIE, NAZWISKO, DZIAL)<br />            VALUES (Autorzy_ID.NEXTVAL, 'Pelagiusz', 'Dombrowski',3 );<br />INSERT INTO Autorzy (ID,IMIE, NAZWISKO, DZIAL)<br />            VALUES (Autorzy_ID.NEXTVAL, 'Jeremi', 'Pwosinoga',4 );<br />INSERT INTO Autorzy (ID,IMIE, NAZWISKO, DZIAL)<br />            VALUES (Autorzy_ID.NEXTVAL, 'Jonasz', 'Waligóra',4 );<br /><br />DROP TABLE Lokalizacje;<br />CREATE Table Lokalizacje (<br />    ID INTEGER NOT null,<br />    SUPER INTEGER,<br />    KOD VARCHAR2(200),<br />    Nazwa VARCHAR2(100),<br />    CONSTRAINT Lokal_pk PRIMARY KEY(ID),<br />    CONSTRAINT Lokal_local_fk FOREIGN KEY(SUPER) REFERENCES lokalizacje(ID),<br />    CONSTRAINT Lokal_uk UNIQUE(kod,SUPER)<br />);<br /><br />DROP SEQUENCE Lokalizacje_ID;<br />CREATE SEQUENCE Lokalizacje_ID;<br /><br />INSERT INTO Lokalizacje (ID, SUPER, KOD, NAZWA)<br />            VALUES (Lokalizacje_ID.NEXTVAL,null,'MAG1','Magazyn Części');<br />INSERT INTO Lokalizacje (ID, SUPER, KOD, NAZWA)<br />            VALUES (Lokalizacje_ID.NEXTVAL,null,'MAG2','Magazyn Projektow');<br />INSERT INTO Lokalizacje (ID, SUPER, KOD, NAZWA)<br />            VALUES (Lokalizacje_ID.NEXTVAL,1,'REGPROC','Regał procesory');<br />INSERT INTO Lokalizacje (ID, SUPER, KOD, NAZWA)<br />            VALUES (Lokalizacje_ID.NEXTVAL,1,'REGREZ','Regał rezystory');<br />INSERT INTO Lokalizacje (ID, SUPER, KOD, NAZWA)<br />            VALUES (Lokalizacje_ID.NEXTVAL,1,'REGKON','Regał Kondensatory');<br />INSERT INTO Lokalizacje (ID, SUPER, KOD, NAZWA)<br />            VALUES (Lokalizacje_ID.NEXTVAL,2,'REGUKON','Regał z ukończonymi projektami');<br />INSERT INTO Lokalizacje (ID, SUPER, KOD, NAZWA)<br />            VALUES (Lokalizacje_ID.NEXTVAL,2,'REGTRW','Regał z trwającymi projektami');<br />INSERT INTO Lokalizacje (ID, SUPER, KOD)<br />            VALUES (Lokalizacje_ID.NEXTVAL,2,'REGODRZ');<br />INSERT INTO Lokalizacje (ID, SUPER, KOD, NAZWA)<br />            VALUES (Lokalizacje_ID.NEXTVAL,3,'POLKA1','Półka dolna');<br />INSERT INTO Lokalizacje (ID, SUPER, KOD, NAZWA)<br />            VALUES (Lokalizacje_ID.NEXTVAL,3,'POLKA2','Półka środkowa');<br />INSERT INTO Lokalizacje (ID, SUPER, KOD, NAZWA)<br />            VALUES (Lokalizacje_ID.NEXTVAL,3,'POLKA3','Półka górna');<br />INSERT INTO Lokalizacje (ID, SUPER, KOD, NAZWA)<br />            VALUES (Lokalizacje_ID.NEXTVAL,4,'POLKA1','Półka dolna');<br />INSERT INTO Lokalizacje (ID, SUPER, KOD, NAZWA)<br />            VALUES (Lokalizacje_ID.NEXTVAL,4,'POLKA2','Półka środkowa');<br />INSERT INTO Lokalizacje (ID, SUPER, KOD, NAZWA)<br />            VALUES (Lokalizacje_ID.NEXTVAL,4,'POLKA3','Półka górna');<br />INSERT INTO Lokalizacje (ID, SUPER, KOD, NAZWA)<br />            VALUES (Lokalizacje_ID.NEXTVAL,5,'POLKA1','Półka dolna');<br />INSERT INTO Lokalizacje (ID, SUPER, KOD, NAZWA)<br />            VALUES (Lokalizacje_ID.NEXTVAL,5,'POLKA2','Półka środkowa');<br />INSERT INTO Lokalizacje (ID, SUPER, KOD, NAZWA)<br />            VALUES (Lokalizacje_ID.NEXTVAL,5,'POLKA3','Półka górna');<br />INSERT INTO Lokalizacje (ID, SUPER, KOD, NAZWA)<br />            VALUES (Lokalizacje_ID.NEXTVAL,6,'POLKA1','Półka dolna');<br />INSERT INTO Lokalizacje (ID, SUPER, KOD, NAZWA)<br />            VALUES (Lokalizacje_ID.NEXTVAL,6,'POLKA2','Półka środkowa');<br />INSERT INTO Lokalizacje (ID, SUPER, KOD, NAZWA)<br />            VALUES (Lokalizacje_ID.NEXTVAL,6,'POLKA3','Półka górna');<br />INSERT INTO Lokalizacje (ID, SUPER, KOD, NAZWA)<br />            VALUES (Lokalizacje_ID.NEXTVAL,7,'POLKA1','Półka dolna');<br />INSERT INTO Lokalizacje (ID, SUPER, KOD, NAZWA)<br />            VALUES (Lokalizacje_ID.NEXTVAL,7,'POLKA2','Półka środkowa');<br />INSERT INTO Lokalizacje (ID, SUPER, KOD, NAZWA)<br />            VALUES (Lokalizacje_ID.NEXTVAL,7,'POLKA3','Półka górna');<br />INSERT INTO Lokalizacje (ID, SUPER, KOD, NAZWA)<br />            VALUES (Lokalizacje_ID.NEXTVAL,8,'POLKA1','Półka dolna');<br />INSERT INTO Lokalizacje (ID, SUPER, KOD, NAZWA)<br />            VALUES (Lokalizacje_ID.NEXTVAL,8,'POLKA2','Półka środkowa');<br />INSERT INTO Lokalizacje (ID, SUPER, KOD, NAZWA)<br />            VALUES (Lokalizacje_ID.NEXTVAL,8,'POLKA3','Półka górna');<br /><br /><br />DROP TABLE Elementy;<br />CREATE TABLE Elementy (<br />    ID INTEGER NOT null,<br />    KOD VARCHAR2(20),<br />    OPIS VARCHAR2(200),<br />    Ilosc NUMERIC(10,2),<br />    Producent VARCHAR2(50),<br />    lokalizacja_ID INTEGER NOT NULL,<br />    CONSTRAINT Elementy_pk PRIMARY KEY(ID),<br />    CONSTRAINT Elementy_local_fk FOREIGN KEY(lokalizacja_ID) REFERENCES lokalizacje(ID),<br />    CONSTRAINT Elementy_uk UNIQUE(kod)<br />);<br /><br /><br />DROP SEQUENCE Elementy_ID;<br />CREATE SEQUENCE Elementy_ID;<br /><br />INSERT INTO elementy (ID,KOD,OPIS,ILOSC,PRODUCENT,LOKALIZACJA_ID)<br />            VALUES (elementy_ID.NEXTVAL,'ATMEGA8','Procesor atemga 8',92,'Atmel',11);<br />INSERT INTO elementy (ID,KOD,OPIS,ILOSC,PRODUCENT,LOKALIZACJA_ID)<br />            VALUES (elementy_ID.NEXTVAL,'ATMEGA16','Procesor atemga 16',17,'atmel',11);<br />INSERT INTO elementy (ID,KOD,OPIS,ILOSC,PRODUCENT,LOKALIZACJA_ID)<br />            VALUES (elementy_ID.NEXTVAL,'ATMEGA32','Procesor atemga 32',6,'atMEL',9);<br />INSERT INTO elementy (ID,KOD,OPIS,ILOSC,PRODUCENT,LOKALIZACJA_ID)<br />            VALUES (elementy_ID.NEXTVAL,'ATMEGA328','Procesor atemga 328',32,'ATMEL',10);<br />INSERT INTO elementy (ID,KOD,OPIS,ILOSC,PRODUCENT,LOKALIZACJA_ID)<br />            VALUES (elementy_ID.NEXTVAL,'PIC16F627A','Procesor microchip PIC16F627A',78,'MICROCHIP',10);<br />INSERT INTO elementy (ID,KOD,OPIS,ILOSC,PRODUCENT,LOKALIZACJA_ID)<br />            VALUES (elementy_ID.NEXTVAL,'PIC16F887','Procesor MicrChip PIC16F887',69,'microchip',11);<br />INSERT INTO elementy (ID,KOD,OPIS,ILOSC,PRODUCENT,LOKALIZACJA_ID)<br />            VALUES (elementy_ID.NEXTVAL,'AT91SAM7XC512','Procesor ARM AT91SAM7XC512',12,null,9);<br /><br />INSERT INTO elementy (ID,KOD,OPIS,ILOSC,PRODUCENT,LOKALIZACJA_ID)<br />            VALUES (elementy_ID.NEXTVAL,'REZ1.2K','Rezystor smt 1.2k',68,'ELEKTRON',12);<br />INSERT INTO elementy (ID,KOD,OPIS,ILOSC,PRODUCENT,LOKALIZACJA_ID)<br />            VALUES (elementy_ID.NEXTVAL,'REZ56K','Rezystor smd 56k',92,'eLEKTRON',12);<br />INSERT INTO elementy (ID,KOD,OPIS,ILOSC,PRODUCENT,LOKALIZACJA_ID)<br />            VALUES (elementy_ID.NEXTVAL,'REZ1.4M','Rezystor smt 1.4M',63,'Elektron',14);<br />INSERT INTO elementy (ID,KOD,OPIS,ILOSC,PRODUCENT,LOKALIZACJA_ID)<br />            VALUES (elementy_ID.NEXTVAL,'REZ12K','Rezystor smd 12k',76,'elektron',14);<br />INSERT INTO elementy (ID,KOD,OPIS,ILOSC,PRODUCENT,LOKALIZACJA_ID)<br />            VALUES (elementy_ID.NEXTVAL,'REZ22K','Rezystor smt 22k',4,'Restor',14);<br />INSERT INTO elementy (ID,KOD,OPIS,ILOSC,PRODUCENT,LOKALIZACJA_ID)<br />            VALUES (elementy_ID.NEXTVAL,'REZ120K','Rezystor smd 120k',136,'REstor',14);<br />INSERT INTO elementy (ID,KOD,OPIS,ILOSC,PRODUCENT,LOKALIZACJA_ID)<br />            VALUES (elementy_ID.NEXTVAL,'REZ12','Rezystor smd 12',56,'RESTOR',13);<br />INSERT INTO elementy (ID,KOD,OPIS,ILOSC,PRODUCENT,LOKALIZACJA_ID)<br />            VALUES (elementy_ID.NEXTVAL,'REZ56','Rezystor smt 56',59,null,12);<br />INSERT INTO elementy (ID,KOD,OPIS,ILOSC,PRODUCENT,LOKALIZACJA_ID)<br />            VALUES (elementy_ID.NEXTVAL,'REZ5.6M','Rezystor smd 5.6M',2,'Restor',13);<br />INSERT INTO elementy (ID,KOD,OPIS,ILOSC,PRODUCENT,LOKALIZACJA_ID)<br />            VALUES (elementy_ID.NEXTVAL,'REZ10K','Rezystor smt 10k',66,null,14);<br /><br />INSERT INTO elementy (ID,KOD,OPIS,ILOSC,PRODUCENT,LOKALIZACJA_ID)<br />            VALUES (elementy_ID.NEXTVAL,'KON10UF','Kondensator 10uf',55,'SEIKA',15);<br />INSERT INTO elementy (ID,KOD,OPIS,ILOSC,PRODUCENT,LOKALIZACJA_ID)<br />            VALUES (elementy_ID.NEXTVAL,'KON10UP','Kondensator 10up',19,'MITra',15);<br />INSERT INTO elementy (ID,KOD,OPIS,ILOSC,PRODUCENT,LOKALIZACJA_ID)<br />            VALUES (elementy_ID.NEXTVAL,'KON22UF','Kondensator 22uf',37,'Seika',15);<br />INSERT INTO elementy (ID,KOD,OPIS,ILOSC,PRODUCENT,LOKALIZACJA_ID)<br />            VALUES (elementy_ID.NEXTVAL,'KON1UF','Kondensator 1uf',5,null,15);<br />INSERT INTO elementy (ID,KOD,OPIS,ILOSC,PRODUCENT,LOKALIZACJA_ID)<br />            VALUES (elementy_ID.NEXTVAL,'KON18PF','Kondensator 18pf',11,'seika',15);<br />INSERT INTO elementy (ID,KOD,OPIS,ILOSC,PRODUCENT,LOKALIZACJA_ID)<br />            VALUES (elementy_ID.NEXTVAL,'KON220UF','Kondensator 220uf',38,'mitra',16);<br />INSERT INTO elementy (ID,KOD,OPIS,ILOSC,PRODUCENT,LOKALIZACJA_ID)<br />            VALUES (elementy_ID.NEXTVAL,'KON15F','Kondensator 15f',72,'MITRA',16);<br />INSERT INTO elementy (ID,KOD,OPIS,ILOSC,PRODUCENT,LOKALIZACJA_ID)<br />            VALUES (elementy_ID.NEXTVAL,'KON1F','Kondensator 1f',30,null,16);<br />INSERT INTO elementy (ID,KOD,OPIS,ILOSC,PRODUCENT,LOKALIZACJA_ID)<br />            VALUES (elementy_ID.NEXTVAL,'KON100NF','Kondensator 100nf',19,'SEiKA',17);<br />INSERT INTO elementy (ID,KOD,OPIS,ILOSC,PRODUCENT,LOKALIZACJA_ID)<br />            VALUES (elementy_ID.NEXTVAL,'KON1.5UF','Kondensator 1.5uf',3,null,17);<br />INSERT INTO elementy (ID,KOD,OPIS,ILOSC,PRODUCENT,LOKALIZACJA_ID)<br />            VALUES (elementy_ID.NEXTVAL,'KON1.5NF','Kondensator 1.5nf',21,'mitra',17);<br />INSERT INTO elementy (ID,KOD,OPIS,ILOSC,PRODUCENT,LOKALIZACJA_ID)<br />            VALUES (elementy_ID.NEXTVAL,'KON12PF','Kondensator 12pf',27,'Mitra',17);<br />/* */<br /><br /><br />DROP TABLE Projekty;<br />CREATE TABLE Projekty(<br />    ID INTEGER NOT null,<br />    KOD VARCHAR2(20) NOT null,<br />    OPIS VARCHAR2(200),<br />    DATA_PROJEKT DATE DEFAULT trunc(SYSDATE,'DDD'),<br />    Autor_ID INTEGER NOT null,<br />    Lokalizacja_ID INTEGER NOT NULL,<br />    CONSTRAINT Projekty_pk PRIMARY KEY(ID),<br />    CONSTRAINT Projekty_local_fk FOREIGN KEY(lokalizacja_ID) REFERENCES lokalizacje(ID),<br />    CONSTRAINT Projekty_Autor_fk FOREIGN KEY(Autor_ID) REFERENCES Autorzy(ID),<br />    CONSTRAINT Projekty_uk UNIQUE(kod)<br /><br />);<br /><br />DROP SEQUENCE Projekty_ID;<br />CREATE SEQUENCE Projekty_ID;<br /><br />INSERT INTO projekty (ID, KOD, OPIS, DATA_PROJEKT, AUTOR_ID, LOKALIZACJA_ID)<br />          VALUES (projekty_ID.NEXTVAL, 'ZASILACZSTAB', 'Zasilacz stabilizowany','2010/05/17',1,23);<br />INSERT INTO projekty (ID, KOD, OPIS, DATA_PROJEKT, AUTOR_ID, LOKALIZACJA_ID)<br />          VALUES (projekty_ID.NEXTVAL, 'ZASILACZNSTAB', 'Zasilacz nie stabilizowany','2011/12/03',2,24);<br />INSERT INTO projekty (ID, KOD, OPIS, DATA_PROJEKT, AUTOR_ID, LOKALIZACJA_ID)<br />          VALUES (projekty_ID.NEXTVAL, 'PRZETWORNICA', 'PRZETWORNICA NAPIĘCIA','2003/07/10',2,23);<br />INSERT INTO projekty (ID, KOD, OPIS, DATA_PROJEKT, AUTOR_ID, LOKALIZACJA_ID)<br />          VALUES (projekty_ID.NEXTVAL, 'MRUGACZ', 'MRUGACZ diodowy','2008/01/29',4,26);<br />INSERT INTO projekty (ID, KOD, OPIS, DATA_PROJEKT, AUTOR_ID, LOKALIZACJA_ID)<br />          VALUES (projekty_ID.NEXTVAL, 'PRZERYWACZ', 'PRZErywacz zapadkowy','2011/06/24',3,18);<br />INSERT INTO projekty (ID, KOD, OPIS, DATA_PROJEKT, AUTOR_ID, LOKALIZACJA_ID)<br />          VALUES (projekty_ID.NEXTVAL, 'PEREPTUM', 'PERPETUM DEBI ... TFU MOBILE','2012/08/24',4,22);<br />INSERT INTO projekty (ID, KOD, OPIS, DATA_PROJEKT, AUTOR_ID, LOKALIZACJA_ID)<br />          VALUES (projekty_ID.NEXTVAL, 'INTERFEjs', 'interfejs szeregowy','2003/06/09',5,20);<br />INSERT INTO projekty (ID, KOD, OPIS, DATA_PROJEKT, AUTOR_ID, LOKALIZACJA_ID)<br />          VALUES (projekty_ID.NEXTVAL, 'LISTWA', 'LISTWA diodowa','2010/04/01',6,19);<br />INSERT INTO projekty (ID, KOD, OPIS, DATA_PROJEKT, AUTOR_ID, LOKALIZACJA_ID)<br />          VALUES (projekty_ID.NEXTVAL, 'WysWIETLACZ', 'Wyswietlacz LCD','2013/02/07',8,18);<br />INSERT INTO projekty (ID, KOD, OPIS, DATA_PROJEKT, AUTOR_ID, LOKALIZACJA_ID)<br />          VALUES (projekty_ID.NEXTVAL, 'DZWONEK', 'Dzwonek do drzwi','2005/09/22',1,19);<br />INSERT INTO projekty (ID, KOD, OPIS, DATA_PROJEKT, AUTOR_ID, LOKALIZACJA_ID)<br />          VALUES (projekty_ID.NEXTVAL, 'MIERNIK', 'Miernik procesorowy','2009/11/06',6,26);<br />INSERT INTO projekty (ID, KOD, OPIS, DATA_PROJEKT, AUTOR_ID, LOKALIZACJA_ID)<br />          VALUES (projekty_ID.NEXTVAL, 'UPS', 'Zasilacz awarayjny','2010/05/06',5,25);<br />INSERT INTO projekty (ID, KOD, OPIS, DATA_PROJEKT, AUTOR_ID, LOKALIZACJA_ID)<br />          VALUES (projekty_ID.NEXTVAL, 'PILOT', 'Pilot daleKiego zasięgu','2011/08/10',2,26);<br />INSERT INTO projekty (ID, KOD, OPIS, DATA_PROJEKT, AUTOR_ID, LOKALIZACJA_ID)<br />          VALUES (projekty_ID.NEXTVAL, 'TELEFON', 'TElefon','2010/05/17',1,24);<br />INSERT INTO projekty (ID, KOD, OPIS, DATA_PROJEKT, AUTOR_ID, LOKALIZACJA_ID)<br />          VALUES (projekty_ID.NEXTVAL, 'CUBE', 'Kostka Świecąca','2004/02/18',1,22);<br />INSERT INTO projekty (ID, KOD, OPIS, DATA_PROJEKT, AUTOR_ID, LOKALIZACJA_ID)<br />          VALUES (projekty_ID.NEXTVAL, 'ZEGAR', 'Zegar elektroniczny','2003/05/12',8,21);<br />INSERT INTO projekty (ID, KOD, OPIS, DATA_PROJEKT, AUTOR_ID, LOKALIZACJA_ID)<br />          VALUES (projekty_ID.NEXTVAL, 'GLOBUS', 'globus DIODOWY','2012/12/12',8,20);<br />INSERT INTO projekty (ID, KOD, OPIS, DATA_PROJEKT, AUTOR_ID, LOKALIZACJA_ID)<br />          VALUES (projekty_ID.NEXTVAL, 'DIODA', 'Migająca dioda','2007/09/08',1,18);<br /><br /><br />DROP TABLE Projekty_szcz;<br />CREATE TABLE Projekty_szcz(<br />    ID INTEGER NOT null,<br />    SUPER INTEGER,<br />    Element_ID INTEGER NOT null,<br />    Ilosc NUMERIC(10,2),<br />    CONSTRAINT Projekty_szcz_pk PRIMARY KEY(ID),<br />    CONSTRAINT Projekty_szcz_projekty_fk FOREIGN KEY(super) REFERENCES projekty(ID),<br />    CONSTRAINT Projekty_szcz_elementy_fk FOREIGN KEY(Element_ID) REFERENCES Elementy(ID),<br />    CONSTRAINT Projekty_szcz_ck CHECK (ilosc &gt; 0)<br />);<br /><br />DROP SEQUENCE Projekty_szcz_ID;<br />CREATE SEQUENCE Projekty_szcz_ID;<br /><br />INSERT INTO projekty_szcz (ID,SUPER,ELEMENT_ID,ILOSC)<br />        VALUES(projekty_szcz_ID.NEXTVAL,1,3,20);<br />INSERT INTO projekty_szcz (ID,SUPER,ELEMENT_ID,ILOSC)<br />        VALUES(projekty_szcz_ID.NEXTVAL,17,27,38);<br />INSERT INTO projekty_szcz (ID,SUPER,ELEMENT_ID,ILOSC)<br />        VALUES(projekty_szcz_ID.NEXTVAL,2,27,28);<br />INSERT INTO projekty_szcz (ID,SUPER,ELEMENT_ID,ILOSC)<br />        VALUES(projekty_szcz_ID.NEXTVAL,9,16,47);<br />INSERT INTO projekty_szcz (ID,SUPER,ELEMENT_ID,ILOSC)<br />        VALUES(projekty_szcz_ID.NEXTVAL,15,27,47);<br />INSERT INTO projekty_szcz (ID,SUPER,ELEMENT_ID,ILOSC)<br />        VALUES(projekty_szcz_ID.NEXTVAL,8,3,83);<br />INSERT INTO projekty_szcz (ID,SUPER,ELEMENT_ID,ILOSC)<br />        VALUES(projekty_szcz_ID.NEXTVAL,4,16,51);<br />INSERT INTO projekty_szcz (ID,SUPER,ELEMENT_ID,ILOSC)<br />        VALUES(projekty_szcz_ID.NEXTVAL,6,20,43);<br />INSERT INTO projekty_szcz (ID,SUPER,ELEMENT_ID,ILOSC)<br />        VALUES(projekty_szcz_ID.NEXTVAL,9,12,80);<br />INSERT INTO projekty_szcz (ID,SUPER,ELEMENT_ID,ILOSC)<br />        VALUES(projekty_szcz_ID.NEXTVAL,8,6,24);<br />INSERT INTO projekty_szcz (ID,SUPER,ELEMENT_ID,ILOSC)<br />        VALUES(projekty_szcz_ID.NEXTVAL,7,21,75);<br />INSERT INTO projekty_szcz (ID,SUPER,ELEMENT_ID,ILOSC)<br />        VALUES(projekty_szcz_ID.NEXTVAL,5,12,73);<br />INSERT INTO projekty_szcz (ID,SUPER,ELEMENT_ID,ILOSC)<br />        VALUES(projekty_szcz_ID.NEXTVAL,13,26,3);<br />INSERT INTO projekty_szcz (ID,SUPER,ELEMENT_ID,ILOSC)<br />        VALUES(projekty_szcz_ID.NEXTVAL,18,19,93);<br />INSERT INTO projekty_szcz (ID,SUPER,ELEMENT_ID,ILOSC)<br />        VALUES(projekty_szcz_ID.NEXTVAL,13,2,85);<br />INSERT INTO projekty_szcz (ID,SUPER,ELEMENT_ID,ILOSC)<br />        VALUES(projekty_szcz_ID.NEXTVAL,14,5,30);<br />INSERT INTO projekty_szcz (ID,SUPER,ELEMENT_ID,ILOSC)<br />        VALUES(projekty_szcz_ID.NEXTVAL,18,29,4);<br />INSERT INTO projekty_szcz (ID,SUPER,ELEMENT_ID,ILOSC)<br />        VALUES(projekty_szcz_ID.NEXTVAL,9,16,50);<br />INSERT INTO projekty_szcz (ID,SUPER,ELEMENT_ID,ILOSC)<br />        VALUES(projekty_szcz_ID.NEXTVAL,11,23,61);<br />INSERT INTO projekty_szcz (ID,SUPER,ELEMENT_ID,ILOSC)<br />        VALUES(projekty_szcz_ID.NEXTVAL,7,21,17);<br />INSERT INTO projekty_szcz (ID,SUPER,ELEMENT_ID,ILOSC)<br />        VALUES(projekty_szcz_ID.NEXTVAL,3,13,26);<br />INSERT INTO projekty_szcz (ID,SUPER,ELEMENT_ID,ILOSC)<br />        VALUES(projekty_szcz_ID.NEXTVAL,11,2,36);<br />INSERT INTO projekty_szcz (ID,SUPER,ELEMENT_ID,ILOSC)<br />        VALUES(projekty_szcz_ID.NEXTVAL,9,22,43);<br />INSERT INTO projekty_szcz (ID,SUPER,ELEMENT_ID,ILOSC)<br />        VALUES(projekty_szcz_ID.NEXTVAL,4,18,44);<br />INSERT INTO projekty_szcz (ID,SUPER,ELEMENT_ID,ILOSC)<br />        VALUES(projekty_szcz_ID.NEXTVAL,11,11,36);<br />INSERT INTO projekty_szcz (ID,SUPER,ELEMENT_ID,ILOSC)<br />        VALUES(projekty_szcz_ID.NEXTVAL,2,20,4);<br />INSERT INTO projekty_szcz (ID,SUPER,ELEMENT_ID,ILOSC)<br />        VALUES(projekty_szcz_ID.NEXTVAL,4,19,9);<br />INSERT INTO projekty_szcz (ID,SUPER,ELEMENT_ID,ILOSC)<br />        VALUES(projekty_szcz_ID.NEXTVAL,17,18,90);<br />INSERT INTO projekty_szcz (ID,SUPER,ELEMENT_ID,ILOSC)<br />        VALUES(projekty_szcz_ID.NEXTVAL,4,6,90);<br />INSERT INTO projekty_szcz (ID,SUPER,ELEMENT_ID,ILOSC)<br />        VALUES(projekty_szcz_ID.NEXTVAL,2,5,9);<br />INSERT INTO projekty_szcz (ID,SUPER,ELEMENT_ID,ILOSC)<br />        VALUES(projekty_szcz_ID.NEXTVAL,10,4,57);<br />INSERT INTO projekty_szcz (ID,SUPER,ELEMENT_ID,ILOSC)<br />        VALUES(projekty_szcz_ID.NEXTVAL,16,3,89);<br />INSERT INTO projekty_szcz (ID,SUPER,ELEMENT_ID,ILOSC)<br />        VALUES(projekty_szcz_ID.NEXTVAL,15,9,65);<br />INSERT INTO projekty_szcz (ID,SUPER,ELEMENT_ID,ILOSC)<br />        VALUES(projekty_szcz_ID.NEXTVAL,7,29,78);<br />INSERT INTO projekty_szcz (ID,SUPER,ELEMENT_ID,ILOSC)<br />        VALUES(projekty_szcz_ID.NEXTVAL,9,23,2);<br />INSERT INTO projekty_szcz (ID,SUPER,ELEMENT_ID,ILOSC)<br />        VALUES(projekty_szcz_ID.NEXTVAL,17,22,38);<br />INSERT INTO projekty_szcz (ID,SUPER,ELEMENT_ID,ILOSC)<br />        VALUES(projekty_szcz_ID.NEXTVAL,14,15,91);<br />INSERT INTO projekty_szcz (ID,SUPER,ELEMENT_ID,ILOSC)<br />        VALUES(projekty_szcz_ID.NEXTVAL,11,28,7);<br />INSERT INTO projekty_szcz (ID,SUPER,ELEMENT_ID,ILOSC)<br />        VALUES(projekty_szcz_ID.NEXTVAL,16,1,52);<br />INSERT INTO projekty_szcz (ID,SUPER,ELEMENT_ID,ILOSC)<br />        VALUES(projekty_szcz_ID.NEXTVAL,9,20,22);<br />INSERT INTO projekty_szcz (ID,SUPER,ELEMENT_ID,ILOSC)<br />        VALUES(projekty_szcz_ID.NEXTVAL,14,20,28);<br />INSERT INTO projekty_szcz (ID,SUPER,ELEMENT_ID,ILOSC)<br />        VALUES(projekty_szcz_ID.NEXTVAL,9,9,58);<br />INSERT INTO projekty_szcz (ID,SUPER,ELEMENT_ID,ILOSC)<br />        VALUES(projekty_szcz_ID.NEXTVAL,1,20,20);<br />INSERT INTO projekty_szcz (ID,SUPER,ELEMENT_ID,ILOSC)<br />        VALUES(projekty_szcz_ID.NEXTVAL,8,23,92);<br />INSERT INTO projekty_szcz (ID,SUPER,ELEMENT_ID,ILOSC)<br />        VALUES(projekty_szcz_ID.NEXTVAL,10,19,8);<br />INSERT INTO projekty_szcz (ID,SUPER,ELEMENT_ID,ILOSC)<br />        VALUES(projekty_szcz_ID.NEXTVAL,2,29,46);<br />INSERT INTO projekty_szcz (ID,SUPER,ELEMENT_ID,ILOSC)<br />        VALUES(projekty_szcz_ID.NEXTVAL,1,2,22);<br />INSERT INTO projekty_szcz (ID,SUPER,ELEMENT_ID,ILOSC)<br />        VALUES(projekty_szcz_ID.NEXTVAL,7,14,76);<br />INSERT INTO projekty_szcz (ID,SUPER,ELEMENT_ID,ILOSC)<br />        VALUES(projekty_szcz_ID.NEXTVAL,18,16,93);<br />INSERT INTO projekty_szcz (ID,SUPER,ELEMENT_ID,ILOSC)<br />        VALUES(projekty_szcz_ID.NEXTVAL,4,18,92);<br />INSERT INTO projekty_szcz (ID,SUPER,ELEMENT_ID,ILOSC)<br />        VALUES(projekty_szcz_ID.NEXTVAL,17,14,90);<br />INSERT INTO projekty_szcz (ID,SUPER,ELEMENT_ID,ILOSC)<br />        VALUES(projekty_szcz_ID.NEXTVAL,10,13,97);<br />COMMIT;[/syntax]<br /><br />Dzisiaj troszkę opiszę instrukcję bez której nie istniał by żaden sql, a zwą ją SELECT.<br /><br />Składnia instrukcji wygląda tak:<br /><br /><img src="http://forum.atnel.pl/_obrazki/o/225/29ac69f5c4d8f12ddf92860b85d989d7.png" alt="Obrazek" /><br /><br />Wygląda groźnie, ale nie martwcie się w rzeczywistości jest prosta jak drut.<br />Hmmm... w tym momencie warto zadać sobie pytanie co ona właściwie robi ?<br />Ano jest opowiedzialna za &quot;wyławaianie&quot; interesujących nas infromacji z bazy danych, najprostszym przykładem użycia tej instrukcji jest listing jakiejś tabeli<br />[syntax=sql]select * from autorzy;[/syntax]<br />wciskamy F10.<br /><br />I mamy pięknie wyświetloną zawartość tabeli autorzy.<br />A co zrobić żeby wyświetliły się tylko imię i nazwisko ?<br /><br />Nic prostszego należy zamiast * wymienić tylko te kolumny które nas interesują, czyli piszemy:<br /><br />[syntax=sql]SELECT imie, nazwisko FROM autorzy;[/syntax]<br />i wciskamy F10 , prawda że proste <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Jednak tutaj zatrzymamy się na chwilkę żeby powiedzieć kilka oczywistych rzeczy o SQLTOOLS<br /><br />Są trzy magiczne przyciski zaznaczone na czerwono które będziemy używać. W kolejności od lewej:<br />- &quot;Wykonaj bierzący kod&quot; (F10)<br />- &quot;Wykonaj kod w krokach&quot; (F11)<br />- &quot;Wykonaj cały skrypt&quot; (F5)<br /><br /><a href="http://forum.atnel.pl/_obrazki/o/225/5aab64a7aad1ea2baa7f99e5f215b659.png"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/225/5aab64a7aad1ea2baa7f99e5f215b659.png" alt="Obrazek" /></a><br /><br />Jednak aby zadziałały prawidłowo, każdy blok kodu musi być zakończony <strong>średnikiem</strong>, jeżeli tego nie zrobimy to Oracle da nam po łapkach w postaci błędu<br />&quot;ORA-00933: SQL command not properly ended&quot;<br /><br />Jak to wygląda w praktyce, wpiszcie poniższy kod to sprawdzimy <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br />[syntax=sql]SELECT * FROM autorzy;<br />SELECT * FROM dzialy;<br />SELECT * FROM elementy;[/syntax]<br /><br />Stawiając kursor w dowolnej linii i wciskając F10, wykona nam się tylko ten blok kodu w którym mamy postawiony kursor,<br />stawiając kursor w pierwszej linii i wciskając F11, zostanie wykonany blok kodu w którym jesteśmy i następnie kursor przejdzie do następnej linii ale nie wykona jej (przydatna funkcja przy debugowaniu),<br />natomiast F5 wykona cały skrypt czyli wszytko co mamy w pliku.<br /><br />Dodatkowo należy wspomnieć że komentarz pojedyńczej linii osiągniemy przy pomocy<br />-- Komentarz <br />natomiast cały blok komentujemy jak w C czyli <br />/* To<br />   jest<br />   komentarz<br />   blokowy */<br /><br />Dobrze, podstawy obsługi programu mamy już za sobą <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> , więc wróćmy do Oracle.<br />Skoro już znamy podstawową składnię dla select, czas przedstawić wam funkcję <strong>NVL</strong>.<br /><br />NVL(arg1,arg2)<br /><br />Funkcja ta przyjmuje dwa argumenty tego samego typu, czyli jeżeli sprawdzamy tekst, to drugi parametr też musi być tekstem i w wyniku też dostaniemy teskt.<br />Sama funkcja działa tak że jako pierwszy argument podajemy nazwę kolumny którą sprawdzamy i jeżeli okaże się że wartością null to zostanie wyświetlon zawartość drugiego argumentu.<br /><br />W praktyce wygląda to tak:<br /><br />zapytanie z null<br />[syntax=sql]SELECT kod, producent FROM elementy;[/syntax]<br />zapytanie z NVL + jakiś tekst<br />[syntax=sql]SELECT kod,Nvl(Producent,'BRAK PRODUCENTA') FROM elementy;[/syntax]<br />zaytanie z użyciem dwóch kolumn<br />[syntax=sql]SELECT kod,Nvl(Producent,kod) FROM elementy;[/syntax]<br /><br />Przyglądając się jednak nazwom kolumn z ostatniego przykładu zauważymy że są jakieś &quot;dziwne&quot;,  więc wypadało by coś z tym zrobić.<br />Otóż w tym przypadku przychodza nam z pomoca <strong>aliasy</strong><br /><br />Poniżej macie zamieszczone 5 przykładów wykorzystania aliasów, należy zwrócić uwagę że do aliasów nie musi być wykorzystywane słowo AS, ale ja osobiście używam ponieważ przy dużych zapytaniach dla mnie kod jest bardziej przejrzysty.<br />Kolejną sprawą jest ignorowanie wielkości liter co pokazują kolumny 1 i 2. Aby temu zaradzić stosuje się cudzysłowy, stosuje się je także do wielowyrazowych nazw kolumn.<br />[syntax=sql]SELECT  Nvl(Producent,kod) Producent,<br />        Nvl(Producent,kod) AS Producent,  <br />        Nvl(Producent,kod) AS &quot;Producent&quot;,<br />        Nvl(Producent,kod) AS &quot;Producent Elementu&quot;,<br />        Nvl(Producent,kod) &quot;Producent Elementu&quot;          <br />FROM elementy;[/syntax]<br /><br />Na liście instrukcji SELECT są także inne cuda cudawianki <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> jak na przykład operatory arytmetyczne, operator konkatenacji czy też funkcje wbudowane i na pierwszy ogień weżmiemy sobie operator konkatenacji.<br />Otóż jeżeli wyświetlimy imię i nazwisko z tabeli autorzy, to się okaże że są to dwie kolumny<br />[syntax=sql]SELECT imie, nazwisko FROM autorzy;[/syntax]<br />A my byśmy chcieli żeby zostały połączone w jedną kolumnę, to właśnie w takim przypadku przychodzi nam z pomocą operator konkatenacji który ma symbol <strong>||</strong><br />I oczywiście przykład użycia<br />[syntax=sql]SELECT imie AS &quot;Imię&quot;,<br />       nazwisko AS &quot;Nazwisko&quot;,<br />       imie||' '||nazwisko AS &quot;Połączone Imię i Nazwisko&quot; <br />FROM autorzy;[/syntax]<br /><br />Należy jeszcze wspomnieć że operator ten wartość null traktuje jako pusty ciąg znaków.<br /><br />Czas na operatory matematyczne + -  * /<br /> - jak wszyscy wiemy działają na liczbach <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /> - mają takie same priorytety jak w regułach matematycznych<br /> - nic nie stoi na przeszkodzie żeby stosowac nawiasy <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /> - i [b]najważniejsze dla wartości null ZAWSZE zwracają null[\b]<br /><br />[syntax=sql]SELECT 100 - 9 * 5 / 3 + 15 AS &quot;Wynik&quot; FROM autorzy;[/syntax]<br /><br />Poniżej dodatkowo zamieszczam troszke bardziej rozbudowany kod obrazujący działeanie kilku funkcji, tylko na razie nie wnikajcie w pierwszą część kodu <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br />Żeby nam się nie pomerdało otwórzcie nowy skrypt wklejcie kod który jest niżej i odpalcie F5<br />[syntax=sql]/*  Na razie nie wnikajcie <br />    o co chodzi w tym fragmencie kodu ;)<br />*/<br /><br />CREATE TABLE PRZYKLADY_NVL(<br />    ilosc INTEGER,<br />    WARTOSC INTEGER<br />);<br /><br />INSERT INTO PRZYKLADY_NVL<br />              VALUES (10,null);<br /><br />INSERT INTO PRZYKLADY_NVL<br />              VALUES (10,4);<br />INSERT INTO PRZYKLADY_NVL<br />              VALUES (2,17);<br /><br /><br />-- TUTAJ jest interesująca was część kodu --<br /><br />SELECT  ilosc,<br />        wartosc,<br />        ilosc * wartosc + 2 AS &quot;Bez eliminacji wartości null&quot;, <br />        Nvl(ilosc,0) * wartosc + 2 AS &quot;Eliminacja jednego null&quot;,<br />        Nvl(ilosc,0) * Nvl(wartosc,0) + 2 AS &quot;Eliminacja obydwóch null&quot;<br />FROM Przyklady_NVL;[/syntax]<br /><br />Skoro już umiemy tak dużo, to warto sparwdzić co potrafi DISTINCT w instrukcji SELECT.<br />Zasada działania polega pokazaniu tylko tych rekordów które są unikatowe dla instrukcji SELECT. O co tu chodzi, najprościej chyba będzie wytłumaczyć na przykładzie.<br />Jeżeli wykonamy takie zapytanie<br />[syntax=sql]select nazwisko from autorzy;[/syntax]<br />to w rezultacie otzrymamy listę nazwisk  (8 wierszy) występujących w tej kolumnie łącznie z tymi powtarzającymi się, jak zwrócicie uwagę jest tam dwóch Kowalskich, a my przecież<br />chcemy otrzymać listę nazwisk bez powtórzeń i tu z pomocą przychodzi nam właśnie distinct które &quot;wyeliminuje&quot; nam tego jednego Kowalskiego ... <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br />[syntax=sql]SELECT DISTINCT nazwisko FROM autorzy;[/syntax]<br /><br />Należy jednak pamiętać że distinct działa dla kombinacji wszystkich kolumn występujących w zapytaniu dlatego gdybyśmy dodali do zapytania kolumnę IMIE to DISTINCT na pierwszy rzut oka nie zadziała,<br />i byli byśmy w błędzie ponieważ ono zadziałało, tylko że para kolumn NAZWISKO oraz IMIE nie tworzy unikalnej kombinacji <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Kolejną sprawą o której warto wiedzieć to, to że DISTINCT rozróżnia wielkości znaków i wartość &quot;MITra&quot; nie będzie tym samym co &quot;mitra&quot;,<br />natomiast wartość null w tym przypadku (traktować jak wyjątek od reguły bo przecież nie wiadomo co nie może być niewiadomo czym <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" />) zostanie potraktowana jako taka sama wartość i zostanie zgrupowana.<br />I oczywiście przykłady:<br />Bez DISTINCT:<br />[syntax=sql]SELECT Producent from elementy;[/syntax]<br />Z DISTINCT:<br />[syntax=sql]SELECT DISTINCT Producent from elementy;[/syntax]<br /><br />Ufff na tym na razie skończymy <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=225">Malutki_27</a> — 25 wrz 2013, o 12:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Malutki_27]]></name></author>
<updated>2013-09-24T11:56:04+01:00</updated>
<published>2013-09-24T11:56:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4264&amp;p=50662#p50662</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4264&amp;p=50662#p50662"/>
<title type="html"><![CDATA[Re: SQL - ORACLE]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4264&amp;p=50662#p50662"><![CDATA[
No dobra, chyba przyszedł czas żeby trochę po przynudzać <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Więc będzie trochę definicji <br /><br />SQL - ang. Structured Query Language jest to nic innego jak strukturalny język używany do tworzenia,modyfikowania baz danych oraz do umieszczania i pobierania danych z tych baz.<br /><br />Podstawowymi cechami SQL są:<br /><br />- jest językiem wysokiego poziomu (językiem czwartej generacji – 4GL), opartym na słownictwie języka angielskiego, jego wyrażenia mają określoną strukturę,<br />- tym niemniej, jak większość nowoczesnych języków ma dość swobodny format, tzn. iż poszczególne fragmenty poleceń nie muszą być umieszczane w określanych miejscach,<br />- jest językiem deklaratywnym (nieproceduralnym), zorientowanym na wynik (użytkownik definiuje, co chce otrzymać, ale nie pisze jak), inaczej mówiąc, SQL nie potrzebuje zatem podawania przez użytkownika dokładnego sposobu dostępu do danych i sposobu przetwarzania danych,<br />- jest oparty na algebrze relacji,<br />- zawiera logikę trójwartościową,<br />- nie posiada instrukcji sterujących wykonywaniem programu,<br />- nie dopuszcza rekurencji,<br />- umożliwia definiowanie struktur danych, wyszukiwanie danych oraz operacje na danych,<br />- działa na zbiorach danych.<br /><br />Do podstawowych komponentów języka SQL należą :<br /><br />- DDL (Data Definition Language) <br />polecenia:<br />- CREATE - tworzenie tabel, baz danych itd.<br />- ALTER  - modyfikacja tego co powyżej<br />- DROP  - usuwanie j.w. <br />- TRUNCATE - usuwa rekordy z tabeli<br />Wykonanie któregoś z powyższych poleceń jest nie odwracalne, oznacza że polecenia nie da się cofnąć.<br /><br />- DQL (Data Query Language)<br />polecenia:<br />- SELECT - wyświetlanie rekordów<br />Tym poleceniem nie da się nic popsuć <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />- DML (Data Manipulation Language)<br />polecenia:<br />- INSERT - wstawianie rekordów do tabel<br />- UPDATE - aktualizacja rekordów<br />- DELETE  - usuwanie rekordów<br />Co tu dużo pisać, opisy mówią same za siebie <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />- DCL (Data Control Language)<br />polecenia:<br />- GRANT - służy do nadawania uprawnień <br />- REVOKE - odbiera uprawnienia<br />- DENY - Zabrania wykonywania operacji<br />- COMMIT - zatwierdzanie zmian wprowadzonych przez DML<br />- ROLLBACK - cofanie zmian wprowadzonych przez DML<br /><br /><br />Skoro parę regułek mamy już za sobą to warto by wsponieć o typach danych.<br /><br />Jest ich kilka:<br />- CHAR(n) - typ tekstowy o stałej długości n znaków<br />- VARCHAR(n) – typ tekstowy o zmiennej maksymalnej długości n znaków<br />- VARCHAR2(n) - to samo co wyżej tylko zoptymalizowany, i zalecany przez Oracle<br />- INTEGER – typ całkowitoliczbowy<br />- NUMERIC(p,s) – typ liczbowy przechowujący wartości rzeczywiste o określonej precyzji (p) i skali (s).<br />Precyzja oznacza ilość przechowywanych cyfr liczby, a skala ilość przechowywanych cyfr po przecinku.<br />Przykładowo NUMERIC(6,2) przechowuje liczbę o długości 6 cyfr, w tym 2 cyfry na cześć ułamkowa. <br />- FLOAT – typ rzeczywisty o pojedynczej precyzji<br />- DOUBLE – typ rzeczywisty o podwójnej precyzji<br />- BLOB – dane binarne<br />- CLOB – dane tekstowe o dużym rozmiarze<br />- DATE – data<br />- TIME – czas<br />- TIMESTAMP – data+czas<br /><br />Jak już znamy typy danych warto by też poznać operatory którymi się będziemy posługiwać, a jest ich kilka rodzajów<br />i pozwolicie że nie będę ich opisywał <br /><br />Porównania:<br />= != &lt;&gt; &gt; &lt; &gt;= &lt;=<br /><br />arytmetyczne:<br />+ - * /<br /><br />konkatenacji (łączenie dwóch wartości tekstowych)<br />||<br /><br />do określania zakresów<br />[NOT] BEETWEN ... AND ...<br />[NOT] IN (...,...,...)<br /><br />do określania wzorców:<br />[NOT] LIKE<br /><br />logiczne:<br />AND OR NOT<br /><br />do testowania wartości pustych:<br />IS [NOT] NULL<br /><br />W tym miejscu warto wspomnieć że null nigdy nie równa się null więc warunek null=null nigdy nie będzie prawdziwy.<br />Dlatego należy zapamiętać to stwierdzenie -&gt; <strong>niewiadomo co nidy nie będzie równe niewiadomo czemu</strong><br /><br />OK, operatory mamy już za sobą, więc jeszcze tylko tablice prawdy i już daje wam spokój (warto zwrócić uwagę jak zachowuje się null)<br /><br /><a href="http://forum.atnel.pl/_obrazki/o/225/fbbcf55db828b5cd4a23ab1851082fd4.png"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/225/fbbcf55db828b5cd4a23ab1851082fd4.png" alt="Obrazek" /></a><br /><br />Na dziś wystarczy <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=225">Malutki_27</a> — 24 wrz 2013, o 11:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Malutki_27]]></name></author>
<updated>2013-09-23T13:37:17+01:00</updated>
<published>2013-09-23T13:37:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4264&amp;p=50562#p50562</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4264&amp;p=50562#p50562"/>
<title type="html"><![CDATA[SQL - ORACLE]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4264&amp;p=50562#p50562"><![CDATA[
Wszelkie komentarze lub zachwyty (o ile będą ) umieszczajcie w tym ...wątku<br /><br /><span style="color: #FF0000">Skasowane, po co tworzysz na zapas temat? Będzie potrzeba to rozwinie się dyskusja - Różowy J.</span><br /><br /><br />Chyba już przyszedł czas żeby powiedzieć coś o takim tworze jak sql, który pewnie kilku osobom się przyda <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br />Jednak żeby nie było zbyt różowo do zabawy wybrałem coś takiego co się nazywa: ORACLE Database 11g XE.<br />Jest to wersja darmowa do zastosowań domowych i o ile się nie mylę także komercyjnych. Sam serwer ma kilka ograniczeń ( zresztą tak samo jak MSSQL w wersji express) <br />w postaci ograniczenia w ilości użytkowanej pamięci, wielkości bazy danych (11GB - i niech ktoś powie że dla niego za mało, to poproszę Suna albo różowego o przycięcie ilości pigułek <img src="https://forum.atnel.pl/images/smilies/icon_razz.gif" alt=":P" title="Pokazuje język" /> ) <br />oraz ilości używanych procesorów.<br /><br />Jeszcze może słowo wyjaśnienia dlaczego dlaczego Oracle, ano dlatego:<br />- że każdy się go boi <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br />- że jest prosty<br />- że jest inny<br />- że nikt go nie używa do zastosowań amatorskich<br />- że że .. że .. że ( ten argument mi się podoba najbardziej <img src="https://forum.atnel.pl/images/smilies/icon_razz.gif" alt=":P" title="Pokazuje język" /> )<br />- i najważniejsze dawno nic w nim nie robiłem więc warto sobie przypomnieć podstawy <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Zresztą generalnie sam sql na różnych serwerach tak bardzo się nie różni, oczywiście są pewne niuanse i nie konsekwencje w implementacji<br />składni sql czy też T-SQL ale to już inna bajka.<br /><br />To by było na tyle tytułem wstępu, warto by przystąpić do instalacji tego tworu na komputerze, która zresztą nie obędzie się bez małych perturbacji, więc <strong>proszę w miarę uważnie czytać</strong><br /><br />Na początek musimy sobie zorganizować dwie instalki, jedną jest sam serwer, a drugą narzędzie SQLTOOLS które posłuży nam do pisania skryptów sql.<br /><br />Serwer Oracle ściągamy z <a href="http://www.oracle.com/technetwork/products/express-edition/downloads/index.html"  class="postlink">tej lokalizacji</a><br /><br />Akceptujemy licencję i ściągamy wersję Oracle Database Express Edition 11g Release 2 for Windows x32<br />żeby nie było niespodzianek trzeba się zarejestrować co oczywiście niczym nie grozi (Chyba tylko tym że będą mieli nasze dane o ile poda ktoś prawdziwe <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> )<br /><br />Następnie zaglądamy do działu Download na stronie <a href="http://www.sqltools.net/"  class="postlink">SQLTOOLS</a> i zasysamy pakiet SQLTools 1.6 build 15 (from SourceForge)<br /><br />Skoro mamy już te dwie instalki to czas się zabrać do roboty.<br />Rozpakowujemy do jakieś folderu instalację Oracle i odpalamy setup.exe<br />Naszym oczom pojawi się takie okienko gdzie klikamy next<br /><br /><a href="http://forum.atnel.pl/_obrazki/o/225/1c28cd57d209e8377fc7cc49a09a76b9.png"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/225/1c28cd57d209e8377fc7cc49a09a76b9.png" alt="Obrazek" /></a><br /><br />Następnie akceptujemy licencję i klikamy next<br /><br /><a href="http://forum.atnel.pl/_obrazki/o/225/25ccc79738838cd35349c5bb56dc2ccd.png"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/225/25ccc79738838cd35349c5bb56dc2ccd.png" alt="Obrazek" /></a><br /><br />Dalej się nas pytają co chcemy zainstalować (raczej dużego wyboru nie ma <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ) no i oczywiście gdzie ma być zainstalowane,<br />jak juz z tym się uporamy to klikamy next<br /><br /><a href="http://forum.atnel.pl/_obrazki/o/225/c01e25bb0023c7076f40b991881b9537.png"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/225/c01e25bb0023c7076f40b991881b9537.png" alt="Obrazek" /></a><br /><br />Następnie naszym oczom ukaże się okienko o wprowadzenie hasła administratora serwera więc je wprowadzamy  w drugim okienku potwierdzamy<br />i klikamy next.<br /><br /><a href="http://forum.atnel.pl/_obrazki/o/225/2fafb7f2e1015211b46f9caf5507aee4.png"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/225/2fafb7f2e1015211b46f9caf5507aee4.png" alt="Obrazek" /></a><br /><br />A teraz się założę że nikt nie spojrzał jak te konta się nazywają <img src="https://forum.atnel.pl/images/smilies/icon_razz.gif" alt=":P" title="Pokazuje język" /><br />Dla przypomnienia napiszę że SYS oraz SYSTEM jest to o tyle ważne że jeżeli nie zapamiętacie tego to będą problemy z zarządzaniem serwera<br /><br />No dobra teraz wyskoczy nam okienko z podsumowaniem instalacji, numerami portów na których nasłuchuje serwer itd.<br /><br /><a href="http://forum.atnel.pl/_obrazki/o/225/44da03cce00809a842e6130e3e349e1a.png"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/225/44da03cce00809a842e6130e3e349e1a.png" alt="Obrazek" /></a><br /><br />Przy okazji nie zdziwcie się jak wyskoczy wam coś takiego <br /><br /><a href="http://forum.atnel.pl/_obrazki/o/225/80d63062f1f4f19dd718ab0afa365fdc.png"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/225/80d63062f1f4f19dd718ab0afa365fdc.png" alt="Obrazek" /></a><br /><br /><span style="color: #FF0000"><strong>Pod żadnym pozorem nie klikajcie ok</strong></span> bo właśnie w tej chwili zajmiemy sie tym błędem.<br /><br />Otwieramy explorator windows i idziemy do ścieżki którą wskazał nam komunikat.<br />Następnie odnajdujemy plik o nazwie <strong>OracleMTSRecoveryService.reg</strong> kopiujemy go i zmieniamy mu nazwę na <strong>KEY_XE.reg</strong><br />I przy okazji kopiujemy ścieżkę z paska adresu, bo za chwilkę się nam przyda.<br /><br /><br />Po tym wszystkim odpalamy edytor rejestru (regedit.exe) i odnajdujemy klucz<br /><br />[syntax=bash]HKEY_CLASSES_ROOT\Installer\Products\266B7A503A089BE4EAD1986A429434C1\SourceList\Media[/syntax]<br /><br />gdzie zmieniamy wartość klucza &quot;1&quot; na ścieżkę którą przed chwilą skopiowaliśmy w Exploatorze Windows.<br /><br />Dopiero po tych wszystkich operacjach z ulgą klikamy ok <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Dalej już nie powinno być większych problemów i naszym oczom powinno się ukazać takie okienko jak poniżej gdzie klikamy Finish<br /><br /><a href="http://forum.atnel.pl/_obrazki/o/225/4a9720bf52da0c1e0ef35e7e359e3371.png"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/225/4a9720bf52da0c1e0ef35e7e359e3371.png" alt="Obrazek" /></a><br /><br />No dobra instalacja Oracle już za nami, ale to nie oznacza końca &quot;kłopotów&quot; jednak o tym za chwilkę.<br /><br />Jeżeli wszystko przebiegło pomyślnie (w co nie wierzę) i po kliknięciu linku Get Started with Oracle &quot;bla bla bla ...&quot; ( jest na pulpicie )<br />ukaże nam się w przeglądarce taka strona <br /><br /><a href="http://forum.atnel.pl/_obrazki/o/225/f2c9a9be0acc9fe08e38549082977108.png"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/225/f2c9a9be0acc9fe08e38549082977108.png" alt="Obrazek" /></a><br /><br />to jesteśmy w domu <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br />A jak nie to jedziemy dalej .....<br /><br />Odpalamy Explorator Windows i szukamy skrótu GET_Started w lokalizacji gdzie zainstalowaliśmy Oracle.<br />W moim przypadku jest to [syntax=bash]C:\oraclexe\app\oracle\product\11.2.0\server[/syntax]<br />Kopiujemy w/w link na pulpit i edytujemy go do postaci <!-- m --><a class="postlink" href="http://localhost:8080/apex/f?p=4950" >http://localhost:8080/apex/f?p=4950</a><!-- m --> ,<br />następnie zapisujemy i przenosimy z powrotem na swoje miejsce.<br /><br />Nooo i teraz nie ma bata musi działać <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />a skoro tak to od razu klikamy na Apllication Express, gdzie następnie zostaniemy poproszeni o zalogowanie się, co czynimy czym prędzej <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />User : SYSTEM<br />Password : powinno być ci znane bo przecież klepałeś je podczas instalacji <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Następnie ukaże nam się formularz do tworzenia nowego użytkownika co czynimy, tutaj mam gorącą prośbę załużcie użytkownika jak na obrazku, dlatego że jak później będę wrzucał jakieś skrypty to żeby obyło się bez niespodzianek<br /><br /><a href="http://forum.atnel.pl/_obrazki/o/225/41053daa855033fb2c2f99e70388bd73.png"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/225/41053daa855033fb2c2f99e70388bd73.png" alt="Obrazek" /></a><br /><br />No dobra to już 3/4 drogi za nami pozostała nam tylko instalacja SQLTOOLS.<br />A właśnie słowo wyjaśnienia dlaczego SQLTOOLS, ano dlatego że jest to lekki edytor obsługujący Oracle, co prawda jest oryginał który nazywa się SQL Developer ale jest bardzo &quot;ciężki&quot; i prawdę mówiąc nie będzie nam potrzebne aż tak potężne środowisko.<br /><br />No dobra więc zabieramy się za robotę. Instalkę SQLTOOLS powinniście już mieć gdzieś zapisaną, więc ją odpalamy i instalujemy.<br />Tutaj miała być instrukcja instalacji, no ale bez przegięcia myślę że te parę razy &quot;next&quot; to potraficie wcisnąć bez instrukcji <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br /><br />Po skończonej instalacji odpalamy Nasz edytor gdzie ukaże nam się takie okienko w którym dzielnie wciskamy ok<br /><br /><a href="http://forum.atnel.pl/_obrazki/o/225/9a54fe2778be7d4557966c0b501435a4.png"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/225/9a54fe2778be7d4557966c0b501435a4.png" alt="Obrazek" /></a><br /><br />następnie pojawi się okienko z prośbą o podanie hasła (hasło to jest zabezpieczeniem edytora przed nie upoważnionym użytkowaniem i tak przy okazji chroni nasze połączenia do baz danych)<br /><br />więc kto chce to wpisuje, a kto nie chce to nie wpisuje<br /><br /><a href="http://forum.atnel.pl/_obrazki/o/225/3fc281104d69668d01ad126cb0277467.png"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/225/3fc281104d69668d01ad126cb0277467.png" alt="Obrazek" /></a><br /><br />Ok skoro już się zabezpieczyliśmy albo i nie <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> okaże się za jakiś czas <img src="https://forum.atnel.pl/images/smilies/icon_razz.gif" alt=":P" title="Pokazuje język" /><br /><br />to przystępujemy do konfiguracji połączenia z bazą danych<br /><br />więc pisujemy po prawej stronie okienka:<br />TAG: ATNEL<br />User: ATNEL<br />Password: atnel<br /><br />zaznaczamy bypass coś tam ...<br /><br />Host: localhost<br />TCP Port : 1521<br /><br /><a href="http://forum.atnel.pl/_obrazki/o/225/1e506ba3a4812cfb5db9dca1dbd13acb.png"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/225/1e506ba3a4812cfb5db9dca1dbd13acb.png" alt="Obrazek" /></a><br /><br />Następnie klikamy TEST , jeżeli wszystko przebiegło jak należy, powinien ukazać się komunikat <br /><br /><a href="http://forum.atnel.pl/_obrazki/o/225/ccf4d9f897275e8b2a0773265cf60def.png"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/225/ccf4d9f897275e8b2a0773265cf60def.png" alt="Obrazek" /></a><br /><br />A skoro jest wszystko ok to klikamy save a później connect<br /><br />No dobra teraz wypadało by sprawdzić chociaż czy cały ten nasz trud się opłacał,<br />więc czym prędzej wpisujemy <br />[syntax=sql]select * from dual;[/syntax]<br /><br />I .......... mamy takie cuś <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br /><a href="http://forum.atnel.pl/_obrazki/o/225/f0dcb90a80cb3d25a8b7da56c11cd29b.png"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/225/f0dcb90a80cb3d25a8b7da56c11cd29b.png" alt="Obrazek" /></a><br /><br />A skoro mamy takie cuś , to cieszymy się jak dzieci i czekamy na dalszy ciąg <img src="https://forum.atnel.pl/images/smilies/icon_razz.gif" alt=":P" title="Pokazuje język" /><br /><br />PS. Będę po troszku w tym wątku dopisywał wiedzę tajemną o sql więc spadać mi stąd ze swoimi komentarzami <img src="https://forum.atnel.pl/images/smilies/icon_razz.gif" alt=":P" title="Pokazuje język" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=225">Malutki_27</a> — 23 wrz 2013, o 13:37</p><hr />
]]></content>
</entry>
</feed>