Presentation is loading. Please wait.

Presentation is loading. Please wait.

Funkcijos 9 paskaita.

Similar presentations


Presentation on theme: "Funkcijos 9 paskaita."— Presentation transcript:

1 Funkcijos 9 paskaita

2 Funkcijos - Turinys Kas yra PLSQL funkcija? Funkcijų struktūra
Funkcijos kūrimo sintaksė Paprogramių parametrai Funkcijos vykdymas Funkcijos šalinimas RETURN sakinio naudojimas Apribojimai PL/SQL paprogramių paketavimas Paprogramės parametrų būsenos Paprogramių vardų perkrovimas Perkrovimo apribojimai

3 Kas yra PLSQL funkcija? Funkcija – tai paprogramė, kurios tikslas suskaičiuoti norimą reikšmę Funkcijų struktūra yra labai panaši į jau minėtų procedūrų, skirtumas tik tas, kad funkcijos turi papildomą RETURN sakinį F-ja gali būti saugoma duomenų bazėje kaip schemos objektas, kurį galima daug kartų vykdyti F-ja iškviečiama kaip išraiškos dalis F-ja – vardą turintis PL/SQL blokas, kuris gali priimti parametrus ir g.b. iškviestas. F-jos naudojamos reikšmės suskaičiavimui. F-jos ir procedūros turi tokią pačią struktūrą. F-ja turi grąžinti reikšmę kviečiančiai aplinkai, tuo tarpu kai procedūra grąžina nulį arba daug reikšmių į kviečiančią aplinką. Kaip ir procedūra, f-ja turi antraštę (header), deklaravimo ir vykdymo dalis, bei neprivalomą išimčių apdorojimo (exception) dalį. F-ja privalo turėti RETURN dalį antraštėje ir bent vieną RETURN sakinį vykdomojoje sekcijoje. F-jos g.b. saugomos duomenų bazėje kaip schemos objektas, kurį galima daug kartų vykdyti. F-ja g.b. sukurta ir vartotojo aplikacijoje. F-jos, saugomos duomenų bazėje g.b. lengvai palaikomos ir daug kartų naudojamos bet kokiame kiekyje klientinių aplikacijų. F-ja yra iškviečiama kaip išraiškos dalis arba kaip PL/SQL išraiškos dalis: SQL išraiškoje f-jos turi būti naudojamos laikantis taisyklių, norint nesukelti pašalinių efektų (funkcijos, naudojamos SELECT sakinyje, negali atlikti INSERT, UPDATE ar DELETE veiksmų, nes SELECT nekeičia duomenų bazės, o tik išrenka duomenis (PRAGMA wnds ir kt.) ). PL/SQL išraiškoje, f-jos vardas elgiasi kaip kintamasis, kurio reikšmė priklauso nuo perduotų parametrų.

4 } Funkcijų kūrimas Redaktorius (rašomas CREATE(OR REPLACE) FUNCTION)
Funkcijų kūrimas Redaktorius (rašomas CREATE(OR REPLACE) FUNCTION) file.sql SQL*Plus (load ir execute file.sql) Oracle (kodas) kompiliavimas P kodas (sukuriama funkcija) Vykdymas } Galima naudoti SHOW_ERRORS Kompiliavimo klaidų peržiūrai Funkcijos kūrimo etapai: Rašoma sintaksė: kuriamas funkcijos kodas (CREATE FUNCTION sakinys) sisteminiame arba tekstiniame redaktoriuje ir išsaugomas SQL failo pavidalu (praplėtimas .sql). Kodas kompiliuojamas: naudojant SQL*Plus, paleidžiamas SQL failas. Kodas sukompiliuojamas į P kodą ir sukuriama funkcija. Failas su CREATE FUNCTION (arba CREATE OR REPLACE FUNCTION) sakiniu leidžia pakeisti sakinį jei yra kompiliavimo arba programos vykdymo (run-time) klaidų arba atlikti vėlesnius pakeitimus faile. Negalima naudoti funkcijų su klaidomis. SQL*Plus-e naudojamas SHOW_ERRORS kompiliavimo klaidų rodymui. Funkcijos vykdymas. Funkcija gali būti kiek norima kartų vykdoma naudojant EXECUTE komandą SQL*Plus’e. F-ją galima iškviesti iš PL/SQL bloko. Pridedamas RETURN sakinys su grąžinamos reikšmės duomenų tipu funkcijos antraštėje. Vykdomojoje sekcijoje pridedamas 1 sakinys su RETURN. Galima nurodyti keletą RETURN sakinių funkcijoje (paprastai su IF sakiniais). Tik 1 RETURN sakinys vykdomas, nes po reikšmės grąžinimo, PL/SQL bloko vykdymas nutraukiamas. Pastaba: jei yra kompiliavimo klaidų ir norima atlikti pakeitimus su sakiniu CREATE FUNCTION, reikia arba procedūrą ištrinti (DROP) arba naudoti OR REPLACE.

