Дипломного проекта  разработка серверной части веб 



жүктеу 0,72 Mb.
Pdf просмотр
бет14/22
Дата22.05.2018
өлшемі0,72 Mb.
#16329
түріДиплом
1   ...   10   11   12   13   14   15   16   17   ...   22

49 

 

және  anyrange  типтер.  Функцияның  хабарлануында  осы  типтер  қолданылса, 



онда ол функция  полиморфты деп аталады. Полиморфты функция  көптеген 

әр  түрлі  мәліметтер  типтерімен  жұмыс  жасай  алады;  нақты  тип  шақыруда 

берілген  мәнге  байланысты  анықталады.  Полморфты  аргументтер  және 

нәтижелер  бір

бірімен  байланыста  болады  және  полиморфты  функция 



шақыратын  сұранысты  талдауда  білгілі  бір  мәліметтер  типіне  келтіріледі. 

anyelement  деп  хабарланған  әрбір  позицияда  (аргменттерде  немесе 

қайтарылатын мәнде) кез келген нақты мәліметтер типі жіберіле алады, бірақ 

әрбір нақты шақыруда барлық осы нақты типтер бірдей болуы шарт. Аналогты 

түрде,  anyarray  деп  хабарланған  әрбір  позицияда  массивтің  кез  келген 

мәліметтер типі жіберіле алады, алайда массвтің барлық нақты типтері сәйкес 

келуі  керек.    anyrange  деп  хабарланған  барлық  позициялар  секілді  бірдей 

тип


диапазон  берлуі  керек.  Сонымен  қатар,  егер  кейбір  позициялар  anyarray 

деп аталған болса, ал басқалары anyelement деп, онда позициядағы нақты тип 

anyarray  массив  болуы  керек,  өйткені  оның  элменттерінің  типі  anyelement 

позициясындағы  мәндерінің  типімен  сәйкес  келеді.  Осылайшы,  егер  бір 

позициялар anyrange деп хабарланған, ал басқалалары anyelement болса, онда 

нақты  тип  болып  anyrange  позициясындағы  диапазон  болуы  керек,  өйткені 

оның  подтипі  anyelement  позициясы  жіберіп  отырған  типпен  сәйкес  келеді. 

аnynonarray  жалған  типі  дәл  anyelement  сияқты  өңделеді,  бірақ  қосымша 

шектеумен:  нақты  тип  массив  типі  болмау  керек.  anyenum  жалған  типі  де 

anyelement  секілді  өңделеді,  бірақ  оның  нақты  типтері  атап  шығумен 

шектеледі.  

Осылайша,  полиморфті  типпен  бірнеше  аргумент  хабарланған, 

нәтижесінде  тек  белгілі  бір  нақты  типтер  комбинациялары  рұқсат  етіледі. 

Мысалы, equal(anyelement, anyelement) ретінде хабарланған функция аргумент 

ретінде  кез  келген  екі  мәнді  қабылдайды,  бірақ  егер  тек  екеуінің  типтері 

сәйкес  болған  жағдайда.  Функцияның  қайтарылыған  мәні  мен  полиморфті 

типпен  сәйкес  келгенде,  онымен  бірге  кем  болмағанда  бір  аргумент 

полиморфты  болуы  керек,  және  де  дәл  шақырылғанда  нәтиженің  нақты  типі 

жіберілген  агрументтің  нақты  типі  бойынша  анықталады.  Мысалы,  массив 

элементтерімен  байланысатын  механизмі  жоқ  болған  жағдайда,  оны 

subscript(anyarray,  integer)  returns  anyelement  функция  құру  арқылы  жүзеге 

асыруға болады. Осындай хабарлануда бірінші нақты аргумент массив болуы 

керек, және де одан сұранысты талдауда нәтиженің дұрыс типі шығарылады. 

Басқа мысал ретінде f(anyarray) returns anyenum функциясын келтіруге болады, 

ол тек массив тізімін қабылдап отырады. Назар аударатын жағдай: anynonarray 

және  anyenum  айнымалылардың  жеке  типін  көрсетпейді;  anyelement  секілді 

дәл  сол  типтер,  бірақ  қосымша    шектеулермен.  Мысалы,  f(anyelement, 

anyenum)  функциясын  шақыру  f(anyenum,  anyenum)  функциясын  шақыруға 

дәлме


дәл: екі нақты аргументтер бірдей тізім

типті болуы керек. Айнымалы 



санды  аргументтері  бар  функцияларда  полиморфты  болуы  мүмкін:  ол  үшін 

олардың  соңғы  параметрі  VARIADIC  anyarray  ретінде  сипатталады. 

Аргументтерті  сәйкестіндіруде  және  нәтиженің  нақты  типін  анықтау 



50 

 

мақсаттары  үшін  осындай  функция  көрсетілімі  anynonarray  керекті 



параметрлерінің саны хабараланған болғандағыдай.  

 

6.3 Пайдаланушы функциялар  



 

 

PostgreSQL

