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



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

51 

 

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



болуы  мүмкін.  Мысалы,  foo(numeric)  және    foo(VARIADIC  numeric[]) 

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

foo(10.1),  жіберуде қай функция таңдалу керектігі айқын емес.  Осы мәселені 

шешуде  іздеу  жолымен  бірінші  табылған  функция  таңдалынады;  егер  екі 

функция бір сұлбада орналасса, тұрақты аргуметті функция таңдалынады.  

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

деңгейінің қайта жүктелген фунциялар жанұясындағы әрбір функциялар атауы 

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

атауынан  өзгеше  болу  керек.  Егер  осы  ереже  бұзылған  жағдайда,  оның 

іс



әрекеті  қоршаған  ортадан  тәуелді.  Пайдаланушы  орындау  кезінде 

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

(әдетте  ішкі).  CREATE  FUNCTION  SQL

командасы  үшін  AS  сөйлемінің 



альтрнатиыті  формасы  SQL

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



ажыратуға мүмкіндік береді. Мысалы: 

CREATE FUNCTION test(int) RETURNS int 

AS 'файл_аты', 'test_1arg' 

LANGUAGE C; 

CREATE FUNCTION test(int, int) RETURNS int 

AS 'файл_аты', 'test_2arg' 

LANGUAGE C; 

С  тіліндегі  функциялар  аты  көптеген  белгілі  бір  мүмкін  ережелерге 

сүйенеді. 

  

6.5 Функциялардың өзгергіш категориясы 

 

 

Әрбір  функция  мұмкін  нұсқаларымен  үшін  өзгергіш  сипаттамасы 



анықталады:  VOLATILE,  STABLE  және  IMMUTABLE.  Егер  осы  сипаттама 

CREATE  FUNCTION  командасында  айқын  берілмесе,  әдепкі  бойынша  

VOLATILE  аталынады.  Өзгергіш  категориясы  өзімен  оптимизатор  үшін 

кейбір функцияның әрекетіне уәде ретінде көрсетіледі: 

-  Өзгергіш  функциясы  (VOLATILE)  кез  келген  нәрсе  жасай  алады, 

сонымен  қатар  деректер  қорын  өзгертуге;  ол  бірдей  аргументті  бірнеше 

шақыруда  әр  түрлі  нәтиже  қайтара  алады.  Оптимизатор  осындай 

фунциялардың  іс

әрекеті  туралы  ешқандай  болжам  жасамайды.  Өзгерім 



функцияларын  қолданатын  сұраныстарда,  оның  нәтижесін  талап  еткенде,  ол 

әрбір қатар үшін қайта есептеліп отырады. 

-  Тұрақты функция (STABLE) деректер қорын өзгерте алмайд және бір 

оператор ішіндегі әрбір қатар үшін бірдей аргумент алып, гарант түрінде бір 

нәтиже  қайтарады.  Бұл  сипаттама  оптимизаторға  функцияның  көптеген 

шақыруларды  осы  біреуімен  ауыстыруға  мүмкіндік  жасайды.  Жекелегенде, 

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

қолдануға болады. Индекс бойынша іздеуде мақсатты мән әрбір қатарға емес 




52 

 

бір  рет  есептелетіндіктен,  VOLATILE  сипаттасы  бар  функцияны  қолдану 



мүмкін болмайды. 

- Өзгермейтін функция (IMMUTABLE) деректер қорын өзгерте алмайды 

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

сипаттама  оптимизаторға  функция  өзгермейтін  аргументтермен  сұраныста 

шақырылғанда  алдын

ала  фунцияны  есептеуге  мүмкіндік  береді.  Мысалы, 



SELECT  ...  WHERE  x  =  1  +  1    түрдегі  сұранысты  SELECT  ...  WHERE  x  =  2  

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

IMMUTABLE түрінде белгіленген.  

Оптимизатор ең жақсы нәтижелері үшін функцияға оған сәйкес өзгергіш 

сипаттамасын ең қатал орнатуы керек. 

Жанама әсері бар кез келген функция VOLATILE деп белгіленуі қажет, 

өйткені  оңтайландыру  кезінде  оған  шақыру  кезінде  алынып  тасталмау  үшін. 

Егер  функцияның  мәні  бір  сұраныс  кезінде  өзгеру  мүмкіндігі  болса,  онда 

функцияның  жанама  әсері  болмаса  да  оны  VOLATILE  деп  белгілеу  керек; 

осындай  функция  түрлеріне  random(),  currval()  и  timeofday()  функциялары 

жатады.  

Басқа  маңызды  мысал  ретінде  current_timestamp  функциялар  жанұясы 

жатады;  олардың  сипаттамасы  STABLE,  өйткені  олардың  мәндері  бір 

транзакциясы  ауданында  өзгермейді.  Жобаланып  және  бірден  орындалатын 

қарапайым  интерактивті  сұраныстар  туралы  жай  болса  STABLE  және 

IMMUTABLE  сипаттамалары  арасында  айырмашылық  аз;  функция  жобалау 

барысында бір мәрте орындала ма, әлде көп мәрте кейін орындала ма маңызы 

жоқ. Елеулі айырмашылық жоба сақталып және кейіннен көп мәрте қолданған 

жағдайда пайда болады. Егер функция IMMUTABLE деп белгіленген болса, ал 

шынында  ол  өзгермейтін  болмаса,  ол  жобалау  кезңнде  константаға  түсірілуі 

мүмкін, сол себептен келесі жобаны іске асыру кезінде оның орнына орынсыз 

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

жобаны кэштейтін функция тілдерін (мысалы, PL/pgSQL) қолданған жағдайда. 

SQL  тілінде  немесе  басқа  стандартты  процедуралық  тілде  жазылған 

функцияда  өзгергіш  сипаттамасымен  анықталатын  бір  маңызды  қасиеті  бар: 

функцияна шақыратын SQL командасы жүргізген өзгеріс көрінісі. VOLATILE 

функциясы  осындай  өзгерістерді  көріп  отырады,  ал  STABLE  және 

IMMUTABLE  функциялары  көре  алмайды.  Бұл  әрекет  MVCC  суреттері 

арқылы жүзеге асады. STABLE және IMMUTABLE сұранысты шақырғанның 

басында алынған суретті қолданады, ал VOLATILE болса олар орындайтын әр 

сұраныстың басында алынған жаңа суретті қолданады.  

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

жасай алады, алайда әдетте олар аналогты жұмыс жасағаны дұрыс. Суреттер 

жұмыс  жасаудың  осындай  ретінің  салдары  тек  SELECT  командасы  бар 

функция  STABLE  белгілеуі  қауіпсіз;  паралель  орындалатын  сұраныстармен 

өзгерілетін  кестелерден  мәліметтерді  алған  жағдайда  да  STABLE  белгілеуін 

таңдаған  дұрыс.  PostgreSQL  STABLE  функциясының  барлық  командаларын 

сұранысты  шақыру  үшін  алынған  суретпен  орындайды.  Сол  себептен  бүкіл 




жүктеу 0,72 Mb.

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




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

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