5 Funkcijos kūrimo sintaksė
Funkcijos kūrimo sintaksė [CREATE [OR REPLACE ] ] FUNCTION function_name [ ( parameter [mode] datatype [ , parameter ]... )] RETURN datatype [ AUTHID { DEFINER | CURRENT_USER } ] [ PARALLEL_ENABLE [ { [CLUSTER parameter BY (column_name [,column_name ]...) ] | [ORDER parameter BY (column_name [,column_name ]...) ] } ] [ ( PARTITION parameter BY { [ {RANGE | HASH } (column_name [, column_name]...)] | ANY } ) ] ] [DETERMINISTIC] [ PIPELINED [ USING implementation_type ] ] [ AGGREGATE [UPDATE VALUE] [WITH EXTERNAL CONTEXT] USING implementation_type ] {IS | AS} [ PRAGMA AUTONOMOUS_TRANSACTION; ][ local declarations ] BEGIN executable statements RETURN!!!! [ EXCEPTION exception handlers ] END [ name ]; CREATE leidžia sukurti pavienes funkcijas, kurios patalpinamos į Oracle duomenų bazę. Tokią funkciją galima įvykdyti iš SQL*Plus arba iš programos naudojančios vietinį dinaminį SQL. function_name – f-jos vardas. parameter – PL/SQL kintamojo, perduodamo f-jai, vardas.. mode – parametro tipas (IN,OUT ar IN OUT) datatype – parametro duomenų tipas. RETURN datatype – grąžinamos reikšmės duomenų tipas turi būti f-jos rezultatas. RETURN – sakinyje neturi būti nurodytas duomenų tipo ilgis. Pastaba: PL/SQL blokas turi turėti bent 1 RETURN sakinį! AUTHID nustato ar sukurta funkcija vykdoma jos savininko privilegijomis (pagal nutylėjimą) arba esamo vartotojo ir ar šią procedūra gali iškviesti bet kuris vartotojas. Savininko privilegijas, kurios nustatomos pagal nutylėjimą galima pakeisti su CURRENT_USER. PARALLEL_ENABLE nustato, kad funkcija gali būti naudojama paraleliai. Kaip ir procedūros, funkcijos turi dvi dalis : specialiąją ir kūną. Specialioji dalis pradedama raktiniu žodžiu FUNCTION ir baigiama raktiniu žodžiu RETURN, kuris aprašo grąžinamos reikšmės tipą. RETURN Parametrų deklaravimas nėra privalomas. Funkcijos, kurios nereikalauja parametrų yra rašomos be skliaustelių. Funkcijos kūnas pradedamas žodeliais IS arba AS, o baigiamas žodeliu END, po kurio gali būti pavadinimas jei funkcija jį turi. Funkcijos kūnas turi tris dalis: deklaracinę, vykdomąją ir klaidų gaudymo (pastaroji yra neprivaloma). Deklaracinėje funkcijos kūno dalyje yra deklaruojami vietiniai (lokalūs) kintamieji. Jie turi būti rašomi tarp raktinių žodžių IS ir BEGIN. Deklaruojant raktinis žodis DECLARE nėra naudojamas. Vykdomoji kūno dalis yra talpinama tarp raktinių žodžių BEGIN ir EXCEPTION (arba END jei klaidų gaudymo dalies funkcija neturi). Bent vienas ar keli RETURN sakiniai turi būti rašomi būtent vykdomojoje funkcijos kūno dalyje. Jei reikia, klaidų gaudymo dalis yra rašoma tarp raktinių žodžių: EXCEPTION ir END. Joje yra gaudomos vykdymo metu galinčios atsirasti klaidos.