де фунцияның төрт түрі көрсетілген: 



-  сұраныс тіліндегі функциялар (SQL тілінде жазылған фунциялар); 

-  процедуралық  тілдегі  фунциялар  (PL/pgSQL  немесе  PL/Tcl  тілінде 

жазылған функциялар); 

-  ішкі функциялар; 

-  С тіліндегі функциялар. 

Кез  келген  түрдегі  функциялар  аргумент  (параметр)  ретінде  негізгі 

типті, құрамдас типті немесе екеуінің қосындысын қабылдай алады. Сонымен 

қатар, кез келген функциялар негізгі немесе құрамдас типті мәндерді қайтара 

алады.  Тағы  негізгі  немесе  құрамдас  мәндер  жинағын  қайтаратын 

функцияларды  анықтауға  болады.  Көптеген  түрдегі  функциялар  белгілі  бір 

жалған  типтерді  (мысалы,  полиморфты)  қабылдай  алады  немесе  қайтара 

алады,  бірақ  олармен  жұмысқа  керекті  қол  жетімді  құралдар  әр  түрлі. 

Функцияларды анықтауда ең оңайы SQL тілінде. SQL тіліндегі функцияларға 

қатысты көптеген концепциялар басқа түрдегі функцияларға таралады.  

 

6.4 Функцияларды қайта жүктеу 

 

 



Пайдаланушы  бірнеше  бірдей  SQL  атымен  функцияларды  анықтай 

алады,  егер  осы  функциялар  әр  түрлі  аргументтер  қабылдаса  ғана.  Басқаша 

айтқанда,  функция  аттарын  қайта  жүктеуге  болады.  Сұраныс  орындалғанда, 

сервер  дәл  қандай  функцияны  шақыру  керектігін,  оның  мөлшерін  және 

берілген аргументтер типіна байланысты анықтайды. Қайта жүктеу белгілі бір 

соңғы  санға  дейінгі  айнымалы  аргументтер  санымен  функцияны 

имитациялауға  пайдалы  болуы  мүмкін.  Қайта  жүктеу  функция  жанұясын 

құрған жағдайда түсініксіздер болмауын қадағалау керек.  

Мысалы, егер функция құрылса: 

CREATE FUNCTION test(int, real) RETURNS ... 

CREATE FUNCTION test(smallint, double precision) RETURNS ... 

test(1, 1.5) қарапайым аргументті қандай функция шақыралатыны айқын емес. 

Рұқсат  етілген  ережелері  қазіргі  уақытта  іске  асырылған,  алайда  осындай 

ерекшелікке білінбей сүйінетін жүйені құру ақылдшы шешім емес. Құрамдас 

типті бір  аргументті  қабылдайтын функциялар  әдетте осы  типтегі белгілі бір 

атрибут  (жол)  атауымен  сәйкес  келетін  атау  берудің  қажеттілгі  жоқ.  Еске 

түсіру:  атрибут(кесте)  тең  кесте.атрибут.  Құрамдас  типті  қабылдайтын 

функция  мен  құрамдас  типті  атрибут  арасында  түсініксіздік  пайда  болған 

жағдайда  әрдайым  атрибут  таңдалатын  болады.  Бұл  таңдауды  функция  атын 

сұлба  (яғни,  сұлба.функция(кесте))  қосу  арқылы  қайта  анықтауға  болады, 

алайда басқа атаулар беріп бұл мәселеден қашық болған дұрыс. Басқа мәселе 



жүктеу 0,72 Mb.

Достарыңызбен бөлісу:
1   ...   10   11   12   13   14   15   16   17   ...   22




©g.engime.org 2024
әкімшілігінің қараңыз

    Басты бет
рсетілетін қызмет
халықаралық қаржы
Астана халықаралық
қызмет регламенті
бекіту туралы
туралы ережені
орталығы туралы
субсидиялау мемлекеттік
кеңес туралы
ніндегі кеңес
орталығын басқару
қаржы орталығын
қаржы орталығы
құрамын бекіту
неркәсіптік кешен
міндетті құпия
болуына ерікті
тексерілу мемлекеттік
медициналық тексерілу
құпия медициналық
ерікті анонимді
Бастауыш тәлім
қатысуға жолдамалар
қызметшілері арасындағы
академиялық демалыс
алушыларға академиялық
білім алушыларға
ұйымдарында білім
туралы хабарландыру
конкурс туралы
мемлекеттік қызметшілері
мемлекеттік әкімшілік
органдардың мемлекеттік
мемлекеттік органдардың
барлық мемлекеттік
арналған барлық
орналасуға арналған
лауазымына орналасуға
әкімшілік лауазымына
инфекцияның болуына
жәрдемдесудің белсенді
шараларына қатысуға
саласындағы дайындаушы
ленген қосылған
шегінде бюджетке
салығы шегінде
есептелген қосылған
ұйымдарға есептелген
дайындаушы ұйымдарға
кешен саласындағы
сомасын субсидиялау