210 likes | 437 Views
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ų
E N D
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 • INTOdalės naudojimas SQL komandoje varčių išsaugojimui • Skirtumai tarp uždarų ir atvirų kursorių • Kursoriaus atributų naudojimas
SQL Sakiniai PL/SQL-e • Vienos eilutės atrinkimas iš DB naudojant SELECTkomandą. • Duomenų eilučių redagavimas vykdomas DML komandomis. • Transakcijų valdymas vykdomas COMMIT, ROLLBACK ir SAVEPOINTkomandomis.
SELECTSakiniai PL/SQL-e • Duomenų atrinkimas iš duomenų bazės vykdomas SELECTsakinių pagalba. • Syntax: SELECT select_list INTO {variable_name[, variable_name]... | record_name} FROM table [WHERE condition];
SELECTSakiniai PL/SQL-e • INTOdalis privaloma. • Užklausa privalo grąžinti tik vieną eilutę. SET SERVER OUTPUT ON DECLARE 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; /
PL/SQL Duomenų atrinkimas: Pavyzdys • Grąžinome hire_dateir salarynurodytam 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; /
PL/SQL Duomenų atrinkimas • Visų darbuotojų atliginimų sumos iš tam tikro padalinio paskaičiavimas. 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;
DECLARE 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; / Vardinimo susitarimai
Vardinimo susitarimai • Norint išvengti dviprasmybių WHEREdalyje 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.
INSERT MERGE UPDATE Duomenų manipuliavimas PL/SQL-e • Pakeitimai į duomenų bazę įnešami DML komandomis: • INSERT • UPDATE • DELETE • MERGE DELETE
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; /
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; / . . .
Duomenų trynimas: Pavyzdys • Informacija apie 10 skyrio darbuotojus trynimas iš employeeslentelės. DECLARE deptno employees.department_id%TYPE := 10; BEGIN DELETE FROM employees WHERE department_id = deptno; END; /
Eilučių sujungimas • Eilučių įterpimas ar pakeitimas lentelėje copy_emplentelės employeespagrindų. BEGIN MERGE 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; /
SQL Kursorius • Kursorius tai rodykle į Oracle serverio rezervuoto atminties vieta naudojama SELECTsakinių 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
Uždaro SQL kursoriaus atributai • Naudojant SQL kursoriaus atributus, galima patikrinti SQL sakinių rezultatus.
Uždaro SQL kursoriaus atributai • Eilučių trynimas iš employeeslentelės pagal vartotojo 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;
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
Klausimas • Naudojant PL/SQL SELECTsakinį INTOdalis privaloma, o užklausa gali grąžinti vieną arba daugiau eilučių. • True • False
Santrauka • Sužinojome : • Kaip naudojami PL/SQL bloke DML, DDLir transakcijos valdymo sakinių. • ApieINTOdalės būtinumą PL/SQL SELECTsakinyje. • Skirtumus tarp uždaro ir atviro kursorių • SQL kursoriaus atributų naudojimą, norint patikrinti SQL sakinių rezultatus
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