6 DB funkcijos kūrimas SQL*Plus’e
DB funkcijos kūrimas SQL*Plus’e CREATE OR REPLACE FUNCTION get_sal (p_id IN employees.employee_id%TYPE) RETURN NUMBER IS v_salary employees.salary%TYPE:=0; BEGIN SELECT salary INTO v_salary FROM employees WHERE employee_id=p_id; RETURN v_salary; END get_sal; Sukurta f-ja su vienu IN parametru ir grąžina NUMBER reikšmę. F-ją SQL*Plus’e galima iškviesti kaip PL/SQL išraiškos dalį. Geras programavimo stilius yra priskirti f-jos grąžinamą reikšmę kintamajam ir naudoti vienintelį RETURN sakinį vykdomojoje sekcijoje. RETURN sakinys g.b. Ir EXCEPTION dalyje.

7 Funkcijos - pavyzdys 1 FUNCTION sal_ok (salary REAL, title VARCHAR2)
Funkcijos - pavyzdys 1 FUNCTION sal_ok (salary REAL, title VARCHAR2) RETURN BOOLEAN IS min_sal REAL; max_sal REAL; BEGIN SELECT losal, hisal INTO min_sal, max_sal FROM sals WHERE job = title; RETURN (salary >= min_sal) AND (salary <= max_sal); END sal_ok; Iškvietimo metu funkcija reikalauja dviejų dydžių – darbuotojo atlyginimo ir darbo pavadinimo. Darbo pavadinimas reikalingas to darbo didžiausios ir mažiausios reikšmių suradimui iš lentelės „sals“, o atlyginimas naudojamas lyginimui. Funkcija gražina loginę reikšmę - taip arba ne. Jei funkcija kviečiama su kintamuoju „salary“, kurio reikšmė yra tarp min_sal ir max)sal – funkcija gražins reikšmę TRUE, jei ne – FALSE.

8 Funkcijos - pavyzdys 2 FUNCTION balance (acct_id INTEGER) RETURN REAL IS acct_bal REAL; BEGIN SELECT bal INTO acct_bal FROM accts WHERE acct_no = acct_id; RETURN acct_bal; END balance;

9 Funkcijos - pavyzdys 3 FUNCTION compound (years NUMBER, amount NUMBER, rate NUMBER) RETURN NUMBER IS BEGIN RETURN amount * POWER((rate / 100) + 1, years); END compound; Antrajame pavyzdyje parodytas sudėtingas RETURN sakinys. Pastebėtina, kad funkcija turi turėti bent viena veiksmą, kuris gražina reikšmę vykdomojoje dalyje, priešingu atveju bus gaunama klaida: „function returned without value“.

10 Funkcijos vykdymas Iškviesti f-ją kaip PL/SQL išraiškos dalį
Funkcijos vykdymas Iškviesti f-ją kaip PL/SQL išraiškos dalį Sukurti kintamąjį, kuris saugos grąžinamą reikšmę Vykdyti f-ją. Kintamajame bus patalpinta reikšmė grąžinama per RETURN sakinį F-ja gali priimti vieną ar kelis parametrus, tačiau turi grąžinti vienintelę reikšmę. F-js iškviečiama kaip PL/SQL išraiškos dalis, naudojant kintamuosius grąžinamos reikšmės saugojimui. 3 parametrų būsenos IN (pagal nutylėjimą), OUT ir IN OUT, gali būti naudojamos bet kokioje paprogramėje, tačiau reikia vengti naudoti OUT ir IN OUT būsenų f-jose. F-jos paskirtis yra priimti nulį arba daugiau parametrų ir grąžinti vienintelę reikšmę. Taip pat f-jos neturi sukelti pašalinių efektų, kurie gali keisti kintamųjų reikšmes, kurie nėra lokalūs parogramėje.

11 Paprogramių parametrai
Paprogramių parametrai Formalūs – kintamieji, deklaruoti paprogramės specifikacijoje parametrų sąraše ir naudojami paprogramės kūne Tikrieji (faktiniai)- kintamieji arba išraiškos nurodyti paprogramės kvietimo parametrų sąraše

