ПЕРЕЛІК ДИСЦИПЛІН:
  • Адміністративне право
  • Арбітражний процес
  • Архітектура
  • Астрологія
  • Астрономія
  • Банківська справа
  • Безпека життєдіяльності
  • Біографії
  • Біологія
  • Біологія і хімія
  • Ботаніка та сільське гос-во
  • Бухгалтерський облік і аудит
  • Валютні відносини
  • Ветеринарія
  • Військова кафедра
  • Географія
  • Геодезія
  • Геологія
  • Етика
  • Держава і право
  • Цивільне право і процес
  • Діловодство
  • Гроші та кредит
  • Природничі науки
  • Журналістика
  • Екологія
  • Видавнича справа та поліграфія
  • Інвестиції
  • Іноземна мова
  • Інформатика
  • Інформатика, програмування
  • Юрист по наследству
  • Історичні особистості
  • Історія
  • Історія техніки
  • Кибернетика
  • Комунікації і зв'язок
  • Комп'ютерні науки
  • Косметологія
  • Короткий зміст творів
  • Криміналістика
  • Кримінологія
  • Криптология
  • Кулінарія
  • Культура і мистецтво
  • Культурологія
  • Російська література
  • Література і російська мова
  • Логіка
  • Логістика
  • Маркетинг
  • Математика
  • Медицина, здоров'я
  • Медичні науки
  • Міжнародне публічне право
  • Міжнародне приватне право
  • Міжнародні відносини
  • Менеджмент
  • Металургія
  • Москвоведение
  • Мовознавство
  • Музика
  • Муніципальне право
  • Податки, оподаткування
  •  
    Бесплатные рефераты
     

     

     

     

     

     

         
     
    Використання SQL в прикладному програмуванні
         

     

    Інформатика, програмування

    Використання SQL в прикладному програмуванні

    Введення

    Накопичена інформація в сучасних інформаційних технологіях зберігається і організовано в базах даних. Ці бази даних створюються і працюють за допомогою систем управління базами даних (СУБД).

    Розвиток комп'ютерних технологій, збільшення обсягу та структурної складності збережених даних, збільшення числа користувачів інформаційних систем призвели до поширення реляційних СУБД.

    Користуватися базами даних з різних куточків світу, з різних архітектур ЕОМ по мережі можна за допомогою одного стандартного мови маніпулювання даними. Розроблений в 1974 мову SQL фірмою IBM для експериментальної реляційної СУБД System R став стандартом (спочатку де-факто), завдяки поширенню двох СУБД (тієї ж фірми) - SQL/DS (1981 рік) і DB2 (1983 рік), а визнання SQL міжнародним стандартом відбулося в 1987 році.

    Реалізація в SQL концепції операцій, орієнтованих на табличне представлення даних, дозволило створити компактний мову з невеликим (менше 30) набором пропозицій. SQL може використовуватися як інтерактивний (для виконання запитів) і як вбудований (для побудови прикладних програм).

    Програмісти користуються мовою SQL, щоб писати додатки, у яких містяться звернення до баз даних. Одні й ті ж оператори SQL використовуються як для інтерактивного, так і для програмного доступу, тому частини програм, що містять звернення до базі даних, можна спочатку тестувати в інтерактивному режимі, а потім вбудовувати в програму. У традиційних базах даних для програмного доступу використовуються одні програмні кошти, а для виконання негайних запитів -- інші, без будь-якого зв'язку між цими двома режимами доступу.

    Багато сучасних СУБД мають власні мови програмування, ряд яких включає в себе SQL. Інші працюють з програмами, написаними на одному з поширених алгоритмічних мов (Сі, Паскаль або Фортран), в які включаються пропозиції SQL. Для обміну інформацією з частинами програми, написаними на будь-яких з цих мов, існують спеціальні конструкції SQL, що дозволяють працювати зі змінними та (або) окремими рядками таблиць.

    У письмовій роботі буде розглянуто використання SQL в прикладному програмуванні.

    У першому розділі мова піде про структуру модуля SQL і вбудованому SQL. Визначення процедур.

    У другому розділі описані оператори маніпулювання даними. Оператори, пов'язані з курсором, а так само поодинокі оператори маніпулювання даними.

    У третьому розділі буде розглянуто динамічний SQL в Oracle V.6.

    1. Мова модулів і вбудований SQL

    У стандарті SQL/89 визначені два способи взаємодії з БД з прикладної програми, написаної на традиційному мовою програмування.

    Перший спосіб полягає в тому, що всі оператори SQL, з якими може працювати дана прикладна програма, зібрані в один модуль і оформлені як процедури цього модуля. Для цього SQL/89 містить спеціальний под'язик - мова модулів. При використанні такого способу взаємодії з БД прикладна програма містить виклики процедур модуля SQL з передачею їм фактичних параметрів і отриманням відповідних параметрів.

    Другий спосіб полягає у використанні так званого вбудованого SQL, коли з використанням спеціального синтаксису в програму на традиційному мовою програмування вбудовуються оператори SQL. У цьому випадку з точки зору прикладної програми оператор SQL виконується "по місця ". Явна параметризація операторів SQL відсутній, але у вбудованих операторах SQL можуть використовуватися імена змінних основної програми, і за рахунок цього забезпечується зв'язок між прикладною програмою і СУБД.

    Концептуально ці два способи еквівалентні. Більше того, в стандарті встановлюються правила породження неявного модуля SQL по програмі з вбудованим SQL. Однак у більшості реалізацій оператори SQL, що містяться в модулі SQL, і вбудовані оператори SQL обробляються суттєво по-різному. Модуль SQL звичайно компілюється окремо від прикладної програми, в результаті чого породжується набір так званих збережених процедур (у стандарті цей термін не використовується, але поширений в комерційних реалізаціях). Тобто у випадку використання модуля SQL компіляція операторів SQL проводиться один раз, і потім відповідні процедури скільки завгодно разів можуть викликатися з прикладної програми.

    На відміну від цього, для операторів SQL, вбудованих в прикладну програму, компіляція цих операторів зазвичай проводиться кожного разу при їх використанні (правильніше сказати, при кожному першому використанні оператора при даному запуску прикладної програми).

    Звичайно, користувачі не зобов'язані знати про це технічному відмінності в обробці двох видів взаємодії з СУБД. Існують і такі системи, які виробляють одноразову компіляцію вбудованих операторів SQL і зберігають скомпільованій код. Але все-таки краще мати це на увазі.

    При використанні мови модулів текст прикладної програми має менший розмір, взаємодії з СУБД більш локалізовані за рахунок наявності явних параметрів виклику процедур. З іншого боку, для розуміння сенсу поведінки прикладної програми буде потрібно одночасне читання двох текстів. Крім того, як здається, синтаксис модуля SQL може істотно відрізнятися в різних реалізаціях. Вбудований SQL надає можливість виробництва більш "самосодержащіхся" прикладних програм. Є більше підстав розраховувати на простоту перенесення такої програми в середу інший СУБД, оскільки стандарт вбудовування більш-менш дотримується. Основним недоліком є деякий PL-подібний вид таких програм, незалежно від вибраного основного мови.

    1.1. Мова модулів

    Структура модуля SQL в стандарті SQL/89 визначається наступними синтаксичними правилами:

    ::=

    [...]

    ...

    :: = MODULE []

    :: = LANGUAGE (COBOL | FORTRAN | PASCAL | PLI)

    ::=

    AUTHORIZATION

    :: =

    Істотно, що кожен модуль SQL орієнтований на використання в програмах, написаних на конкретній мові програмування. Якщо в модулі присутні процедури роботи з курсором, то всі курсори повинні бути специфікована на початку модуля. Зауважимо, що оголошення курсору не занурюється в яку-небудь процедуру, оскільки це описовий, а не виконуваний оператор SQL.

    1.1.2. Визначення процедури

    Процедури в модулі SQL визначаються наступними синтаксичними конструкціями:

    ::=

    PROCEDURE

    ...;

    ;

    ::=

    |

    :: = SQLCODE

    ::=

    |

    |

    |

    |

    |

    |

    |

    |

    WHERE CURRENT OF

    Якщо вказаний в операторі курсор відкритий і встановлено на деяку рядок, і курсор визначає змінну таблицю, то поточний рядок курсору видаляється, а він позиціонується перед наступним рядком. Таблиця, зазначена в розділі FROM оператора DELETE, повинна бути таблицею, зазначеної в самому зовнішньому розділі FROM специфікації курсору.

    Оператор позиційної модифікації

    Оператор описується наступними синтаксичними правилами:

    ::=

    UPDATE

    SET

    [(, }...]

    WHERE CURRENT OF

    ::=

    =

    ( | NULL)

    :: =

    Якщо вказаний в операторі курсор відкритий і встановлено на деяку рядок, і курсор визначає змінну таблицю, то поточний рядок курсору модифікується відповідно до розділу SET. Позиція курсору не змінюється. Таблиця, зазначена в розділі FROM оператора DELETE, повинна бути таблицею, зазначеної в самому зовнішньому розділі FROM специфікації курсору.

    Оператор закриття курсору

    Синтаксис цього оператора наступний:

    :: = CLOSE

    Якщо до моменту виконання цього оператора курсор перебував у відкритому стані, то оператор переводить курсор в закрите стан. Після цього над курсором можливе виконання тільки оператора OPEN.

    2.2. Одиночні оператори маніпулювання даними

    Кожен з операторів цієї групи є абсолютно незалежним від якого б то не було іншого оператора.

    Оператор вибірки

    Сі?? Таксис цього оператора виглядає так:

    INTO

    WHERE []

    Таблиця T, зазначена в розділі FROM оператора DELETE, повинна бути змінною. На умова пошуку накладається та умова, що на таблицю T не повинні містити посилання ні в якому вкладеному підзапит предикатів розділу WHERE.

    Фактично оператор виконується таким чином: послідовно проглядаються всі рядки таблиці T, і ті рядки, для яких результатом обчислення умови вибірки є true, видаляються з таблиці T. При відсутності розділу WHERE видаляються всі рядки таблиці T.

    Оператор пошукової модифікації

    Оператор володіє наступним синтаксисом:

    ::=

    UPDATE

    SET

    [(, }...]

    [WHERE ]

    ::=

    =

    ( | NULL)

    :: =

    Таблиця T, зазначена в операторі UPDATE, повинна бути змінною. На умова пошуку накладається та умова, що на таблицю T не повинні міститися посилання ні в якому вкладеному підзапит предикатів розділу WHERE.

    Оператор фактично виконується таким чином: таблиця T послідовно проглядається, і кожен рядок, для якої результатом обчислення умови пошуку є true, змінюється відповідно з розділом SET. Якщо арифметичне вираження в розділі SET містить посилання на стовпці таблиці T, то при обчисленні арифметичного виразу використовуються значення стовпців поточного рядка до їх модифікації.

    Оператори закінчення транзакції

    Поточна транзакція може бути завершена успішно (з фіксацією в базі даних внесені модифікації) шляхом виконання оператора COMMIT WORK або аварійно (з видаленням з бази даних змін, зроблених поточної транзакцією) шляхом виконання оператора ROLLBACK WORK. При виконанні будь-якого з цих операторів здійснюється примусове закриття всіх курсорів, відкритих до моменту виконання оператора завершення транзакції.

    3. Динамічний SQL в ORACLE V.6

    Описаний в стандарті SQL/89 набір операторів SQL призначений для вбудовування в програму на звичайній мові програмування. Тому в цьому наборі перемішані оператори "істинного" реляційного мови запитів (наприклад, оператор видалення з таблиці частини рядків, задовольняють заданим значенням) і оператори роботи з курсором, що дозволяють забезпечити порядковий доступ до таблиці-результату запиту.

    Зрозуміло, що в діалоговому режимі набір операторів SQL та їх синтаксис повинен бути дещо іншим. Все питання полягає в тому, як реалізовувати таку діалогову програму. Правила вбудовування стандартного SQL в програму на звичайній мові програмування передбачають, що вся інформація, що стосується операторів SQL, відома в статиці (за винятком значень змінних, що використовуються як констант в операторах SQL). Чи не передбачені стандартні засоби компіляції з подальшим виконанням операторів, які стають відомими тільки під час виконання (наприклад, вводяться з терміналу). Тому, спираючись тільки на стандарт, неможливо реалізувати діалоговий монітор взаємодії з БД на мові SQL або іншу прикладну програму, в якій текст операторів SQL виникає під час виконання, тобто фактично так чи інакше стандарт необхідно розширювати.

    Один з можливих шляхів розширення полягає в використанні спеціальної групи операторів, які забезпечують динамічну компіляцію (під час виконання прикладної програми) базового підмножини операторів SQL і підтримуючих їх коректне виконання. Певний набір таких операторів входив до діалект SQL, реалізований у System R, дещо відмінний набір входить у реалізацію Oracle V.6 і нарешті, у новому стандарті SQL/92 з'явилася стандартна версія динамічного SQL.

    Оскільки в СУБД Oracle засоби динамічного SQL реалізовані вже порівняно давно, має сенс розглянути спочатку їх, щоб мати основу для порівняння з SQL/92.

    У додатковий набір операторів, що підтримують динамічну компіляцію базових операторів SQL, що входять оператори: PREPARE, DESCRIBE і EXECUTE.

    3.1. Оператор підготовки

    Оператор PREPARE має синтаксис:

    ::=

    PREPARE FROM

    :: =

    Під час виконання оператора PREPARE символьна рядок, що міститься в host-string-variable, передається компілятору SQL, який обробляє її майже таким же чином, як якби отримав в статиці. Побудований при виконанні оператора PREPARE код залишається чинним до кінця транзакції або до повторного виконання цього оператора PREPARE в межах цієї ж транзакції.

    На відміну від статично підставляє в програму на звичайній мові програмування операторів SQL, в яких зв'язок із змінними включаючи програми проводиться по іменах (тобто відповідно до стандарту у вбудованому оператора SQL можуть вживатися просто імена змінних включаючи програми), динамічна природа операторів, що готуються з допомогою оператора PREPARE, змушує розглядати ці імена як імена формальних параметрів. Відповідність цих формальних параметрів адресами змінних включаючи програми встановлюється позиційно під час виконання підготовленого оператора.

    3.2. Оператор одержання опису підготовленого оператора

    Оператор DESCRIBE призначений для того, щоб визначити тип заздалегідь підготовленого оператора, дізнатися про кількість і типи формальних параметрів (якщо вони є) і кількість і типи стовпців результуючої таблиці, якщо підготовлений оператор є оператором вибірки (SELECT).

    Дія оператора DESСRIBE полягає в тому, що в зазначену область пам'яті прикладної програми (структура цієї області фіксована й відома користувачам) міститься інформація, що характеризує раніше підготовлений оператор із заданим ім'ям.

    3.3. Оператор виконання підготовленого оператора

    Оператор EXECUTE служить для виконання раніше підготовленого оператора SQL типу 'N' (що не вимагає застосування курсору) або для сумісної підготовки та виконання такого оператора. Синтаксис оператора EXECUTE:

    ::=

    EXECUTE

    ( [USING ]

    (IMMEDIATE )

    Для виконання підготовленого оператора служить першим варіант оператора EXECUTE. У цьому випадку повинен задавати ім'я, що вживалися раніше в операторі PREPARE. Якщо в підготовленому операторі присутні формальні параметри, то в операторі EXECUTE повинен задаватися список фактичних параметрів . Число і типи фактичних параметрів повинні відповідати числу і типам формальних параметрів підготовленого оператора.

    Другий варіант оператора EXECUTE призначений в Oracle для сумісної підготовки та виконання оператора SQL типу 'N'. У цьому випадку параметром оператора EXECUTE є рядок, яка повинна містити текст оператора SQL (цей рядок дозволяється також задавати літерально). Забороняється використання в цьому операторі змінних включаючи програми (формальних параметрів).

    3.4. Робота з динамічними операторами SQL через курсори

    Для використання таких операторів використовується розширення механізму курсорів стандарту SQL. По-перше, при визначенні курсору можна вказувати не тільки літеральную специфікацію курсору, а й ім'я оператора, вводиться за допомогою оператора PREPARE (у цьому випадку оператор PREPARE повинен текстуально знаходитися вище оператора DECLARE). Тим самим повний синтаксис оператора DECLARE стає наступним:

    ::=

    DECLARE CURSOR

    FOR ( | )

    Далі, оскільки для такого курсору в статиці невідома інформація про вхідних та вихідних змінних включаючи програми, то використовується інша форма операторів OPEN і FETCH.

    Повний синтаксис цих операторів стає наступним:

    ::=

    OPEN

    [USING ( | DESCRIPTOR )]

    ::=

    FETCH

    (INTO

    (USING

    (USING DESCRIPTOR )

    Як видно, пропонується два способи завдання фактичних вхідних і вихідних параметрів: пряме з вказівкою в операторах OPEN та/або FETCH списків імен змінних включаючи програми і непряме, коли число параметрів і їх адреси повідомляються через додаткову структуру-дескриптор.

    Перший спосіб пропонується використовувати для роботи з операторами вибірки, для яких фіксований набір формальних вхідних і вихідних параметрів. Точніше кажучи, що стосується вихідних параметрів, повинні бути фіксовані число і типи елементів списку вибірки.

    Другий спосіб роботи з динамічно відкомпілювалися операторами, які вимагають використання курсорів, полягає у використанні дескрипторів динамічно сформованих списків параметрів. У цьому випадку вся відповідальність за відповідність типів фактичних і формальних параметрів лягає на програміста. У результаті помилки при формуванні такого списку, в Зокрема, може бути зіпсована пам'ять Сі-програми.

    Висновок

    Будучи стандартною мовою доступу до реляційної базі даних, SQL дуже впливає на всі сегменти комп'ютерного ринку. Компанія IBM прийняла SQL як уніфікує технології баз даних для лінії своїх продуктів. Всі постачальники міні-комп'ютерів пропонують реляційні бази даних; такі бази даних домінують і на ринку комп'ютерних систем, що працюють під управлінням UNIX. У міру того, як окремі персональні комп'ютери поступаються дорогою мереж з архітектурою клієнт/сервер, SQL видозмінює ринок баз даних для персональних комп'ютерів. SQL застосовується навіть при оперативній обробці транзакцій, спростовуючи існувало раніше думку, що через низький швидкодії реляційні бази даних ніколи не зможуть використовуватися в додатки для обробки транзакцій.

    З часом мова SQL розвивається і доповнюється новими можливостями і разом з цим трохи ускладнюється. Разом з цим збільшується число користувачів, яким необхідно полегшити роботу з БД.

    Завдяки прикладного програмування полегшується робота з БД. Користувачі отримують зручний інтерфейс управління.

    Список літератури

    Атре Ш. Структурний підхід до організації баз даних. -- М.: Фінанси і статистика, 1983. - 320 с

    Бойко В.В., Савінков В.М. Проектування баз даних інформаційних систем. - М.: Фінанси і статистика, 1989. - 351 с.

    Дейт К. Посібник з реляційної СУБД DB2. - М.: Фінанси і статистика, 1988. - 320 с.

    Джексон Г. Проектування реляційних баз даних для використання з мікроЕОМ. -М.: Світ, 1991. - 252 с.

    Кириллов В.В. Структурізованний мова запитів (SQL). - СПб.: ИТМО, 1994. - 80 с.

    Кириллов В.В.: Навчальний посібник. - СПб.: ИТМО, 1994. -- 90 с.

    Матеріали сайту «Сервер інформаційних технологій» WEB: www.citforum.ru

    Матеріали сайту «SQL.ru» WEB: www.SQL.ru

    Мейер М. Теорія реляційних баз даних. -М.: Світ, 1987. - 608 с.

    Хаббард Дж. Автоматизоване проектування баз даних. - М.: Світ, 1984. - 294 с.

    Для підготовки даної роботи були використані матеріали з сайту http://ping.alfaspace.net

         

     
         
    Реферат Банк
     
    Рефераты
     
    Бесплатные рефераты
     

     

     

     

     

     

     

     
     
     
      Все права защищены. Reff.net.ua - українські реферати ! DMCA.com Protection Status