sąveika su oracle duomenų bazė
DESCRIPTION
Sąveika su Oracle Duomenų bazė. Paskaita 4. Temos. Kokie SQL sakiniai galimi vykdomajame PL/SQL bloke DML sakiniai PL/SQL -e Transakcijos valdymo sakiniai PL/SQL -e INTO dalės naudojimas SQL komandoje varčių išsaugojimui Skirtumai tarp uždarų ir atvirų kursorių - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Sąveika su Oracle Duomenų bazė](https://reader035.vdocuments.site/reader035/viewer/2022081418/5681316e550346895d97e93b/html5/thumbnails/1.jpg)
Sąveika su Oracle Duomenų bazė
Paskaita 4
![Page 2: Sąveika su Oracle Duomenų bazė](https://reader035.vdocuments.site/reader035/viewer/2022081418/5681316e550346895d97e93b/html5/thumbnails/2.jpg)
Temos
• Kokie SQL sakiniai galimi vykdomajame PL/SQL bloke
• DML sakiniai PL/SQL-e• Transakcijos valdymo sakiniai PL/SQL-e• INTO dalės naudojimas SQL komandoje varčių
išsaugojimui• Skirtumai tarp uždarų ir atvirų kursorių• Kursoriaus atributų naudojimas
![Page 3: Sąveika su Oracle Duomenų bazė](https://reader035.vdocuments.site/reader035/viewer/2022081418/5681316e550346895d97e93b/html5/thumbnails/3.jpg)
SQL Sakiniai PL/SQL-e
• Vienos eilutės atrinkimas iš DB naudojant SELECT komandą.
• Duomenų eilučių redagavimas vykdomas DML komandomis.
• Transakcijų valdymas vykdomas COMMIT, ROLLBACK ir SAVEPOINT komandomis.
![Page 4: Sąveika su Oracle Duomenų bazė](https://reader035.vdocuments.site/reader035/viewer/2022081418/5681316e550346895d97e93b/html5/thumbnails/4.jpg)
SELECT Sakiniai PL/SQL-e• Duomenų atrinkimas iš duomenų bazės vykdomas SELECT sakinių pagalba.
• Syntax:
SELECT select_listINTO {variable_name[, variable_name]...
| record_name} FROM table[WHERE condition];
![Page 5: Sąveika su Oracle Duomenų bazė](https://reader035.vdocuments.site/reader035/viewer/2022081418/5681316e550346895d97e93b/html5/thumbnails/5.jpg)
SELECT Sakiniai PL/SQL-e• INTO dalis privaloma.• Užklausa privalo grąžinti tik vieną eilutę.
SET SERVER OUTPUT ONDECLARE v_fname VARCHAR2(25);BEGIN SELECT first_name INTO v_fname FROM employees WHERE employee_id=200; DBMS_OUTPUT.PUT_LINE(' First Name is : '||v_fname);END;/
![Page 6: Sąveika su Oracle Duomenų bazė](https://reader035.vdocuments.site/reader035/viewer/2022081418/5681316e550346895d97e93b/html5/thumbnails/6.jpg)
PL/SQL Duomenų atrinkimas: Pavyzdys• Grąžinome hire_date ir salary nurodytam darbuotojui.
DECLARE v_emp_hiredate employees.hire_date%TYPE; v_emp_salary employees.salary%TYPE; BEGIN SELECT hire_date, salary INTO v_emp_hiredate, v_emp_salary FROM employees WHERE employee_id = 100; END;/
![Page 7: Sąveika su Oracle Duomenų bazė](https://reader035.vdocuments.site/reader035/viewer/2022081418/5681316e550346895d97e93b/html5/thumbnails/7.jpg)
• Visų darbuotojų atliginimų sumos iš tam tikro padalinio paskaičiavimas.
PL/SQL Duomenų atrinkimas
DECLARE v_sum_sal NUMBER(10,2); v_deptno NUMBER NOT NULL := 60; BEGIN SELECT SUM(salary) -- grupinė funkcija INTO v_sum_sal FROM employees WHERE department_id = v_deptno; DBMS_OUTPUT.PUT_LINE ('The sum of salary is ' || v_sum_sal);END;
![Page 8: Sąveika su Oracle Duomenų bazė](https://reader035.vdocuments.site/reader035/viewer/2022081418/5681316e550346895d97e93b/html5/thumbnails/8.jpg)
Vardinimo susitarimaiDECLARE hire_date employees.hire_date%TYPE; sysdate hire_date%TYPE; employee_id employees.employee_id%TYPE := 176; BEGIN SELECT hire_date, sysdate INTO hire_date, sysdate FROM employees WHERE employee_id = employee_id; END;/
![Page 9: Sąveika su Oracle Duomenų bazė](https://reader035.vdocuments.site/reader035/viewer/2022081418/5681316e550346895d97e93b/html5/thumbnails/9.jpg)
Vardinimo susitarimai
• Norint išvengti dviprasmybių WHERE dalyje nuduokite vardinimo susitarimus.
• Venkite duomenų lentelių stulpelių vardais vadinti savo kintamuosius.
• Sintaksinės klaidos galimos dėl to, kad PL/SQL visų pirmą tikrina lentelės stulpelio vardą.
• Lokalinių kintamųjų ir formalių parametrų vardai turi prioritetą prieš duomenų bazės lentelės vardą.
• Stulpelių vardai turi prioritetą prieš lokalinių kintamųjų vardus.
![Page 10: Sąveika su Oracle Duomenų bazė](https://reader035.vdocuments.site/reader035/viewer/2022081418/5681316e550346895d97e93b/html5/thumbnails/10.jpg)
Duomenų manipuliavimas PL/SQL-e• Pakeitimai į duomenų bazę įnešami DML komandomis:
• INSERT• UPDATE• DELETE• MERGE
DELETE
INSERT
UPDATE MERGE
![Page 11: Sąveika su Oracle Duomenų bazė](https://reader035.vdocuments.site/reader035/viewer/2022081418/5681316e550346895d97e93b/html5/thumbnails/11.jpg)
Naujų įrašų įterpimas: Pavyzdys• Informacija apie naują darbuotoją įterpimas į
lentelę EMPLOYEES.BEGIN INSERT INTO employees (employee_id, first_name, last_name, email, hire_date, job_id, salary) VALUES(employees_seq.NEXTVAL, 'Ruth', 'Cores', 'RCORES',CURRENT_DATE, 'AD_ASST', 4000);END;/
![Page 12: Sąveika su Oracle Duomenų bazė](https://reader035.vdocuments.site/reader035/viewer/2022081418/5681316e550346895d97e93b/html5/thumbnails/12.jpg)
Duomenų pakeitimas: Pavyzdys• Visų darbuotojų kurie priklauso tam tikrai grupėj atliginimo padidinimas.
DECLARE sal_increase employees.salary%TYPE := 800; BEGIN UPDATE employees SET salary = salary + sal_increase WHERE job_id = 'ST_CLERK';END;/
. . .
![Page 13: Sąveika su Oracle Duomenų bazė](https://reader035.vdocuments.site/reader035/viewer/2022081418/5681316e550346895d97e93b/html5/thumbnails/13.jpg)
Duomenų trynimas: Pavyzdys
• Informacija apie 10 skyrio darbuotojus trynimas iš employees lentelės.
DECLARE deptno employees.department_id%TYPE := 10; BEGIN DELETE FROM employees WHERE department_id = deptno;END;/
![Page 14: Sąveika su Oracle Duomenų bazė](https://reader035.vdocuments.site/reader035/viewer/2022081418/5681316e550346895d97e93b/html5/thumbnails/14.jpg)
Eilučių sujungimas
• Eilučių įterpimas ar pakeitimas lentelėje copy_emp lentelės employees pagrindų.
BEGINMERGE INTO copy_emp c USING employees e ON (e.employee_id = c.empno) WHEN MATCHED THEN UPDATE SET c.first_name = e.first_name, c.last_name = e.last_name, c.email = e.email, . . . WHEN NOT MATCHED THEN INSERT VALUES(e.employee_id, e.first_name, e.last_name, . . .,e.department_id);END;/
![Page 15: Sąveika su Oracle Duomenų bazė](https://reader035.vdocuments.site/reader035/viewer/2022081418/5681316e550346895d97e93b/html5/thumbnails/15.jpg)
SQL Kursorius
• Kursorius tai rodykle į Oracle serverio rezervuoto atminties vieta naudojama SELECT sakinių rezultatams saugoti.
• Kursorių tipai.• Uždaras arba vidinis (Implicit): Kuriamas ir tvarkomas
interaktyviai Oracle serverio SQL sakiniams aptarnauti.• Atviras arba išorinis Explicit: Programuotojo deklaruojamas
Implicit cursor Explicit cursor
![Page 16: Sąveika su Oracle Duomenų bazė](https://reader035.vdocuments.site/reader035/viewer/2022081418/5681316e550346895d97e93b/html5/thumbnails/16.jpg)
Uždaro SQL kursoriaus atributai• Naudojant SQL kursoriaus atributus, galima patikrinti SQL sakinių
rezultatus.
SQL%FOUND BOOLEAN atributas, kuris įgyja reikšmę TRUE , jei paskutinis SQL sakinys paveikia viena ar kelias eilutes
SQL%NOTFOUND BOOLEAN atributas, kuris įgyja reikšmę TRUE , jei paskutinis SQL sakinys ne paveikia nei vienos eilutės
SQL%ROWCOUNT eilučių skaičius paveiktas paskutinio SQL sakinio (sveika reikšmė)
![Page 17: Sąveika su Oracle Duomenų bazė](https://reader035.vdocuments.site/reader035/viewer/2022081418/5681316e550346895d97e93b/html5/thumbnails/17.jpg)
Uždaro SQL kursoriaus atributai• Eilučių trynimas iš employees lentelės pagalvartotojo ID. Ištrintų eilučių skaičiaus atspausdinimas.
DECLARE v_rows_deleted VARCHAR2(30) v_empno employees.employee_id%TYPE := 176;BEGIN DELETE FROM employees WHERE employee_id = v_empno; v_rows_deleted := (SQL%ROWCOUNT || ' row deleted.'); DBMS_OUTPUT.PUT_LINE (v_rows_deleted);
END;
![Page 18: Sąveika su Oracle Duomenų bazė](https://reader035.vdocuments.site/reader035/viewer/2022081418/5681316e550346895d97e93b/html5/thumbnails/18.jpg)
Transakcijos valdymo sakiniai
• Pradėti transakciją su pirma DML komanda iki COMMIT ar ROLLBACK
• Naudoti COMMIT ir ROLLBACK SQL sakiniuose transakcijos išoriniam (explicit) užbaigimui
![Page 19: Sąveika su Oracle Duomenų bazė](https://reader035.vdocuments.site/reader035/viewer/2022081418/5681316e550346895d97e93b/html5/thumbnails/19.jpg)
Klausimas
• Naudojant PL/SQL SELECT sakinį INTO dalis privaloma, o užklausa gali grąžinti vieną arba daugiau eilučių.
1. True
2. False
![Page 20: Sąveika su Oracle Duomenų bazė](https://reader035.vdocuments.site/reader035/viewer/2022081418/5681316e550346895d97e93b/html5/thumbnails/20.jpg)
Santrauka
• Sužinojome : • Kaip naudojami PL/SQL bloke DML, DDL ir
transakcijos valdymo sakinių.• Apie INTO dalės būtinumą PL/SQL SELECT sakinyje.• Skirtumus tarp uždaro ir atviro kursorių• SQL kursoriaus atributų naudojimą, norint patikrinti
SQL sakinių rezultatus
![Page 21: Sąveika su Oracle Duomenų bazė](https://reader035.vdocuments.site/reader035/viewer/2022081418/5681316e550346895d97e93b/html5/thumbnails/21.jpg)
Praktika 4:
• This practice covers the following topics:• Selecting data from a table• Inserting data into a table• Updating data in a table• Deleting a record from a table