12 Funkcijos vykdymas IF sal_ok(new_sal, new_title) THEN ...
Funkcijos vykdymas IF sal_ok(new_sal, new_title) THEN ... get_salary.sql failo vykdymas SQL*PLUS’e: VARIABLE g_salary NUMBER EXECUTE :g_salary:=get_sal(117) PRINT g_salary 1 2 Funkcija iškviečiama darbui panaudojus jos vardą ir teisingai surašius parametrus (parameters) t.y. kviečiančiojo sakinio ir funkcijos kintamųjų skaičius ir tipai privalo sutapti. Kintamieji “new_sal” ir ”new_title” prieš tai turi būti inicializuoti. 1.Sukuriami aplinkos kintamasis, kuris saugos RETURN (kintamasis) reikšmę. 2. F-ja iškviečiama su EXECUTE komanda SQL*Plus’e. F-jos rezultatas priskiriamas aplinkos kintamaja su “:” ženklu. 3. Rezultatas išvedamas su PRINT komanda. Jei f-jos kode nebus reikšmės grąžinimo, tai jos vykdymo metu bus atspausdintas kaidos pranešimas Function returned without value. 3

13 Vartotojų sukurtų f-jų privalumai SQL išraiškose
Vartotojų sukurtų f-jų privalumai SQL išraiškose SQL praplėtimas, kai reikalingi skaičiavimai yra sudėtingi arba jų neįmanoma atlikti su SQL Padidina duomenų nepriklausomumą, kai sudėtinga duomenų analizė atliekama Oracle serveryje, o ne ištraukus visus duomenis ir skaičiuojant juos aplikacijoje Padidina užklausų efektyvumą, kai f-jos naudojamos užklausoje, o ne atliekamos aplikacijoje Galima manipuliuoti naujais duomenų tipais (ilguma/platuma) verčiant juos character eilutėmis ir atliekant operacijas su jais per f-jas SQL išraiškose galima naudoti vartotojo sukurtas PL/SQL f-jas. Vartotojo sukurtas f-jas galima naudoti visur kur galima naudoti vidines SQL f-jas.

14 F-jos iškvietimas SQL išraiškose - pavyzdys
F-jos iškvietimas SQL išraiškose - pavyzdys CREATE OR REPLACE FUNCTION tax (p_value IN NUMBER) RETURN NUMBER IS BEGIN RETURN (v_salary * 0.08); END tax; / SELECT employee_id, last_name, salary, tax(salary) FROM employees WHERE department_id=100; Pavyzdyje sukuriama f-ja tax, kuri iškviečiama SELECT sakinyje. F-ja priima NUMBER parametrą ir grąžina reikšmę.

15 Sritys iš kurių g. b. kviečiama f-ja
Sritys iš kurių g. b. kviečiama f-ja Reikšmių sąraše SELECT sakinyje Sąlygos sakiniuose WHERE ar HAVING CONNECT BY, START WITH, ORDER BY ir GROUP sakiniuose VALUES sakinys INSERT komandoje SET sakinys UPDATE komandoje Vartotojo sukurtos PL/SQL f-jos gali būti kviečiamos iš visų SQL išraiškų, kuriose g.b. kviečiamos Oracle vidinės f-jos. Pavyzdys: SELECT employee_id, tax(salary) FROM emploees WHERE tax(salary)>(SELECT MAX(tax(salary)) FROM emploees WHERE department_id=30) ORDER BY tax(salary) DESC;

