Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
42
Добавлен:
16.04.2013
Размер:
45.58 Кб
Скачать

Understanding SQL. Chapter 25. йурпмшъпчбойе SQL у дтхзйн същлпн ( чмпцеоощк SQL ) ч ьфпк змбче чщ хъобефе лбл SQL йурпмшъхефус ДМС ТБУЫЙТЕОЙС РТПЗТБНН ОБРЙУБООЩИ ОБ ДТХЗЙИ СЪЩЛБИ. иПФС ОЕРТПГЕДХТОПУФШ СЪЩЛБ SQL ДЕМБЕФ ЕЗП ПЮЕОШ НПЭОЩН, Ч ФП ЦЕ ЧТЕНС ЬФП ОБЛМБДЩЧБЕФ ОБ ОЕЗП ВПМШЫПЕ ЮЙУМП ПЗТБОЙЮЕОЙК. юФПВЩ РТЕПДПМЕФШ ЬФЙ ПЗТБОЙЮЕОЙС, ЧЩ НПЦЕФЕ ЧЛМАЮБФШ SQL Ч РТПЗТБННЩ ОБРЙУБООЩЕ ОБ ФПН ЙМЙ ДТХЗПН РТПГЕДХТОПН СЪЩЛЕ( ЙНЕАЭЕН ПРТЕДЕМЕООЩК БМЗПТЙФН). дМС ОБЫЙИ РТЙНЕТПЧ, НЩ ЧЩВТБМЙ рБУЛБМШ, УЮЙФБС ЮФП ЬФПФ СЪЩЛ ОБЙВПМЕЕ РТПУФ Ч РПОЙНБОЙЙ ДМС ОБЮЙОБАЭЙИ, Й ЕЭЕ РПФПНХ, ЮФП рБУЛБМШ - ПДЙО ЙЪ СЪЩЛПЧ ДМС ЛПФПТЩИ ANSI ЙНЕЕФ РПМХПЖЙГЙБМШОЩК УФБОДБТФ. юфп фблпе - чмпцеойе SQL юФПВЩ ЧМПЦЙФШ SQL Ч ДТХЗПК СЪЩЛ, ЧЩ ДПМЦОЩ ЙУРПМШЪПЧБФШ РБЛЕФ РТПЗТБНН ЛПФПТЩК ВЩ ПВЕУРЕЮЙЧБМ РПДДЕТЦЛХ ЧМПЦЕОЙС SQL Ч ЬФПФ СЪЩЛ Й ЛПОЕЮОП ЦЕ, РПДДЕТЦЛХ УБНПЗП СЪЩЛБ. еУФЕУФЧЕООП, ЧЩ ДПМЦОЩ ВЩФШ ЪОБЛПНЩ У СЪЩЛПН ЛПФПТЩК ЧЩ ЙУРПМШЪХЕФЕ. зМБЧОЩН ПВТБЪПН, ЧЩ ВХДЕФЕ ЙУРПМШЪПЧБФШ ЛПНБОДЩ SQL ДМС ТБВПФЩ Ч ФБВМЙГБИ ВБЪЩ ДБООЩИ, РЕТЕДБЮЙ ТЕЪХМШФБФПЧ ЧЩЧПДБ Ч РТПЗТБННХ Й РПМХЮЕОЙЕ ЧЧПДБ ЙЪ РТПЗТБННЩ Ч ЛПФПТХА ПОЙ ЧЛМБДЩЧБАФУС, ПВПВЭЕООП УУЩМБСУШ Л ЗМБЧОПК РТПЗТБННЕ ( ЛПФПТБС НПЦЕФ ЙМЙ ОЕ НПЦЕФ РТЙОЙНБФШ ЙИ ЙЪ ДЙБМПЗБ ЙМЙ РПУЩМБФШ ПВТБФОП Ч ДЙБМПЗ РПМШЪПЧБФЕМС Й РТПЗТБННЩ ). ъбюен члмбдщчбфш SQL? иПФС Й НЩ РПФТБФЙМЙ ОЕЛПФПТПЕ ЧТЕН ОБ ФП ЮФПВЩ РПЛБЪБФШ ЮФП ХНЕЕФ ДЕМБФШ SQL , ОП ЕУМЙ ЧЩ - ПРЩФОЩК РТПЗТБННЙУФ, ЧЩ ЧЕТПСФОП ПФНЕФЙМЙ, ЮФП УБН РП УЕВЕ, ПО ОЕ ПЮЕОШ РПМЕЪЕО РТЙ ОБРЙУБОЙЙ РТПЗТБНН. уБНПЕ ПЮЕЧЙДОПЕ ПЗТБОЙЮЕОЙЕ - ЬФП ФП, ЮФП Ч ФП ЧТЕН ЛБЛ SQL НПЦЕФ УТБЪХ ЧЩРПМОЙФШ РБЛЕФ ЛПНБОДЩ, ЙОФЕТБЛФЙЧОЩК SQL Ч ПУОПЧОПН ЧЩРПМОСЕФ РП ПДОПК ЛПНБОДЕ Ч ЛБЦДЩК НПНЕОФ ЧТЕНЕОЙ. фЙРЩ МПЗЙЮЕУЛЙИ ЛПОУФТХЛГЙК ФЙРБ if ... then ( "ЕУМЙ ... ФП" ), for ... do ( "ДМС ... ЧЩРПМОЙФШ") Й while ... repeat( "РПЛБ ... РПЧФПТСФШ" ) - ЙУРПМШЪХЕНЩИ ДМС УФТХЛФХТ ВПМШЫЙОУФЧБ ЛПНРШАФЕТОЩИ РТПЗТБНН, ЪДЕУШ ПФУХФУФЧХАФ, ФБЛ ЮФП ЧЩ ОЕ УНПЦЕФЕ РТЙОСФШ ТЕЫЕОЙЕ - ЧЩРПМОСФШ МЙ, ЛБЛ ЧЩРПМОСФШ, ЙМЙ ЛБЛ ДПМЗП ЧЩРПМОСФШ ПДОП ДЕКУФЧЙЕ Ч ТЕЪХМШФБФЕ ДТХЗПЗП ДЕКУФЧЙС. лТПНЕ ФПЗП, ЙОФЕТБЛФЙЧОЩК SQL ОЕ НПЦЕФ ДЕМБФШ НОПЗПЗП УП ЪОБЮЕОЙСНЙ, ЛТПНЕ ЧЧПДБ ЙИ Ч ФБВМЙГХ, ТБЪНЕЭЕОЙС ЙМЙ ТБУРТЕДЕМЕОЙС ЙИ У РПНПЭША ЪБРТПУПЧ, Й ЛПОЕЮОП ЧЩЧПДБ ЙИ ОБ ЛБЛПЕ-ФП ХУФТПКУФЧП. вПМЕЕ ФТБДЙГЙПООЩЕ СЪЩЛЙ, ПДОБЛП, УЙМШОЩ ЙНЕООП Ч ЬФЙИ ПВМБУФСИ. пОЙ ТБЪТБВПФБОЩ ФБЛ ЮФПВЩ РТПЗТБННЙУФ НПЗ ОБЮЙОБФШ ПВТБВПФЛХ ДБООЩИ, Й ПУОПЧЩЧБСУШ ОБ ЕЕ ТЕЪХМШФБФБИ, ТЕЫБФШ, ДЕМБФШ МЙ ЬФП ДЕКУФЧЙЕ ЙМЙ ДТХЗПЕ, ЙМЙ ЦЕ РПЧФПТСФШ ДЕКУФЧЙЕ ДП ФЕИ РПЛБ ОЕ ЧУФТЕФЙФУС ОЕЛПФПТПЕ ХУМПЧЙЕ, УПЪДБЧБС МПЗЙЮЕУЛЙЕ НБТЫТХФЩ Й ГЙЛМЩ. ъОБЮЕОЙС УПИТБОСАФУС Ч РЕТЕНЕООЩИ, ЛПФПТЩЕ НПЗХФ ЙУРПМШЪПЧБФШУС Й ЙЪНЕОСФШУС У РПНПЭША МАВПЗП ЮЙУМБ ЛПНБОД. ьФП ДБЕФ ЧБН ЧПЪНПЦОПУФШ ХЛБЪЩЧБФШ РПМШЪПЧБФЕМСН ОБ ЧЧПД ЙМЙ ЧЩЧПД ЬФЙИ ЛПНБОД ЙЪ ЖБКМБ, Й ЧПЪНПЦОПУФШ ЖПТНБФЙТПЧБФШ ЧЩЧПД УМПЦОЩНЙ УРПУПВБНЙ ( ОБРТЙНЕТ, РТЕПВТБЪПЧЩЧБФШ ЮЙУМПЧЩИ ДБООЩИ Ч ДЙБЗТБННЩ ). гЕМШ ЧМПЦЕООПЗП SQL УПУФПЙФ Ч ФПН, ЮФПВЩ ПВЯЕДЙОЙФШ ЬФЙ ЧПЪНПЦОПУФЙ, РПЪЧПМСАЭЙЕ ЧБН УПЪДБЧБФШ УМПЦОЩЕ РТПГЕДХТОЩЕ РТПЗТБННЩ ЛПФПТЩЕ БДТЕУХАФ ВБЪХ ДБООЩИ РПУТЕДУФЧПН SQL - РПЪЧПМСС ЧБН ХУФТБОЙФШ УМПЦОЩЕ ДЕКУФЧЙС Ч ФБВМЙГБИ ОБ РТПГЕДХТОПН СЪЩЛЕ ЛПФПТЩК ОЕ ПТЙЕОФЙТПЧБО ОБ ФБЛХА УФТХЛФХТХ ДБООЩИ, Ч ФПЦЕ ЧТЕНС РПДДЕТЦЙЧБС УФТХЛФХТОХА УФТПЗПУФШ РТПГЕДХТОПЗП СЪЩЛБ. лбл дембафус чмпцеойс SQL. лПНБОДЩ SQL РПНЕЭБАФУС Ч ЙУИПДОЩК ФЕЛУФ ЗМБЧОПК РТПЗТБННЩ, ЛПФПТПК РТЕДЫЕУФЧХЕФ ЖТБЪБ - EXEC SQL ( EXECute SQL ). дБМЕЕ ХУФБОБЧМЙЧБАФУС ОЕЛПФПТЩЕ ЛПНБОДЩ ЛПФПТЩЕ СЧМСАФУС УРЕГЙБМШОЩНЙ ДМС ЧМПЦЕООПК ЖПТНЩ SQL, Й ЛПФПТЩЕ ВХДХФ РТЕДУФБЧМЕОЩ Ч ЬФПК ЗМБЧЕ. уФТПЗП ЗПЧПТ, УФБОДБТФ ANSI ОЕ РПДДЕТЦЙЧБЕФ ЧМПЦЕООЩК SQL ЛБЛ ФБЛПЧПК. пО РПДДЕТЦЙЧБЕФ РПОСФЙЕ, ОБЪЩЧБЕНПЕ - НПДХМШ, ЛПФПТЩК ВПМЕЕ ФПЮОП, СЧМСЕФУС ЧЩЪЩЧБЕНЩН ОБВПТПН РТПГЕДХТ SQL, Б ОЕ ЧМПЦЕОЙЕН Ч ДТХЗПК СЪЩЛ. пЖЙГЙБМШОПЕ ПРТЕДЕМЕОЙЕ УЙОФБЛУЙУБ ЧМПЦЕОЙС SQL, ВХДЕФ ЧЛМАЮБФШ ТБУЫЙТЕОЙЕ ПЖЙГЙБМШОПЗП УЙОФБЛУЙУБ ЛБЦДПЗП СЪЩЛБ Ч ЛПФПТЩК НПЦЕФ ЧЛМБДЩЧБФШУС SQL, ЮФП ЧЕУШНБ ДПМЗБ Й ОЕВМБЗПДБТОБ ЪБДБЮБ, ЛПФПТХА ANSI ЙЪВЕЗБЕФ. пДОБЛП, ANSI ПВЕУРЕЮЙЧБЕФ ЮЕФЩТЕ РТЙМПЦЕОЙС ( ОЕ СЧМСАЭЙЕУС ЮБУФША УФБОДБТФБ ), ЛПФПТЩЕ ПРТЕДЕМСАФ УЙОФБЛУЙУ ЧМПЦЕОЙС SQL ДМС ЮЕФЩТЕИ СЪЩЛПЧ: лпвпм, рбулбмш, жптфтбо, Й рм/1. сЪЩЛ C - ФБЛЦЕ ЫЙТПЛП РПДДЕТЦЙЧБЕФУС ЛБЛ Й ДТХЗЙЕ СЪЩЛЙ. лПЗДБ ЧЩ ЧУФБЧМСЕФЕ ЛПНБОДЩ SQL Ч ФЕЛУФ РТПЗТБННЩ ОБРЙУБООПК ОБ ДТХЗ- ПН СЪЩЛЕ, ЧЩ ДПМЦОЩ ЧЩРПМОЙФШ РТЕДЛПНРЙМСГЙА РТЕЦДЕ, ЮЕН ЧЩ ПЛПОЮБФЕМШОП ЕЕ УЛПНРЙМЙТХЕФЕ. рТПЗТБННБ ОБЪЩЧБЕНБС РТЕЛПНРЙМСФПТПН ( ЙМЙ РТЕРТПГЕУУПТПН ), ВХДЕФ РТПУНБФТЙЧБФШ ФЕЛУФ ЧБЫЕК РТПЗТБННЩ Й РТЕПВТБЪПЧЩЧБФШ ЛПНБОДЩ SQL, Ч ЖПТНХ ХДПВОХА ДМС ЙУРПМШЪПЧБОЙС ВБЪПЧЩН СЪЩЛПН. ъБФЕН ЧЩ ЙУРПМШЪХЕФЕ ПВЩЮОЩК ФТБОУМСФПТ ЮФПВЩ РТЕПВТБЪПЧЩЧБФШ РТПЗТБННХ ЙЪ ЙУИПДОПЗП ФЕЛУФБ Ч ЧЩРПМОСЕНЩК ЛПД. уПЗМБУОП РПДИПДХ Л НПДХМШОПНХ СЪЩЛХ ПРТЕДЕМЕООПНХ ANSI, ПУОПЧОБС РТПЗТБННБ ЧЩЪЩЧБЕФ РТПГЕДХТЩ SQL. рТПГЕДХТЩ ЧЩВЙТБАФ РБТБНЕФТЩ ЙЪ ЗМБЧ- ОПК РТПЗТБННЩ, Й ЧПЪЧТБЭБАФ ХЦЕ ПВТБВПФБООЩЕ ЪОБЮЕОЙС, ПВТБФОП Ч ПУОПЧОХА РТПЗТБННХ. нПДХМШ НПЦЕФ УПДЕТЦБФШ МАВПЕ ЮЙУМП РТПГЕДХТ, ЛБЦДБС ЙЪ ЛПФПТЩИ УПУФПЙФ ЙЪ ПДЙОПЮОПК ЛПНБОДЩ SQL. йДЕ Ч ФПН, ЮФПВЩ РТПГЕДХТЩ НПЗМЙ ТБВПФБФШ ФЕН ЦЕ УБНЩН УРПУПВПН ЮФП Й РТПГЕДХТЩ ОБ СЪЩЛЕ Ч ЛПФПТЩК ПОЙ ВЩМЙ ЧМПЦЕОЩ( ИПФС НПДХМШ ЕЭЕ ДПМЦЕО ЙДЕОФЙЖЙГЙТПЧБФШ ВБЪПЧЩК СЪЩЛ ЙЪ-ЪБ ТБЪМЙЮЙК Ч ФЙРБИ ДБООЩИ ТБЪМЙЮОЩИ СЪЩЛПЧ ). тЕБМЙЪБГЙЙ НПЗХФ ХДПЧМЕФЧПТЙФШ УФБОДБТФХ, ЧЩРПМОЙЧ ЧМПЦЕОЙЕ SQL ФБЛЙН УРПУПВПН, ЛБЛ ЕУМЙ ВЩ НПДХМЙ ХЦЕ ВЩМЙ ФПЮОП ПРТЕДЕМЕОЩ. дМС ЬФПК ГЕМЙ РТЕЛПНРЙМСФПТ ВХДЕФ УПЪДБЧБФШ НПДХМШ, ОБЪЩЧБЕНЩК НПДХМЕН ДПУФХРБ. фПМШЛП ПДЙО НПДХМШ, УПДЕТЦБЭЙК МАВПЕ ЮЙУМП РТПГЕДХТ SQL, НПЦЕФ УХЭЕУФЧПЧБФШ ДМС ДБООПК РТПЗТБННЩ. тБЪНЕЭЕОЙЕ ПРЕТБФПТПЧ SQL ОЕРПУТЕДУФЧЕООП Ч ЗМБЧОПН ЛПДЕ, РТПЙУИПДЙФ ВПМЕЕ РТПУФП Й ВПМЕЕ РТБЛФЙЮОП ЮЕН ОЕРПУТЕДУФЧЕООП УПЪДБОЙЕ УБНЙИ НПДХМЕК. лБЦДБС ЙЪ РТПЗТБНН ЙУРПМШЪХАЭЙИ ЧМПЦЕОЙЕ SQL, УЧСЪБОБ У ID ДПУФХРБ, ЧП ЧТЕНС ЕЕ ЧЩРПМОЕОЙС. ID ДПУФХРБ, УЧСЪБООЩК У РТПЗТБННПК, ДПМЦЕО ЙНЕФШ ЧУЕ РТЙЧЙМЕЗЙЙ ЮФПВЩ ЧЩРПМОСФШ ПРЕТБГЙЙ SQL, ЧЩРПМОСЕНЩЕ Ч РТПЗТБННЕ. чППВЭЕ ФП, ЧМПЦЕООБС РТПЗТБННБ SQL ТЕЗЙУФТЙТХЕФУС Ч ВБЪЕ ДБООЩИ, ФБЛЦЕ ЛБЛ Й РПМШЪПЧБФЕМШ, ЧЩРПМОСАЭЙК РТПЗТБННХ. вПМЕЕ РПДТПВОП, ЬФП ПРТЕДЕМСЕФ РТПЕЛФЙТПЧЭЙЛ, ОП ЧЕТПСФОП ВЩМП ВЩ ОЕРМПИП ДМС ЧЛМАЮЙФШ Ч ЧБЫХ РТПЗТБННХ ЛПНБОДХ CONNECT ЙМЙ ЕК РПДПВОХА. йурпмшъпчбойе ретенеоощи пуопчопзп същлб ч SQL пУОПЧОПК УРПУПВ ЛПФПТЩН SQL Й ЮБУФЙ ВБЪПЧПЗП СЪЩЛБ ЧБЫЙИ РТПЗТБНН ВХДХФ УЧСЪЩЧБФШУС ДТХЗ У ДТХЗПН - ЬФП У РПНПЭША ЪОБЮЕОЙК РЕТЕНЕООЩИ. еУФЕУФЧЕООП, ЮФП ТБЪОЩЕ СЪЩЛЙ ТБУРПЪОБАФ ТБЪМЙЮОЩЕ ФЙРЩ ДБООЩИ ДМС РЕТЕНЕООЩИ. ANSI ПРТЕДЕМСЕФ ЬЛЧЙЧБМЕОФЩ SQL ДМС ЮЕФЩТЕ ВБЪПЧЩИ СЪЩЛПЧ - рм/1, рБУЛБМШ, лпвпм, Й жптфтбо; ЧУЕ ЬФП РПДТПВОПУФЙ ПРЙУБОЩ Ч рТЙМПЦЕОЙЙ B. ьЛЧЙЧБМЕОФЩ ДМС ДТХЗЙИ СЪЩЛПЧ - ПРТЕДЕМСЕФ РТПЕЛФЙТПЧЭЙЛ. йНЕКФЕ Ч ЧЙДХ, ЮФП ФЙРЩ, ФБЛЙЕ ЛБЛ DATE, ОЕ ТБУРПЪОБАФУС ANSI; Й УМЕДПЧБФЕМШОП ОЙЛБЛЙИ ЬЛЧЙЧБМЕОФОЩИ ФЙРПЧ ДБООЩИ ДМС ВБЪПЧЩИ СЪЩЛПЧ, ОЕ УХЭЕУФЧХАФ Ч УФБОДБТФЕ ANSI. вПМЕЕ УМПЦОЩЕ ФЙРЩ ДБООЩИ ВБЪПЧПЗП СЪЩЛБ, ФБЛЙЕ ЛБЛ НБФТЙГЩ, ОЕ ЙНЕАФ ЬЛЧЙЧБМЕОФПЧ Ч SQL. чЩ НПЦЕФЕ ЙУРПМШЪПЧБФШ РЕТЕНЕООЩЕ ЙЪ ЗМБЧОПК РТПЗТБННЩ ЧП ЧМПЦЕООЩИ ПРЕТБФПТБИ SQL ЧЕЪДЕ, ЗДЕ ЧЩ ВХДЕФЕ ЙУРПМШЪПЧБФШ ЧЩТБЦЕОЙС ЪОБЮЕОЙК. ( SQL, ЙУРПМШЪХЕНЩК Ч ЬФПК ЗМБЧЕ, ВХДЕФ РПОЙНБФШУС ЛБЛ ЧМПЦЕООЩК SQL, ДП ФЕИ РПТ РПЛБ ЬФП ОЕ ВХДЕФ ПЗПЧПТЕОП ПУПВП. ) фЕЛХЭЙН ЪОБЮЕОЙЕН РЕТЕНЕООПК, НПЦЕФ ВЩФШ ЪОБЮЕОЙЕ, ЙУРПМШЪХЕНПЕ Ч ЛПНБОДЕ. зМБЧОЩЕ РЕТЕНЕООЩЕ ДПМЦОЩ - * ВЩФШ ПВЯСЧМЕОЩНЙ Ч SQL DECLARE SESSION ( тбъдем пвясчмеойк ) ЛПФПТЩК ВХДЕФ ПРЙУБО ДБМЕЕ. * ЙНЕФШ УПЧНЕУФЙНЩК ФЙР ДБООЩИ У ЙИ ЖХОЛГЙСНЙ Ч ЛПНБОДЕ SQL ( ОБРТЙНЕТ, ЮЙУМПЧПК ФЙР ЕУМЙ ПО ЧУФБЧМСЕФУС Ч ЮЙУМПЧПЕ РПМЕ ) * ВЩФШ ОБЪОБЮЕООЩНЙ ЪОБЮЕОЙА ЧП ЧТЕН ЙИ ЙУРПМШЪПЧБОЙС Ч ЛПНБОДЕ SQL, ЕУМЙ ЛПНБОДБ SQL УБНПУФПСФЕМШОП ОЕ НПЦЕФ УДЕМБФШ ОБЪОБЮЕОЙЕ. * РТЕДЫЕУФЧПЧБФШ ДЧПЕФПЮЙА (:) ЛПЗДБ ПОЙ ХРПНЙОБАФУС Ч ЛПНБОДЕ SQL фБЛ ЛБЛ ЗМБЧОЩЕ РЕТЕНЕООЩЕ ПФМЙЮБАФУС ПФ ЙНЕО УФПМВГПЧ SQL ОБМЙЮЙЕН Х ОЙИ ДЧПЕФПЮЙС, ЧЩ НПЦЕФЕ ЙУРПМШЪПЧБФШ РЕТЕНЕООЩЕ У ФЕНЙ ЦЕ УБНЩНЙ ЙНЕОБНЙ ЮФП Й ЧБЫЙ УФПМВГЩ, ЕУМЙ ЬФП ЛПОЕЮОП ОХЦОП. рТЕДРПМПЦЙН ЮФП ЧЩ ЙНЕЕФЕ ЮЕФЩТЕ РЕТЕНЕООЩИ Ч ЧБЫЕК РТПЗТБННЕ, У ЙНЕОБНЙ: id_num, salesperson, loc, Й comm. пОЙ УПДЕТЦБФ ЪОБЮЕОЙС ЛПФПТЩЕ ЧЩ ИПФЙФЕ ЧУФБЧЙФШ Ч ФБВМЙГХ рТПДБЧГПЧ. чЩ НПЗМЙ ВЩ ЧМПЦЙФШ УМЕДХАЭХА ЛПНБОДХ SQL Ч ЧБЫХ РТПЗТБННХ: EXEC SQL INSERT INTO Salespeople VALUES ( :id_num, :salesperson, :loc, :comm) фЕЛХЭЙЕ ЪОБЮЕОЙС ЬФЙИ РЕТЕНЕООЩИ ВХДХФ РПНЕЭЕОЩ Ч ФБВМЙГХ. лБЛ ЧЩ НПЦЕФЕ ЧЙДЕФШ, РЕТЕНЕООБ comm ЙНЕЕФ ФП ЦЕ УБНПЕ ЙН ЮФП Й УФПМВЕГ Ч ЛПФПТЩК ЬФП ЪОБЮЕОЙЕ ЧЛМБДЩЧБЕФУС. пВТБФЙФЕ ЧОЙНБОЙЕ, ЮФП ФПЮЛБ У ЪБРСФПК Ч ЛПОГЕ ЛПНБОДЩ ПФУХФУФЧХЕФ. ьФП РПФПНХ, ЮФП УППФЧЕФУФЧХАЭЕЕ ЪБЧЕТЫЕОЙЕ ДМС ЧМПЦЕООПК ЛПНБОДЩ SQL ЪБ- ЧЙУЙФ ПФ СЪЩЛБ ДМС ЛПФПТПЗП ДЕМБЕФУС ЧМПЦЕОЙЕ. дМС рБУЛБМС Й PL/1, ЬФП ВХДЕФ ФПЮЛБ У ЪБРСФПК; ДМС лпвпмб, УМПЧП END-EXEC ; Й ДМС жптфтбоб ОЕ ВХДЕФ ОЙЛБЛПЗП ЪБЧЕТЫЕОЙС. ч ДТХЗЙИ СЪЩЛБИ ЬФП ЪБЧЙУЙФ ПФ ТЕБМЙЪБГЙЙ, Й РПЬФПНХ НЩ ДПЗПЧПТЙНУС ЮФП ВХДЕН ЙУРПМШЪПЧБФШ ФПЮЛХ У ЪБРСФПК (Ч ЬФПК ЛОЙЗЕ) ЧУЕЗДБ, ЮФПВЩ ОЕ РТПФЙЧПТЕЮЙФШ ЙОФЕТБЛФЙЧОПНХ SQL Й рБУЛБМА. рБУЛБМШ ЪБЧЕТЫБЕФ ЧМПЦЕООЩК SQL Й УПВУФЧЕООЩЕ ЛПНБОДЩ ПДЙОБЛПЧП - ФПЮЛПК У ЪБРСФПК. уРПУПВ УДЕМБФШ ЛПНБОДХ РПМОПУФША ФБЛПК ЛБЛ ПРЙУБОБ ЧЩЫЕ, УПУФПЙФ Ч ФПН, ЮФПВЩ ЧЛМАЮБФШ ЕЕ Ч ГЙЛМ Й РПЧФПТСФШ ЕЕ, У ТБЪМЙЮОЩНЙ ЪОБЮЕОЙС- НЙ РЕТЕНЕООЩИ, ЛБЛ ОБРТЙНЕТ РПЛБЪБОП Ч УМЕДХАЭЕН РТЙНЕТЕ: while not end-ot-file (input) do begin readln (id_num, salesperson, loc, comm); EXEC SOL INSERT INTO Salespeople VALUES (:id_num, :salesperson, :loc, :comm); end; жТБЗНЕОФ РТПЗТБННЩ ОБ рбулбме, ПРТЕДЕМСЕФ ГЙЛМ, ЛПФПТЩК ВХДЕФ УЮЙФЩЧБФШ ЪОБЮЕОЙС ЙЪ ЖБКМБ, УПИТБОСФШ ЙИ Ч ЮЕФЩТЕИ РТПЙНЕОПЧБООЩИ РЕТЕНЕООЩИ, УПИТБОСФШ ЪОБЮЕОЙС ЬФЙИ РЕТЕНЕООЩИ Ч ФБВМЙГЕ рТПДБЧГПЧ, Й ЪБФЕН УЮЙФЩЧБФШ УМЕДХАЭЙЕ ЮЕФЩТЕ ЪОБЮЕОЙС, РПЧФПТ ЬФПФ РТПГЕУУ ДП ФЕИ РПТ РПЛБ ЧЕУШ ЧИПДОПК ЖБКМ ОЕ РТПЮЙФБЕФУС. уЮЙФБЕФУС, ЮФП ЛБЦДЩК ОБВПТ ЪОБЮЕОЙК ЪБЧЕТЫБЕФУС ЧПЪЧТБФПН ЛБТЕФЛЙ ( ДМС ОЕЪОБЛПНЩИ У рБУЛБМЕН, ЖХОЛГЙС readln УЮЙФЩЧБЕФ ЧЧПДЙНХА ЙОЖПТНБГЙА Й РЕТЕ- ИПДЙФ ОБ УМЕДХАЭХА УФТПЛХ ЙУФПЮОЙЛБ ЬФПК ЙОЖПТНБГЙЙ). ьФП ДБЕФ ЧБН РТПУФПК УРПУПВ РЕТЕДБФШ ДБООЩЕ ЙЪ ФЕЛУФПЧПЗП ЖБКМБ Ч ТЕМСГЙПООХА УФТХЛФХТХ. лПОЕЮОП, ЧЩ НПЦЕФЕ УОБЮБМБ ПВТБВПФБФШ ДБООЩЕ МАВЩНЙ ЧПЪНПЦОЩНЙ УРПУПВБНЙ ОБ ЧБЫЕН ЗМБЧОПН СЪЩЛЕ, ОБРТЙНЕТ ДМС ЙУЛМАЮЕОЙС ЧУЕИ ЛПНЙУУЙПООЩИ ОЙЦЕ ЪОБЮЕОЙС .12 while not end-ot-file (input) do begin readln (id_num, salesperson, loc, comm); if comm > = .12 then EXEC SQL INSERT INTO Salespeople VALUES (:id_num, :salesperson, :loc, :comm); end; фПМШЛП УФТПЛЙ ЛПФПТЩЕ ЧУФТЕФСФ ХУМПЧЙЕ comm >= .12 ВХДХФ ЧУФБЧМЕОЩ Ч ЧЩЧПД. ьФП РПЛБЪЩЧБЕФ ЮФП НПЦОП ЙУРПМШЪПЧБФШ Й ГЙЛМЩ Й ХУМПЧЙС ЛБЛ ОПТНБМШОЩЕ ДМС ЗМБЧОПЗП СЪЩЛБ. пвясчмеойе ретенеоощи чУЕ РЕТЕНЕООЩЕ ОБ ЛПФПТЩЕ ЙНЕЕФУС УУЩМЛБ Ч РТЕДМПЦЕОЙСИ SQL, ДПМЦОЩ УОБЮБМБ ВЩФШ ПВЯСЧМЕОЩ Ч SQL DECLARE SECTION ( тбъдемЕ пвясчмеойк ), ЙУРПМШЪХАЭЕН ПВЩЮОЩК УЙОФБЛУЙУ ЗМБЧОПЗП СЪЩЛБ. чЩ НПЦЕФЕ ЙНЕФШ МАВПЕ ЮЙУМП ФБЛЙИ ТБЪДЕМПЧ Ч РТПЗТБННЕ, Й ПОЙ НПЗХФ ТБЪНЕЭБФШУС ЗДЕ-ОЙВХДШ Ч ЛПДЕ РЕТЕД ЙУРПМШЪХЕНПК РЕТЕНЕООПК, РПДЮЙОЕООПК ПЗТБОЙЮЕОЙСН ПРТЕДЕМЕООЩН Ч УППФЧЕФУФЧЙЙ У ЗМБЧОЩН СЪЩЛПН. тБЪДЕМ ПВЯСЧМЕОЙК ДПМЦЕО ОБЮЙОБФШ Й ЛПОЮБФШУС ЧМПЦЕООЩНЙ ЛПНБОДБНЙ SQL - BEGIN DECLARE SECTION ( оБЮБМП тБЪДЕМБ пВЯСЧМЕОЙК ) Й END DECLARE SECTION ( лПОЕГ тБЪДЕМБ пВЯСЧМЕОЙК ), ЛПФПТЩН РТЕДЫЕУФЧХЕФ, ЛБЛ ПВЩЮОП EXEC SQL (чЩРПМОЙФШ). юФПВЩ ПВЯСЧЙФШ РЕТЕНЕООЩЕ ЙУРПМШЪХЕНЩЕ Ч РТЕДЩДХЭЕН РТЙНЕТЕ, ЧЩ НПЦЕФЕ ЧЧЕУФЙ УМЕДХАЭЕЕ: EXEC SQL BEGIN DECLARE SECTION; Var id-num: integer; Salesperson: packed array (1 . .10) ot char; loc: packed array (1. .10) ot char; comm: real; EXEC SQL END DECLARE SECTION; дМС ОЕЪОБЛПНЩИ У рбулбмЕН, Var - ЬФП ЪБЗПМПЧПЛ ЛПФПТЩК РТЕДЫЕУФЧХЕФ ТСДХ ПВЯСЧМСЕНЩИ РЕТЕНЕООЩИ, Й ХРБЛПЧБООЩН ( ЙМЙ ТБУРБЛПЧБООЩН ) НБУУЙЧБН СЧМСАЭЙНЙУС УЕТЙЕК ЖЙЛУЙТПЧБООЩИ РЕТЕНЕООЩИ ЪОБЮЕОЙК ТБЪМЙЮБЕНЩИ У РПНПЭША ОПНЕТПЧ( ОБРТЙНЕТ, ФТЕФЙК УЙНЧПМ loc ВХДЕФ loc (3) ). йУРПМШЪПЧБОЙЕ ФПЮЛЙ У ЪБРСФПК РПУМЕ ЛБЦДПК РЕТЕНЕООПК ХЛБЪЩЧБЕФ ОБ ФП ЮФП ЬФП - рБУЛБМШ, Б ОЕ SQL. йъчмеюеойе ъобюеойк ретенеоощи лТПНЕ РПНЕЭЕОЙС ЪОБЮЕОЙК РЕТЕНЕООЩИ Ч ФБВМЙГЩ ЙУРПМШЪХС ЛПНБОДЩ SQL, ЧЩ НПЦЕФЕ ЙУРПМШЪПЧБФШ SQL ЮФПВЩ РПМХЮБФШ ЪОБЮЕОЙС ДМС ЬФЙИ РЕТЕНЕООЩИ. пДЙО ЙЪ УРПУПВПЧ ДЕМБФШ ЬФП - У РПНПЭША ТБЪОПЧЙДОПУФЙ ЛПНБОДЩ SELECT ЛПФПТБС УПДЕТЦЙФ РТЕДМПЦЕОЙЕ INTO. дБЧБКФЕ ЧЕТОЕНУС Л ОБЫЕНХ РТЕДЩДХЭЕНХ РТЙНЕТХ Й РЕТЕНЕУФЙН УФТПЛХ Peel ЙЪ ФБВМЙГЩ рТПДБЧГПЧ Ч ОБЫЙ РЕТЕНЕООЩЕ ЗМБЧОПЗП СЪЩЛБ. EXEC SQL SELECT snum, sname, city, comm INTO :id_num, :salesperson, :loc, :comm FROM Salespeople WHERE snum = 1001; чЩВТБООЩЕ ЪОБЮЕОЙС РПНЕЭБАФУС Ч РЕТЕНЕООЩЕ У ХРПТСДПЮЕООЩНЙ ЙНЕОБНЙ ХЛБЪБООЩНЙ Ч РТЕДМПЦЕОЙЙ INTO. тБЪХНЕЕФУС, РЕТЕНЕООЩЕ У ЙНЕОБНЙ ХЛБЪБООЩНЙ Ч РТЕДМПЦЕОЙЙ INTO ДПМЦОЩ ЙНЕФШ УППФЧЕФУФЧХАЭЙК ФЙР ЮФПВЩ РТЙОСФШ ЬФЙ ЪОБЮЕОЙС, Й ДПМЦОБ ВЩФШ УЧПС РЕТЕНЕООБС ДМС ЛБ- ЦДПЗП ЧЩВТБООПЗП УФПМВГБ. еУМЙ ОЕ ХЮЙФЩЧБФШ РТЙУХФУФЧЙЕ РТЕДМПЦЕОЙС INTO, ФП ЬФПФ ЪБРТПУ - РПИПЦ ОБ МАВПК ДТХЗПК. пДОБЛП, РТЕДМПЦЕОЙЕ INTO ДПВБЧМСЕФ ЪОБЮЙФЕМШОПЕ ПЗТБОЙЮЕОЙЕ Л ЪБРТПУХ. ъБРТПУ ДПМЦЕО ЙЪЧМЕЛБФШ ОЕ ВПМЕЕ ПДОПК УФТПЛЙ. еУМЙ ПО ЙЪЧМЕЛБЕФ НОПЗП УФТПЛ, ЧУЕ ПОЙ ОЕ НПЗХФ ВЩФШ ЧУФБЧМЕОЩ ПДОПЧТЕНЕООП Ч ПДОХ Й ФХ ЦЕ РЕТЕНЕООХА. лПНБОДБ ЕУФЕУФЧЕООП РПФЕТ- РЙФ ОЕХДБЮХ. рП ЬФПК РТЙЮЙОЕ, SELECT INTO ДПМЦОП ЙУРПМШЪПЧБФШУС ФПМШЛП РТЙ УМЕДХАЭЙИ ХУМПЧЙСИ: * ЛПЗДБ ЧЩ ЙУРПМШЪХЕФЕ РТЕДЙЛБФ РТПЧЕТСАЭЙК ЪОБЮЕОЙС, ЛПФПТПЕ ЛБЛ ЧЩ ЪОБЕФЕ, НПЗХФ ВЩФШ ХОЙЛБМШОЩН, ЛБЛ Ч ЬФПН РТЙНЕТЕ. ъОБЮЕОЙС ЛПФПТЩЕ, ЛБЛ ЧЩ ЪОБЕФЕ, НПЗХФ ВЩФШ ХОЙЛБМШОЩНЙ - ЬФП ФЕ ЪОБЮЕОЙС ЛПФПТЩЕ ЙНЕАФ РТЙОХДЙФЕМШОПЕ ПЗТБОЙЮЕОЙЕ ХОЙЛБМШОПУФЙ ЙМЙ ХОЙЛБМШОЩК ЙОДЕЛУ, ЛБЛ ЬФП ЗПЧПТЙМПУШ Ч зМБЧБИ 17 Й 18. * ЛПЗДБ ЧЩ ЙУРПМШЪХЕФЕ ПДОХ ЙМЙ ВПМЕЕ БЗТЕЗБФОЩИ ЖХОЛГЙК Й ОЕ ЙУРПМШЪХЕФЕ GROUP BY. * ЛПЗДБ ЧЩ ЙУРПМШЪХЕФЕ SELECT DISTINCT ЧП ЧОЕЫОЕН ЛМАЮЕ У РТЕДЙЛБФПН УУЩМБАЭЙНУС ОБ ЕДЙОУФЧЕООПЕ ЪОБЮЕОЙЕ ТПДЙФЕМШУЛПЗП ЛМАЮБ (ПВЕУРЕЮЙЧБС ЧБЫЕК УЙУФЕНЕ РТЕДРЙУБОЙЕ УРТБЧПЮОПК ГЕМПУФОПУФШ), ЛБЛ Ч УМЕДХАЭЕН РТЙНЕТЕ: EXEC SQL SELECT DISTINCT snum INTO :salesnum FROM Customers WHERE snum = (SELECT snum FROM Salespeople WHERE sname = 'Motika'); рТЕДРПМБЗБМПУШ ЮФП Salespeople.sname Й Salespeople.snum - ЬФП УППФЧЕФУФЧЕООП, ХОЙЛБМШОЩК Й РЕТЧЙЮОЩК ЛМАЮЙ ЬФПК ФБВМЙГЩ, Б Customers.snum - ЬФП ЧОЕЫОЙК ЛМАЮ УУЩМБАЭЙКУС ОБ Salespeople.snum, Й ЧЩ РТЕДРПМБЗБМЙ ЮФП ЬФПФ ЪБРТПУ РТПЙЪЧЕДЕФ ЕДЙОУФЧЕООХА УФТПЛХ. йНЕАФУС ДТХЗЙЕ УМХЮБЙ, ЛПЗДБ ЧЩ НПЦЕФЕ ЪОБЕФЕ, ЮФП ЪБРТПУ ДПМЦЕО РТП- ЙЪЧЕУФЙ ЕДЙОУФЧЕООХА УФТПЛХ ЧЩЧПДБ, ОП ПОЙ НБМП ЙЪЧЕУФОЩ Й, Ч ВПМШЫЙОУФЧЕ УМХЮБЕЧ, ЧЩ ПУОПЧЩЧБЕФЕУШ ОБ ФПН ЮФП ЧБЫЙ ДБООЩЕ ЙНЕАФ ГЕМПУФОПУФШ, ЛПФПТБС ОЕ НПЦЕФ ВЩФШ РТЕДРЙУБОБ У РПНПЭША ПЗТБОЙЮЕОЙК. оЕ РПМБЗБКФЕУШ ОБ ЬФП! чЩ УПЪДБЕФЕ РТПЗТБННХ ЛПФПТБС, ЧЕТПСФОП, ВХДЕФ ЙУРПМШЪПЧБФШУС Ч ФЕЮЕОЙЕ ОЕЛПФПТПЗП ЧТЕНЕОЙ, Й МХЮЫЕ ЧУЕЗП РТПЙЗТБФШ ЕЕ ЮФПВЩ ВЩФШ ЗБТБОФЙТПЧБООЩН Ч ВХДХЭЕН ПФ ЧПЪНПЦОЩИ ПФЛБЪПЧ. чП ЧУСЛПН УМХЮБЕ, ОЕФ ОЕПВИПДЙНПУФЙ ЗТХРРЙТПЧБФШ ЪБРТПУЩ ЛПФПТЩЕ РТПЙЪЧПДСФ ПДЙОПЮОЩЕ УФТПЛЙ, РПУЛПМШЛХ SELECT INTO - ЙУРПМШЪХЕФУС ФПМШЛП ДМС ХДПВУФЧБ. лБЛ ЧЩ ХЧЙДЙФЕ, ЧЩ НПЦЕФЕ ЙУРПМШЪПЧБФШ ЪБРТПУЩ ЧЩЧПДСЭЙЕ НОПЗПЮЙУМЕООЩЕ УФТПЛЙ, ЙУРПМШЪХС ЛХТУПТ. лхтупт пДОБ ЙЪ УЙМШОЩИ ЛБЮЕУФЧ SQL - ЬФП УРПУПВОПУФШ ЖХОЛГЙПОЙТПЧБФШ ОБ ЧУЕИ УФТПЛБИ ФБВМЙГЩ, ЮФПВЩ ЧУФТЕФЙФШ ПРТЕДЕМЕООПЕ ХУМПЧЙЕ ЛБЛ ВМПЛ ЪБРЙУШ, ОЕ ЪОБС УЛПМШЛП ФБЛЙИ УФТПЛ ФБН НПЦЕФ ВЩФШ. еУМЙ ДЕУСФШ УФТПЛ ХДПЧМЕФЧПТСАФ РТЕДЙЛБФХ, ФП ЪБРТПУ НПЦЕФ ЧЩЧЕУФЙ ЧУЕ ДЕУСФШ УФТПЛ. еУМЙ ДЕУСФШ НЙММЙПОПЧ УФТПЛ ПРТЕДЕМЕОЩ, ЧУЕ ДЕУСФШ НЙММЙПОПЧ УФТПЛ ВХДХФ ЧЩЧЕДЕОЩ. ьФП ОЕУЛПМШЛП ЪБФТХДОЙФЕМШОП, ЛПЗДБ ЧЩ РПРТПВХЕФЕ УЧСЪБФШ ЬФП У ДТХЗЙНЙ СЪЩЛБНЙ. лБЛ ЧЩ УНПЦЕФЕ ОБЪОБЮБФШ ЧЩЧПД ЪБРТПУБ ДМС РЕТЕНЕООЩИ ЛПЗДБ ЧЩ ОЕ ЪОБЕФЕ ЛБЛ ЧЕМЙЛ ВХДЕФ ЧЩЧПД ? тЕЫЕОЙЕ УПУФПЙФ Ч ФПН, ЮФПВЩ ЙУРПМШЪПЧБФШ ФП, ЮФП ОБЪЩЧБЕФУС - ЛХТУПТПН. чЩ ЧЕТПСФОП ЪОБЛПНЩ У ЛХТУПТПН, ЛБЛ У НЙЗБАЭЕК ЮЕТФПЮЛПК, ЛПФПТБС ПФНЕЮБЕФ ЧБЫХ РПЪЙГЙА ОБ ЬЛТБОЕ ЛПНРШАФЕТБ. чЩ НПЦЕФЕ ТБУУНБФТЙЧБФШ SQL ЛХТУПТ ЛБЛ ХУФТПКУФЧП, ЛПФПТПЕ БОБМПЗЙЮОП ЬФПНХ, ПФНЕЮБЕФ ЧБЫЕ НЕУФП Ч ЧЩЧПДЕ ЪБРТПУБ, ИПФС БОБМПЗЙ ОЕ РПМОБ. лХТУПТ - ЬФП ЧЙД РЕТЕНЕООПК, ЛПФПТБС УЧСЪБОБ У ЪБРТПУПН. ъОБЮЕОЙЕН ЬФПК РЕТЕНЕООПК НПЦЕФ ВЩФШ ЛБЦДБС УФТПЛБ, ЛПФПТБС ЧЩЧПДЙФУС РТЙ ЪБРТПУЕ. рПДПВОП ЗМБЧОЩН РЕТЕНЕООЩН, ЛХТУПТЩ ДПМЦОЩ ВЩФШ ПВЯСЧМЕОЩ РТЕЦДЕ, ЮЕН ПОЙ ВХДХФ ЙУРПМШЪПЧБОЩ. ьФП ДЕМБЕФУС ЛПНБОДПК DECLARE CURSOR, УМЕДХАЭЙН ПВТБЪПН: EXEC SQL DECLARE CURSOR Londonsales FOR SELECT * FROM Salespeople WHERE city = 'London'; ъБРТПУ ОЕ ЧЩРПМОЙФУС ОЕНЕДМЕООП; ПО - ФПМШЛП ПРТЕДЕМСЕФУС. лХТУПТ ОЕ- НОПЗП ОБРПНЙОБЕФ РТЕДУФБЧМЕОЙЕ, Ч ЛПФПТПН ЛХТУПТ УПДЕТЦЙФ ЪБРТПУ, Б УПДЕТЦБОЙЕ ЛХТУПТБ - ОБРПНЙОБЕФ МАВПК ЧЩЧПД ЪБРТПУБ, ЛБЦДЩК ТБЪ ЛПЗДБ ЛХТУПТ УФБОПЧЙФУС ПФЛТЩФЩН. пДОБЛП, Ч ПФМЙЮЙЕ ПФ ВБЪПЧЩИ ФБВМЙГ ЙМЙ РТЕДУФБЧМЕОЙК, УФТПЛЙ ЛХТУПТБ ХРПТСДПЮЕОЩ: ЙНЕАФУС РЕТЧБС, ЧФПТБС... ... Й РПУМЕДОСС УФТПЛБ ЛХТУПТБ. ьФПФ РПТСДПЛ НПЦЕФ ВЩФШ РТПЙЪЧПМШОЩН У СЧОЩН ХРТБЧМЕОЙЕН У РПНПЭША РТЕДМПЦЕОЙС ORDER BY Ч ЪБРТПУЕ, ЙМЙ ЦЕ РП ХНПМЮБОЙА УМЕДПЧБФШ ЛБЛПНХ-ФП ХРПТСДПЮЕОЙА ПРТЕДЕМСЕНПНХ ЙОУФТХНЕОФБМШОП-ПРТЕДЕМСЕНПК УИЕНПК. лПЗДБ ЧЩ ОБИПДЙФЕ ФПЮЛХ Ч ЧБЫЕК РТПЗТБННЕ Ч ЛПФПТПК ЧЩ ИПФЙФЕ ЧЩРПМОЙФШ ЪБРТПУ, ЧЩ ПФЛТЩЧБЕФЕ ЛХТУПТ У РПНПЭША УМЕДХАЭЕК ЛПНБОДЩ: EXEC SQL OPEN CURSOR Londonsales; ъОБЮЕОЙС Ч ЛХТУПТЕ НПЗХФ ВЩФШ РПМХЮЕОЩ, ЛПЗДБ ЧЩ ЧЩРПМОСЕФЕ ЙНЕООП ЬФХ ЛПНБОДХ, ОП ОЕ РТЕДЩДХЭХА ЛПНБОДХ DECLARE Й ОЕ РПУМЕДХАЭХА ЛПНБОДХ FETуH. ъБФЕН, ЧЩ ЙУРПМШЪХЕФЕ ЛПНБОДХ FETCH ЮФПВЩ ЙЪЧМЕЮШ ЧЩЧПД ЙЪ ЬФПЗП ЪБРТПУБ, РП ПДОПК УФТПЛЕ Ч ЛБЦДЩК НПНЕОФ ЧТЕНЕОЙ. EXEC SQL FETCH Londonsales INTO :id_num, :salesperson, :loc, :comm; ьФП ЧЩТБЦЕОЙЕ РЕТЕНЕУФЙФ ЪОБЮЕОЙС ЙЪ РЕТЧПК ЧЩВТБООПК УФТПЛЙ, Ч РЕТЕНЕООЩЕ. дТХЗБ ЛПНБОДБ FETCH ЧЩЧПДЙФ УМЕДХАЭЙК ОБВПТ ЪОБЮЕОЙК. йДЕС УПУФПЙФ Ч ФПН, ЮФПВЩ РПНЕУФЙФШ ЛПНБОДХ FETCH ЧОХФТШ ГЙЛМБ, ФБЛ ЮФПВЩ ЧЩВТБЧ УФТПЛХ, ЧЩ НПЗМЙ РЕТЕНЕУФЙЧ ОБВПТ ЪОБЮЕОЙК ЙЪ ЬФПК УФТПЛЙ Ч РЕТЕНЕООЩЕ, ЧПЪЧТБЭБМЙУШ ПВТБФОП Ч ГЙЛМ ЮФПВЩ РЕТЕНЕУФЙФШ УМЕДХАЭЙК ОБВПТ ЪОБЮЕОЙК Ч ФЕ ЦЕ УБНЩЕ РЕТЕНЕООЩЕ. оБРТЙНЕТ, ЧПЪНПЦОП ЧБН ОХЦОП ЮФПВЩ ЧЩЧПД ЧЩДБЧБМУС РП ПДОПК УФТПЛЕ, УРТБЫЙЧБС ЛБЦДЩК ТБЪ Х РПМШЪПЧБФЕМС, ИПЮЕФ МЙ ПО РТПДПМЦЙФШ ЮФПВЩ ХЧЙДЕФШ УМЕДХАЭХА УФТПЛХ Look_at_more:= True; EXEC SQL OPEN CURSOR Londonsales; while Look_at_more do begin EXEC SQL FETCH Londonsales INTO :id_num, :Salesperson, :loc, :comm; writeln (id_num, Salesperson, loc, comm); writeln ('Do you want to see more data? (Y/N)'); readln (response); it response = 'N' then Look_at_more: = False end; EXEC SQL CLOSE CURSOR Londonsales; ч рБУЛБМЕ, ЪОБЛ : = ПЪОБЮБЕФ - " СЧМСЕФУС ОБЪОБЮЕООЩН ЪОБЮЕОЙЕН ЙЪ ", Ч ФП ЧТЕН ЛБЛ = ЕЭЕ ЙНЕЕФ ПВЩЮОПЕ ЪОБЮЕОЙЕ " ТБЧОП ". жХОЛГЙС writeln ЪБРЙУЩЧБЕФ ЕЕ ЧЩЧПД, Й ЪБФЕН РЕТЕИПДЙФ Л ОПЧПК УФТПЛЕ. пДЙОПЮОЩЕ ЛБЧЩЮЛЙ ЧПЛТХЗ УЙНЧПМШОЩИ ЪОБЮЕОЙК ЧП ЧФПТПН writeln Й Ч РТЕДМПЦЕОЙЙ if ... then - ПВЩЮОЩ ДМС рБУЛБМС, ЮФП УМХЮБЕФУС РТЙ ДХВМЙЛБФБИ Ч SQL. ч ТЕЪХМШФБФЕ ЬФПЗП ЖТБЗНЕОФБ, вХМЕЧБС РЕТЕНЕООБ У ЙНЕОЕН Look_at _more ДПМЦОБ ВЩФШ ХУФБОПЧМЕОБ Ч УПУФПСОЙЕ ЧЕТОП, ПФЛТЩФ ЛХТУПТ, Й ЧЧЕДЕО ГЙЛМ. чОХФТЙ ГЙЛМБ, УФТПЛБ ЧЩВЙТБЕФУС ЙЪ ЛХТУПТБ Й ЧЩЧПДЙФУС ОБ ЬЛТБО. х РПМШЪПЧБФЕМС УРТБЫЙЧБАФ, ИПЮЕФ МЙ ПО ЧЙДЕФШ УМЕДХАЭХА УФТПЛХ. рПЛБ ПО ОЕ ПФЧЕФЙМ N ( оЕФ ), ГЙЛМ РПЧФПТСЕФУС, Й УМЕДХАЭБС УФТПЛБ ЪОБЮЕОЙК ВХДЕФ ЧЩВТБОБ. иПФС РЕТЕНЕООЩЕ Look_at_more Й ПФЧЕФ ДПМЦОЩ ВЩФШ ПВЯСЧМЕОЩ ЛБЛ вХМЕЧБС РЕТЕНЕООБ Й УЙНЧПМШОБС(char) РЕТЕНЕООБ, УППФЧЕФУФЧЕООП, Ч ТБЪДЕМЕ ПВЯСЧМЕОЙК РЕТЕНЕООЩИ Ч рБУЛБМС, ПОЙ ОЕ ДПМЦОЩ ВЩФШ ЧЛМАЮЕОЩ Ч ТБЪДЕМ ПВЯСЧМЕОЙК SQL, РПФПНХ ЮФП ПОЙ ОЕ ЙУРПМШЪХАФУС Ч ЛПНБОДБИ SQL. лБЛ ЧЩ НПЦЕФЕ ЧЙДЕФШ, ДЧПЕФПЮЙС РЕТЕД ЙНЕОБНЙ РЕТЕНЕООЩИ ОЕ ЙУРПМШЪХАФУС ДМС ОЕ-SQL ПРЕТБФПТПЧ. дБМЕЕ ПВТБФЙФЕ ЧОЙНБОЙЕ, ЮФП ЙНЕЕФУС ПРЕТБФПТ CLOSE CURSOR УППФЧЕФУФЧХАЭЙК ПРЕТБФПТХ OPEN CURSOR. пО, ЛБЛ ЧЩ РПОСМЙ, ПУЧПВПЦДБЕФ ЛХТУПТ ЪОБЮЕОЙК, РПЬФПНХ ЪБРТПУ ВХДЕФ ОХЦОП ЧЩРПМОЙФШ РПЧФПТОП У ПРЕТБФПТПН OPEN CURSOR, РТЕЦДЕ ЮЕН РЕТЕКФЙ Ч ЧЩВПТХ УМЕДХАЭЙИ ЪОБЮЕОЙК. ьФП ОЕПВСЪБФЕМШОП ДМС ФЕИ УФТПЛ ЛПФПТЩЕ ВЩМЙ ЧЩВТБОЩ ЪБРТПУПН РПУМЕ ЪБЛТЩФЙС ЛХТУПТБ, ИПФС ЬФП Й ПВЩЮОБ РТПГЕДХТБ. рПЛБ ЛХТУПТ ЪБЛТЩФ, SQL ОЕ УМЕДЙФ ЪБ ФЕН, ЛБЛЙЕ УФТПЛЙ ВЩМЙ ЧЩВТБОЩ. еУМЙ ЧЩ ПФЛТЩЧБЕФЕ ЛХТУПТ УОПЧБ, ЪБРТПУ РПЧФПТОП ЧЩРПМОСЕФУС У ЬФПК ФПЮЛЙ, Й ЧЩ ОБЮЙОБЕФЕ ЧУЕ УОБЮБМБ. ьФПФ РТЙНЕТ ОЕ ПВЕУРЕЮЙЧБЕФ БЧФПНБФЙЮЕУЛЙК ЧЩИПДБ ЙЪ ГЙЛМБ, ЛПЗДБ ЧУЕ УФТПЛЙ ХЦЕ ВХДХФ ЧЩВТБОЩ. лПЗДБ Х FETCH ОЕФ ВПМШЫЕ УФТПЛ ЛПФПТЩЕ ОБДП ЙЪЧМЕЛБФШ, ПО РТПУФП ОЕ НЕОСЕФ ЪОБЮЕОЙК Ч РЕТЕНЕООЩИ РТЕДМПЦЕОЙС INTO. уМЕДПЧБФЕМШОП, ЕУМЙ ДБООЩЕ ЙУЮЕТРБМЙУШ, ЬФЙ РЕТЕНЕООЩЕ ВХДХФ ОЕПДОПЛТБФОП ЧЩЧПДЙФШУС У ЙДЕОФЙЮОЩНЙ ЪОБЮЕОЙСНЙ, ДП ФЕИ РПТ РПЛБ РПМШЪПЧБФЕМШ ОЕ ЪБЧЕТЫЙФ ГЙЛМ, ЧЧЕДС ПФЧЕФ - N. SQL лпдщ иПТПЫП ВЩМП ВЩ ЪОБФШ, ЛПЗДБ ДБООЩЕ ВХДХФ ЙУЮЕТРБОЩ, ФБЛ ЮФПВЩ НПЦОП ВЩМП УППВЭЙФШ ПВ ЬФПН РПМШЪПЧБФЕМА Й ГЙЛМ ЪБЧЕТЫЙМУС ВЩ БЧФПНБФЙЮЕУЛЙ. ьФП - ДБЦЕ ВПМЕЕ ЧБЦОП ЮЕН ОБРТЙНЕТ ЪОБФШ ЮФП ЛПНБОДБ SQL ЧЩРПМОЕОБ У ПЫЙВЛПК. рЕТЕНЕООБ SQLCODE ( ОБЪЩЧБЕНБС ЕЭЕ SQLCOD Ч жптфтбоЕ ) РТЕДОБЪОБЮЕОБ ЮФПВЩ ПВЕУРЕЮЙФШ ЬФХ ЖХОЛГЙА. пОБ ДПМЦОБ ВЩФШ ПРТЕДЕМЕОБ ЛБЛ РЕТЕНЕООБ ЗМБЧОПЗП СЪЩЛБ Й ДПМЦОБ ЙНЕФШ ФЙР ДБООЩИ ЛПФПТЩК Ч ЗМБЧОПН СЪЩЛЕ УППФЧЕФУФЧХЕФ ПДОПНХ ЙЪ ФПЮОЩИ ЮЙУМПЧЩИ ФЙРПЧ SQL, ЛБЛ ЬФП РПЛБЪБОП Ч рТЙМПЦЕОЙЙ B. ъОБЮЕОЙЕ SQLCODE ХУФБОБЧМЙЧБЕФУС ЛБЦДЩК ТБЪ, ЛПЗДБ ЧЩРПМОСЕФУС ЛПНБОДБ SQL. ч ПУОПЧОПН УХЭЕУФЧХАФ ФТЙ ЧПЪНПЦОПУФЙ: 1. лПНБОДБ ЧЩРПМОЙМБУШ ВЕЪ ПЫЙВЛЙ, ОП ОЕ РТПЙЪЧЕМБ ОЙЛБЛПЗП ДЕКУФЧЙС. дМС ТБЪМЙЮОЩИ ЛПНБОД ЬФП ЧЩЗМСДЙФ РП ТБЪОПНХ: Б) дМС SELECT, ОЙ ПДОБ УФТПЛБ ОЕ ЧЩВТБОБ ЪБРТПУПН. В) дМС FETCH, РПУМЕДОСС УФТПЛБ ХЦЕ ВЩМБ ЧЩВТБОБ, ЙМЙ ОЙ ПДОПК УФТПЛЙ ОЕ ЧЩВТБОП ЪБРТПУПН Ч ЛХТУПТЕ. Ч) дМС INSERT, ОЙ ПДОПК УФТПЛЙ ОЕ ВЩМП ЧУФБЧМЕОП ( РПДТБЪХНЕЧБЕФУС ЮФП ЪБРТПУ ЙУРПМШЪПЧБМУС ЮФПВЩ УЗЕОЕТЙТПЧБФШ ЪОБЮЕОЙС ДМС ЧУФБЧЛЙ, Й ВЩМ ПФЧЕТЗОХФ РТЙ РПРЩФЛЕ ЙЪЧМЕЮЕОЙС МАВПК УФТПЛЙ. З) дМС UPDATE Й DELETE, ОЙ ПДОБ УФТПЛБ ОЕ ПФЧЕФЙМБ ХУМПЧЙА РТЕДЙЛБФБ, Й УМЕДПЧБФЕМШОП ОЙЛБЛЙИ ЙЪНЕОЕОЙК УДЕМБОП Ч ФБВМЙГЕ ОЕ ВХДЕФ. ч МАВПН УМХЮБЕ, ВХДЕФ ХУФБОПЧМЕО ЛПД SQLCODE = 100. 2. лПНБОДБ ЧЩРПМОЙМБУШ ОПТНБМШОП, ОЕ ХДПЧМЕФЧПТЙЧ ОЙ ПДОПНХ ЙЪ ЧЩЫЕ ХЛБЪБООЩИ ХУМПЧЙК. ч ЬФПН УМХЮБЕ, ВХДЕФ ХУФБОПЧМЕО ЛПД SQLCOD = 0. 3. лПНБОДБ УЗЕОЕТЙТПЧБМБ ПЫЙВЛХ. еУМЙ ЬФП УМХЮЙМПУШ, ЙЪНЕОЕОЙС УДЕМБООЩЕ Л ВБЪЕ ДБООЩИ ФЕЛХЭЕК ФТБОЪБЛГЙЕК, ВХДХФ ЧПУУФБОПЧМЕОЩ( УН. зМБЧХ 23 ). ч ЬФПН УМХЮБЕ ВХДЕФ ХУФБОПЧМЕО ЛПД SQLCODE = ОЕЛПФПТПНХ ПФТЙГБФЕМШОПНХ ЮЙУМХ, ПРТЕДЕМСЕНПНХ РТПЕЛФЙТПЧЭЙЛПН. ъБДБЮБ ЬФПЗП ЮЙУМБ, ЙДЕОФЙЖЙГЙТПЧБФШ РТПВМЕНХ, ФБЛ ФПЮОП ОБУЛПМШЛП ЬФП ЧПЪНПЦОП. ч РТЙОГЙРЕ, ЧБЫБ УЙУФЕНБ ДПМЦОБ ВЩФШ УОБВЦЕОБ РПДРТПЗТБННПК, ЛПФПТБС Ч ЬФПН УМХЮБЕ, ДПМЦОБ ЧЩРПМОЙФШУС ЮФПВЩ ЧЩ- ДБФШ ДМС ЧБУ ЙОЖПТНБГЙА ТБУЫЙЖТПЧЩЧБАЭЕЕ ЪОБЮЕОЙЕ ОЕЗБФЙЧ- ОПЗП ЮЙУМБ ПРТЕДЕМЕООПЗП ЧБЫЙН РТПЕЛФЙТПЧЭЙЛПН. ч ЬФПН УМХЮБЕ ОЕЛПФПТПЕ УППВЭЕОЙЕ ПВ ПЫЙВЛЕ ВХДЕФ ЧЩЧЕДЕОП ОБ ЬЛТБО ЙМЙ ЪБ- РЙУБОП Ч ЖБКМ РТПФПЛПМБ, Б РТПЗТБННБ Ч ЬФП ЧТЕН ЧЩРПМОЙФ ЧПУУФБОПЧМЕОЙЕ ЙЪНЕОЕОЙК ДМС ФЕЛХЭЕК ФТБОЪБЛГЙЙ, ПФЛМАЮЙФУС ПФ ВБЪЩ ДБООЩИ Й ЧЩКДЕФ ЙЪ ОЕЕ. фЕРЕТШ НЩ НПЦЕН ХУПЧЕТЫЕОУФЧПЧБФШ йурпмшъпчбойе SQLCODE дмс хртбчмеойс гйлмбнй ОБЫ РТЕДЩДХЭЙК РТЙНЕТ ДМС ЧЩИПДБ ЙЪ ГЙЛМБ БЧФПНБФЙЮЕУЛЙ, РТЙ ХУМПЧЙЙ ЮФП ЛХТУПТ РХУФ, ЧУЕ УФТПЛЙ ЧЩВТБОЩ, ЙМЙ РТПЙЪПЫМБ ПЫЙВЛБ: Look_at_more: = lhe; EXEC SQL OPEN CURSOR Londonsales; while Look_at_more and SQLCODE = O do begin EXEC SQL FETCH London$ales INTO :id_num, :Salesperson, :loc, :comm; writeln (id_num, Salesperson, loc, comm); writeln ('Do you want to see more data? (Y/N)'); readln (response); If response = 'N' then Look_at_more: = Fabe; end; EXEC SQL CLOSE CURSOR Londonsales; ртедмпцеойе WHENEVER ьФП ХДПВОП ДМС ЧЩИПДБ РТЙ ЧЩРПМОЕООПН ХУМПЧЙЙ - ЧУЕ УФТПЛЙ ЧЩВТБОЩ. оП ЕУМЙ ЧЩ РПМХЮЙМЙ ПЫЙВЛХ, ЧЩ ДПМЦОЩ РТЕДРТЙОСФШ ОЕЮФП ФБЛПЕ, ЮФП ПРЙУБОП ДМС ФТЕФШЕЗП УМХЮБС, ЧЩЫЕ. дМС ЬФПК ГЕМЙ, SQL РТЕДПУФБЧМСЕФ РТЕДМПЦЕОЙЕ GOTO. жБЛФЙЮЕУЛЙ, SQL РПЪЧПМСЕФ ЧБН РТЙНЕОСФШ ЕЗП ДП- УФБФПЮОП ЫЙТПЛП, ФБЛ ЮФП РТПЗТБННБ НПЦЕФ ЧЩРПМОЙФШ ЛПНБОДХ GOTO БЧФПНБФЙЮЕУЛЙ, ЕУМЙ ВХДЕФ РТПЙЪЧЕДЕОП ПРТЕДЕМЕООПЕ ЪОБЮЕОЙЕ SQLCODE. чЩ НПЦЕФЕ УДЕМБФШ ЬФП УПЧНЕУФОП У РТЕДМПЦЕОЙЕН WHENEVER. йНЕЕФУС ЛХУПЛ ЙЪ РТЙНЕТБ ДМС ЬФПЗП УМХЮБС: EXEC SQL WHENEVER SQLERROR GOTO Error_handler; EXEC SQL WHENEVER NOT FOUND CONTINUE; SQLERROR- ЬФП ДТХЗПК УРПУПВ УППВЭЙФШ ЮФП SQLCODE < 0; Б NOT FOUND - ЬФП ДТХЗПК УРПУПВ УППВЭЙФШ ЮФП SQLCODE = 100. ( оЕЛПФПТЩЕ ТЕБМЙЪБГЙЙ ОБЪЩЧБАФ РПУМЕДОЙК УМХЮБК ЕЭЕ ЛБЛ - SQLWARNING.) Error_handler - ЬФП ЙН ФПЗП НЕУФБ Ч РТПЗТБННЕ Ч ЛПФПТПЕ ВХДЕФ РЕТЕ- ОЕУЕОП ЧЩРПМОЕОЙЕ РТПЗТБННЩ ЕУМЙ РТПЙЪПЫМБ ПЫЙВЛБ ( GOTO НПЦЕФ УПУФПСФШ ЙЪ ПДОПЗП ЙМЙ ДЧХИ УМПЧ ). фБЛПЕ НЕУФП ПРТЕДЕМСЕФУС МАВЩН УРПУПВПН УППФЧЕФУФЧХАЭЙН ДМС ЗМБЧОПЗП СЪЩЛБ, ОБРТЙНЕТ, У РПНПЭША НЕФЛЙ Ч рБУЛБМЕ, ЙМЙ ЙНЕОЙ ТБЪДЕМБ ЙМЙ ЙНЕОЙ РБТБЗТБЖБ Ч лпвпме ( Ч ДБМШОЕКЫЕН НЩ ВХДЕН ЙУРПМШЪПЧБФШ ФЕТНЙО - НЕФЛБ ). нЕФЛБ ВПМЕЕ ХДБЮ- ОП ЙДЕОФЙЖЙГЙТХЕФ УФБОДБТФОХА РТПГЕДХТХ ТБУРТПУФТБОСЕНХА РТПЕЛФЙТПЧЭЙЛПН ДМС ЧЛМАЮЕОЙС ЧП ЧУЕ РТПЗТБННЩ. CONTINUE ОЕ ДЕМБЕФ ЮЕЗП-ФП УРЕГЙБМШОПЗП ДМС ЪОБЮЕОЙС SQLCODE. пОП ФБЛЦЕ СЧМСЕФУС ЪОБЮЕОЙЕН РП ХНПМЮБОЙА. ЕУМЙ ЧЩ ОЕ ЙУРПМШЪХЕФЕ ЛПНБОДХ WHENEVER, ПРТЕДЕМСАЭХА ЪОБЮЕОЙЕ SQLCODE. пДОБЛП, ЬФЙ ОЕБЛФЙЧОЩЕ ПРТЕДЕМЕОЙС ДБАФ ЧБН ЧПЪНПЦОПУФШ РЕТЕЛМАЮБФШУС ЧРЕТЕД Й ОБЪБД, ЧЩРПМОСС Й ОЕ ЧЩРПМОСС ДЕКУФЧЙС, Ч ТБЪМЙЮОЩИ ФПЮЛБИ(НЕФЛБИ) ЧБЫЕК РТПЗТБННЩ. оБРТЙНЕТ, ЕУМЙ ЧБЫБ РТПЗТБННБ ЧЛМАЮБЕФ Ч УЕВС ОЕУЛПМШЛП ЛПНБОД INSERT, ЙУРПМШЪХАЭЙИ ЪБРТПУЩ, ЛПФПТЩЕ ТЕБМШОП ДПМЦОЩ РТПЙЪЧПДЙФШ ЪОБЮЕОЙС, ЧЩ НПЗМЙ ВЩ ОБРЕЮБФБФШ УРЕГЙБМШОПЕ УППВЭЕОЙЕ ЙМЙ УДЕМБФШ ЮФП-ФП ФБЛПЕ, ЮФП РПСУОСМП ВЩ, ЮФП ЪБРТПУЩ ЧПЪЧТБЭБАФУС РХУФЩНЙ Й ОЙЛБЛЙЕ ЪОБЮЕОЙС ОЕ ВЩ- МЙ ЧУФБЧМЕОЩ. ч ЬФПН УМХЮБЕ, ЧЩ НПЦЕФЕ ЧЧЕУФЙ УМЕДХАЭЕЕ: EXEC SQL WHENEVER NOT FOUND GOTO No_rows; No_rows - ЬФП НЕФЛБ Ч ОЕЛПФПТПН ЛПДЕ, УПДЕТЦБЭЕН ПРТЕДЕМЕООПЕ ДЕКУФЧЙЕ. у ДТХЗПК УФПТПОЩ, ЕУМЙ ЧБН ОХЦОП УДЕМБФШ ЧЩВПТЛХ Ч РТПЗТБННЕ РПЪ- ЦЕ, ЧЩ НПЦЕФЕ ЧЧЕУФЙ УМЕДХАЭЕЕ Ч ЬФПК ФПЮЛЕ, EXEC SQL WHENEVER NOT FOUND CONTINUE; ЮФП ВЩ ЧЩРПМОЕОЙЕ ЧЩВПТЛЙ РПЧФПТСМПУШ ДП ФЕИ РПТ РПЛБ ЧУЕ УФТПЛЙ ОЕ ВХДХФ ЙЪЧМЕЮЕОЩ, ЮФП СЧМСЕФУС ОПТНБМШОПК РТПГЕДХТПК ОЕ ФТЕВХАЭЕК УРЕГЙБМШОПК ПВТБВПФЛЙ. нпдйжйгйтпчбойе лхтуптпч лХТУПТЩ НПЗХФ ФБЛЦЕ ВЩФШ ЙУРПМШЪПЧБОЩ, ЮФПВЩ ЧЩВЙТБФШ ЗТХРРХ УФТПЛ ЙЪ ФБВМЙГЩ, ЛПФПТЩЕ НПЗХФ ВЩФШ ЪБФЕН НПДЙЖЙГЙТПЧБОЩ ЙМЙ ХДБМЕОЩ ПД- ОБ ЪБ ДТХЗПК. ьФП ДБЕФ ЧБН ЧПЪНПЦОПУФШ, ПВИПДЙФШ ОЕЛПФПТЩЕ ПЗТБОЙЮЕОЙС РТЕДЙЛБФПЧ ЙУРПМШЪХЕНЩИ Ч ЛПНБОДБИ UPDATE Й DELETE. чЩ НПЦЕФЕ УУЩМБФШУС ОБ ФБВМЙГХ ЪБДЕКУФЧПЧБООХА Ч РТЕДЙЛБФЕ ЪБРТПУБ ЛХТУПТБ ЙМЙ МАВПН ЙЪ ЕЗП РПДЪБРТПУПЧ, ЛПФПТЩЕ ЧЩ ОЕ НПЦЕФЕ ЧЩРПМОЙФШ Ч РТЕДЙЛБФБИ УБНЙИ ЬФЙИ ЛПНБОД. лБЛ РПДЮЕТЛОХФП Ч зМБЧЕ 16, УФБОДБТФ SQL ПФЛМПОСЕФ РПРЩФЛХ ХДБМЙФШ ЧУЕИ РПМШЪПЧБФЕМЕК У ТЕКФЙОЗПН ОЙЦЕ УТЕДОЕЗП, Ч УМЕДХАЭЕК ЖПТНЕ: EXEC SQL DELETE FROM Customers WHERE rating < ( SELECT AVG (rating) FROM Customers); пДОБЛП, ЧЩ НПЦЕФЕ РПМХЮЙФШ ФПФ ЦЕ ЬЖЖЕЛФ, ЙУРПМШЪХС ЪБРТПУ ДМС ЧЩВПТБ УППФЧЕФУФЧХАЭЙИ УФТПЛ, ЪБРПНОЙЧ ЙИ Ч ЛХТУПТЕ, Й ЧЩРПМОЙЧ DELETE У ЙУРПМШЪПЧБОЙЕН ЛХТУПТБ. уОБЮБМБ ЧЩ ДПМЦОЩ ПВЯСЧЙФШ ЛХТУПТ: EXEC SQL DECLARE Belowavg CURSOR FOR SELECT * FROM Customers WHERE rating < (SELECT AVG (rating) FROM Customers); ъБФЕН ЧЩ ДПМЦОЩ УПЪДБФШ ГЙЛМ, ЮФПВЩ ХДБМЙФШ ЧУЕИ ЪБЛБЪЮЙЛПЧ ЧЩВТБООЩИ ЛХТУПТПН: EXEC SQL WHENEVER SQLERROR GOTO Error_handler; EXEC SQL OPEN CURSOR Belowavg; while not SOLCODE = 100 do begin EXEC SOL FETCH Belowavg INTO :a, :b, :c, :d, :e; EXEC SOL DELETE FROM Customers WHERE CURRENT OF Belowavg; end; EXEC SOL CLOSE CURSOR Belowavg; рТЕДМПЦЕОЙЕ WHERE CURRENT OF ПЪОБЮБЕФ ЮФП DELETE РТЙНЕОСЕФУС Л УФТПЛЕ ЛПФПТБС Ч ОБУФПСЭЕЕ ЧТЕНС ЧЩВТБОБ ЛХТУПТПН. ъДЕУШ РПДТБЪХНЕЧБЕФУС, ЮФП Й ЛХТУПТ Й ЛПНБОДБ DELETE, УУЩМБАФУС ОБ ПДОХ Й ФХ ЦЕ ФБВМЙГХ, Й УМЕДПЧБФЕМШОП, ЮФП ЪБРТПУ Ч ЛХТУПТЕ - ЬФП ОЕ ПВЯЕДЙОЕОЙЕ. лХТУПТ ДПМЦЕО ФБЛЦЕ ВЩФШ НПДЙЖЙГЙТХЕНЩН. сЧМССУШ НПДЙЖЙГЙТХЕНЩН, ЛХТУПТ ДПМЦЕО ХДПЧМЕФЧПТСФШ ФЕН ЦЕ ХУМПЧЙСН ЮФП Й РТЕДУФБЧМЕОЙС ( УН. зМБЧХ 21 ). лТПНЕ ФПЗП, ORDER BY Й UNION, ЛПФПТЩЕ ОЕ ТБЪТЕЫЕОЩ Ч РТЕДУФБЧМЕОЙСИ, Ч ЛХТУПТБИ - ТБЪТЕЫБАФУС, ОП РТЕДПИТБОСАФ ЛХТУПТ ПФ НПДЙЖЙГЙТХЕНПУФЙ. пВТБФЙФЕ ЧОЙНБОЙЕ Ч ЧЩЫЕХРПНСОХФПН РТЙНЕТЕ, ЮФП НЩ ДПМЦОЩ ЧЩВЙТБФШ УФТПЛЙ ЙЪ ЛХТУПТБ Ч ОБВПТ РЕТЕНЕООЩИ, ДБЦЕ ЕУМЙ НЩ ОЕ УПВЙТБМЙУШ ЙУРПМШЪПЧБФШ ЬФЙ РЕТЕНЕООЩЕ. ьФПЗП ФТЕВХЕФ УЙОФБЛУЙУ ЛПНБОДЩ FETCH. UPDATE ТБВПФБЕФ ФБЛ ЦЕ. чЩ НПЦЕФЕ ХЧЕМЙЮЙФШ ЪОБЮЕОЙЕ ЛПНЙУУЙПООЩИ ЧУЕН РТПДБЧГБН, ЛПФПТЩЕ ЙНЕАФ ЪБЛБЪЮЙЛПЧ У ПГЕОЛПК=300, УМЕДХАЭЙН УРПУПВПН. уОБЮБМБ ЧЩ ПВЯСЧМСЕФЕ ЛХТУПТ: EXEC SOL DECLARE CURSOR High_Cust AS SELECT * FROM Salespeople WHERE snum IN (SELECT snum FROM Customers WHERE rating = 300); ъБФЕН ЧЩ ЧЩРПМОСЕФЕ НПДЙЖЙЛБГЙЙ Ч ГЙЛМЕ: EXEC SQL OPEN CURSOR High_cust; while SQLCODE = 0 do begin EXEC SOL FETCH High_cust INTO :id_num, :salesperson, :loc, :comm; EXEC SQL UPDATE Salespeople SET comm = comm + .01 WHERE CURRENT OF High_cust; end; EXEC SQL CLOSE CURSOR High_cust; пВТБФЙФЕ ЧОЙНБОЙЕ: ЮФП ОЕЛПФПТЩЕ ТЕБМЙЪБГЙЙ ФТЕВХАФ, ЮФПВЩ ЧЩ ХЛБЪЩ- ЧБМЙ Ч ПРТЕДЕМЕОЙЙ ЛХТУПТБ, ЮФП ЛХТУПТ ВХДЕФ ЙУРПМШЪПЧБФШУС ДМС ЧЩРПМОЕОЙС ЛПНБОДЩ UPDATE ОБ ПРТЕДЕМЕООЩИ УФПМВГБИ. ьФП ДЕМБЕФУС У РПНПЭША ЪБЛМАЮЙФЕМШОПК ЖТБЪЩ ПРТЕДЕМЕОЙС ЛХТУПТБ - FOR UPDATE . юФПВЩ ПВЯСЧЙФШ ЛХТУПТ High_cust ФБЛЙН УРПУПВПН, ФБЛ ЮФПВЩ ЧЩ НПЗ- МЙ НПДЙЖЙГЙТПЧБФШ ЛПНБОДПК UPDATE УФПМВЕГ comm, ЧЩ ДПМЦОЩ ЧЧЕУФЙ УМЕДХАЭЕЕ РТЕДМПЦЕОЙЕ: EXEC SQL DECLARE CURSOR High_Cust AS SELECT * FROM Salespeople WHERE snum IN (SELECT snum FROM Customers WHERE rating = 300) FOR UPDATE OF comm; ьФП ПВЕУРЕЮЙФ ЧБУ ПРТЕДЕМЕООПК ЪБЭЙФПК ПФ УМХЮБКОЩИ НПДЙЖЙЛБГЙК, ЛПФПТЩЕ НПЗХФ ТБЪТХЫЙФШ ЧЕУШ РПТСДПЛ Ч ВБЪЕ ДБООЩИ. ретенеообс INDICATOR рХУФЩЕ (NULLS) ЪОБЮЕОЙС - ЬФП УРЕГЙБМШОЩЕ НБТЛЕТЩ ПРТЕДЕМСЕНЩЕ УБН- ПК SQL. пОЙ ОЕ НПЗХФ РПНЕЭБФШУС Ч ЗМБЧОЩЕ РЕТЕНЕООЩЕ. рПРЩФЛБ ЧУФБЧЙФШ NULL ЪОБЮЕОЙС Ч ЗМБЧОХА РЕТЕНЕООХА ВХДЕФ ОЕЛПТТЕЛФОБ, ФБЛ ЛБЛ ЗМБЧОЩЕ СЪЩЛЙ ОЕ РПДДЕТЦЙЧБАФ NULL ЪОБЮЕОЙК Ч SQL, РП ПРТЕДЕМЕОЙА. иП- Ф ТЕЪХМШФБФ РТЙ РПРЩФЛЕ ЧУФБЧЙФШ NULL ЪОБЮЕОЙЕ Ч ЗМБЧОХА РЕТЕНЕООХА ПРТЕДЕМСЕФ РТПЕЛФЙТПЧЭЙЛ, ЬФПФ ТЕЪХМШФБФ ОЕ ДПМЦЕО РТПФЙЧПТЕЮЙФШ ФЕПТЙЙ ВБЪЩ ДБООЩИ, Й РПЬФПНХ ПВСЪБО РТПЙЪЧЕУФЙ ПЫЙВЛХ: ЛПД SQLCODE Ч ЧЙДЕ ПФТЙГБФЕМШОПЗП ЮЙУМБ, Й ЧЩЪЧБФШ РПДРТПЗТБННХ ХРТБЧМЕОЙС ПЫЙВЛПК. еУФЕУФЧЕООП ЧБН ОХЦОП ЬФПЗП ЙЪВЕЦБФШ. рПЬФПНХ, ЧЩ НПЦЕФЕ ЧЩВТБФШ NULL ЪОБЮЕОЙС У ДПРХУФЙНЩНЙ ЪОБЮЕОЙСНЙ, ОЕ РТЙЧПДСЭЙНЙ Л ТБЪТХЫЕОЙА ЧБЫЕК РТПЗТБННЩ. дБЦЕ ЕУМЙ РТПЗТБННБ Й ОЕ ТБЪТХЫЙФУС, ЪОБЮЕОЙС Ч ЗМБЧОЩИ РЕТЕНЕООЩИ УФБОХФ ОЕРТБЧЙМШОЩНЙ, РПФПНХ ЮФП ПОЙ ОЕ НПЗХФ ЙНЕФШ NULL ЪОБЮЕОЙК. бМШФЕТОБФЙЧОЩН НЕФПДПН РТЕДПУФБЧМСЕНЩН ДМС ЬФПК УЙФХБГЙЕК СЧМСЕФУС - ЖХОЛГЙС РЕТЕНЕООПК indicator(ХЛБЪБФЕМШ). рЕТЕНЕООБ indicator - ПВЯСЧМЕОБ Ч ТБЪДЕМЕ ПВЯСЧМЕОЙК SQL ОБРПНЙОБЕФ ДТХЗЙЕ РЕТЕНЕООЩЕ. пОБ НПЦЕФ ЙНЕФШ ФЙР ЗМБЧОПЗП СЪЩЛБ ЛПФПТЩК УППФЧЕФУФЧХЕФ ЮЙУМПЧПНХ ФЙРХ Ч SQL. чУСЛЙК ТБЪ, ЛПЗДБ ЧЩ ЧЩРПМОСЕФЕ ПРЕТБГЙА, ЛПФПТБС ДПМЦОБ РПНЕУФЙФШ NULL ЪОБЮЕОЙЕ Ч РЕТЕНЕООХА ЗМБЧОПЗП СЪЩЛБ, ЧЩ ДПМЦОЩ ЙУРПМШЪПЧБФШ РЕТЕНЕООХА indicator, ДМС ОБДЕЦОПУФЙ. чЩ РПНЕЭБЕФЕ РЕТЕНЕООХА indicator Ч ЛПНБОДХ SQL ОЕРПУТЕДУФЧЕООП РПУМЕ РЕТЕНЕООПК ЗМБЧОПЗП СЪЩЛБ ЛПФПТХА ЧЩ ИПФЙФЕ ЪБЭЙФЙФШ, ВЕЪ ЛБЛЙИ-МЙВП РТПВЕМПЧ ЙМЙ ЪБРСФЩИ, ИПФС ЧЩ Й НПЦЕФЕ, РТЙ ЦЕМБОЙЙ, ЧУФБЧЙФШ УМПЧП - INDICATOR. рЕТЕНЕООПК indicator Ч ЛПНБОДЕ, ЙЪОБЮБМШОП РТЙУЧБЙЧБЕФУС ЪОБЮЕОЙЕ 0. пДОБЛП, ЕУМЙ РТПЙЪЧПДЙФУ ЪОБЮЕОЙЕ NULL , РЕТЕНЕООБ indicator УФБОПЧ- ЙФУ ТБЧОПК ПФТЙГБФЕМШОПНХ ЮЙУМХ. чЩ НПЦЕФЕ РТПЧЕТЙФШ ЪОБЮЕОЙЕ РЕТЕН- ЕООПК indicator, ЮФПВЩ ХЪОБФШ, ВЩМП МЙ ОБКДЕОП ЪОБЮЕОЙЕ NULL. дБЧБКФЕ РТЕДРПМПЦЙН, ЮФП РПМ city Й comm, ФБВМЙГЩ рТПДБЧГПЧ, ОЕ ЙНЕАФ ПЗТБОЙ- ЮЕОЙ NOT NULL, Й ЮФП НЩ ПВЯЧЙМЙ ЧТБЪДЕМЕ ПВШЧМЕОЙК SQL, ДЧЕ рбулбмшЕЧУЛЙЕ РЕТЕНЕООЩЕ ГЕМПЗП ФЙРБ, i_a Й i_b. ( оЕФ ОЙЮЕЗП ФБЛПЗП Ч ТБЪДЕМЕПВШЧМЕОЙК, ЮФП НПЗМП ВЩ РТЕДУФБЧЙФШ ЙИ ЛБЛ РЕТЕНЕООЩЕ indicator. пОЙ УФБОХФ РЕТЕНЕООЩНЙ indicator, ЛПЗДБ ВХ- ДХФ ЙУРПМШЪПЧБФШУС ЛБЛ РЕТЕНЕООЩЕ indicator. ) йНЕЕФУС ПДОБ ЧПЪНПЦОПУФШ: EXEC SQL OPEN CURSOR High_cust; while SQLCODE = O do begin EXEC SQL FETCH High_cust INTO :id_num, :salesperson, :loc:i_a, :commINDlCATOR:i_b; If i_a > = O and i_b > = O then {no NULLs produced} EXEC SQL UPDATE Salespeople SET comm = comm + .01 WHERE CURRENT OF Hlgh_cust; else {one or both NULL} begin If i_a < O then writeln ('salesperson ', id_num, ' has no city'); If i_b < O then writeln ('salesperson ', id_num, ' has no commission'); end; {else} end; {while} EXEC SQL CLOSE CURSOR High_cust; лБЛ ЧЩ ЧЙДЙФЕ, НЩ ЧЛМАЮЙМЙ, ЛМАЮЕЧПЕ УМПЧП INDICATOR Ч ПДОПН УМХЮБЕ, Й ЙУЛМАЮЙМЙ ЕЗП Ч ДТХЗПН УМХЮБЕ, ЮФПВЩ РПЛБЪБФШ, ЮФП ЬЖЖЕЛФ ВХДЕФ ПДЙОБЛПЧЩН Ч МАВПН УМХЮБЕ. лБЦДБС УФТПЛБ ВХДЕФ ЧЩВТБОБ, ОП ЛПНБОДБ UPDATE ЧЩРПМОЙФУС ФПМШЛП ЕУМЙ NULL ЪОБЮЕОЙС ОЕ ВХДХФ ПВОБТХЦЕОЩ. еУМЙ ВХДХФ ПВОБТХЦЕОЩ NULL ЪОБЮЕОЙС, ЧЩРПМОЙФУС ЕЭЕ ПДОБ ЮБУФШ РТПЗТБННЩ, ЛПФПТБС ТБУРЕЮБФБЕФ РТЕДХРТЕЦДБАЭЕЕ УППВЭЕОЙЕ, ЗДЕ ВЩМП ОБКДЕОП ЛБЦДПЕ NULL ЪОБЮЕОЙЕ. пВТБФЙФЕ ЧОЙНБОЙЕ: РЕТЕНЕООЩЕ indicator ДПМЦОЩ РТПЧЕТСФШУС Ч ЗМБЧОПН СЪЩЛЕ, ЛБЛ ХЛБЪЩЧБМПУШ ЧЩЫЕ, Б ОЕ Ч РТЕДМПЦЕОЙЙ WHERE ЛПНБОДЩ SQL. рПУМЕДОЕЕ Ч РТЙОГЙРЕ ОЕ ЪБРТЕЭЕОП, ОП ТЕЪХМШФБФ ЮБУФП ВЩЧБЕФ ОЕРТЕДЧЙДЕООЩН. йурпмшъпчбойе ретенеоопк INDICATOR дмс ьнхмсгйй NULL ъобюеойк SQL дТХЗБ ЧПЪНПЦОПУФШ УПУФПЙФ Ч ФПН, ЮФПВЩ ПВТБВБФЩЧБФШ РЕТЕНЕООХА indicator, УЧСЪЩЧБС ЕЕ У ЛБЦДПК РЕТЕНЕООПК ЗМБЧОПЗП СЪЩЛБ, УРЕГЙБМШОЩН УРПУПВПН, ЬНХМЙТХАЭЙН РПЧЕДЕОЙЕ NULL ЪОБЮЕОЙК SQL. чУСЛЙК ТБЪ, ЛПЗДБ ЧЩ ЙУРПМШЪХЕФЕ ПДОП ЙЪ ЬФЙИ ЪОБЮЕОЙК Ч ЧБЫЕК РТПЗТБННЕ, ОБРТЙНЕТ Ч РТЕДМПЦЕОЙЙ if ... then, ЧЩ НПЦЕФЕ УОБЮБМБ РТПЧЕТЙФШ УЧСЪБООХА РЕТЕНЕООХА indicator, СЧМСЕФУС МЙ ЕЕ ЪОБЮЕОЙЕ=NULL. еУМЙ ЬФП ФБЛ, ФП ЧЩ ПВТБВБФЩЧБЕФЕ РЕТЕНЕООХА РП-ДТХЗПНХ. оБРТЙНЕТ, ЕУМЙ NULL ЪОБЮЕОЙЕ ВЩМП ЙЪЧМЕЮЕОП ЙЪ РПМ city ДМС ЗМБЧОПК РЕТЕНЕО- ОПК city, ЛПФПТБС УЧСЪБОБ У РЕТЕНЕООПК indicator - i_city, ЧЩ ДПМЦОЩ ХУФБОПЧЙФШ ЪОБЮЕОЙЕ city ТБЧОПЕ РПУМЕДПЧБФЕМШОПУФЙ РТПВЕМПЧ. ьФП ВХДЕФ ОЕПВИПДЙНП, ФПМШЛП ЕУМЙ ЧЩ ВХДЕФЕ ТБУРЕЮБФЩЧБФШ ЕЗП ОБ РТЙОФЕТЕ; ЕЗП ЪОБЮЕОЙЕ ОЕ ДПМЦОП ПФМЙЮБФШУС ПФ МПЗЙЛЙ ЧБЫЕК РТПЗТБННЩ. еУФЕУФЧЕООП, i_city БЧФПНБФЙЮЕУЛЙ ХУФБОБЧМЙЧБЕФУС Ч ПФТЙГБФЕМШОПЕ ЪОБЮЕОЙЕ. рТЕДРПМПЦЙН, ЮФП ЧЩ ЙНЕМЙ УМЕДХАЭХА ЛПОУФТХЛГЙА Ч ЧБЫЕК РТПЗТБННЕ: If sity = 'London' then comm: = comm + .01 else comm: = comm - .01 мАВПЕ ЪОБЮЕОЙЕ, ЧЧПДЙНПЕ Ч РЕТЕНЕООХА city, ЙМЙ ВХДЕФ ТБЧОП "London" ЙМЙ ОЕ ВХДЕФ ТБЧОП. уМЕДПЧБФЕМШОП, Ч ЛБЦДПН УМХЮБЕ ЪОБЮЕОЙЕ ЛПНЙУУЙПООЩИ ВХДЕФ МЙВП ХЧЕМЙЮЕОП МЙВП ХНЕОШЫЕОП. пДОБЛП, ЬЛЧЙЧБМЕОФОЩЕ ЛПНБОДЩ Ч SQL ЧЩРПМОСАФУС РП ТБЪОПНХ: EXEC SQL UPDATE Salespeople SET comm = comm + .01 WHERE sity = 'London'; Й EXEC SQL UPDATE Salespeople SET comm = comm .01; WHERE sity < > 'London'; ( чБТЙБОФ ОБ рбулбмЕ ТБВПФБЕФ ФПМШЛП У ЕДЙОУФЧЕООЩН ЪОБЮЕОЙЕН, Ч ФП ЧТЕН ЛБЛ ЧБТЙБОФ ОБ SQL ТБВПФБЕФ УП ЧУЕНЙ ФБВМЙГБНЙ. ) еУМЙ ЪОБЮЕОЙЕ city Ч ЧБТЙБОФЕ ОБ SQL ВХДЕФ ТБЧОП ЪОБЮЕОЙА NULL , ПВБ РТЕДЙЛБФБ ВХДХФ ОЕЙЪЧЕУФОЩ, Й ЪОБЮЕОЙЕ comm, УМЕДПЧБФЕМШОП, ОЕ ВХДЕФ ЙЪНЕОЕОП Ч МАВПН УМХЮБЕ. чЩ НПЦЕФЕ ЙУРПМШЪПЧБФШ РЕТЕНЕООХА indicator ЮФПВЩ УДЕМБФШ РПЧЕДЕОЙЕ ЧБЫЕЗП ЗМБЧОПЗП СЪЩЛБ ОЕРТПФЙЧПТЕЮБЭЙН ЬФПНХ, У РПНПЭША УПЪДБОЙС ХУМПЧЙС, ЛПФПТПЕ ЙУЛМАЮБЕФ NULL ЪОБЮЕОЙС: If i_city > = O then begin If city = 'London' then comm: = comm + .01 else comm: = comm - .01; end; {begin and end ОХЦОЩ ЪДЕУШ ФПМШЛП ДМС РПОЙНБОЙС} ртйнеюбойе: рПУМЕДОСС УФТПЛБ ЬФПЗП РТЙНЕТБ УПДЕТЦЙФ ТЕНБТЛХ - { begin Й end ОЕПВИПДЙНЩ ФПМШЛП ДМС РПОЙНБОЙС } ч ВПМЕЕ УМПЦОПК РТПЗТБНН, ЧЩ НПЦЕФЕ ЪБИПФЕФШ ХУФБОПЧЙФШ вХМЕЧХА РЕТЕНЕООХА Ч "ЧЕТОП" , ЮФПВЩ ХЛБЪБФШ ЮФП ЪОБЮЕОЙЕ city =NULL. ъБФЕН ЧЩ НПЦЕФЕ РТПУФП РТПЧЕТСФШ ЬФХ РЕТЕНЕООХА ЧУСЛЙК ТБЪ, ЛПЗДБ ЧБН ЬФП ОЕПВИПДЙНП. дтхзпе йурпмшъпчбойе ретенеоопк INDICATOR рЕТЕНЕООБ indicator ФБЛЦЕ НПЦЕФ ЙУРПМШЪПЧБФШУС ДМС ОБЪОБЮЕОЙС ЪОБЮЕОЙС NULL. рТПУФП ДПВБЧШФЕ ЕЕ Л ЙНЕОЙ ЗМБЧОПК РЕТЕНЕООПК Ч ЛПНБОДЕ UPDATE ЙМЙ INSERT ФЕН ЦЕ УРПУПВПН ЮФП Й Ч ЛПНБОДЕ SELECT. еУМЙ РЕТЕНЕООБ indicator ЙНЕЕФ ПФТЙГБФЕМШОПЕ ЪОБЮЕОЙЕ, ЪОБЮЕОЙЕ NULL ВХДЕФ РПНЕЭЕОП Ч РПМЕ. оБРТЙНЕТ, УМЕДХАЭБС ЛПНБОДБ РПНЕЭБЕФ ЪОБЮЕОЙС NULL Ч РПМ city Й comm, ФБВМЙГЩ рТПДБЧГПЧ, ЧУСЛЙК ТБЪ, ЛПЗДБ РЕТЕНЕООЩЕ indicator - i_a ЙМЙ i_b ВХДХФ ПФТЙГБФЕМШОЩНЙ; Ч РТПФЙЧОПН УМХЮБЕ ПОБ РПНЕЭБЕФ ФХДБ ЪОБЮЕОЙС ЗМБЧОЩИ РЕТЕНЕООЩИ: EXEC SQL INSERT INTO Salespeople VALUES (:Id_num, :salesperson, :loc:i_a, :comm:i_b); рЕТЕНЕООБ indicator ЙУРПМШЪХЕФУС ФБЛЦЕ, ЮФПВЩ РПЛБЪЩЧБФШ ПФВТБУЩЧБЕНХА УФТПЛХ. ьФП РТПЙЪПКДЕФ ЕУМЙ ЧЩ ЧУФБЧМСЕФЕ ЪОБЮЕОЙС УЙНЧПМПЧ SQL Ч ЗМБЧОХА РЕТЕНЕООХА ЛПФПТБС ОЕ ДПУФБФПЮОП ДМЙООБ ЮФПВЩ ЧНЕУФЙФШ ЧУЕ УЙНЧПМЩ. ьФП ПУПВБ РТПВМЕНБ У ОЕУФБОДБТФОЩН ФЙРБНЙ ДБООЩИ - VARCHAR Й LONG ( УНПФТЙ рТЙМПЦЕОЙА C ). ч ЬФПН УМХЮБЕ, РЕТЕНЕООБ ВХДЕФ ЪБРПМОЕОБ РЕТЧЩНЙ УЙНЧПМБНЙ УФТПЛЙ, Б РПУМЕДОЙЕ УЙНЧПМЩ ВХДХФ РПФЕТСОЩ. еУМЙ ЙУРПМШЪХЕФУС РЕТЕНЕООБ indicator, ПОБ ВХДЕФ ХУФБОПЧМЕОБ Ч РПМПЦЙФЕМШОПЕ ЪОБЮЕОЙЕ, ХЛБЪЩЧБАЭЕЕ ОБ ДМЙОХ ПФВТБУЩЧБЕНПК ЮБУФЙ УФТПЛЙ, РПЪЧПМСС ФБЛЙН ПВТБЪПН ЧБН ХЪОБФШ, УЛПМШЛП УЙНЧПМПЧ ВЩМП РПФЕТСОП. ч ЬФПН УМХЮБЕ, чЩ НПЦЕФЕ РТПЧЕТЙФШ У РПНПЭША РТПУНПФТБ -ЪОБЮЕОЙЕ РЕТЕНЕООПК indicator > 0, ЙМЙ < 0. теъане лПНБОДЩ SQL ЧЛМБДЩЧБАФУС Ч РТПГЕДХТОЩЕ СЪЩЛБИ, ЮФПВЩ ПВЯЕДЙОЙФШ УЙМЩ ДЧХИ РПДИПДПЧ. оЕЛПФПТЩЕ ДПРПМОЙФЕМШОЩЕ УТЕДУФЧБ SQL ОЕПВИПДЙНЩ, ЮФПВЩ ЧЩРПМОЙФШ ЬФХ ТБВПФХ. чМПЦЕООЩЕ ЛПНБОДЩ SQL ФТБОУМЙТХЕНЩЕ РТПЗТБННПК, ОБЪЩЧБЕНПК РТЕЛПНРЙМСФПТПН, Ч ЖПТНХ РТЙЗПДОХА ДМС ЙУРПМШЪПЧБОЙС ФТБОУМСФПТПН ЗМБЧОПЗП СЪЩЛБ, Й ЙУРПМШЪХЕНЩЕ Ч ЬФПН ЗМБЧОПН СЪЩЛЕ, ЛБЛ ЧЩЪПЧЩ РТПГЕДХТЩ Л РПДРТПЗТБННБН ЛПФПТЩЕ УПЪДБЕФ РТЕЛПНРЙМСФПТ, ОБЪЩЧБАФУС - НПДХМСНЙ ДПУФХРБ. ANSI РПДДЕТЦЙЧБЕФ ЧМПЦЕОЙЕ SQL Ч СЪЩЛЙ: рбулбмш, жптфтбо, лпвпм, Й PL/I. дТХЗЙЕ СЪЩЛЙ ФБЛЦЕ ЙУРПМШЪХАФУС, ПУПВЕООП уЙ. ч РПРЩФЛЕ ЛТБФЛП ПРЙУБФШ ЧМПЦЕООЩК SQL, ЙНЕАФУС ОБЙВПМЕЕ ЧБЦОЩЕ НЕУФБ Ч ЬФПК ЗМБЧЕ: * чУЕ ЧМПЦЕООЩЕ ЛПНБОДЩ SQL ОБЮЙОБАФУС УМПЧБНЙ EXEC SQL Й ЪБЛБОЮЙЧБАФУС УРПУПВПН ЛПФПТЩК ЪБЧЙУЙФ ПФ ЙУРПМШЪХЕНПЗП ЗМБЧОПЗП СЪЩЛБ. * чУЕ ЗМБЧОЩЕ РЕТЕНЕООЩЕ ДПУФХРОЩЕ Ч ЛПНБОДБИ SQL, ДПМЦОЩ ВЩФШ ПВЯСЧМЕОЩ Ч ТБЪДЕМЕ ПВЯСЧМЕОЙК SQL РТЕЦДЕ, ЮЕН ПОЙ ВХДХФ ЙУРПМШЪПЧБОЩ. * чУЕН ЗМБЧОЩН РЕТЕНЕООЩН ДПМЦОП РТЕДЫЕУФЧПЧБФШ ДЧПЕФПЮЙЕ ЛПЗДБ ПОЙ ЙУРПМШЪХАФУС Ч ЛПНБОДЕ SQL. * ъБРТПУЩ НПЗХФ УПИТБОСФШ УЧПК ЧЩЧПД ОЕРПУТЕДУФЧЕООП Ч ЗМБЧОЩИ РЕТЕНЕООЩИ, ЙУРПМШЪХС РТЕДМПЦЕОЙЕ INTO, ЕУМЙ Й ФПМШЛП ЕУМЙ, ПОЙ ЧЩВЙТБАФ ЕДЙОУФЧЕООХА УФТПЛХ. * лХТУПТЩ НПЗХФ ЙУРПМШЪПЧБФШУС ДМС УПИТБОЕОЙС ЧЩЧПДБ ЪБРТПУБ, Й ДПУФХРБ Л ПДОПК УФТПЛЕ Ч ЛБЦДЩК НПНЕОФ ЧТЕНЕОЙ. лХТУПТЩ ВЩЧБАФ ПВЯСЧМЕОЩНЙ ( ЕУМЙ ПРТЕДЕМСАФ ЪБРТПУ Ч ЛПФПТПН ВХДХФ УПДЕТЦБФШУС), ПФЛТЩФЩНЙ( ЕУМЙ ЧЩРПМОСАФ ЪБРТПУ ), Й ЪБЛТЩФЩНЙ ( ЕУМЙ ХДБМСАФ ЧЩЧПД ЪБРТПУБ ЙЪ ЛХТУПТБ ). еУМЙ ЛХТУПТ ПФЛТЩФ, ЛПНБОДБ FETCH, ЙУРПМШЪХЕФУС ЮФПВЩ РЕТЕНЕЭБФШ ЕЗП РП ПЮЕТЕДЙ Л ЛБЦДПК УФТПЛЕ ЧЩЧПДБ ЪБРТПУБ. * лХТУПТЩ СЧМСАФУС НПДЙЖЙГЙТХЕНЩНЙ ЙМЙ ФПМШЛП-ЮФЕОЙЕ. юФПВЩ УФБФШ НПДЙЖЙГЙТХЕНЩН, ЛХТУПТ ДПМЦЕО ХДПЧМЕФЧПТСФШ ЧУЕН ЛТЙФЕТЙСН ЛПФПТЩН ХДПЧМЕФЧПТСЕФ РТПУНПФТ; ЛТПНЕ ФПЗП, ПО ОЕ ДПМЦЕО ЙУРПМШЪПЧБФШ РТЕДМПЦЕОЙК ORDER BY ЙМЙ UNION, ЛПФПТЩЕ Ч МАВПН УМХЮБЕ ОЕ НПЗХФ ЙУРПМШЪПЧБФШУС РТПУНПФТБНЙ. оЕ НПДЙЖЙГЙТХЕНЩК ЛХТУПТ СЧМСЕФУС ЛХТУПТПН ФПМШЛП-ЮФЕОЙЕ. * еУМЙ ЛХТУПТ НПДЙЖЙГЙТХЕНЩК, ПО НПЦЕФ ЙУРПМШЪПЧБФШУС ДМС ПРТЕДЕМЕОЙС, ЛБЛЙЕ УФТПЛЙ ЪБДЕКУФЧПЧБОЩ ЧМПЦЕООЩНЙ ЛПНБОДБНЙ UPDATE Й DELETE ЮЕТЕЪ РТЕДМПЦЕОЙЕ WHERE CURRENT OF. DELETE ЙМЙ UPDATE ДПМЦОЩ ВЩФШ ЧОЕ ФПК ФБВМЙГЩ Л ЛПФПТПК ЛХТ- УПТ ПВТБЭБЕФУ Ч ЪБРТПУЕ. * SQLCODE ДПМЦЕО ВЩФШ ПВЯСЧМЕО ЛБЛ РЕТЕНЕООБ ЮЙУМПЧПЗП ФЙРБ ДМС ЛБЦДПК РТПЗТБННЩ ЛПФПТБС ВХДЕФ ЙУРПМШЪПЧБФШ ЧМПЦЕООЩК SQL. еЗП ЪОБЮЕОЙЕ ХУФБОБЧМЙЧБЕФУС БЧФПНБФЙЮЕУЛЙ РПУМЕ ЧЩРПМОЕОЙС ЛБЦДПК ЛПНБОДЩ SQL. * еУМЙ ЛПНБОДБ SQL ЧЩРПМОЕОБ ЛБЛ ПВЩЮОП, ОП ОЕ РТПЙЪЧЕМБ ЧЩЧПДБ ЙМЙ ПЦЙДБЕНПЗП ЙЪНЕОЕОЙС Ч ВБЪЕ ДБООЩИ, SQLCODE = 100. еУМЙ ЛПНБОДБ РТПЙЪЧЕМБ ПЫЙВЛХ, SQLCODE ВХДЕФ ТБЧОСФШУС ОЕЛПФПТПНХ БРРБТБФОП- ПРТЕДЕМЕООПНХ ПФТЙГБФЕМШОПНХ ЮЙУМХ ЛПФПТПЕ ПРЙУЩЧБЕФ ПЫЙВЛХ. ч РТПФЙЧОПН УМХЮБЕ, SQLCODE = 0. * рТЕДМПЦЕОЙЕ WHENEVER НПЦЕФ ЙУРПМШЪПЧБФШУС ДМС ПРТЕДЕМЕОЙС ДЕКУФЧЙС ЛПФПТПЕ ОХЦОП РТЕДРТЙОСФШ ЛПЗДБ SQLCODE = 100 (ОЕ ОБКДЕОП) ЙМЙ ЛПЗДБ SQLCODE ТБЧЕО ПФТЙГБФЕМШОПНХ ЮЙУМХ ( SQLERROR ). дЕКУФЧЙЕН НПЦЕФ ВЩФШ ЙМЙ РЕТЕИПД Л ОЕЛПФПТПК ПРТЕДЕМЕООПК НЕФЛЕ Ч РТПЗТБННЕ ( GOTO ) ЙМЙ ПФУХФУФЧЙЕ ЛБЛПЗП-МЙВП ДЕКУФЧЙС ЧППВЭЕ( РТПДПМЦЙФШ). рПУМЕДОЕЕ, ХУФБОПЧМЕОП РП ХНПМЮБОЙА. * юЙУМПЧЩЕ РЕТЕНЕООЩЕ НПЗХФ ФБЛЦЕ ЙУРПМШЪПЧБФШУС ЛБЛ РЕТЕНЕООЩЕ indicator. рЕТЕНЕООЩЕ indicator УМЕДХАФ ЪБ ДТХЗЙН ЙНЕОБНЙ РЕТЕНЕООЩИ Ч ЛПНБОДЕ SQL, ВЕЪ ЛБЛЙИ ВЩ ФП ОЙ ВЩМП РПУФПТПООЙИ УЙНЧПМПЧ ЛТПНЕ (ОЕПВСЪБФЕМШОПЗП) УМПЧБ INDICATOR. * пВЩЮОП, ЪОБЮЕОЙЕ РЕТЕНЕООПК indicator = 0. еУМЙ ЛПНБОДБ SQL РЩФБЕФУС РПНЕУФЙФШ NULL ЪОБЮЕОЙЕ Ч ЗМБЧОХА РЕТЕНЕООХА ЛПФПТБС ЙУРПМШЪХЕФ indicator, indicator ВХДЕФ ХУФБОПЧМЕО Ч ПФТЙГБФЕМШОПЕ ЪОБЮЕОЙЕ. ьФПФ ЖБЛФ НПЦОП ЙУРПМШЪПЧБФШУС ЮФПВЩ РТЕДПФЧТБЭБФШ ПЫЙВЛЙ, Й ДМС РПНЕЮБОЙС NULL ЪОБЮЕОЙК SQL ДМС УРЕГЙБМШОПК ПВТБВПФЛЙ ЙИ Ч ЗМБЧ- ОПК РТПЗТБННЕ. * рЕТЕНЕООБ indicator НПЦЕФ ЙУРПМШЪПЧБФШУС ДМС ЧУФБЧЛЙ NULL ЪОБЮЕОЙК Ч ЛПНБОДЩ SQL - INSERT ЙМЙ UPDATE. пОБ ФБЛЦЕ НПЦЕФ РТЙОЙНБФШ РПМПЦЙФЕМШОПЕ ЪОБЮЕОЙЕ ХЛБЪЩЧБАЭЕЕ ОБ ДМЙОХ ПФВТБУЩЧБЕНПК ЮБУФЙ УФТПЛЙ ОЕ РПНЕУФЙЧЫЕКУС Ч РТЕДЕМШОЩЕ ЗТБОЙГЩ ЛБЛПК- ОЙВХДШ РЕТЕНЕООПК, ЛХДБ ЬФБ УФТПЛБ РПНЕЭБМБУШ. тбвпфб у SQL пВТБФЙФЕ ЧОЙНБОЙЕ: пФЧЕФЩ ДМС ЬФЙИ ХРТБЦОЕОЙК ОБРЙУБОЩ Ч РУЕЧДПЛПДБИ, СЧМСАЭЙИУС БОЗМЙКУЛЙН СЪЩЛПН ПРЙУБОЙС МПЗЙЛЙ, ЛПФПТПК ДПМЦОБ УМЕДПЧБФШ РТПЗТБННБ. ьФП УДЕМБОП ДМС ФПЗП ЮФПВЩ РПНПЮШ ЮЙФБФЕМСН ЛПФПТЩЕ НПЗХФ ВЩФШ ОЕЪОБЛПНЩ У рбулбмЕН(ЙМЙ МАВЩН ДТХЗЙН СЪЩЛПН). лТПНЕ ФПЗП ЬФП МХЮЫЕ УЖПЛХУЙТХЕФ ЧБЫЕ ЧОЙНБОЙЕ ОБ ЧЛМАЮБЕНЩИ РПОСФЙСИ, ПРХУЛБС ЮБУФОПУФЙ ФПЗП ЙМЙ ДТХЗПЗП СЪЩЛБ. юФПВЩ ОЕРТПФЙЧПТЕЮЙФШ ОБЫЙН РТЙНЕТБН, УФЙМШ РУЕЧДПЛПДБ ВХДЕФ ОБРПНЙОБФШ рБУЛБМШ. нЩ ПРХУФЙН ЙЪ РТПЗТБНН ЧУЕ ЮФП ОЕ ПФОПУЙФУС ОБРТСНХА Л ТБУУНБФТЙЧБЕНЩН ЧПРТПУБН, ОБРТЙНЕТ, ПРТЕДЕМЕОЙЕ ХУФТПКУФЧ ЧЧПДБ-ЧЩЧПДБ, РПДЛМАЮЕОЙЕ Л ВБЪЕ ДБООЩИ, Й ФБЛ ДБМЕЕ. лПОЕЮОП, ЙНЕЕФУС НОПЗП УРПУПВПЧ ЮФПВЩ ЧЩРПМОСФШ ФБЛЙЕ ХРТБЦОЕОЙС; Й УПЧУЕН ОЕ ПВСЪБФЕМШОП ЮФП РТЕДУФБЧМЕООЩЕ ЧБТЙБОФЩ ТЕЫЕОЙК СЧМСАФУС УБНЩНЙ ХДБЮОЩНЙ. 1. тБЪТБВПФБКФЕ РТПУФХА РТПЗТБННХ ЛПФПТБС ЧЩВЕТЕФ ЧУЕ ЛПНВЙОБГЙЙ РП- МЕК snum Й cnum ЙЪ ФБВМЙГ рПТСДЛПЧ Й ъБЛБЪЮЙЛПЧ Й ЧЩСУОЙФЕ, ЧУЕЗДБ МЙ РТЕДЩДХЭБС ЛПНВЙОБГЙС ФБЛБС ЦЕ ЛБЛ РПУМЕДХАЭБС. еУМЙ ЛПНВЙОБГЙС ЙЪ ФБВМЙГЩ рПТСДЛПЧ ОЕ ОБКДЕОБ Ч ФБВМЙГЕ ъБЛБЪЮЙЛПЧ, ЪОБЮЕОЙЕ РПМ snum ДМС ЬФПК УФТПЛЙ ВХДЕФ ЙЪНЕОЕОП ОБ ХДПЧМЕФЧПТСАЭЕЕ ХУМПЧЙА УПЧРБДЕОЙС. чЩ ДПМЦОЩ РПНОЙФШ, ЮФП ЛХТУПТ У РПДЪБРТПУПН - НПДЙЖЙГЙТХЕН ( ANSI ПЗТБОЙЮЕОЙЕ, ФБЛЦЕ РТЙНЕОЙНП Л РТПУНПФТБН, Й ЮФП ВБЪЙУОБ ГЕМПУФОПУФШ ВБЪЩ ДБООЩИ ЬФП ОЕ ФПЦЕ УБНПЕ ЮФП РТПЧЕТЛБ ОБ ПЫЙВЛХ( Ф.Е. РЕТЧЙЮОЩЕ ЛМАЮЙ ХОЙЛБМШОЩ, ЧУЕ РПМ cnums Ч ФБВМЙГЕ рПТСДЛПЧ РТБЧЙМШОЩ, Й ФБЛ ДБМЕЕ ). рТПЧЕТШФЕ ТБЪДЕМ ПВЯСЧМЕОЙК, Й ХВЕДЙФЕУШ ЮФП ФБН ПВЯСЧМЕОЩ ЧУЕ ЙУРПМШЪХЕНЩЕ ЛХТУПТЩ. 2. рТЕДРПМПЦЙН, ЮФП ЧБЫБ РТПЗТБННБ РТЕДРЙУЩЧБЕФ ANSI ЪБРТЕЭЕОЙЕ ЛХТУПТЩ ЙМЙ РТПУНПФТЩ ЙУРПМШЪХАЭЙЕ НПДЙЖЙГЙТХЕНЩЕ РПДЪБРТПУЩ. лБЛ ЧЩ ДПМЦОЩ ЙЪНЕОЙФШ ЧЩЫЕХРПНСОХФХА РТПЗТБННХ? 3. тБЪТБВПФБКФЕ РТПЗТБННХ ЛПФПТБС РПДУЛБЪЩЧБЕФ РПМШЪПЧБФЕМСН ЙЪНЕОЙФШ ЪОБЮЕОЙС РПМ city РТПДБЧГБ, БЧФПНБФЙЮЕУЛЙ ХЧЕМЙЮЙЧБЕФ ЛПНЙУУЙПООЩЕ ОБ .01 ДМС РТПДБЧГБ РЕТЕЧПДЙНПЗП Ч вБТУЕМПОХ Й ХНЕОШЫБЕФ ЙИ ОБ .01 ДМС РТПДБЧГБ РЕТЕЧПДЙНПЗП Ч уБО иПУЕ. лТПНЕ ФПЗП, РТПДБЧЕГ ОБИПДСЭЙКУС Ч мПОДПОЕ ДПМЦЕО РПФЕТСФШ .02 ЙЪ УЧПЙИ ЛПНЙУУЙПООЩИ, ОЕЪБЧЙУЙНП ПФ ФПЗП НЕОСЕФ ПО ЗПТПД ЙМЙ ОЕФ, Ч ФП ЧТЕН ЛБЛ РТПДБЧЕГ ОЕ ОБИПДСЭЙКУС Ч мПОДПОЕ ДПМЦЕО ЙНЕФШ ХЧЕМЙЮЕОЙЕ ЛПНЙУУЙПООЩИ ОБ .02. йЪНЕОЕОЙЕ Ч ЛПНЙУУЙПООЩИ ПУОПЧЩЧБАЭЕЕУС ОБ ОБИПЦДЕОЙЙ РТПДБЧГБ Ч мПОДПОЕ, НПЦЕФ РТЙНЕОСФШУС ОЕЪБЧЙУЙНП ПФ ФПЗП ЛХДБ ФПФ РЕТЕЧПДЙФУС. чЩСУОЙФЕ НПЗХФ МЙ РПМЕ city ЙМЙ РПМЕ comm УПДЕТЦБФШ NULL ЪОБЮЕОЙС, Й ПВТБВПФБКФЕ ЙИ, ЛБЛ ЬФП ДЕМБЕФУС Ч SQL. рТЕДХРТЕЦДЕОЙЕ! : ЬФБ РТПЗТБННБ ЙНЕЕФ ОЕЛПФПТЩЕ УПЛТБЭЕОЙС. ( уН. рТЙМПЦЕОЙЕ A - ДМС ПФЧЕФПЧ. )

Соседние файлы в папке Understanding SQL (rus - html)