1. Trang chủ
  2. » Công Nghệ Thông Tin

Quản trị cơ sở dữ liệu Oracle 03 PL SQL part1 VN

55 556 3

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 55
Dung lượng 353,23 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Các tính năng chính của PL/SQL• Khối lệnh PL/SQL • PL/SQL Input và Output • Biến và hằng số trong PL/SQL • Cấu trúc điều khiển trong PL/SQL • Quản lý lỗi trong PL/SQL • Trừu tượng dữ li

Trang 1

Procedural Language/Structured

Query Language (PL/SQL)

Trang 2

Ưu điểm của PL/SQL

• Tích hợp chặt chẽ với SQL.

• Hiệu suất cao.

• Bảo mật chặt chẽ.

Trang 4

Hiệu suất cao

• Với PL/SQL, một block chứa nhiều câu lệnh

có thể được gửi tới database cùng một lúc.

• Chương trình con PL/SQL được biên dịch một lần và lưu trữ ở dạng thực thi, do đó việc gọi chương trình con thì hiệu quả.

Trang 5

Bảo mật chặt chẽ

• Các chương trình con PL/SQL di chuyển code

từ client sang server -> bảo vệ nó khỏi sự can thiệp, ẩn các chi tiết bên trong, giới hạn người

có thể truy cập.

• Trigger viết bằng PL/SQL có thể kiểm soát

hoặc ghi nhận những thay đổi dữ liệu, đảm bảo rằng tất cả các thay đổi tuân theo quy tắc được định trước.

Trang 6

Các tính năng chính của PL/SQL

• Khối lệnh PL/SQL

• PL/SQL Input và Output

• Biến và hằng số trong PL/SQL

• Cấu trúc điều khiển trong PL/SQL

• Quản lý lỗi trong PL/SQL

• Trừu tượng dữ liệu PL/SQL (data abstraction)

• Chương trình con PL/SQL (Subprogram)

• PL/SQL Packages

Trang 7

Khối lệnh (block) PL/SQL

• Thành phần cơ bản của một chương trình

PL/SQL là block, block nhóm những khai báo

và những câu lệnh lại với nhau.

• Block trong PL/SQL được định nghĩa bởi các

từ khóa DECLARE, BEGIN, EXCEPTION,

và END.

• Block có thể lồng nhau.

Trang 8

PL/SQL Block

DECLARE Declarative part (optional)

BEGIN Executable part (required)

EXCEPTION Exception-handling part (optional)

END ;

Statements (which can use items declared in declarative part)

Declarations of local types, variables, & subprograms

Exception handlers for exceptions raised in executable part

Trang 9

Các tính năng chính của PL/SQL

• Khối lệnh PL/SQL

• PL/SQL Input và Output

• Biến và hằng số trong PL/SQL

• Cấu trúc điều khiển trong PL/SQL

• Quản lý lỗi trong PL/SQL

• Trừu tượng dữ liệu PL/SQL (data abstraction)

• Chương trình con PL/SQL (Subprogram)

• PL/SQL Packages

Trang 10

PL/SQL Input và Output

• Hầu hết các PL/SQL input và output (I/O)

thông qua câu lệnh SQL để lưu trữ dữ liệu

trong các table hoặc truy vấn dữ liệu từ table.

• PL/SQL I/O còn lại được thực hiện thông qua các API, chẳng hạn như PL/SQL package

• Để DBMS_OUTPUT hoạt động trên

SQL*Plus, trước tiên phải thực hiện lệnh SET SERVEROUTPUT ON.

Trang 12

Các tính năng chính của PL/SQL

• Khối lệnh PL/SQL

• PL/SQL Input và Output

• Biến và hằng số trong PL/SQL

• Cấu trúc điều khiển trong PL/SQL

• Quản lý lỗi trong PL/SQL

• Trừu tượng dữ liệu PL/SQL (data abstraction)

• Chương trình con PL/SQL (Subprogram)

• PL/SQL Packages

Trang 13

PL/SQL Biến (variable) và hằng (constant)

• Khai báo biến.

• Gán giá trị cho biến.

• Khai báo hằng số.

Trang 14

Khai báo biến trong PL/SQL

• Biến trong PL/SQL có thể là bất kỳ kiểu dữ liệu nào được sử dụng trong SQL (chẳng hạn char, date, number…) hoặc kiểu

dữ liệu chỉ có ở PL/SQL (chẳng hạn boolean, pls_integer).

DECLARE

part_number NUMBER(6); SQL data type part_name VARCHAR2(20); SQL data type in_stock BOOLEAN; PL/SQL-only data type part_price NUMBER(6,2); SQL data type part_description VARCHAR2(50); SQL data type

BEGIN

NULL;

END ;

