Меңзерді айқындау кезінде біз қайтадан Transact SQL Getdate()
қызметін пайдаландық, ол ағымдағы кҥннің мəнін қайтарады.
Сонымен, белгілі бір меңзер кітапханаға уақытында қайтармаған, кітап
атаулары көрсетілген, қарызға алушылар тізімін қҧрайтын жолдар
жинағын жасайды.
SQL2 Transact SQL стандартына сəйкес меңзердің кеңейтілген
анықтамасын қҧрайды.
DECLARE <меңзердің_аты>[INSENSITIVE] [SCROLL] CURSOR
FORE
C
T ТАҢДАУ ОПЕРАТОРЫ
>
[ FOR {READ ONLY | UPDATE [OF <баған_аты1> [....n]]}]
INSENSITIVE (сезімтал емес) параметрі меңзерді ашқаннан кейін
басқа пайдаланушылар жасалған бастапқы кестелердегі барлық
өзгерістер көрінбейтін, айқындалатын меңзерге сəйкес келетін жолдар
жинағының режимін айқындайды. Осындай деректер жинағы басқа
пайдаланушылармен бастапқы кестелерде жҥргізілуі мҥмкін барлық
өзгерістерге сезімтал болмайды, меңзердің осы тҥрі ДҚ-мен ―дереу
жабысуына‖ сəйкес келеді.
ДҚБЖ осындай меңзерді аса жылдам əрі ҥнемді өңдей алады.
Сондықтан егер ДҚ жағдайын белгілі бір нақты уақытқа қарастыру
жəне өңдеу шынымен қажет болса, онда ―сезімтал емес меңзерді‖
жасаудың мəні бар.
SCROLL өзекті сөзі FETCH операторында меңзер бойынша (FIRST,
LAST, PRIOR, NEXT, RELATIVE, ABSOLUTE) кез-келген режимге
орналастыру қолжетімді болатынын айқындайды.
Егер SCROLL өзекті сөзі көрсетілмесе, онда тек стандартты ілгері
жылжыту қолжетімді болып есептеледі: FETCH операторындағы N
E
XT
сипаттізімі.
Егер READ ONLY (тек оқуға арналған) сипаттізімі көрсетілсе, онда
бастапқы кестелердің өзгерістері мен жаңартулары осы меңзерді
пайдалана отырып орындалмайды. Осындай сипаттізімі бар меңзер
өңдеу барысында ең жылдам болуы мҥмкін. Алайда READ ONLY
сипаттізімін арнайы көрсетпесеңіз, онда ДҚБЖ негізгі кестелермен
модификация операцияларына рҧқсат етілген деп есептейді, бҧл
жағдайда ДҚ тҧтастығын қамтамасыз ету ҥшін жҥйе меңзермен
операцияларды баяу өңдейді.
UPDATE [OF <баған аты 1> [,...<баған атыn>]] параметрі пайдалану
кезінде біздің меңзермен жҧмысымыз барысында өзгерістерге рҧқсат
етілетін, бағандар тізбесін белгілейміз. Осындай шектеу ДҚБЖ
жҧмысын жеңілдетеді жəне жылдамдатады. Егер бҧл параметр
көрсетілмесе, онда меңзердің барлық бағандарын өзгертуге болады деп
болжалады. Біздің мысалға оралайық. Егер бізге қарыз алушылар
туралы мəліметтерді беретін ДҚ дереу жабысуы қажет болса, онда
меңзермен жҧмысты жылдамдату мҥмкіндігін беретін барлық
параметрлерді қолданамыз.
Онда меңзерді сипаттау операторы келесі тҥрде болады:
DECLARE Debtor_reader_cursor INSENSITIVE CURSOR FOR
SELECT
READERS.FIRST_NAME.
READERS.LAST_NAME.
READERS.ADRES.
READERS.HOME_PHON.
READERS.WORK_
PHON. BOOKS.TITLE
FROM READERS.BOOKS.EXEMPLAR
WHERE READERS.READER_ID = EXEMPLAR.READER_ID AND
BOOKS.ISBN = EXEMPLARE.ISBN AND EXEMPLAR.DATA_OUT
> Getdate ()
ORDER BY READERS.FIRST_NAME
FOR READ ONLY
Меңзерді сипаттау кезінде меңзермен байланысты жолдардың
негізгі жинағын жасау ҥшін пайдаланылатын SELECT операторының
тҥріне шектеу жоқ. SELECT операторында топтастырулар жəне
кіріктірілген қосалқы сҧраныстар, есептелетін өрістер пайдаланылуы
мҥмкін.
Кеңейтілген FETCH операторы келесі синтаксиске ие: FETCH
[NEXT | PRIOR | FIRST | LAST |
ABSOLUTE {n | <ауыспалының_аты>}
| RELATIVE{n|<ауыспалының_аты>}]
FROM
<меңзердің аты>INTO <негізгі ауыспалылар тізімі>
МҧндаNEXT параметрі меңзермен байланысты негізгі жолдар
жинағындағы ағымдағыдан кейінгі келесі жолдың таңдалуын
белгілейді. PRIOR параметрі ағымдағыға қатысты бҧдан бҧрынғы
жолдың жылжытылуын белгілейді. FIRST параметрі жинақтың бірінші
жолына, ал LAST параметрі жинақтың соңғы жолына жылжытылуын
белгілейті.
Бҧдан басқа, кеңейтілген жылжыту операторында бірден
белгіленген жолған орналастыруға рҧқсат етіледі; бҧл ретте
ABSOLUTE параметрімен белгілей отырып, абсолютті адресаттау жəне
RELATIVE
параметрімен
белгілей
отырып,
салыстырмалы
адресаттауға рҧқсат етіледі. Салыстырмалы адресаттау кезінде оң сан
нҧсқарды ағымдағы жазбадан төмен, теріс сан ағымдағы жазбадан
жоғары жылжытады.
Алайда кеңейтілген FETCH операторын қолдану ҥшін SQL2
стандартына сəйкес меңзердің сипаттамасы міндетті тҥрде SCROLL
өзекті сөзін қҧрауы керек. Кейде мҧндай меңзерлер бҧралатын деп
аталады. Стандартқа осы меңзерлер жақын арада ғана енді, сондықтан
коммерциялық ДҚБЖ-де ҧқсас меңзерлермен жҧмыс істейтін
операторлар жиі қатты ерекшеленеді.
Бҥгінгі кҥннің реалийлері коммерциялық ДҚБЖ жеткізушілерін SQL
соңғы стандартын аса қатаң қадағалауға мəжбҥрлейді. Техникалық
қҧжаттамада FETCH операторының синтаксисінің екі нҧсқасын
кездестіруге болады: біреуі, стандартқа сəйкес келеді жəне екіншісі
меңзермен жҧмыс істеу ҥшін тек ДҚБЖ деректерімен ҧсынылатын
қосымша мҥмкіндіктермен стандартты кеңейтеді.
Егер сіз ДҚ басқа платформаға орын ауыстыру қажет деп
болжасаңыз, ал бҧны əрқашан көздеу керек, онда стандартты
мҥмкіндіктерді пайдаланған жөн. Бҧл жағдайда қосымша аса
платформалы-тəуелсіз болады жəне басқа ДҚБЖ-ға орын ауыстыру
жеңіл болады.
9.3.
Меңзерді жабу операторы
Меңзерді жабу операторының синтаксисі қарапайым, ол мынадай
болады:
CLOSE<меңзердің_аты>
Меңзерді жабу операторы меңзерді ашу операторымен жасалған
уақытша кестені жабады жəне қолданбалы бағдарламаның осы
объектке қолжетімдігін тоқтатады. Жабу операторының бірден-бір
параметрі меңзердің аты болып табылады.
Меңзерді жабу операторы меңзерді ашу операторынан кейін кез-
келген сəтте орындалуы мҥмкін.
Кейбір коммерциялық ДҚБЖ-де меңзерді жабу операторынан басқа
меңзерді деактивациялау (жою) операторы пайдаланылады. Мысалы,
MS SQL Server 7.0-де меңзерді жабу операторымен қатар
DEALLOCATE <меңзердің_аты> операторы пайдаланылады.
Мҧнда меңзерді жабу операторы меңзерге байланысты деректер
жинағын жоймайды, тек оған қолжетімдікті жабады жəне бҧдан бҧрын
осы меңзермен байланысты болған барлық бҧғаттауларды босатады.
DEALLOCATE SQL Server операторын орындау кезінде DECLARE
меңзерді сипаттау командасымен пайдаланылатын бөлінетін жадты
босатады. Осы команданы орындағаннан кейін осы меңзер ҥшін OPEN
командасын орындау мҥмкін емес.
9.4.
Меңзерді пайдалана отырып деректерді жою және жаңарту
Қолданбалы бағдарламаларда меңзерлер жиі деректерді ретімен
қарау ҥшін пайдаланылады. Егер меңзер топтастыру операциясымен
байланысты болмаса, онда іс жҥзінде меңзердің əрбір жолы қатаң
тҥрде бастапқы кестенің бір жолына ғана сəйкес келеді жəне осы
жағдайда меңзерді деректерді жедел тҥзету ҥшін пайдалану қолайлы.
Достарыңызбен бөлісу: |