16 Apribojimai kviečiant f-jas iš SQL išraiškų
Apribojimai kviečiant f-jas iš SQL išraiškų Kad f-ją būtų galima kviesti iš SQL išraiškų ji turi būti: Saugoma duomenų bazėje Priimti tik IN parametrus Priimti tik galiojančius SQL duomenų tipus (negalima PL/SQL spec. tipų kaip parametrai) Grąžinti duomenų tipus, kurie yra galiojantys SQL duomenų tipai (ne PL/SQL spec. tipai) Apribojimai: SQL-e kviečiamos PL/SQL f-jos parametrai turi būti perduoti poziciniu būdu. D.b. PL/SQL f-jos negali būti kviečiamos CHECK constraint sakinyje CREATE ar ALTER TABLE komandose. Taip pat f-jos begali būti naudojamos stulpelio DEFAULT reikšmės aprašymui. Reikia turėti EXECUTE privilegiją, kad iškviesti f-ją SQL sakinyje. F-jos grąžinami duomenų tipai, turi galioti SQL-e (negali būti PL/SQL tipai BOOLEAN, RECORD ar TABLE). Tie patys apribojimai taikomi ir f-jos parametrams. Pastaba: tik d.b. f-jos g.b. Naudojamos SQL sakiniuose. SQL-e negalima naudoti procedūrų. F-jos, kurios g.b. Naudojamos SQL išraiškose negali turėti OUT ir IN OUT parametrų. Kt. F-jos gali turėti tokio tipo parametrus, tačiau tai nerekomenduojama.

17 Apribojimai kviečiant f-jas iš SQL išraiškų
Apribojimai kviečiant f-jas iš SQL išraiškų Kad funkcija galėtų būti kviečiama iš SQL sakinių, ji turi atitikti tam tikrus reikalavimus: F-jose kviečiamose iš SQL išraiškų negali būti DML sakinių Kai funkcija yra kviečiama sakinyje SELECT ar paraleliniuose (parallelized) sakiniuose INSERT, UPDATE, DELETE – funkcija negali keisti duomenų bazės lentelių Kai funkcija yra kviečiama sakiniuose INSERT, UPDATE, DELETE funkcija negali vykdyti užklausų ar keisti duomenų bazės lentelių Kai funkcija yra kviečiama sakiniuose SELECT, INSERT, UPDATE ar DELETE funkcija negali vykdyti SQL transakcijos valdymo sakinių (COMMIT) , darbo (session) valdymo sakinių (SET ROLE) ar sistemos valdymo sakinių (ALTER SYSTEM). Taip pat tokios funkcijos negali vykdyti DLL vykdymo sakinių (CREATE), nes juose automatiškai naudojamas COMMIT sakinys Kad būtų galima įvykdyti SQL sakinį su d.b. F-ja, Oracle serveris turi žinoti, kad f-ja nesukels jokių pašalinių efektų. Pašaliniai efektai tai nepriimti pasikeitimai d.b. lentelėse. Todėl reikia laikytis apribojimų, naudojant f-jas SQL išraiškose. Apribojimai: F-jose kviečiamose iš SQL išraiškų negali būti DML sakinių. F-jos kviečiamos UPDATE ar DELETE sakiniuose ant lentos T, negali vykdyti užklausos ant lentos T. F-jose kviečiamose SQL išraiškose negali būti sakinių, kurie baigia tranzakcijas. Papgrogramių kvietimas f-jose, kurios pažeidžia aukščiau išvardintus apribojimus neleistinas. Jeigu nors vienas sakinys funkcijos viduje pažeidžia kuria nors taisyklę – automatiškai vykdymo metu gaunama klaida.

18 Apribojimai kviečiant f-jas iš SQL išraiškų
Apribojimai kviečiant f-jas iš SQL išraiškų CREATE OR REPLACE FUNCTION dml_call_sql (p_sal NUMBER) RETURN NUMBER IS BEGIN INSERT INTO employees (employee_id, last_name, , hire_date, job_id, salary) VALUES (1, ‘employee 1’, SYSDATE, ‘SA_MAN’, 1000); RETURN (p_sal+100); END; / UPDATE employees SET salary =dml_call_sql(2000) WHERE employee_id=170; UPDATE employees SET salary=dml_call_sql(2000) ERROR at line 1 ORA table PL/SQL EMPLOYEES is mutating tiger/function may not see it ORA at “PL/SQL DML_CALL_SQL” line 4 Pavyzdyje sukuriama f-ja, kurioje atliekami DML sakiniai. T.y. f-ja DML_CALL_SQL įterpia naują įrašą į EMPLOYEES lentą. Ši f-ja kviečiama UPDATE sakinyje, kuris keičia lauką SALARY kur employee_id=170 pagal f-jos suskaičiuotą reikšmę. UPDATE sakinys grąžina klaidą, kurioje sakoma,kad lentelė mutuoja. Kt. pvz. F-ja QUERY_CALL_SQL išrenka SALARY stulpelį iš EMPLOYEES lentelės: CREATE OR REPLACE FUNCTION query_call_sql (a NUMBER) RETURN NUMBER IS s NUMBER; BEGIN SELECT salary INTO s FROM employees WHERE employee_id=170; RETURN(s+a); END; / Viršuje aprašyta f-ja, kviečiama iš UPDATE sakinio: UPDATE employees SET salary=query_call_sql(100) WHERE employee_id=170; Sukels tokią pačią klaidą kaip skaidrėje.

