SELECT кіріктірілген операторы бағдарламалаудың негізгі тілдерімен
келісілетін деректердің қҧрылымдарын жасау керек.
Кіріктірілген SQL-де сҧраныстар екі тҥрге бөлінеді:
• кҥтілетін нəтижелер деректердің бір жолына сəйкес келетін бір
жолдық сҧраныстар. Осы жол бірнеше бағанның мəнін қҧрауы мҥмкін;
• нəтижесі біртҧтас жолдар жинағын алу болып табылатын көп
жолды сҧраныстар. Бҧл ретте қосымша барлық алынған жолды өңдеу
мҥмкіндігіне ие болу керек. Яғни, алынған жолдар жинағын қарайтын
жəне өңдейтін механизм болу керек.
Сҧраныстың бірінші тҥрі - кіріктірілген SQL бар бір жолды
сҧраныс
—
төмендегідей
болатын
SQL
операторының
модификациясын шақырды:
SELECT [{ALL | DISTINCT}] <қайтарылатын бағандар тізімі>
INTO <негізгі тілдің ауыспалылар тізімі>
FROM <бастапқы кестелер тізімі>
[WHERE <қосу жəне іздеу шарттары>]
Кіріктірілген SELECT операторына негізгі тілдің ауыспалылар
тізімін қҧрайтын жаңа INTO операторы қосылды. Дəл осы
ауыспалыларға бір жолдық сҧратудың нəтижелері орналастырылады,
сондықтан негізгі тілдің ауыспалылар тізімі тəртібі бойынша, тҥрі
бойынша жəне деректер көлемі бойынша қайтарылатын бағандар
тізімімен келісілу керек. Бағдарламалаудың кез-келген тілі ережелері
бойынша барлық негізгі ауыспалылар алдын ала қолданбалы
бағдарламада сипатталған. Мысалы, егер ―Кітапхана‖ ДҚ-да READERS
(«Оқырмандар») кестесі болса, онда біз нақты бір оқырман туралы
мəлімет ала аламыз.
CREATE TABLE READERS
(READER_JD Smallint (4) PRIMARY KEY.
FIRST_NAME char (30) NOT NULL.
LAST_NAME char (30) NOT NULL.
ADRES char (50).
HOME_PHON char (12).
WORK_PHON char (12).
BIRTH_DAY
date
C HE C K
(DateDiff
(year.
GetDate
()
DIRTH_DAY)>= 17
):
Ол ҥшін негізгі ауыспалыларды сипаттаймыз. Transact SQL тілін
пайдалана отырып, MS SQL SERVER 7.0 ҥшін мысалды қарастырайық.
Жергілікті ауыспалыларды сипаттау кезінде Transact SQL тілінде
арнайы
«@»
символы
пайдаланылады.
Transact
SQL-дегі
комментарийлер/* комментарий */ жҧп символдарға алынған.
DECLARE @reader_id INT
DECLARE @FIRS_NAME Char (30), @LAST_NAME Char (50).
@ADRES Char (50)
DECLARE @HOME_PHON Char(12).l3WORK_PHON Char(12) /*
оқырман билетінің бірегей нөмірін белгілейік */
SET @READER_ID = 4
/* енді сҧратуды орындап, алынған мəліметтерді бҧдан бҧрын
белгіленген ауыспалыларға орналастырамыз */
SELECT
READERS.FIRST_NAME.
READERS.IAST_NAME.
READERS.ADRES.
READERS.HOME_PHON. READERS.WORK_PHON
INTO @FIRS_NAME. @LAST_NAME. @ADRES. @HOME_PHON.
@WORK_PHON
FROM READERS
WHERE READERS.READER_ID = @READER_ID
Осы қарапайым мысалда біз ауыспалылардың аттарын READERS
кестесінің баған аттарындай жасадық, бірақ бҧл міндетті емес. Алайда
транслятор осы объекттерді ерекшелей алады, сондықтан Transact SQL
диалектісінде жергілікті ауыспалыларды арнайы «@» символына алу
қабылданған. Мысалда біз өрістердің білікті аттарын, кесте атына
алынған өрістер аттарын пайдаландық. Алайда бҧл міндетті емес,
себебі сҧраныс тек бір кестенің деректерін таңдайды.
Осы мысалда негізгі ауыспалылар əртҥрлі рөлді атқарады.
@READER_ID жергілікті ауыспалы сҧранысқа қатысты кіреберіс
болып табылады. Оған 4 мəні тағайындалған. Сҧраныста бҧл мəн
деректерді сҥзу ҥшін пайдаланылады, сондықтан осы ауыспалы
WHERE шартында пайдаланылады.
Қалған негізгі ауыспалылар шығаберіс ауыспалылар рөлін
атқарады. Онда ДҚБЖ-ге ДҚ-дан алынған READERS қатынасының
тиісті өрістерінің мəндерін орналастыра отырып, сҧранысты орындау
нəтижелерін орналастырады.
9.2. Кӛп жолды сҧраныстарды ӛңдеу меңзерлері - операторлары Одан кҥрделірек - көп жолды сҧраныстарды қарастырамыз. Көп
жолды сҧраныстарды іске асыру ҥшін меңзер немесе жазбалар
жинағын көрсеткіш ҧғымы енгізіледі.
Меңзермен жҧмыс істеу ҥшін бірнеше жаңа SQL операторы
қосылады:
DECLARE CURSOR орындалатын сҧранысты айқындайды, меңзер
атын белгілейді жəне сҧраныс нəтижелерін белгіленген меңзермен
байланыстырады. Бҧл оператор сҧраныс ҥшін орындаушы болып
табылмайды, ол тек келешек көптеген жазбалар қҧрылымын
айқындайды жəне оны меңзердің бірегей атымен байланыстырады.
Бҧл оператор бағдарламалау тілдеріндегі деректерді сипаттау
операторына ҧқсас;
OPEN ДҚБЖ-ге сипатталған сҧранысты орындау, белгіленген
сҧранысқа сəйкес келетін виртуалды жолдар жинағын жасау
командасын береді. OPEN операторы нəтижелер жолының виртуалды
жинағының бірінші жолының алтына жазбаларға нҧсқаушыны
(меңзерді) орнатады;
FETCH жазбаға нҧсқаушыны келесі позицияға жылжытады.
Көптеген ДҚБЖ-де бҧл оператор орын ауыстырудың аса кең
қызметтерін іске асырады. Ол нҧсқаушыны туынды жазбаға, ілгері
жəне кейін жылжыту мҥмкіндігін береді, абсолютті жəне
салыстырмалы адресаттауға жол береді, меңзерді динамикалық
кестенің бірінші немесе соңғы жазбасына орнату мҥмкіндігін береді;
CLOSE меңзерді жабады жəне динамикалық кесте жазбаларына
қолжетімдікті тоқтатады. Ол меңзер мен негізгі сҧранысты орындау
нəтижесі арасындағы байланысты іс-жҥзінде жояды. Алайда
коммерциялық ДҚБЖ-да CLOSE операторы виртуалды жазбалар
жинағын жоюды білдіре бермейді.
Стандарт меңзерді айқындау операторының келесі синтаксисін
айқындайды:
DECLARE <меңзер_аты>CURSOR FOR
<меңгер_сипаттізімі>Меңзердің
сипаттізімі>::=
сҧраныстың_тіркесі>
Меңзердің аты — бҧл бағдарламалаудың негізгі тіліндегі қол
жетімді сəйкестендіргіш.
Меңзерді жариялауда негізгі ауыспалылар пайдаланылуы мҥмкін.
Алайда OPEN операторын орындау кезінде негізгі сҧраныстағы
мəндерді сҥзу шарттарына байланысты, кіреберіс ауыспалылар ретінде
пайдаланылатын барлық негізгі ауыспалылардың мəндері белгілену
керек екенін есте сақтаған жөн.
Кітапхананың барлық қарызға алушылардың тізімін қҧрайтын
меңзерді айқындаймыз. Қарыз алушылар деп қолында тапсыру мерзімі
өтіп кеткен, кемінде бір кітап бар оқырмандарды атайық.
DECLARE Debtor_reader_cursor 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_JUT > Getdate()
ORDER BY READERS. FIRST NAME