SQLJ w Oracle9i rozszerzenia standardu
|
|
- Tomasz Jakubowski
- 6 lat temu
- Przeglądów:
Transkrypt
1 SQLJ w Oracle9i rozszerzenia standardu Marek Wojciechowski, Maciej Zakrzewicz Politechnika Poznańska, Instytut Informatyki ul. Piotrowo 3a, Poznań {marek,mzakrz}@cs.put.poznan.pl Abstrakt. Standard SQLJ dotyczy zagnieżdżania instrukcji SQL w programach w języku Java. SQLJ stanowi alternatywę dla bezpośredniego korzystania z interfejsu JDBC, pozwalając na pisanie bardziej zwartych i czytelnych programów. Ponadto, SQLJ zapewnia kontrolę poprawności odwołań do obiektów bazy danych i weryfikację składni instrukcji SQL na etapie kompilacji programu. Zgodnie ze standardem SQLJ instrukcje SQL zagnieżdżane w programie mają charakter statyczny, co może niekiedy stanowić istotne ograniczenie. Niniejszy artykuł poświęcony jest rozszerzeniom funkcjonalności SQLJ dostępnym w Oracle9i, ze szczególnym uwzględnieniem wsparcia dla dynamicznych instrukcji SQL. 1. Wprowadzenie Standard SQLJ dotyczy integracji technologii baz danych z językiem Java. Jest on wynikiem współpracy firm Oracle, Sybase, IBM, Tandem (obecnie część Compaq), JavaSoft i Informix. Standard SQLJ składa się z trzech części. Część 0 definiuje sposób zagnieżdżania instrukcji SQL w programach języka Java (SQLJ Part 0: SQLJ Embedded SQL). Część 1 dotyczy wykorzystywania statycznych metod Java jako składowanych procedur i funkcji SQL (SQLJ Part 1: SQLJ Stored Procedures and UDFs). Część 2 dotyczy używania czystych klas Java jako abstrakcyjnych typów danych (ang. abstract data types) SQL (SQLJ Part 2: SQLJ Data Types). Ostatnia z wymienionych części standardu stanowi alternatywę dla abstrakcyjnych typów danych standardu SQL3. Najwcześniej, bo już w 1998 roku, zatwierdzona jako standard ANSI została Część 0 [4]. Ponadto, obecnie jest ona jedyną z części standardu SQLJ, która jest również standardem ISO [5] (od 2000 roku). Części 1 i 2 są jedynie standardami ANSI. Mianem Oracle SQLJ określana jest implementacja Części 0 standardu SQLJ dostępna w produktach firmy Oracle. Należy jednak podkreślić, że Oracle wspiera również pozostałe części standardu SQLJ (ładowanie klas Java do bazy danych i wykorzystywanie statycznych metod jako procedur i funkcji składowanych oraz używanie klas Java jako obiektowych typów SQL). W Oracle9i Oracle SQLJ w pełni wspiera standard ISO, dodatkowo oferując wiele interesujących rozszerzeń. Rozszerzenia te dotyczą zarówno funkcjonalności SQLJ, jak i sposobu generacji kodu wynikowego. Niniejszy artykuł przedstawia rozszerzenia dostępne w Oracle9i na tle standardu SQLJ. Struktura artykułu jest następująca. Rozdział 2 prezentuje podstawową składnię SQLJ i sposoby realizacji dostępu do bazy danych w tym standardzie. Rozdział 3 opisuje przebieg translacji programów SQLJ i środowisko uruchomieniowe. Rozdział 4 zawiera listę i krótki opis rozszerzeń standardu SQLJ dostępnych w Oracle9i. Rozdział 5 poświęcony jest w całości wsparciu dla dynamicznego SQL w Oracle9i SQLJ, co stanowi najbardziej istotne rozszerzenie w stosunku do standardu. Rozdział 6 zawiera podsumowanie. 2. Dostęp do baz danych z programów Java - składnia SQLJ Powszechnie używanym standardem pozwalającym na dostęp do baz danych z aplikacji języka Java jest standard JDBC zdefiniowany przez Sun Microsystems [2]. JDBC jest interfejsem programisty (API) dostępnym w postaci klas języka Java. Producenci systemów baz danych mogą dostarczać swoje implementacje standardu (oraz jego rozszerzenia) w postaci własnych sterowników JDBC. W standardzie JDBC treść instrukcji SQL jest przekazywana jako parametr
2 tekstowy odpowiednim metodom obiektu reprezentującego instrukcję SQL lub połączenie z bazą danych w programie. Składnia SQL nie jest weryfikowana na etapie kompilacji programu i dlatego ewentualne błędy w instrukcjach SQL są wykrywane dopiero w trakcie działania programu. Standard SQLJ stanowi odpowiedź na tę istotną wadę JDBC. SQLJ pozwala na zagnieżdżanie instrukcji SQL w kodzie Java w sposób umożliwiający weryfikację ich poprawności na etapie kompilacji programu. Takie rozwiązanie w istotny sposób zwiększa wydajność programisty. W przeciwieństwie do programów Java realizujących dostęp do baz danych w standardzie JDBC, programy SQLJ muszą być poddane prekompilacji, gdyż oprócz kodu w języku Java zawierają specyficzne konstrukcje składniowe SQLJ: deklaracje i instrukcje SQLJ. Zarówno deklaracje, jak i instrukcje SQLJ rozpoczynają się słowem kluczowym #sql, a kończą się średnikiem. Treść poleceń SQL jest zagnieżdżana w instrukcjach SQLJ i musi być ujęta w nawiasy klamrowe. Deklaracje SQLJ służą do deklarowania klas iteratorów, wykorzystywanych przy przetwarzaniu wyników zapytań, oraz klas kontekstów połączeń, używanych w aplikacjach korzystających z więcej niż jednego połączenia z bazą danych jednocześnie. Przedstawione poniżej fragmenty kodu realizujące to samo zadanie ilustrują sposoby dostępu do bazy danych w oparciu o standardy JDBC i SQLJ. // Dostęp do bazy danych poprzez interfejs JDBC PreparedStatement ps = conn.preparestatement( "SELECT ename, sal FROM emp WHERE sal >?"); double minsal = ; ps.setdouble(1, minsal); ResultSet rs = ps.executequery(); while (rs.next()) { String n = rs.getstring("ename"); double s = rs.getdouble("sal"); System.out.println(n + " " + s); } rs.close(); ps.close(); // Dostęp do bazy danych w standardzie SQLJ #sql iterator EmpNameIter(String ename, double sal); EmpNameIter iter; double minsal = ; #sql iter = { SELECT ename, sal FROM emp WHERE sal > :minsal while (iter.next()) { String n = iter.ename(); double s = iter.sal(); System.out.println(n + " " + s); } iter.close(); Powyższe przykłady pokazują, że korzystanie ze standardu SQLJ nie tylko sprzyja tworzeniu programów bardziej odpornych na błędy programisty, ale dodatkowo prowadzi do bardziej zwartego i czytelnego kodu niż w przypadku korzystania z interfejsu JDBC. Mimo swoich niewątpliwych zalet standard SQLJ nie może jednak w pełni zastąpić JDBC, ponieważ oferuje on znacznie mniejszą elastyczność. SQLJ jest idealnym rozwiązaniem gdy instrukcja SQL wykorzystywana w programie ma charakter statyczny tzn. jej składnia jest znana w momencie tworzenia kodu. Oczywiście znana musi być tylko struktura składniowa instrukcji, a wartości na których dana instrukcja operuje mogą być wyznaczane dopiero w trakcie działania programu. Takie wartości są reprezentowane w instrukcji SQLJ poprzez tzw. wyrażenia zewnętrzne (ang. host expressions), mające postać wyrażeń języka Java poprzedzonych znakiem dwukropka. W najprostszej postaci wyrażenia te sprowadzają się do tzw. zmiennych zewnętrznych (ang. host
3 variables), stanowiących odwołanie do zmiennej w kodzie Java (w powyższym przykładzie wykorzystano odwołanie do zmiennej zewnętrznej minsal). Standard JDBC traktuje treść poleceń SQL jako łańcuchy znaków, w związku z czym pozwala na dynamiczne budowanie treści instrukcji SQL w trakcie działania programu. Standardy SQLJ i JDBC mogą współistnieć w programie, współdzieląc to samo połączenie z bazą danych. W przypadku statycznych instrukcji SQL zalecane jest korzystanie ze standardu SQLJ, ze względu na lepszą kontrolę błędów. Instrukcje SQL o charakterze dynamicznym, ze względu na ograniczenia standardu SQLJ, muszą być realizowane poprzez interfejs JDBC. Przedstawiony wyżej fragment kodu SQLJ pokazuje jak w tym standardzie przetwarzane są zapytania zwracające więcej niż jeden rekord. W takim przypadku wynik zapytania musi zostać przypisany do iteratora, który jest wystąpieniem wcześniej zadeklarowanej klasy iteratora. Iteratory w SQLJ są odpowiednikami zbiorów wynikowych (ang. result sets) wykorzystywanych w standardzie JDBC, jednakże w przeciwieństwie do nich wspierają kontrolę typów. Standard SQLJ wprowadza dwa rodzaje iteratorów z silną kontrolą typów: iteratory nazwane (ang. named iterators) i iteratory pozycyjne (ang. positional iterators). Deklarując klasę iteratora podaje się typy jego pól, a w przypadku iteratorów nazwanych również ich nazwy. Typy pól iteratora (oraz ewentualnie ich nazwy) powinny być zgodne z typami pól (oraz ewentualnie nazwami) w rekordach zwracanych przez zapytanie. W trakcie nawigacji po rekordach iteratora w danej chwili dostępny jest jeden rekord. W przedstawionym wcześniej przykładzie wykorzystany został iterator nazwany, dlatego też dostęp do poszczególnych pól bieżącego rekordu realizowany był za pomocą metod iteratora o nazwach odpowiadających nazwom pól iteratora. W przypadku iteratorów pozycyjnych bieżący rekord musi być pobrany do zmiennych zewnętrznych za pomocą instrukcji FETCH (korzystanie z iteratorów pozycyjnych przypomina odczyt danych z kursora w PL/SQL). Oprócz iteratorów nazwanych i pozycyjnych, SQLJ oferuje również iteratory o słabej kontroli typów, które funkcjonalnie odpowiadają zbiorom wynikowym JDBC. Podstawowy sposób nawigacji po rekordach iteratora polega na przechodzeniu w pętli do kolejnych rekordów do momentu gdy przetworzony zostanie ostatni rekord. Dodatkowo, iteratory nazwane i pozycyjne mogą być przewijalne (ang. scrollable iterators), jeśli ich klasy implementują odpowiedni interfejs. Iteratory przewijalne umożliwiają bardziej elastyczną nawigację po liście rekordów (przesuwanie się w obu kierunkach o dowolną liczbę rekordów, przejście do rekordu o danym numerze). Dla obsługi zapytań zwracających dokładnie jeden rekord, SQLJ posiada instrukcję SELECT INTO, pozwalającą na realizację takich zapytań na takiej samej zasadzie jak instrukcji DML (INSERT, UPDATE, DELETE), co ilustruje poniższy fragment kodu: // Zapytanie zwracające dokładnie jeden rekord int count; double avgsal; #sql { SELECT count(*), avg(sal) INTO :count, :avgsal FROM emp // Instrukcja DML int num = 3347; #sql { UPDATE emp SET sal = :avgsal WHERE empno = :num Poza opisanymi wyżej konstrukcjami, SQLJ oferuje również możliwość wywoływania składowanych procedur i funkcji oraz obsługuje instrukcję przypisania. Składnię tych operacji ilustruje poniższy przykładowy fragment kodu: int a = 5; double b; int c = 0; // Wywołanie procedury składowanej #sql { CALL proc_1 (:IN a, :OUT b, :INOUT c) // Wywołanie funkcji składowanej #sql a = { VALUES (proc_1 (:IN c) )
4 // Instrukcja przypisania #sql { SET :c = 5 * :a + 10 W przypadku wywoływania procedur i funkcji składowanych, dla każdej ze zmiennych zewnętrznych należy podać tryb w jakim ma być ona przekazana do instrukcji SQLJ (IN, OUT lub INOUT). Tryb przekazania zmiennej zewnętrznej można podawać we wszystkich typach instrukcji SQLJ, ale poza wywoływaniem podprogramów składowanych jest to opcjonalne i w większości przypadków nie jest konieczne, gdyż na ogół tryb przyjmowany domyślnie jest odpowiedni. Wszystkie instrukcje SQLJ występujące w przykładach przedstawionych dotychczas korzystały z domyślnego kontekstu połączenia, przy założeniu, że z domyślnym kontekstem związane jest odpowiednie otwarte połączenie z bazą danych. W pewnych szczególnych przypadkach takie domyślne połączenie może być dostępne automatycznie od początku działania programu (np. połączenie z bieżącą bazą danych w procedurach składowanych w języku Java w Oracle8i/9i). Najczęściej jednak aplikacja musi sama otworzyć połączenie z bazą danych. Gdy aplikacja w danej chwili korzysta tylko z jednego połączenia z bazą danych, wygodnym rozwiązaniem jest ustawienie domyślnego kontekstu połączenia. Tworząc nowy kontekst połączenia z jednoczesnym otwarciem połączenia z bazą danych należy podać URL identyfikujący bazę danych, nazwę użytkownika i hasło oraz informację o tym, czy tryb automatycznego zatwierdzania (ang. auto commit) ma być włączony czy nie. Utworzenie nowego kontekstu połączenia, z jednoczesnym uczynieniem go kontekstem domyślnym pokazuje fragment kodu przedstawiony poniżej: Class.forName("oracle.jdbc.driver.OracleDriver"); DefaultContext.setDefaultContext( new DefaultContext("jdbc:oracle:thin:@localhost:1521:ORCL", "scott", "tiger", true)); Jeśli aplikacja korzysta z kilku połączeń z bazami danych, konieczne jest utworzenie kilku obiektów reprezentujących konteksty połączeń. Gdy schematy (zbiory obiektów bazy danych) dostępne poprzez te połączenia są różne, konteksty połączeń powinny być wystąpieniami różnych, zadeklarowanych wcześniej, klas kontekstów połączeń. Dla instrukcji SQLJ, które mają wykonać się w innym niż domyślny kontekście połączenia, należy jawnie wyspecyfikować odpowiedni kontekst połączenia w nawiasach kwadratowych po słowie kluczowym #sql rozpoczynającym instrukcję SQLJ. Deklarację klasy kontekstu połączeń, utworzenie nazwanego kontekstu połączenia jako instancji tej klasy oraz sposób specyfikacji żądanego kontekstu połączenia dla danej instrukcji SQLJ pokazuje poniższy przykład: #sql context Employees; Class.forName("oracle.jdbc.driver.OracleDriver"); Employees ctxemp = new Employees("jdbc:oracle:thin:@localhost:1521:ORCL", "scott", "tiger", true); #sql [ctxemp] { DELETE FROM emp WHERE sal > 9000 Jeśli dla danego kontekstu połączenia ustawiony jest tryb automatycznego zatwierdzania, poszczególne instrukcje SQLJ wykonywane w tym kontekście stanowią oddzielne transakcje. Gdy tryb ten jest wyłączony, do sterowania przebiegiem transakcji używane są następujące instrukcje SQLJ: // Zatwierdzenie transakcji #sql { COMMIT // Wycofanie transakcji #sql { ROLLBACK
5 // Ustawienie właściwości transakcji (poziom izolacji, read only/read write) #sql { SET TRANSACTION Dla każdej z instrukcji SQLJ zamiast lub oprócz kontekstu połączenia może pojawić się tzw. kontekst wykonania (ang. execution context). W przypadku gdy dla danej instrukcji specyfikowany jest zarówno kontekst połączenia, jak i kontekst wykonania, są one oddzielone przecinkiem, a kontekst połączenia musi być podany jako pierwszy. Kontekst wykonania pozwala na uzyskanie informacji o liczbie zmodyfikowanych rekordów, ostrzeżeniach SQL, a także umożliwia sterowanie przebiegiem wykonania instrukcji SQL (np. timeout dla zapytań). Poniższy przykład ilustruje wykorzystanie kontekstu wykonania: sqlj.runtime.executioncontext ec = new sqlj.runtime.executioncontext(); #sql [ec] { UPDATE emp SET sal = sal * 1.1 WHERE sal < 1000 System.out.println(ec.getUpdateCount() + rows updated. ); 3. Translacja i uruchamianie programów SQLJ Program źródłowy w SQLJ musi być poddany translacji. Translator rozpoczyna pracę od sprawdzenia poprawności składni instrukcji SQLJ, z uwzględnieniem kontroli składni wyrażeń Java zagnieżdżonych w instrukcjach SQLJ. Następnie wywoływany jest moduł kontroli semantycznej (ang. semantics-checker). Kontrola semantyczna może odbywać się w trybie on-line lub off-line zależnie od parametrów wywołania translatora (w przypadku kontroli semantycznej w trybie on-line translator wymaga podania parametrów połączenia z bazą danych). Niezależnie od trybu w jakim jest przeprowadzana kontrola semantyczna instrukcji SQLJ, na tym etapie sprawdzana jest poprawność typów wyrażeń Java występujących w instrukcji SQL oraz określana jest natura instrukcji SQL (na podstawie występowania słów kluczowych SELECT, INSERT, itd.). W przypadku kontroli semantycznej w trybie on-line, dodatkowo sprawdzana jest składnia instrukcji SQL, zgodność typów SQL i Java oraz poprawność odwołań do obiektów bazy danych. W przypadku pozytywnego wyniku wspomnianych testów, translator SQLJ tłumaczy pliki źródłowe SQLJ (posiadające standardowo rozszerzenie.sqlj) na czysty kod języka Java, zastępując zagnieżdżone w programie instrukcje SQL odwołaniami do środowiska uruchomieniowego SQLJ. Ponadto, translator generuje również tzw. pliki profili (jeden dla każdej klasy kontekstu połączenia wykorzystywanej w programie). Profile zawierają informacje o instrukcjach SQL występujących w programie, typach wykorzystywanych danych i trybach dostępu do nich. Domyślnie, generowane profile mają postać uszeregowanych zasobów Java, składowanych w plikach z rozszerzeniem.ser. Translator SQLJ posiada również opcję generacji profili w postaci plików.class. Czysty kod Java powstały w wyniku działania translatora SQLJ poddawany jest kompilacji standardowym kompilatorem języka Java. W rezultacie powstaje zbiór skompilowanych klas Java (każda w osobnym pliku.class). Na ten zbiór składają się klasy Java jawnie zdefiniowane przez programistę w kodzie źródłowym, klasy reprezentujące wykorzystywane w programie klasy iteratorów i kontekstów połączenia oraz specjalna klasa służąca do obsługi profili. Wygenerowane profile mogą być poddane dostosowaniu (ang. customization). Producenci systemów zarządzania bazami danych mogą dostarczać moduły dostosowujące (ang. customizers), których zadanie polega na dostrojeniu instrukcji SQL do konkretnej implementacji serwera bazy danych np. w celu poprawy efektywności ich wykonania. Schemat procesu standardowej generacji kodu wynikowego dla aplikacji SQLJ przedstawia Rys. 1. Należy podkreślić, że w przypadku translatora SQLJ dostarczanego przez Oracle wszystkie etapy generacji kodu (translacja, kompilacja i dostosowanie za pomocą modułu dostosowującego Oracle) są wykonywane automatycznie po wywołaniu translatora.
6 Prog.sqlj Prog.java Prog.class #sql [ctx1] { #sql [ctx1] { #sql [ctx2] { Translator SQLJ Profile0: Entry1 Profile1: Prog_SJProfile0.ser Kompilator Java Profile0: Entry1 Profile1: *.class Prog_SJProfile0.ser Entry1 Prog_SJProfile1.ser Moduł dostosowujący C Entry1 CEntry1 Prog_SJProfile1.ser C Rys. 1. Standardowa generacja kodu wynikowego dla aplikacji SQLJ Kod wynikowy SQLJ musi być uruchamiany w środowisku uruchomieniowym SQLJ (ang. SQLJ runtime). Środowisko uruchomieniowe realizuje instrukcje SQL programu wykorzystując informacje zawarte w profilach. Typowe implementacje środowiska uruchomieniowego SQLJ realizują dostęp do bazy danych poprzez sterownik JDBC, choć standard SQLJ tego nie wymaga. Standard SQLJ gwarantuje przenaszalność kodu wynikowego SQLJ (klas i profili) między różnymi platformami. Korzystanie z rozszerzeń standardu oferowanych przez różnych producentów (np. Oracle) ogranicza przenaszalność aplikacji do jednej, konkretnej platformy. 4. Rozszerzenia standardu SQLJ dostępne w Oracle9i SQLJ dostępny w Oracle9i stanowi rozszerzenie standardu ISO. Oracle SQLJ akceptuje składnię SQL dostępną w serwerze bazy danych Oracle z uwzględnieniem konstrukcji specyficznych dla Oracle, stanowiących rozszerzenie standardu SQL. Ponadto, Oracle SQLJ pozwala na używanie anonimowych bloków PL/SQL jako zagnieżdżonych instrukcji SQL, na tej samej zasadzie jak np. instrukcji DML. W Oracle SQLJ programista ma do dyspozycji klasę oracle.sqlj.runtime.oracle umożliwiającą wygodne otwieranie połączeń z bazą danych (szczególnie w przypadku bazy danych Oracle). Metoda connect() tej klasy przed otwarciem połączenia z bazą danych automatycznie rejestruje sterownik JDBC Oracle, a po otwarciu połączenia ustawia domyślny kontekst połączenia. Dodatkowo, wersja SQLJ dostępna w Oracle9i oferuje specyficzną dla Oracle opcję generacji efektywnego kodu wynikowego, obsługuje więcej typów danych niż przewiduje to standard SQLJ oraz wprowadza konstrukcje językowe oferujące dodatkową funkcjonalność.
7 4.1. Generacja kodu specyficznego dla Oracle Jak zostało to wspomniane wcześniej, standard SQLJ przewiduje translację kodu SQLJ do kodu Java zawierającego w miejscu zagnieżdżonych instrukcji SQL odwołania do środowiska uruchomieniowego SQLJ. W tym przypadku translator dodatkowo generuje pliki profili zawierające informacje o instrukcjach SQL używanych w programie. Profile są wykorzystywane przez środowisko uruchomieniowe SQLJ w trakcie wykonywania programu. W większości implementacji (np. w przypadku Oracle SQLJ) środowisko uruchomieniowe realizuje dostęp do bazy danych poprzez wywołania JDBC. W wersji Oracle9i dostępna jest specyficzna dla Oracle opcja generacji kodu bez profili, polegająca na translacji programu SQLJ do kodu Java zawierającego jawne wywołania JDBC. W tym przypadku nie są generowane pliki profili, a rola środowiska uruchomieniowego jest znacznie ograniczona. Generacja kodu specyficznego dla Oracle posiada wiele zalet w porównaniu ze standardową generacją kodu wynikowego. Oto najważniejsze z nich: aplikacje działają bardziej efektywnie ze względu na bezpośrednie korzystanie z JDBC; rozmiar aplikacji jest mniejszy oraz mniejsza jest liczba komponentów aplikacji (nie ma plików profili). Podstawową wadą generacji kodu specyficznego dla Oracle jest utrata możliwości przenoszenia postaci wynikowej aplikacji na inne platformy. Ponadto, niedostępna jest funkcjonalność dotycząca profili, np. dostosowywanie profili po generacji kodu wynikowego aplikacji Rozszerzenia dotyczące obsługiwanych typów danych W zakresie obsługiwanych typów danych Oracle9i SQLJ wprowadza następujące rozszerzenia: obsługa instancji klas oracle.sql.* (klas otaczających dla typów danych Oracle SQL) oraz klas implementujących interfejsy oracle.sql.oradata i java.sql.sqldata; możliwość używania instancji iteratorów i zbiorów wynikowych jako wejściowych i wyjściowych parametrów w dowolnym kontekście oraz instancji strumieni jako parametrów wyjściowych; obsługa typów znakowych Unicode Rozszerzenia funkcjonalne Najbardziej istotnym i rewolucyjnym rozszerzeniem funkcjonalności SQLJ dostępnym w Oracle9i jest z pewnością wsparcie dla dynamicznych instrukcji SQL poprzez wprowadzenie nowych konstrukcji składniowych (patrz Rozdział 5). Ponadto, Oracle9i oferuje drobne rozszerzenia dotyczące funkcjonalności iteratorów o słabej kontroli typów (obsługuje przewijalne iteratory o słabej kontroli typów). 5. Dynamiczny SQL w Oracle9i Większość instrukcji SQL zagnieżdżanych w aplikacjach ma charakter statyczny, tzn. ich składnia znana jest na etapie tworzenia programu, a w trakcie działania programu ustalane są jedynie wartości, na których te instrukcje operują. Niekiedy jednak w programach wymagana jest większa elastyczność. Może się zdarzyć tak, że składnia polecenia, bądź też nazwy kolumn lub tabel, do których ono się odwołuje, jest determinowana dopiero w trakcie działania programu. Niestety standard SQLJ obsługuje jedynie statyczny SQL. Dlatego też, w sytuacjach gdy w programie występują zarówno statyczne jak i dynamiczne instrukcje SQL, programiści korzystający ze standardu SQLJ muszą w przypadku dynamicznego SQL stosować wywołania JDBC. Takie rozwiązanie nie stanowi problemu od strony technicznej, gdyż instrukcje SQLJ mogą
8 być przeplatane wywołaniami JDBC, współdzieląc to samo połączenie z bazą danych. Jednakże nie ulega wątpliwości, że praca programisty jest łatwiejsza, a programy bardziej czytelne, gdy wszystkie instrukcje SQL w programie są realizowane za pomocą tego samego API. W przypadku Oracle SQLJ, istnieje jeszcze jedna możliwość zagnieżdżania dynamicznych instrukcji SQL w programach SQLJ (dostępna już w wersjach serwera bazy danych poprzedzających Oracle9i). Polega ona na zagnieżdżeniu jako instrukcji SQL anonimowego bloku PL/SQL, zawierającego polecenie EXECUTE IMMEDIATE, uruchamiającego polecenie SQL o treści podanej w postaci łańcucha znaków, zbudowanego dynamicznie w trakcie działania programu. Poniższy fragment kodu ilustruje sposób korzystania z dynamicznego SQL w programach SQLJ z wykorzystaniem anonimowych bloków PL/SQL: String polecenie; polecenie = // budowa treści dynamicznego polecenia SQL #sql { begin execute immediate :polecenie; end Wadą powyższego rozwiązania, występującą również w przypadku zastosowania wywołania JDBC, jest niemożność zweryfikowania składni polecenia SQL na etapie kompilacji programu. Oracle9i wprowadza nową, niestandardową składnię pozwalającą na zagnieżdżanie w programie Java dynamicznych poleceń SQL. Składnia ta jest zgodna z duchem standardu SQLJ i umożliwia częściowe sprawdzenie poprawności polecenia SQL już podczas translacji programu. Nowe rozszerzenia standardu SQLJ dostępne w Oracle9i, wspierające dynamiczny SQL, polegają na możliwości zagnieżdżania w instrukcjach SQL dynamicznych wyrażeń SQL, określanych jako metawyrażenia związane (ang. meta bind expressions). Wyrażenia te mogą pojawiać się w miejscach, gdzie normalnie oczekiwane są statyczne klauzule SQL. Metawyrażenie związane zawiera identyfikator Java typu String lub wyrażenie Java zwracające wartość tego typu, wyznaczaną w trakcie działania programu. Dodatkowo, metawyrażenie związane może zawierać również statyczny tekst w języku SQL, którym ma być zastąpione wyrażenie podczas translacji, w celu umożliwienia kontroli semantycznej instrukcji SQLJ w trybie on-line. Metawyrażenie związane może pojawić się w miejscu: nazwy tabeli; nazwy kolumny na liście SELECT; całości lub części klauzuli WHERE; nazwy roli, schematu, katalogu lub pakietu w instrukcji DDL lub DML; wyrażenia lub literału SQL. Istnieją pewne ograniczenia dotyczące stosowania metawyrażeń związanych, wynikające z konieczności zapewnienia translatorowi SQLJ możliwości określenia natury instrukcji SQL, w celu przeprowadzenia analizy składniowej instrukcji SQLJ. Metawyrażenie związane nie może: rozpoczynać instrukcji SQL; zawierać słowa kluczowego INTO lub zwracać listy INTO polecenia SELECT INTO; występować w następujących instrukcjach i klauzulach: CALL, VALUES, PSM SET, COMMIT, ROLLBACK, FETCH INTO, CAST. Składnia metawyrażeń związanych jest następująca: :{ wyr_związane_java }
9 lub :{ wyr_związane_java :: zastępczy_kod_sql } Wyrażenie związane Java musi spełniać kryteria składniowe języka Java, a zastępczy kod SQL musi być zgodny z regułami języka SQL (w szczególności może być pusty) i nie może zawierać zagnieżdżonych metawyrażeń związanych i wyrażeń Java. Podczas translacji programu SQLJ, w przypadku gdy metawyrażenie związane posiada zastępczy kod SQL, jest ono zastępowane tym kodem na potrzeby analizy semantycznej instrukcji SQLJ w trybie on-line (obejmującej analizę poprawności instrukcji SQL). W trakcie działania programu, przy przetwarzaniu dynamicznej instrukcji SQL metawyrażenia związane są zastępowane przez wyznaczone wartości ich wyrażeń związanych Java. Rozważmy następujący przykład: String table = "emp_boston"; String wherecond = "sal>2000"; #sql { DELETE FROM :{table :: emp} WHERE :{wherecond :: ename= BROWN } Podczas translacji, na potrzeby analizy semantycznej, zagnieżdżona dynamiczna instrukcja SQL przyjmie następującą postać: DELETE FROM emp WHERE ename= BROWN ; Z kolei w trakcie działania programu instrukcja ta zostanie wykonana w następującej postaci: DELETE FROM emp_boston WHERE sal>2000; Taki sam efekt przyniosłoby wykonanie poniższego fragmentu kodu: String table = "emp_boston"; String wherecond = "sal>2000"; #sql { DELETE FROM :{table} WHERE :{wherecond :: ename= BROWN } W tym przypadku jedyną różnicą w stosunku do przykładu rozważanego wcześniej jest brak zastępczego kodu SQL dla pierwszego z zagnieżdżonych metawyrażeń związanych. Taka zmiana nie może oczywiście wpływać na działanie programu, ale w jej wyniku translator nie będzie w stanie przeprowadzić analizy semantycznej instrukcji SQLJ w trybie on-line. Specyfikowanie zastępczego kodu SQL dla wszystkich metawyrażeń zagnieżdżonych na daje gwarancji, że zbudowana w trakcie działania programu dynamiczna instrukcja SQL będzie poprawna semantycznie (np. będzie odwoływać się jedynie do istniejących kolumn). Tym niemniej, nawet analiza semantyczna w trybie on-line przeprowadzona na zastępczym kodzie SQL może doprowadzić do wykrycia większej liczby błędów już na etapie translacji. Stosowanie zastępczego
10 kodu SQL jest tym bardziej wskazane, im lepiej można przewidzieć typową docelową strukturę instrukcji SQL będących wynikiem dynamicznej instrukcji SQL zawartej w programie. Ta sama dynamiczna instrukcja SQL może w trakcie działania programu przyjmować różną postać, co ilustruje poniższy przykład: double raise = 1.1; String [] cities = {"boston", "ny", "detroit", "chicago" String salcolname = "salary"; for (int i=0; i<cities.length; i++) { #sql { UPDATE :{"emp_"+cities[i] :: emp} SET :{salcolname :: sal} = :{ salcolname :: sal} * :raise } Podczas translacji, zagnieżdżona dynamiczna instrukcja SQL przyjmie postać: UPDATE emp SET sal = sal * :raise; Z kolei w trakcie działania programu instrukcja ta zostanie wykonana cztery razy: UPDATE emp_boston SET salary = salary * 1.1; UPDATE emp_ny SET salary = salary * 1.1; UPDATE emp_detroit SET salary = salary * 1.1; UPDATE emp_chicago SET salary = salary * 1.1; 6. Podsumowanie Standard SQLJ pozwala na zagnieżdżanie instrukcji SQL w programach języka Java. Stanowi on alternatywę dla bezpośredniego korzystania z interfejsu JDBC. W porównaniu z JDBC, SQLJ pozwala na bardziej efektywne tworzenie aplikacji gdyż więcej błędów może być wykrytych już na etapie kompilacji programu, a nie dopiero przy jego uruchomieniu. W przypadku wywołań JDBC, zagnieżdżone instrukcje SQL nie są interpretowane przez kompilator. Natomiast w przypadku programów w SQLJ składnia poleceń SQL, a nawet poprawność odwołań do obiektów bazy danych i zgodność typów danych może być zweryfikowana już na etapie translacji. Ponadto, kod SQLJ jest bardziej zwarty niż JDBC. Pomimo swoich zalet standard SQLJ nie zawsze może zastąpić JDBC, ponieważ nie dorównuje mu funkcjonalnością. W przypadku wywołań JDBC, treść poleceń SQL może być budowana dynamicznie w trakcie działania programu. Standard SQLJ dotyczy zagnieżdżania statycznych poleceń SQL, czyli takich których składnia jest znana na etapie tworzenia kodu. Dodatkowo, w przypadku implementacji środowiska uruchomieniowego SQLJ korzystających z JDBC, efektywność programów SQLJ może być słabsza niż programów wykorzystujących interfejs JDBC bezpośrednio. Implementacja SQLJ dostępna w Oracle9i oferuje wiele rozszerzeń standardu. Spośród nich na szczególną uwagę zasługują te, które stanowią odpowiedź na podstawowe wady technologii SQLJ. Oracle9i wspiera dynamiczny SQL w SQLJ, co powinno w większości przypadków wyeliminować konieczność bezpośredniego korzystania z JDBC w programach SQLJ. Ponadto, Oracle9i daje w trakcie generacji kodu wynikowego możliwość translacji kodu SQLJ do kodu zawierającego wywołania JDBC. W tym przypadku ograniczona jest rola środowiska uruchomieniowego SQLJ, co prowadzi do poprawy efektywności wykonywania programu. Oferowane przez Oracle9i SQLJ rozszerzenia standardu z pewnością należy uznać za atrakcyjne i przydatne, jednocześnie
11 pamiętając, że korzystanie z niestandardowych konstrukcji składniowych i mechanizmów ogranicza przenaszalność aplikacji. Bibliografia 1. Basu J., Rohwedder E.: Using SQLJ for Enterprise Database Applications: Access, Procedures and Storage (Tutorial), VLDB 99, Information Technology Database Languages SQL Part 10: Object Language Bindings (SQL/OLB), ANSI specification X , Information Technology Database Languages SQL Part 10: Object Language Bindings (SQL/OLB), ISO/IEC :2000, Khan S., Kurian T., Wright B..: Zastosowanie SQLJ, Software 7/99, Oracle9i JDBC Developer s Guide and Reference, Release 1 (9.0.1), Oracle9i SQLJ Developer s Guide and Reference, Release 1 (9.0.1), Shaw P., Becker B., Klein J., Hapner M., Clossman G., Pledereder R.: Java and Relational Databases: SQLJ (Tutorial), SIGMOD 98, Stern S.A.: SQLJ: The open sesame of Java database applications, JavaWorld May 1999, 1999
Oracle PL/SQL. Paweł Rajba.
Paweł Rajba pawel@ii.uni.wroc.pl http://www.kursy24.eu/ Zawartość modułu 7 Dynamiczny SQL i PL/SQL Pierwotny dynamiczny SQL Pierwotny dynamiczny DDL Pierwotny dynamiczny DML i SELECT Pakiet DBMS_SQL Transakcje
Oracle PL/SQL. Paweł Rajba.
Paweł Rajba pawel@ii.uni.wroc.pl http://www.kursy24.eu/ Zawartość modułu 2 Kusory Wprowadzenie Kursory użytkownika Kursory domyślne Zmienne kursora Wyrażenia kursora - 2 - Wprowadzenie Co to jest kursor?
PL/SQL. Zaawansowane tematy PL/SQL
PL/SQL Zaawansowane tematy PL/SQL Cele Poznanie złożonych i referencyjnych typów danych Poznanie konstrukcji kursora Poznanie kodu składowanego Poznanie procedur i funkcji 2 Złożone typy danych RECORD
Pakiety podprogramów Dynamiczny SQL
Pakiety podprogramów Dynamiczny SQL Pakiety podprogramów, specyfikacja i ciało pakietu, zmienne i kursory pakietowe, pseudoinstrukcje (dyrektywy kompilatora), dynamiczny SQL 1 Pakiety Pakiet (ang. package)
Obsługa transakcji rozproszonych Java. Marek Wojciechowski, Maciej Zakrzewicz Instytut Informatyki, Politechnika Poznańska
Obsługa transakcji rozproszonych w języku j Java Marek Wojciechowski, Maciej Zakrzewicz Instytut Informatyki, Politechnika Poznańska Plan prezentacji Transakcje i ich własności Proste transakcje w JDBC
Wyzwalacz - procedura wyzwalana, składowana fizycznie w bazie, uruchamiana automatycznie po nastąpieniu określonego w definicji zdarzenia
Wyzwalacz - procedura wyzwalana, składowana fizycznie w bazie, uruchamiana automatycznie po nastąpieniu określonego w definicji zdarzenia Składowe wyzwalacza ( ECA ): określenie zdarzenia ( Event ) określenie
Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)
Uwagi dotyczące notacji kodu! Wyrazy drukiem prostym -- słowami języka VBA. Wyrazy drukiem pochyłym -- inne fragmenty kodu. Wyrazy w [nawiasach kwadratowych] opcjonalne fragmenty kodu (mogą być, ale nie
Składowane procedury i funkcje
Składowane procedury i funkcje Procedury i funkcje są zestawem poleceń SQL, które są przechowywane na serwerze (tak jak dane w tablicach). Istnieją sytuacje, kiedy procedury i funkcje są szczególnie przydatne.
Materiały. Technologie baz danych. Plan wykładu Kursory. Wykład 5: Kursory jawne. Podprogramy. Kursory jawne. Kursory niejawne
Materiały dostępne są na stronie: Materiały Technologie baz danych aragorn.pb.bialystok.pl/~gkret Wykład 5: Kursory jawne. Podprogramy. Małgorzata Krętowska Wydział Informatyki Politechnika Białostocka
Język PL/SQL. Rozdział 5. Pakiety podprogramów. Dynamiczny SQL
Język PL/SQL. Rozdział 5. Pakiety podprogramów. Dynamiczny SQL Pakiety podprogramów, specyfikacja i ciało pakietu, zmienne i kursory pakietowe, pseudoinstrukcje (dyrektywy kompilatora), dynamiczny SQL.
Oracle PL/SQL. Paweł Rajba.
Paweł Rajba pawel@ii.uni.wroc.pl http://www.kursy24.eu/ Zawartość modułu 5 Wprowadzenie Tworzenie i wykonywanie procedur i funkcji Instrukcja RETURN Parametry procedur i funkcji oraz ich przesyłanie Metadane
Oracle11g: Programowanie w PL/SQL
Oracle11g: Programowanie w PL/SQL OPIS: Kurs pozwala zrozumieć zalety programowania w języku PL/SQL. Studenci uczą się tworzyć bloki kodu wykonywanego po stronie serwera, który może być współużytkowany
DECLARE <nazwa_zmiennej> typ [(<rozmiar> )] [ NOT NULL ] [ { := DEFAULT } <wartość> ];
Braki w SQL obsługi zdarzeń i sytuacji wyjątkowych funkcji i procedur użytkownika definiowania złożonych ograniczeń integralnościowych Proceduralny SQL Transact- SQL używany przez Microsoft SQL Server
15. Funkcje i procedury składowane PL/SQL
15. Funkcje i procedury składowane PLSQL 15.1. SQL i PLSQL (Structured Query Language - SQL) Język zapytań strukturalnych SQL jest zbiorem poleceń, za pomocą których programy i uŝytkownicy uzyskują dostęp
JDBC (Java Database Connectivity vit )
1 JDBC (Java Database Connectivity) Marek Wojciechowski Czym jest JDBC? 2 JDBC jest standardowym interfejsem do współpracy aplikacji Java z relacyjną bazą danych JDBC definiuje standardowe interfejsy interfejsy
Pakiety są logicznymi zbiorami obiektów takich jak podprogramy, typy, zmienne, kursory, wyjątki.
Pakiety Pakiety są logicznymi zbiorami obiektów takich jak podprogramy, typy, zmienne, kursory, wyjątki. Pakiet składa się ze: specyfikacji (interfejsu) i ciała (implementacji). W specyfikacji mieszczą
Blaski i cienie wyzwalaczy w relacyjnych bazach danych. Mgr inż. Andrzej Ptasznik
Blaski i cienie wyzwalaczy w relacyjnych bazach danych. Mgr inż. Andrzej Ptasznik Technologia Przykłady praktycznych zastosowań wyzwalaczy będą omawiane na bazie systemu MS SQL Server 2005 Wprowadzenie
Wyzwalacze. Anna Fiedorowicz Bazy danych 2
Wyzwalacze Wyzwalacze są specjalnymi procedurami składowanymi, uruchamianymi automatycznie w następstwie zaistnienia określonego typu zdarzenia. Ich główne zadanie polega na wymuszaniu integralności danych
Materiały do laboratorium MS ACCESS BASIC
Materiały do laboratorium MS ACCESS BASIC Opracowała: Katarzyna Harężlak Access Basic jest językiem programowania wykorzystywanym w celu powiązania obiektów aplikacji w jeden spójny system. PROCEDURY I
Paweł Rajba
Paweł Rajba pawel@cs.uni.wroc.pl http://www.itcourses.eu/ Wprowadzenie Używanie kursorów Rodzaje kursorów Praca z kursorami Co to jest kursor? Cykl życia kursora utworzenie pobieranie wartości ewentualnie
Bloki anonimowe w PL/SQL
Język PL/SQL PL/SQL to specjalny język proceduralny stosowany w bazach danych Oracle. Język ten stanowi rozszerzenie SQL o szereg instrukcji, znanych w proceduralnych językach programowania. Umożliwia
Procedury składowane. Funkcje vs. procedury Funkcja. Procedura. zazwyczaj ma parametry tylko typu IN; można wywoływać z poziomu
Procedury składowane Kolejnym typem programu języka PL/SQL są procedury składowane. Procedury mogą posiadać parametry typu IN, OUT lub IN OUT. Umożliwiają wykonanie operacji na danych w bazie, mogą też
PODSTAWY BAZ DANYCH 13. PL/SQL
PODSTAWY BAZ DANYCH 13. PL/SQL 1 Wprowadzenie do języka PL/SQL Język PL/SQL - rozszerzenie SQL o elementy programowania proceduralnego. Możliwość wykorzystywania: zmiennych i stałych, instrukcji sterujących
Informatyka I. Standard JDBC Programowanie aplikacji bazodanowych w języku Java
Informatyka I Standard JDBC Programowanie aplikacji bazodanowych w języku Java dr inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2017 Standard JDBC Java DataBase Connectivity uniwersalny
Ustawienie na poziomie sesji (działa do zmiany lub zakończenia sesji zamknięcia połączenia).
POZIOMY IZOLACJI TRANSAKCJI 1. Microsoft SQL Server 2012 (od SQL Server 2005) W systemie SQL Server można wybrać sposób sterowania współbieżnością. Podstawowy sposób to stosowanie blokad. Wykorzystywane
Instrukcje SQL można podzielić na pięć kategorii, które zostały przedstawione w poniższej tabeli.
SQL W JĘZYKU PL/SQL Strukturalny język zapytań SQL określa sposób manipulowania danymi w bazie danych. Konstrukcje proceduralne języka PL/SQL stają się bardziej użyteczne w połączeniu z mocą przetwarzania
DECLARE VARIABLE zmienna1 typ danych; BEGIN
Procedury zapamiętane w Interbase - samodzielne programy napisane w specjalnym języku (właściwym dla serwera baz danych Interbase), który umożliwia tworzenie zapytań, pętli, instrukcji warunkowych itp.;
Oracle10g: Programowanie w PL/SQL
Oracle10g: Programowanie w PL/SQL OPIS: Szkolenie dotyczy użytkowników Oracle8i, Oracle9i i Oracle10g. Ten kurs pozwala zrozumieć zalety tego potężnego narzędzia programowania do PL/SQL. Studenci uczą
Ćwiczenia 2 IBM DB2 Data Studio
Ćwiczenia 2 IBM DB2 Data Studio Temat: Aplikacje w Data Studio 1. Projekty Tworzenie procedur, UDF, trygerów zaczynamy od utworzenia projektu File -> New -> Project wybieramy Data Development Project.
Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki
Dariusz Brzeziński Politechnika Poznańska, Instytut Informatyki Język programowania prosty bezpieczny zorientowany obiektowo wielowątkowy rozproszony przenaszalny interpretowany dynamiczny wydajny Platforma
Plan. Formularz i jego typy. Tworzenie formularza. Co to jest formularz? Typy formularzy Tworzenie prostego formularza Budowa prostego formularza
4 Budowa prostych formularzy, stany sesji, tworzenie przycisków Plan Co to jest formularz? Typy formularzy Tworzenie prostego formularza Budowa prostego formularza 2 Formularz i jego typy Tworzenie formularza
Informatyka I. Programowanie aplikacji bazodanowych w języku Java. Standard JDBC.
Informatyka I Programowanie aplikacji bazodanowych w języku Java. Standard JDBC. dr hab. inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2019 Standard JDBC Java DataBase Connectivity
Microsoft SQL Server Podstawy T-SQL
Itzik Ben-Gan Microsoft SQL Server Podstawy T-SQL 2012 przełożył Leszek Biolik APN Promise, Warszawa 2012 Spis treści Przedmowa.... xiii Wprowadzenie... xv Podziękowania... xix 1 Podstawy zapytań i programowania
Język PL/SQL Procedury i funkcje składowane
Język PL/SQL Procedury i funkcje składowane Podprogramy, procedury i funkcje składowane, typy argumentów, wywoływanie procedur i funkcji, poziomy czystości funkcji 1 Podprogramy Procedury (wykonują określone
T-SQL dla każdego / Alison Balter. Gliwice, cop Spis treści. O autorce 11. Dedykacja 12. Podziękowania 12. Wstęp 15
T-SQL dla każdego / Alison Balter. Gliwice, cop. 2016 Spis treści O autorce 11 Dedykacja 12 Podziękowania 12 Wstęp 15 Godzina 1. Bazy danych podstawowe informacje 17 Czym jest baza danych? 17 Czym jest
SQL w języku PL/SQL. 2) Instrukcje języka definicji danych DDL DROP, CREATE, ALTER, GRANT, REVOKE
Instrukcje SQL dzielimy na następujące kategorie: 1) Instrukcje języka manipulowania danymi (DML) SELECT, INSERT, UPDATE, DELETE, SET TRANSACTION, EXPLAIN PLAN 2) Instrukcje języka definicji danych DDL
Ćwiczenie rozpocznie się od wprowadzenia do laboratorium, po którym omówimy składnię ę polecenia INSERT pozwalającego ą na wstawianie krotek do
Na dotychczasowych zajęciach zapoznaliście się Państwo z poleceniem SELECT pozwalającym ą na wykonywanie zapytań ń do bazy danych i odczytywanie danych zawartych w relacjach. Celem tego ćwiczenia jest
Procedury i funkcje składowane
Procedury i funkcje składowane Zmienne podstawienia i zmienne wiązane, podprogramy, procedury składowane, typy argumentów, wywoływanie procedur, funkcje składowane, poziomy czystości funkcji, funkcje tablicowe
Kolekcje Zbiory obiektów, rodzaje: tablica o zmiennym rozmiarze (ang. varray) (1) (2) (3) (4) (5) Rozszerzenie obiektowe w SZBD Oracle
Rozszerzenie obiektowe w SZBD Oracle Cześć 2. Kolekcje Kolekcje Zbiory obiektów, rodzaje: tablica o zmiennym rozmiarze (ang. varray) (1) (2) (3) (4) (5) Malinowski Nowak Kowalski tablica zagnieżdżona (ang.
1 Kursory 1. 2 Wyjątki Wyjątki predefiniowane Wyjątki niezdefiniowane wcześniej Definiowanie własnych wyjątków...
Plan wykładu Spis treści 1 Kursory 1 2 Wyjątki 4 2.1 Wyjątki predefiniowane............................. 4 2.2 Wyjątki niezdefiniowane wcześniej....................... 5 2.3 Definiowanie własnych wyjątków........................
PHP: bazy danych, SQL, AJAX i JSON
1 PHP: bazy danych, SQL, AJAX i JSON SYSTEMY SIECIOWE Michał Simiński 2 Bazy danych Co to jest MySQL? Jak się połączyć z bazą danych MySQL? Podstawowe operacje na bazie danych Kilka dodatkowych operacji
Administracja i programowanie pod Microsoft SQL Server 2000
Administracja i programowanie pod Paweł Rajba pawel@ii.uni.wroc.pl http://www.kursy24.eu/ Zawartość modułu 5 Kursory w SQL Serverze Wprowadzenie Modele kursorów Używanie kursorów Rodzaje kursorów Praca
SQL Server i T-SQL w mgnieniu oka : opanuj język zapytań w 10 minut dziennie / Ben Forta. Gliwice, Spis treści
SQL Server i T-SQL w mgnieniu oka : opanuj język zapytań w 10 minut dziennie / Ben Forta. Gliwice, 2017 Spis treści O autorze 9 Wprowadzenie 11 Lekcja 1. Zrozumieć SQL 15 Podstawy baz danych 15 Język SQL
Plan wykładu BAZY DANYCH II WYKŁAD 4. Co to jest kursor? Rodzaje kursorów
Plan wykładu Kursory: deklaracja, otwieranie, pobieranie danych, zamykanie Kursory: atrybuty Kursory: pętle, rekordy Kursory z parametrami BAZY DANYCH II WYKŁAD 4 dr inż. Agnieszka Bołtuć Co to jest kursor?
Laboratorium nr 4. Temat: SQL część II. Polecenia DML
Laboratorium nr 4 Temat: SQL część II Polecenia DML DML DML (Data Manipulation Language) słuŝy do wykonywania operacji na danych do ich umieszczania w bazie, kasowania, przeglądania, zmiany. NajwaŜniejsze
Język PL/SQL. Rozdział 4. Procedury i funkcje składowane
Język PL/SQL. Rozdział 4. Procedury i funkcje składowane Podprogramy, procedury składowane, funkcje składowane, wywoływanie podprogramów. (c) Instytut Informatyki Politechniki Poznańskiej 1 Podprogramy
PHP może zostać rozszerzony o mechanizmy dostępu do różnych baz danych:
PHP może zostać rozszerzony o mechanizmy dostępu do różnych baz danych: MySQL moduł mysql albo jego nowsza wersja mysqli (moduł mysqli ma dwa interfejsy: proceduralny i obiektowy) PostgreSQL Oracle MS
Programowanie obiektowe
Laboratorium z przedmiotu Programowanie obiektowe - zestaw 02 Cel zajęć. Celem zajęć jest zapoznanie z praktycznymi aspektami projektowania oraz implementacji klas i obiektów z wykorzystaniem dziedziczenia.
C# 6.0 : kompletny przewodnik dla praktyków / Mark Michaelis, Eric Lippert. Gliwice, cop Spis treści
C# 6.0 : kompletny przewodnik dla praktyków / Mark Michaelis, Eric Lippert. Gliwice, cop. 2016 Spis treści Spis rysunków 11 Spis tabel 13 Przedmowa 15 Wprowadzenie 17 Podziękowania 27 O autorach 29 1 Wprowadzenie
Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska
Instytut Mechaniki i Inżynierii Obliczeniowej www.imio.polsl.pl fb.com/imiopolsl @imiopolsl Wydział Mechaniczny Technologiczny Politechnika Śląska Laboratorium 1 Wprowadzenie, podstawowe informacje o obsłudze
Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018
Informatyka I Klasy i obiekty. Podstawy programowania obiektowego dr inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2018 Plan wykładu Pojęcie klasy Deklaracja klasy Pola i metody klasy
JDBC w LoXiMie. Interfejs Java Database Connectivity dla systemu LoXiM. Adam Michalik 2008
JDBC w LoXiMie Interfejs Java Database Connectivity dla systemu LoXiM Adam Michalik 2008 Sterownik JDBC co to jest? Sterownik JDBC to zbiór klas implementujących interfejsy opisane w specyfikacji JDBC
PRZESTRZENNE BAZY DANYCH WYKŁAD 2
PRZESTRZENNE BAZY DANYCH WYKŁAD 2 Baza danych to zbiór plików, które fizycznie przechowują dane oraz system, który nimi zarządza (DBMS, ang. Database Management System). Zadaniem DBMS jest prawidłowe przechowywanie
Bazy danych wykład dwunasty PL/SQL, c.d. Konrad Zdanowski ( Uniwersytet Kardynała Stefana Bazy danych Wyszyńskiego, wykładwarszawa)
Bazy danych wykład dwunasty PL/SQL, c.d. Konrad Zdanowski Uniwersytet Kardynała Stefana Wyszyńskiego, Warszawa dwunasty PL/SQL, c.d. 1 / 37 SQL to za mało SQL brakuje możliwości dostępnych w językach proceduralnych.
w PL/SQL bloki nazwane to: funkcje, procedury, pakiety, wyzwalacze
w PL/SQL bloki nazwane to: funkcje, procedury, pakiety, wyzwalacze Cechy bloków nazwanych: w postaci skompilowanej trwale przechowywane na serwerze wraz z danymi wykonywane na żądanie użytkownika lub w
Tworzenie raportów XML Publisher przy użyciu Data Templates
Tworzenie raportów XML Publisher przy użyciu Data Templates Wykorzystanie Szablonów Danych (ang. Data templates) jest to jedna z metod tworzenia raportów w technologii XML Publisher bez użycia narzędzia
Trigger jest obiektem związanym z tablicą, który aktywuje się gdy do tablicy następuje odpowiednie zapytanie.
Temat: Wyzwalacze (triggery). Trigger jest obiektem związanym z tablicą, który aktywuje się gdy do tablicy następuje odpowiednie zapytanie. W poniższym przykładzie definiujemy tablicę a następnie trigger
Plan wykładu BAZY DANYCH II WYKŁAD 3. Zasięg zmiennych. Zasięg zmiennych
Plan wykładu BAZY DANYCH II WYKŁAD 3 Zasięg zmiennych Zmienne powiązane Instrukcje warunkowe Pętle Pobieranie danych SQL w PL/SQL Rekordy dr inż. Agnieszka Bołtuć Zasięg zmiennych Zmienna jest dostępna
Podprogramy. Rozdział 11 Procedury i funkcje składowane
Podprogramy Rozdział 11 Procedury i funkcje składowane Podprogramy, procedury składowane, funkcje składowane, wywoływanie podprogramów Przez podprogramy rozumiemy głównie: procedury (wykonują określone
Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1
Podstawy programowania. Wykład Funkcje Krzysztof Banaś Podstawy programowania 1 Programowanie proceduralne Pojęcie procedury (funkcji) programowanie proceduralne realizacja określonego zadania specyfikacja
Oracle PL/SQL. Paweł Rajba. pawel@ii.uni.wroc.pl http://www.kursy24.eu/
Paweł Rajba pawel@ii.uni.wroc.pl http://www.kursy24.eu/ Zawartość modułu 6 Wprowadzenie Definiowanie wyzwalaczy DML Metadane wyzwalaczy Inne zagadnienia, tabele mutujące Wyzwalacze INSTEAD OF Wyzwalacze
Wprowadzenie. Rozdział 23 PDO. Podstawowe kroki aplikacji. Źródło danych
Wprowadzenie Rozdział 23 PDO Wprowadzanie do PDO, kursory zwykłe, kursory przewijane, obsługa błędów, przetwarzanie transakcyjne PDO PHP Data Objects, obiektowo-zorientowany interfejs programistyczny dostępu
Instrukcja podwaja zarobki osób, których imiona zaczynają się P i dalsze litery alfabetu zakładamy, że takich osbób jest kilkanaście.
Rodzaje triggerów Triggery DML na tabelach INSERT, UPDATE, DELETE Triggery na widokach INSTEAD OF Triggery DDL CREATE, ALTER, DROP Triggery na bazie danych SERVERERROR, LOGON, LOGOFF, STARTUP, SHUTDOWN
Systemy GIS Tworzenie zapytań w bazach danych
Systemy GIS Tworzenie zapytań w bazach danych Wykład nr 6 Analizy danych w systemach GIS Jak pytać bazę danych, żeby otrzymać sensowną odpowiedź......czyli podstawy języka SQL INSERT, SELECT, DROP, UPDATE
Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej.
Polimorfizm jest filarem programowania obiektowego, nie tylko jeżeli chodzi o język C++. Daje on programiście dużą elastyczność podczas pisania programu. Polimorfizm jest ściśle związany z metodami wirtualnymi.
Wyzwalacze. do automatycznego generowania wartości kluczy głównych. Składnia instrukcji tworzacej wyzwalacz
Wyzwalacze Wyzwalacze są specjalnymi procedurami składowanymi, uruchamianymi automatycznie w następstwie zaistnienia określonego typu zdarzenia. Ich główne zadanie polega na wymuszaniu integralności danych
Programowanie MSQL. show databases; - pokazanie jakie bazy danych są dostępne na koncie
Programowanie MSQL show databases; - pokazanie jakie bazy danych są dostępne na koncie show databases; - wyświetlenie wszystkich baz danych na serwerze create database nazwa; - za nazwa wstawiamy wybraną
Ref. 7 - Język SQL - polecenia DDL i DML
Ref. 7 - Język SQL - polecenia DDL i DML Wprowadzenie do języka SQL. Polecenia generujące strukturę bazy danych: CREATE, ALTER i DROP. Polecenia: wprowadzające dane do bazy - INSERT, modyfikujące zawartość
Baza danych sql. 1. Wprowadzenie
Baza danych sql 1. Wprowadzenie Do tej pory operowaliście na listach. W tej instrukcji pokazane zostanie jak stworzyć bazę danych. W zadaniu skorzystamy z edytora graficznego struktury bazy danych, który
Kursor jawny. Rozdział 10a Kursory. Deklarowanie kursora (1) Deklarowanie kursora (2)
Kursor jawny Każde zapytanie SQL umieszczone w programie PL/SQL może zwrócić zero, jedną bądź wiele krotek. Aby efektywnie przetworzyć krotkizwrócone przez zapytanie korzystamy z kursorów. Kursor jest
Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat
Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Program, to lista poleceń zapisana w jednym języku programowania zgodnie z obowiązującymi w nim zasadami. Celem programu jest przetwarzanie
Oracle PL/SQL. Paweł Rajba. pawel@ii.uni.wroc.pl http://www.kursy24.eu/
Paweł Rajba pawel@ii.uni.wroc.pl http://www.kursy24.eu/ Zawartość modułu 4 Wyjątki PL/SQL Mechanizmy dotyczące błędów Typy wyjątków Obsługa wyjątków PL/SQL Obsługa błędów predefiniowanych, użytkownika
Podstawy programowania III WYKŁAD 2
Podstawy programowania III WYKŁAD 2 Jan Kazimirski 1 Komunikacja z bazami danych 2 PHP i bazy danych PHP zapewnia dostęp do wielu popularnych baz danych. Kilka poziomów abstrakcji: Funkcje obsługujące
SQL (ang. Structured Query Language)
SQL (ang. Structured Query Language) SELECT pobranie danych z bazy, INSERT umieszczenie danych w bazie, UPDATE zmiana danych, DELETE usunięcie danych z bazy. Rozkaz INSERT Rozkaz insert dodaje nowe wiersze
ORACLE (Wykład 1) aragorn.pb.bialystok.pl/~aonisko. Typy rozproszonych baz danych. Systemy klient-serwer. Klient-serwer: Przykład
ORACLE (Wykład 1) aragorn.pb.bialystok.pl/~aonisko Typy rozproszonych baz Systemy typu klient-serwer (jeden serwer) Jednorodna rozproszona baza (kilka serwerow, jeden system zarzadzania baza ) Niejednorodna
EXSO-CORE - specyfikacja
EXSO-CORE - specyfikacja System bazowy dla aplikacji EXSO. Elementy tego systemu występują we wszystkich programach EXSO. Może on ponadto stanowić podstawę do opracowania nowych, dedykowanych systemów.
Kurs WWW. Paweł Rajba. pawel@ii.uni.wroc.pl http://pawel.ii.uni.wroc.pl/
Paweł Rajba pawel@ii.uni.wroc.pl http://pawel.ii.uni.wroc.pl/ Spis treści Wprowadzenie Automatyczne ładowanie klas Składowe klasy, widoczność składowych Konstruktory i tworzenie obiektów Destruktory i
Obiektowy PHP. Czym jest obiekt? Definicja klasy. Składowe klasy pola i metody
Obiektowy PHP Czym jest obiekt? W programowaniu obiektem można nazwać każdy abstrakcyjny byt, który programista utworzy w pamięci komputera. Jeszcze bardziej upraszczając to zagadnienie, można powiedzieć,
Post-relacyjne bazy danych
Post-relacyjne bazy danych Historia języka SQL 1. Sequel-XRM 2. Sequel/2 SQL 3. ANSI SQL 1986 (ISO 1987) 4. X/Open (UNIX), SAA(IBM) 5. ANSI SQL 1989 6. ANSI/ISO SQL 92 Entry level 7. ANSI SQL 92 (SQL 2)
1 Podstawy c++ w pigułce.
1 Podstawy c++ w pigułce. 1.1 Struktura dokumentu. Kod programu c++ jest zwykłym tekstem napisanym w dowolnym edytorze. Plikowi takiemu nadaje się zwykle rozszerzenie.cpp i kompiluje za pomocą kompilatora,
Backend Administratora
Backend Administratora mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011 W tym celu korzystając z konsoli wydajemy polecenie: symfony generate:app backend Wówczas zostanie stworzona
1 Wprowadzenie do bloków nazwanych 1. 2 Parametry 2. 3 Procedury i funkcje 3. 4 Pakiety 6. 5 Podsumowanie Źródła 10
Plan wykładu Spis treści 1 Wprowadzenie do bloków nazwanych 1 2 Parametry 2 3 Procedury i funkcje 3 4 Pakiety 6 5 Podsumowanie 10 6 Źródła 10 1 Wprowadzenie do bloków nazwanych Rodzaje bloków w PL/SQL
MATERIAŁY DO ZAJĘĆ I. Podstawowe pojęcia. Algorytm. Spis treści Przepis
MATERIAŁY DO ZAJĘĆ I Podstawowe pojęcia Spis treści I. Algorytm II. Schemat blokowy III. Struktury danych IV. Program komputerowy V. Opis środowiska programistycznego VI. Obsługa wejścia wyjścia VII. Przykład
Tutorial prowadzi przez kolejne etapy tworzenia projektu począwszy od zdefiniowania przypadków użycia, a skończywszy na konfiguracji i uruchomieniu.
AGH, EAIE, Informatyka Winda - tutorial Systemy czasu rzeczywistego Mirosław Jedynak, Adam Łączyński Spis treści 1 Wstęp... 2 2 Przypadki użycia (Use Case)... 2 3 Diagramy modelu (Object Model Diagram)...
Język PL/SQL. Rozdział 2. Kursory
Język PL/SQL. Rozdział 2. Kursory Deklarowanie kursora, otwieranie kursora, pobieranie z kursora, zamykanie kursora, zmienne kursorowe, wyrażenie CURSOR, kursory niejawne. 1 Kursor jawny Każde zapytanie
Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.
Prezentacja Danych i Multimedia II r Socjologia Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL. Celem ćwiczeń jest poznanie zasad tworzenia baz danych i zastosowania komend SQL. Ćwiczenie I. Logowanie
PARADYGMATY PROGRAMOWANIA Wykład 4
PARADYGMATY PROGRAMOWANIA Wykład 4 Metody wirtualne i polimorfizm Metoda wirualna - metoda używana w identyczny sposób w całej hierarchii klas. Wybór funkcji, którą należy wykonać po wywołaniu metody wirtualnej
Kursory i wyjątki. (c) Instytut Informatyki Politechniki Poznańskiej 1
Kursory i wyjątki Kursory i praca z kursorami, kursory jawne i niejawne, otwieranie kursora, pobieranie z kursora, zamykanie kursora, wyjątki systemowe i użytkownika, zgłaszanie i obsługa wyjątków 1 Kursor
Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.
Zrozumienie funkcji danych statycznych jest podstawą programowania obiektowego. W niniejszym artykule opiszę zasadę tworzenia klas statycznych w C#. Oprócz tego dowiesz się czym są statyczne pola i metody
Instalacja SQL Server Express. Logowanie na stronie Microsoftu
Instalacja SQL Server Express Logowanie na stronie Microsoftu Wybór wersji do pobrania Pobieranie startuje, przechodzimy do strony z poradami. Wypakowujemy pobrany plik. Otwiera się okno instalacji. Wybieramy
1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?
1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie? a) konstruktor b) referencje c) destruktor d) typy 2. Które z poniższych wyrażeń są poprawne dla klasy o nazwie
Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;
Klasy w C++ są bardzo ważnym narzędziem w rękach programisty. Klasy są fundamentem programowania obiektowego. Z pomocą klas będziesz mógł tworzyć lepszy kod, a co najważniejsze będzie on bardzo dobrze
Wykład 8: klasy cz. 4
Programowanie obiektowe Wykład 8: klasy cz. 4 Dynamiczne tworzenie obiektów klas Składniki statyczne klas Konstruktor i destruktory c.d. 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD
ZMODYFIKOWANY Szczegółowy opis przedmiotu zamówienia
ZP/ITS/11/2012 Załącznik nr 1a do SIWZ ZMODYFIKOWANY Szczegółowy opis przedmiotu zamówienia Przedmiotem zamówienia jest: Przygotowanie zajęć dydaktycznych w postaci kursów e-learningowych przeznaczonych
Administracja i programowanie pod Microsoft SQL Server 2000
Administracja i programowanie pod Paweł Rajba pawel@ii.uni.wroc.pl http://www.kursy24.eu/ Zawartość modułu 4 Wsady Procedury składowane Procedury składowane tymczasowe, startowe Zmienne tabelowe Funkcje
Informacje wstępne Autor Zofia Kruczkiewicz Wzorce oprogramowania 4
Utrwalanie danych zastosowanie obiektowego modelu danych warstwy biznesowej do generowania schematu relacyjnej bazy danych Informacje wstępne Autor Zofia Kruczkiewicz Wzorce oprogramowania 4 1. Relacyjne
SQL - Structured Query Language -strukturalny język zapytań SQL SQL SQL SQL
Wprowadzenie do SQL SQL - Structured Query Language -strukturalny język zapytań Światowy standard przeznaczony do definiowania, operowania i sterowania danymi w relacyjnych bazach danych Powstał w firmie
JAVA I BAZY DANYCH. MATERIAŁY: http://docs.oracle.com/javase/tutorial/jdbc/basics/index.html
JAVA I BAZY DANYCH ZAGADNIENIA: wprowadzenie; JDBC; komunikacja z bazą danych; HSQLDB. MATERIAŁY: http://docs.oracle.com/javase/tutorial/jdbc/basics/index.html http://th-www.if.uj.edu.pl/zfs/ciesla/ JĘZYK
Oracle11g: Wprowadzenie do SQL
Oracle11g: Wprowadzenie do SQL OPIS: Kurs ten oferuje uczestnikom wprowadzenie do technologii bazy Oracle11g, koncepcji bazy relacyjnej i efektywnego języka programowania o nazwie SQL. Kurs dostarczy twórcom