19 Funkcijos šalinimas Sintaksė: DROP FUNCTION function_name;
Funkcijos šalinimas Sintaksė: DROP FUNCTION function_name; Pavyzdys: DROP FUNCTION sal_ok; Visos privilegijos ant f-jos po jos pašalinimo yra atimamos CREATE or REPLACE sintaksė yra analogiška DROP ir CREATE, tačiau ją naudojant nedingsta privilegijos ant f-jos Rollback neturi įtakos DDL komandai DROP PROCEDURE.

20 RETURN sakinio naudojimas
RETURN sakinio naudojimas RETURN sakinys pabaigia funkcijos darbą ir valdymą perduoda iškvietėjui. Paprogramė gali turėti daugiau nei viena RETURN sakinį, o paskutinis jos sakinys nebūtinai turi būti RETURN sakinys. Priėjus bet kurį paprogramėje esantį RETURN sakinį jos darbas nutraukiamas. Didelis išėjimų iš paprogramės (RETURN sakinių) skaičius nėra gerai. RETURN sakinys privalo turėti skaitinę išraišką, kuri yra apskaičiuojama, kai vykdomas pats RETURN sakinys. Gražinamoji reikšmė yra priskiriama funkcijos vardui, ir vėliau gali būti naudojama kaip kintamasis raktiniu žodžiu RETURN nurodyto tipo. Reikia nemaišyti RETURN sakinio su raktiniu žodžiu RETURN, kuris tik aprašo gražinamos reikšmės tipą.

21 Skirtumai nuo procedūrų
Skirtumai nuo procedūrų Priešingai nei procedūrose, funkcijose RETURN sakinys privalo turėti skaitinę išraišką PROCEDURE IN parameter OUT parameter IN OUT parameter (DECLARE) ... BEGIN EXCEPTION END; FUNCTION IN parameter (DECLARE) ... BEGIN EXCEPTION END; Kviečianti aplinka Kviečianti aplinka Procedūra kuriama veiksmų grupės saugojimui,kuriuos bus galima vėliau daug panaudoti. Procedūra gali turėti nulį ar daugiau parametrų, kurie gaunami iš kviečiančios aplinkos ir perduodami atgal kviečiančiai aplinkai. Bet procedūra neturi grąžinti reikšmės. F-ja kuriama reikšmės apskaičiavimui, kurią reikia grąžinti kviečiančiai aplinkai. F-ja gali turėti nulį ar daugiau parametrų, kurie gaunami iš kviečiančios aplinkos. F-ja turi grąžinti vieną ir tik vieną reikšmę per RETURN sakinį. F-ja naudojama SQL sakiniuose negali turėti OUT ir IN OUT parametrų.

22 Procedūrų ir funkcijų palyginimas
Procedūrų ir funkcijų palyginimas Procedūros Vykdo PL/SQL sakinį Neturi RETURN sakinio Gali grąžinti nė vienos, vieną arba keletą reikšmių Gali turėti RETURN sakinį Funkcijos Iškviečiamos, kaip išraiškos dalis Privalo turėti RETURN sakinį antraštėje Turi grąžinti vienintelę reikšmę Turi turėti bent vieną RETURN sakinį Procedūra su vienu OUT parametru g.b. Perrašyta į f-ją su RETURN sakiniu.