Trang 15

Gán giá trị cho biến

• Để gán giá trị cho biến ta có thể sử dụng các cách sau:

– Sử dụng toán tử gán :=

– Bằng cách selecting (hoặc fetching) dữ liệu.

– Bằng cách truyền cho nó như là một đối số OUT hoặc IN OUT trong chương trình con

(subprogram), rồi sau đó gán giá trị trong

subprogram.

Trang 16

Gán giá trị cho biến

Trang 17

Khai báo hằng số trong PL/SQL

• Khai báo một hằng số trong PL/SQL giống

như khai báo biến ngoại trừ việc phải thêm từ khóa CONSTANT và ngay lập tức gán giá trị cho hằng số này.

– credit_limit CONSTANT NUMBER := 5000.00;

Trang 18

Các tính năng chính của PL/SQL

• Khối lệnh PL/SQL

• PL/SQL Input và Output

• Biến và hằng số trong PL/SQL

• Cấu trúc điều khiển trong PL/SQL

• Quản lý lỗi trong PL/SQL

• Trừu tượng dữ liệu PL/SQL (data abstraction)

• Chương trình con PL/SQL (Subprogram)

• PL/SQL Packages

Trang 19

Cấu trúc điều khiển trong PL/SQL

• Quản lý điều kiện (Conditional Control)

• Quản lý lặp (Iterative Control)

• Quản lý tuần tự (Sequential Control)

Trang 20

Quản lý điều kiện

IF sales > (quota + 200) THEN

bonus := (sales - quota)/4;

UPDATE employees SET salary = salary + bonus WHERE employee_id = emp_id;

END IF;

END;

Trang 21

IF sales > (quota + 200) THEN

bonus := (sales - quota)/4;

ELSE

bonus := 50;

END IF;

UPDATE employees SET salary = salary + bonus

WHERE employee_id = emp_id;

END;

Trang 22

Quản lý điều kiện IF-THEN-ELSE lồng nhau

IF sales > (quota + 200) THEN

bonus := (sales - quota)/4;

UPDATE employees SET salary = salary + bonus

WHERE employee_id = emp_id;

END;

Trang 23

Quản lý điều kiện

UPDATE employees SET salary = salary + bonus

WHERE employee_id = emp_id;

END;

Trang 24

Quản lý điều kiện Câu lệnh IF-THEN mở rộng

Trang 25

Quản lý điều kiện

WHEN 'D' THEN DBMS_OUTPUT.PUT_LINE('Fair');

WHEN 'F' THEN DBMS_OUTPUT.PUT_LINE('Poor');

ELSE DBMS_OUTPUT.PUT_LINE('No such grade');

END CASE;

END;

Trang 26

Quản lý điều kiện

Sử dụng Searched CASE Statement

WHEN grade='D' THEN DBMS_OUTPUT.PUT_LINE('Fair');

WHEN grade='F' THEN DBMS_OUTPUT.PUT_LINE('Poor');

ELSE DBMS_OUTPUT.PUT_LINE('No such grade');

END CASE;

END;

Trang 27

Quản lý điều kiện

• Sử dụng EXCEPTION thay vì mệnh đề ELSE trong CASE Statement

WHEN grade='D' THEN DBMS_OUTPUT.PUT_LINE('Fair');

WHEN grade='F' THEN DBMS_OUTPUT.PUT_LINE('Poor');

END CASE;

EXCEPTION

WHEN CASE_NOT_FOUND THEN

DBMS_OUTPUT.PUT_LINE('No such grade');

END;

Trang 28

Cấu trúc điều khiển trong PL/SQL

• Quản lý điều kiện (Conditional Control)

• Quản lý lặp (Iterative Control)

• Quản lý tuần tự (Sequential Control)

Trang 30

After EXIT, control resumes here

DBMS_OUTPUT.PUT_LINE (' After loop: x = ' || TO_CHAR(x));

END;

Trang 31

After EXIT, control resumes here

DBMS_OUTPUT.PUT_LINE (' After loop: x = ' || TO_CHAR(x));

END;

Trang 32

LOOP After CONTINUE statement, control resumes here

DBMS_OUTPUT.PUT_LINE ('Inside loop: x = ' || TO_CHAR(x));

Trang 33

LOOP After CONTINUE statement, control resumes here

DBMS_OUTPUT.PUT_LINE ('Inside loop: x = ' || TO_CHAR(x));

Trang 34

Quản lý lặp Gán nhãn trong PL/SQL Loop

s := s + i * j; Sum several products

EXIT inner_loop WHEN (j > 5);

EXIT outer_loop WHEN ((i * j) > 15);

END LOOP inner_loop ;

END LOOP outer_loop ;

