Procedure (Thủ tục)

Một phần của tài liệu Tìm hiểu về Oracle và hướng dẫn thuật toán (Trang 44)

II. Ngôn ngữ SQL

3. Procedure (Thủ tục)

Thủ tục là một nhóm các lệnh thực hiện các chức năng nào đó được gom lại trong một khối nhằm làm tăng khả năng xử lý, khả năng sử dụng chung, tăng tính bảo mật và an toàn dữ liệu và tăng tiện ích trong phát triển.

Thủ tục có thể được lưu giữ ngay trong CSDL như một đối tượng của CSDL, sẵn sàng cho việc tái sử dụng. Thủ tục còn được gọi là Stored Procedure. Với các Stored Procedure, ngay khi tạo chúng đã được biên dịch thành dạng p-code vì thế có thể nâng cao khả năng thực hiện.

Tạo Procedure

CREATE [OR REPLACE] PROCEDURE tên_thủ_tục [ (tham_số_1 [IN | OUT | IN OUT] kiểu_dl

[, tham_số_2> [IN | OUT | IN OUT] kiểu_dl [DEFAULT trị_mặc_định])] IS

[tên_biến kiểu_dl> [NULL | NOT NULL] [DEFAULT trị_mặc_định];] BEGIN

[chuỗi_lệnh] -- Đây là khối PL/SQL trong chương trình [ EXCEPTION -- Phần xử lý ngoại lệ

WHEN tên_ngoại_lệ THEN khối_lệnh ]

END;

Các tùy chọn IN, OUT, và IN OUT chỉ định cách mà tham số sẽ được sử dụng:

- Chế độ mặc định là IN. Có nghĩa là tham số có thể tham chiếu trong thân thủ tục

nhưng không được phép thay đổi.

- OUT: Có thể gán giá trị cho tham số này trong thân thủ tục nhưng giá trị của nó

không được phép tham chiếu đến (thường dùng cho kết quả trả về).

- IN OUT: Cho phép cả 2 chế độ trên.

Gọi Stored Procedure:

Cú pháp gọi chương trình con trong PL/SQL. Nếu chương trình con bị gọi cùng schema với chương trình gọi thì có thể lược bỏ tên_schema. Trong trường hợp gọi chương trình con toàn cục thì cũng không cần tên_schema.

45

Nếu gọi thủ tục trong khối lệnh PL/SQL thì cú pháp là:

Tên_schema.tên_thủ_tục tham_số_1, tham_số_2…)]

Nếu gọi thủ tục ngoài khối lệnh PL/SQL thì cú pháp là: EXECUTE Tên_schema.tên_thủ_tục [(tham_số_1, tham_số_2…)]

Ví dụ: Sử dụng quan hệ EMPLOYEE sau:

Có cơ sở dữ liệu sau:

Lấy thông tin tất cả EMPLOYEE

Tạo procedure:

CREATE OR REPLACE PROCEDURE getAllEmployee(c_emp out SYS_REFCURSOR)

IS BEGIN

OPEN c_emp FOR

SELECT * FROM employee; END getAllEmployee;

46  Thực thi Stored: DECLARE C_EMP SYS_REFCURSOR; r_emp Employee%rowtype; BEGIN GETALLEMPLOYEE(C_EMP); LOOP

C_EMP INTO r_emp;

EXIT WHEN c_emp%NOTFOUND;

-- Modify the code to output the variable

DBMS_OUTPUT.PUT_LINE('fname: ' || r_emp.fname || ' salary:'

|| r_emp.salary); END LOOP;

47  Insert một employee mới vào:

- Viết Stored:

CREATE OR REPLACE PROCEDURE insertEmployee ( p_ssn IN NUMBER, p_fname IN VARCHAR2, p_minit IN CHAR, p_lname IN VARCHAR2, p_bday IN VARCHAR2, p_address IN VARCHAR2, p_sex IN VARCHAR2, p_salary IN VARCHAR2, p_supperssn IN NUMBER, p_dno IN NUMBER ) AS BEGIN

INSERT INTO employee

VALUES (p_ssn, p_fname, p_minit, p_lname, p_bday, p_address, p_sex, p_salary, p_supperssn, p_dno); COMMIT; END insertEmployee; - Gọi Stored: BEGIN insertemployee(12122434,'ABC', 'E','Nguyen','1972-07-31', 'HCMC','F',33333,333445555,5); END;

48

- Kết quả một dòng mới được thêm vào:

Update Employee:

- Viết stored:

CREATE OR REPLACE PROCEDURE updateEmployee ( p_ssn IN NUMBER, p_salary IN NUMBER ) AS BEGIN

UPDATE Employee SET salary = p_salary WHERE ssn = p_ssn; COMMIT; END updateEmployee; - Chạy stored: BEGIN updateemployee(12122434,55555); END;

49

- Kết quả:

Delete một employee

- Viết stored:

CREATE OR REPLACE PROCEDURE deleteEmployee(p_ssn IN NUMBER)

AS BEGIN

DELETE employee WHERE ssn = p_ssn; COMMIT; END deleteEmployee; Chạy stored: BEGIN deleteemployee(12122434); END; - Kết quả:

50  Xóa Procedure:

Cú pháp xóa thủ tục:

DROP PROCEDURE tên_thủ_tục

Ví dụ:

DROP PROCEDURE GETALLEMPLOYEE

Một phần của tài liệu Tìm hiểu về Oracle và hướng dẫn thuật toán (Trang 44)

Tải bản đầy đủ (PDF)

(73 trang)