1 / 21

Hniezdené SQL

Hniezdené SQL. Michal Tom čányi. Prehľad. SQL vs. jazyky pre vývoj aplikácií prístup k dátam rozhranie pre vzájomnú interakciu Embedded (hniezdené) SQL syntax ošetrenie chýb Kurzory vlastnosti práca s kurzormi. aplikačné jazyky(3GL) Pascal,C, Java procedurálne

phyre
Download Presentation

Hniezdené SQL

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Hniezdené SQL Michal Tomčányi

  2. Prehľad • SQL vs. jazyky pre vývoj aplikácií • prístup k dátam • rozhranie pre vzájomnú interakciu • Embedded (hniezdené) SQL • syntax • ošetrenie chýb • Kurzory • vlastnosti • práca s kurzormi

  3. aplikačné jazyky(3GL) Pascal,C, Java procedurálne efektívne vyjadrenie algoritmu neprocedurálne nedefinujú „ako“ výsledok spočítať štandardné konštrukcie podmienky, cykly manipulácia dát po malých častiach dátové jazyky (4GL) PL/SQL neprocedurálne príklad: select chýbajú štandardné konštrukcie kontrast: PL/SQL množinová orientácia pri práci s dátami impedance mismatch metódy prístupu dátové typy Aplikačné jazyky vs. SQL

  4. Aplikačné rozhranie pre SQL • priame volanie (direct invocation) • vyžaduje množinový prístup • nepoužíva sa • modulárny jazyk (module language) • hniezdené SQL (embedded SQL) • štandard definuje mapovanie dátových typov SQL na typy hostiteľského jazyka • potrebná konverzia typov - timestamp

  5. Hniezdené SQL • SQL vložené do hostiteľského jazyka • predspracovanie pri preklade - ecpg,pcc • schéma: ... príkaz hostiteľského jazyka príkaz hostiteľského jazyka príkaz hniezdeného SQL príkaz hostiteľského jazyka ...

  6. Syntax • SQL príkaz uvedený kľúčovými slovami: EXEC SQL • príklad: EXEC SQL SELECT user_name FROM passwd WHERE uid= :uid_to_select ; • SQL deklarácie ohraničené EXEC SQL BEGIN DECLARE SECTION EXEC SQL END DECLARE SECTION • príklad: EXEC SQL BEGIN DECLARE SECION; char user_name[20]; /* login */ int uid; /* identifikačnéčíslo */ EXEC SQL END DECLARE SECTION;

  7. Ošetrenie chýb • pomocou konštrukcie WHENEVER • syntax: WHENEVER podmienka akcia • podmienka • SQLERROR – výnimka alebo SQLCODE<0 • NOT FOUND – žiadne dáta, SQLCODE=100 • akcia • CONTINUE – pokračovanie vo výpočte • GOTO/GO TO <návestie> – nepodmienený skok • príklad: EXEC SQL WHENEVER NOT FOUND GOTO vypis_chybu;

  8. Príklad ošetrenia chýb 1 EXEC SQL príkaz1; 2 EXEC SQL WHENEVER SQLERROR GOTO chyba; 3 EXEC SQL príkaz2; 4 EXEC SQL WHENEVER NOT FOUND GOTO data; 5 EXEC SQL príkaz3; 6 EXEC SQL WHENEVER SQLERROR CONTINUE; 7 EXEC SQL príkaz4;

  9. Poznámky k syntaxi • možnosť definovania znakovej sady pre premenné • EXEC SQL NAMES ARE znaková-sada • explicitná definícia premenných SQLSTATE a SQLCODE • deklarácia v C: long SQLCODE; char[6] SQLSTATE;

  10. typ v C char VARCHAR short long float double BIT SQL ekvivalent CHARACTER CHARACTER VARYING SMALLINT INTEGER REAL DOUBLE PRECISION BIT Dátové typy pre jazyk C

  11. #include <stdio.h> EXEC SQL include sqlca; /* alebo #include <sqlca.h> */ EXEC SQL BEGIN DECLARE SECTION; /* zdieľané premenné */ static const int user_id;/* const, volatile, static, extern... */ char *shell=“/bin/bash”; /* inicializácia */ VARCHAR user_login[50]; /* polia */ EXEC SQL END DECLARE SECTION; int main(int argc, char *argv[]) { EXEC SQL WHENEVER SQLERROR CONTINUE; /* ignorujeme chyby */ EXEC SQL CONNECT to ‘michal@host'; /* pripojenie k databázi */ EXEC SQL SELECT login,uidINTO :user_login, :user_id FROM passwd WHERE default_shell LIKE:shell; /* SQL dotaz */ printf(“Užívateľ %s(%d) používa shell %s\n”, user_login, user_id, shell); EXEC SQL DISCONNECT ALL; return(EXIT_SUCCESS); }

  12. Kurzory • riešia impedance mismatch • umožňujú prístup riadok po riadku • predstava ukazovateľa na riadky • schéma: deklarácia a otvorenie: vytvor kurzor pre SELECT cyklus: čítaj dáta ak žiadne nie sú opusti cyklus, inak spracuj(zapíš) koniec: zavri kurzor

  13. Syntax • úplná syntax EXEC SQLDECLARE meno-kurzoru [ INSENSITIVE ] [ SCROLL ] CURSOR FORvýraz [ ORDER BY ] [ modifikovateľnosť dát ] • najjednoduchšia forma EXEC SQL DECLARE meno-kurzoru CURSOR FOR výraz

  14. Usporiadanie • ORDER BY špecifikácia • špecifikácia v tvare { názov-stĺpca | číslo stĺpca } [ COLLATE BY názov-porovnania ] [ ASC | DESC ] • príklad: EXEC SQL DECLARE CURSOR usp_ceny FOR SELECT aktualna_cena, nasa_cena, aktualna_cena-nasa_cena AS rozdiel_cien

  15. Modifikovateľnosť dát (Updatability) • niekedy nechceme aby dáta pod kurzorom boli modifikovateľné • READ ONLY • FOR UPDATEOF zoznam_stĺpcov • príklad: EXEC SQL DECLARE mod_akt_ceny CURSOR FOR SELECT aktualna_cena, nasa_cena FROM tovar FOR UPDATE OF aktualna_cena

  16. Príklad • deklarácia: EXEC SQL DECLARE mod_akt_ceny CURSOR FOR SELECT aktualna_cena, nasa_cena FROM tovar FOR UPDATE OF aktualna_cena • funguje: EXEC SQL UPDATE tovar SET aktualna_cena=aktualna_cena/2 WHERE CURRENT OF mod_akt_ceny • zlyhá: EXEC SQL UPDATE tovar SET nasa_cena = nasa_cena/2 WHERE CURRENT OF mod_akt_ceny

  17. Citlivosť (Sensitivity) • aplikácia mení dáta ktoré sama používa – aký má byť výsledok ? • SQL-89 nedefinoval • SQL-92 necitlivé/nerozhodnuteľné kurzory (insensitive/indeterminant) • necitlivý – ignoruje zmeny vrámci transakcie • nerozhodnuteľný – náhodné chovanie

  18. Scrollable cursors • možnosť ľubovoľného pohybu po dátach (vpred, vzad, po skokoch) • aktivujeme pomocou SCROLL pri vytváraní kurzoru • SQL-92 nepovoľuje kombináciu SCROLL a FOR UPDATE pre jeden kurzor

  19. Otvorenie, zatvorenie, fetch, zmena • pred použitím sa musí kurzor otvoriť • OPEN názov-kurzoru • po použití zavrieť, uvoľnenie zdrojov • CLOSE názov-kurzoru • získanie dát riadok po riadku • FETCH [orientácia] FROM názov-kurzoru INTO ciele • orientácia: NEXT,PRIOR,FIRST,LAST, ABSOLUTE [-]n, RELATIVE [-]n • pozičné mazanie • DELETE FROM názov-tab WHERE CURRENT OF kurzor • pozičná modifikácia: • UPDATE názov-tab SET set-list WHERE CURRENT OF názov-kurzoru • set-list v tvare názov-stĺpca = hodnota | NULL | default

  20. Zhrnutie • hniezdené SQL • prepojenie 3GL jazyka a SQL • najrozšírenejšie • prekompilátory: pcc (Oracle), ecpg • kurzory • rozhranie medzi množinovým prístupom a prístupom k jednotlivým prvkom • citlivosť vrámci transakcie • scrollovanie

  21. Zdroje • Understanding The New SQL: A Complete Guide • google (ecpg,pcc,embedded SQL) • príklady pre Oracle PCC: UNIX lab – adresár/DB/oracle/product/8.1.5/precomp/demo/proc/

More Related