13 дәріс. Қолданбалы бағдарламаларда SQL тілін қолдану
Мақсаты
:
қолданбалы
бағдарламалардан
деректер
қорына
сұраныстардың құрылуының негізгі мүмкіндіктерін көрсету.
Деректер қорымен негізгі жұмыс қолданбалы бағдарламаларды қолданып
жүргізіледі, олардың ішінен деректер қорына сұраныстарда жүреді. Бұл
жағдайда жұмыстың интерактивті режимі қолданыла алмайды, SQL-
сұранысының мәтіні қолданбалы бағдарламаға қосылуы керек (егер сұраныс
толығымен алдын ала анықталса), немесе қолданбалы бағдарлама жұмысының
үрдісінде құрылуы қажет.
Бағдарламалық SQL бағдарламалаудың бір тілінде жазылған,
қолданбалы бағдарламалардың ішіне SQL-сұраныстарды салу үшін арналған.
Сонымен бірге мұнда келесі сұрақтар туындайды:
1)
Алгоритмдік тілдің компиляторлары қолданбалы бағдарламалар
мәтініне SQL операторлар тізбегін шығару мүмкіндігіне ие болуы қажет.
2)
Компилятор жоғарғы деңгейдегі бағдарламалау мүмкіндіктерін
(айнымалы, тармақталу, циклдар) және SQL мүмкіндіктерін (табиғиға жақын,
тілдерде сұраныс) біріктіруі қажет.
Бұл мәселелерді шешімі SQL стандартында ішінара жазылған.
Жұмыстың интерактивті режимінде SQL-сұраныстарының орындалу
алгоритмін қарастырамыз. SQL-сұранысты жүзеге асыру жұмысы уақыты
ішінде қолданушының сұранысты орындау нәтижелерін күтуге тура келетінін
көру қиын емес. Егер біршама уақыттан кейін қолданушыға сол сұранысты
қайтадан орындауға тура келсе, ДҚБЖ, алдыңғы жүгіну кезіндегі, сол
әрекеттерді қайта жасайды. Механизмнің біршама жетілмегендіктері:
- бірдей сұраныстар үшін әр кез осы сатылар қайтадан орындалып
отырады;
- ДҚБЖ алға кетуі бар интерактивті сұраныстарды өңдей алмайды.
Мұндай мәселелердің шешімі – сұраныстарды өңдеу бойынша
әрекеттердің бөлігін бір рет орындау қажет, нәтижелерді біршама түрде сақтау,
ал содан кейін қанша рет қажет болса, сонша рет орындау қажет екені анық.
Бұл идея бағдарламалық SQL-дің негізгі идеяларының бірі болып табылады.
Осылайша, бағдарламалық SQL келесілерге:
- жоғарғы деңгейдегі бағдарламалау тілінде бағдарламалау мәтінінде
интерактивті SQL операторларын қолдануға;
- интерактивті SQL операторларымен қатар, SQL-ді толықтыратын және
оның мүмкіндіктерін көтеретін, арнайы жаңа құрастырылымдарды қолдану;
- сұраныста параметрлерді беру үшін, бағдарламада жарияланған,
айнымалыларды сұраныс мәтінінде қолдану;
- сұраныс нәтижелерін бағдарламаға қайтару үшін, интерактивті SQL
жоқ, арнайы құрастырылымдарды қолдану;
- бағдарлама мен ДҚБЖ келісілген жұмыстардың соңын қамтамасыз ете
отырып, бағдарламамен бірігіп сұраныстардың компиляциясын жүзеге асыруға
мүмкіндік береді. бағдарламаны орындау сатысында жұмсалатын, уақытты
57
үнемдей отырып, сұраныстарды талдау және оңтайландыру бойынша
әрекеттерді алдын ала орындау (компиляция сатысында).
Қазіргі уақытта қолданбалы бағдарламаға SQL тілінде сұраныстарды
тұрғызудың үш нұсқасы қолданылуда: статикалық SQL, динамикалық SQL
және қосымшаларды бағдарламалаудың әртүрлі интерфейстеріне негізделген,
әдіс (API). Сәйкес нұсқаларын қарастырайық.
Статикалық SQL – жоғарғы бағдарламалау деңгейдегі бағдарламалау
тілде бағдарлама мәтінінің ішіне SQL-операторларын салу үшін арналған,
бағдарламалық SQL түрлері.
Статикалық SQL негізгі ерекшелігі оның атауымен анықталады: ішіне
салынған сұраныстар қолданбалы бағдарламаны жазу сатысында нақты
анықталуы қажет, себебі сұраныстардың нақты мәтіні қолданбалы
бағдарламаның ішіне қойылады.
Статикалық SQL жұмысымен байланысты, екі негізгі сатыны –
бағдарлама
компиляциясы
және
бағдарлама
жұмысы
(орындалуы)
қарастырамыз.
Компиляция сұлбасы және бағдарламаны құрастыру келесі түрде болады
(13.1 сурет):
- жоғарғы деңгейде бағдарламалау тілдері операторларымен және SQL
операторларынан тұратын, бағдарлама арнайы бастапқы процессордың
кірісінде беріледі, ол одан, SQL-мен байланысқан, бөліктерін бөледі;
- ішіне салынған SQL нұсқауының орнына бастапқы процессор ДҚБЖ
арнайы функциялардың шақыруын ұсынады. бағдарламалау тілдерімен
байланысына арналған мұндай функциялардың кітапханалары барлық таралған
ДҚБЖ арналған. Ерекше айта кету қажет, бұл кітапханаларда «жабық»
интерфейс болады, яғни кітапхананы жасақтаушылар, сәйкесінше бастапқы
процессорды жаңартып, оларды барлық қалаулары бойынша өзгерте алады,
бұның барлығы бағдарламалаушы бұл үрдіске кіріспеуі қажет екенін айтады;
- SQL нұсқауларының өзі бастапқы процессор жеке файлға бөледі;
- бағдарлама бағдарламалау тілінің әдеттегі компиляторыны кірісіне
келіп түседі, содан кейін объектті үлгілер пайда болады. Әрі қарай бұл объектті
үлгілер ДҚБЖ кітапханаларымен бірге бір орындалушы үлгіге – қосымшаға
жиналады;
- осы операциялармен қатар, SQL-нұсқаулардан тұратын, файлдармен
жұмыс жүреді. Әдебиеттерде бұл үлгі көбінесе «деректер қорына сұраныс
үлгісі» (Database Request Module, DBRM) деген атауға ие [1]. Бұл үлгіні
өңдеуді, әдетте BIND деп аталатын, арнайы утилита жүзеге асырады. SQL-дің
әр нұсқауы үшін утилита келесі әрекеттерді орындайды:
а) сұраныстың синтаксистік талдауын жүзеге асырады (сұраныстың
дұрыстығын тексереді);
б) деректер қорында, сұраныс сілтелетін, нысандардың барын немесе
жоқтығын тексереді;
в) сұраныстың орындалуын – сұраныстың орындалу жоспарын қандай
жолмен жүзеге асыратынын, таңдайды;
58
д) сұраныстарды орындау жоспарларының барлығы келесіде қолдану
үшін ДҚБЖ сақталады.
13.1 сурет – Ішіне салынған статикалық нұсқаулары бар бағдарлама
компиляциясының сұлбасы
Бағдарламаны орындау сұлбасы келесі түрде болады (13.2 сурет):
Бағдарлама әдеттегі жолмен орындалуға жіберіледі. Бағдарламамен
сұранысты орындау қажеттілігіне қарай ДҚБЖ арнайы функциясын шақырту
жүргізіледі, ол алдын ала құрастырылған сұранысты орындау жоспарын
іздейді. ДҚБЖ таңдалған жоспарға сәйкес сұранысты орындайды. Сұранысты
орындау нәтижесі қосымшаға келіп түседі.
59
13.2 сурет – Ішіне салынған статикалық нұсқаулары бар бағдарламаның
орындалу сұлбасы
Жоғарыда көрсетілген сұлбаларын жүзеге асыру үшін статикалық SQL,
бағдарлама мәтінінде SQL-сұраныстарды бөлуге компиляторға, кестенің осы
сұраныстарында қолданылатындарды жариялауға, сұраныстарды жүзеге асыру
нәтижесі ретінде, қателерді өңдеуге арналған айнымалыларды жариялауға және
т.б. мүмкіндік беретін, қосымша операторлардан тұруы қажет (интерактивті
SQL-мен салыстырғанда). Статикалық SQL негізгі бұйрықтары келесі кестеде
берілген.
13.1 кесте – Статикалық SQL негізгі бұйрықтары
EXEC SQL
Өзінен кейінгі нұсқау ішіне салынған SQL нұсқауы болып
табылатынын көрсететін, спецификатор
;
C тілінде – ішіне салынған SQL нұсқауының аяқталғанының
белгісі
DECLARE
TABLE
Кейін ішіне салынған SQL нұсқауларында қолданылатын,
кестені жариялайды
SQLCODE
Қателерді өңдеуге арналған айнымалы
SQLSTATE
Қателерді өңдеуге арналған айнымалы
GET
DIAGNOSTICS
Қателерді өңдеуге арналған нұсқау
WHENEVER
SQLERROR
SQLWARNING
NOT FOUND
GOTO
CONTINUE
Қателерді өңдеуді жеңілдетуге арналған бірге қолданылатын
нұсқаулар жиыны
BEGIN
DECLARE
SECTION
END DECLARE
SECTION
Соңында SQL сұраныстарында қолданылатын, айнымалылар
жарияланатын, аймақтарды анықтауға арналған нұсқаулар
60
INTO
SELECT операторында, сұраныстың орындалу нәтижесін
орналастыру
қажет,
айнымалыларды
көрсету
үшін
қолданылады
DECLARE
CURSOR
Меңзер
– бірден көп жолдардан тұратын, сұраныс
нәтижелерін өңдеуге арналған, арнайы құрал. Меңзермен
жұмыс файлдармен жұмысқа ұқсас. Берілген нұсқау меңзерді
құру үшін және оны нақты сұраныспен байланыстыру үшін
қызмет етеді
OPEN
Меңзерді ашатын және ДҚБЖ сұранысты орындауға түрткі
болатын, бұйрық. Сұраныс нәтижесінің бірінші жолының
алдында курсорды орнатады
FETCH
Ағымдағы жол көрсеткішін (меңзер) келесі жолға
ауыстыратын, бұйрық. Біршама ДҚБЖ және SQL-92
стандартында, сұраныс нәтижесінің кез келген жолына
ауыстыратын, FETCH бұйрығының әртүрлі түрлері жүзеге
асырылған
CLOSE
Меңзерді жабады және сұраныс нәтижелеріне рұқсатты
аяқтайды
Жоғарыда сипатталған бағдарламаны компиляциялау/құрастыру/орындау
сұлбаларын қолдану келесілерге мүмкіндік береді:
- жоғарғы деңгейдегі бағдарламалау тілдерінде SQL бағдарламамен бірге
қолдануға;
- сұраныс синтаксисін алдын ала тексеруді және оларды оңтайландыруды
(жоспарды таңдау) алдын ала жүзеге асыруға мүмкіндік береді. синтаксисті
тексеру тез орындалатынын белгілі, бірақ жоспарды таңдау – аса еңбек
сыйымдылықты қажет ететін процедура. Оның компиляция сатысында бір рет
орындалатыны жайындағы факт, үстеме шығындардың елеулі кішірейтіндігі
туралы айтуға мүмкіндік береді.
Алайда бағдарламалық SQL статикалық түрлерінің біршама шектеулері
бар. Осылай, сұраныстарда айнымалылар, әдетте сұраныстарда тұрақтылар
тұрған, орындарда ғана қолданыла алады. Мысалы, іріктеу жүргізілетін, кесте
атауын беруге болмайды, сонымен қатар, параметр ретінде, бағандардыда.
Осыған байланысты ішіне салынған (бағдарламалық) SQL статикалық
нұсқасын қолдану кезінде бағдарламаны жазу сатысында, қолданбалы
бағдарламада орындауға қажетті, сұраныс құрамын нақты білу қажет. Көптеген
жағдайларда бұл шектеулер маңызды болып табылады. Оны жою үшін
бағдарламалық SQL жаңа түрі – динамикалық SQL енгізілді. Динамикалық
SQL-дің негізгі идеяларын қысқаша қарастырамыз.
Достарыңызбен бөлісу: |