23 DB saugomų procedūrų ir funkcijų privalumai
Geresnis vykdymas Išvengiama pakartotino nagrinėjimo, kai vartotojai naudoja shared SQL area Išvengiama pakartotino PL/SQL nagrinėjimo vykdymo metu, atliekant tai kompiliacijos metu Sumažinamas kreipinių į d.b. skaičius ir sumažinamas tinklo apkrovimas sugrupavus komandas Lengvesnis palaikymas Programos keičiamos online, neįtakoja kt. vartotojų darbo Pakeitimas 1 programoje pakeičia daugelį aplikacijų Pakeitimas 1 programoje eliminuoja daugkartinį testavimą Geresnis duomenų saugumas ir vientisumas Kontroliuojamas neprivilegijuotų vartotojų netiesioginis priėjimas prie d.b. objektų Užtikrinama, kad susiję veiksmai bus atliekami kartu, arba nebus atliekami išvis Aiškesnis kodas: naudojant atitinkamus žymėjimus, kurie aprašo programos veiksmus, sumažinamas komentarų kiekis ir kodas yra lengviau skaitomas

24 PL/SQL paprogramių paketavimas
PL/SQL paprogramių paketavimas Logiškai susijusias paprogrames galima sugrupuoti į paketą, kuris bus įrašytas į duomenų bazę Tokiu būdu paprogramėmis galės naudotis daug aplikacijų Paprogramės specifikacija rašoma paketo specifikacijoj Paprogramės kūnas – paketo kūne, kur jie yra nematomi aplikacijoms Taigi paketai leidžia paslėpti įgyvendinimo detales Pavyzdžiui: CREATE PACKAGE emp_actions AS -- package spec PROCEDURE hire_employee (emp_id INTEGER, name VARCHAR2, ...); PROCEDURE fire_employee (emp_id INTEGER); PROCEDURE raise_salary (emp_id INTEGER, amount REAL); ... END emp_actions; CREATE PACKAGE BODY emp_actions AS -- package body PROCEDURE hire_employee (emp_id INTEGER, name VARCHAR2, ...) IS BEGIN INSERT INTO emp VALUES (emp_id, name, ...); END hire_employee; PROCEDURE fire_employee (emp_id INTEGER) IS DELETE FROM emp WHERE empno = emp_id; END fire_employee; PROCEDURE raise_salary (emp_id INTEGER, amount REAL) IS UPDATE emp SET sal = sal + amount WHERE empno = emp_id; END raise_salary; Galima apibrėžti paprogrames paketo kūne nedeklaruojant jų specifikacijų paketo specifikacijoj. Tačiau tokios paprogramės gali būti iškviestos tik iš paketo vidaus.

25 Paprogramių vardų perkrovimas
PL/SQL leidžia perkrauti paprogrames ir tipų metodus. T.y. galima naudoti tą patį vardą kelioms skirtingoms paprogramėms, jei skiriasi jų formalių parametrų kiekis, tvarka, arba duomenų tipas Perkrautas funkcijas galima įrašyti į tą patį bloką, paprogramę ar paketą Patikrinant formalius parametrus, PL/SQL nustato, kuri iš tų funkcijų yra kviečiama

26 Perkrovimo apribojimai
Tik lokalios arba paketuose paprogramės gali būti perkrautos. Negalima perkrauti: standalone paprogramių paprogramių, kurios skiriasi tik formalių parametrų vardais arba jų būsenom dviejų paprogramių jeigu jų formalūs parametrai skiriasi tik duomenų tipais, kurie yra tos pačios duomenų tipų šeimos dviejų paprogramių jeigu jų formalūs parametrai skiriasi tik potipiais, kurie yra paremti tipais iš tos pačios šeimos dviejų funkcijų, kurios skiriasi tik grąžinamos reikšmės tipu, net jeigu tipai yra iš skirtingų šeimų

27 Santrauka Sužinojome, kad funkcija:
Santrauka Sužinojome, kad funkcija: vardą turintis PL/SQL blokas, kuris turi grąžinti reikšmę kuriama su CREATE FUNCTION komanda iškviečiama kaip išraiškos dalis saugoma d.b. gali būti kviečiama SQL sakiniuose g.b. šalinama iš DB su DROP FUNCTION komanda Dažniausiai procedūra naudojama veiksmams atlikti f-ja naudojama reikšmei suskaičiuoti


Download ppt "Funkcijos 9 paskaita."

Similar presentations


Ads by Google