DBMS_OUTPUT.PUT_LINE ('The sum of products equals: ' || TO_CHAR(s));

END;

Trang 36

END LOOP;

END;

Trang 38

Quản lý lặp Dynamic Ranges for Loop Bounds

FOR i IN 1 emp_count LOOP

INSERT INTO temp VALUES(i, 'to be added later');END LOOP;

END;

Trang 39

Cấu trúc điều khiển trong PL/SQL

• Quản lý điều kiện (Conditional Control)

• Quản lý lặp (Iterative Control)

• Quản lý tuần tự (Sequential Control)

Trang 41

SELECT job_id INTO v_job_id FROM employees

WHERE employee_id = v_emp_id;

IF v_job_id = 'SA_REP' THEN

UPDATE employeesSET commission_pct = commission_pct * 1.2 WHERE employee_id = v_emp_id;

ELSE

NULL; Employee is not a sales rep END IF;

END;

Trang 42

Các tính năng chính của PL/SQL

• Khối lệnh PL/SQL

• PL/SQL Input và Output

• Biến và hằng số trong PL/SQL

• Cấu trúc điều khiển trong PL/SQL

• Quản lý lỗi trong PL/SQL

• Trừu tượng dữ liệu PL/SQL (data abstraction)

• Chương trình con PL/SQL (Subprogram)

• PL/SQL Packages

Trang 43

Quản lý lỗi trong PL/SQL

• PL/SQL giúp cho việc phát hiện và xử lý lỗi được

dễ dàng và gọi là exceptions.

• Khi lỗi xảy ra, một exception hình thành và nó

dừng công việc hiện tại sau đó chuyển đến bộ

phận xử lý lỗi (exception handler).

• Một exception có thể được định nghĩa sẵn (bởi hệ thống) hoặc người dùng định nghĩa.

• Mỗi exception được xử lý bởi một exception

handler.

Trang 44

Quản lý lỗi trong PL/SQL

Exception được định nghĩa sẵn

Trang 45

Quản lý lỗi trong PL/SQL

Calculation might cause division-by-zero error

pe_ratio := stock_price / net_earnings;

DBMS_OUTPUT.PUT_LINE('Price/earnings ratio = ' || pe_ratio);

EXCEPTION exception handlers begin Only one of the WHEN blocks is executed.

WHEN ZERO_DIVIDE THEN handles 'division by zero' error

DBMS_OUTPUT.PUT_LINE('Company must have had zero earnings.');pe_ratio := NULL;

WHEN OTHERS THEN handles all other errors

DBMS_OUTPUT.PUT_LINE('Some other kind of error occurred.');pe_ratio := NULL;

END; exception handlers and block end here

Trang 46

Quản lý lỗi trong PL/SQL

• Ta có thể tránh exception bằng cách kiểm tra mẫu số trước

Trang 47

Quản lý lỗi trong PL/SQL

• Ta có thể tránh exception bằng cách kiểm tra mẫu số trước

END;

Trang 48

Quản lý lỗi trong PL/SQL

DECLARE

emp_column VARCHAR2(30) := 'last_name';

table_name VARCHAR2(30) := 'emp';

temp_var VARCHAR2(30);

BEGIN

temp_var := emp_column;

SELECT COLUMN_NAME INTO temp_var FROM USER_TAB_COLS

WHERE TABLE_NAME = 'EMPLOYEES‘

AND COLUMN_NAME = UPPER(emp_column);

processing here

temp_var := table_name;

SELECT OBJECT_NAME INTO temp_var FROM USER_OBJECTS

WHERE OBJECT_NAME = UPPER(table_name) AND OBJECT_TYPE = 'TABLE'; processing here

EXCEPTION

Catches all 'no data found' errors

WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE ('No Data found for SELECT on ' ||

temp_var);

END;

Trang 49

Quản lý lỗi trong PL/SQL

Trang 50

Exception lan truyền như thế nào?

Trang 53

Phạm vi của Exception

BEGIN

DECLARE - sub-block begins

past_due EXCEPTION;due_date DATE := trunc(SYSDATE) - 1;

todays_date DATE := trunc(SYSDATE);

Trang 54

DECLARE - sub-block begins

acct_num NUMBER;

due_date DATE := SYSDATE - 1;

todays_date DATE := SYSDATE;

BEGIN

IF due_date < todays_date THEN

END;

Trang 55

Lấy ra thông tin Error Code và Error Message

CREATE TABLE errors (

DBMS_OUTPUT.PUT_LINE ('Error code ' || v_code || ': ' || v_errm);

INSERT INTO errors VALUES (v_code, v_errm, SYSTIMESTAMP);

END;

Ngày đăng: 29/08/2017, 10:15

TỪ KHÓA LIÊN QUAN