Nguyễn Thị Hải Bình Cấu trúc PL/SQL • Ngôn ngữ PL/SQL tổ chức các lệnh theo từng khối lệnh.. Nguyễn Thị Hải Bình Ví dụ 4 Ghi chú: Để câu lệnh DBMS_OUTPUT.PUTLINE hoạt động, thêm dòng lện
Trang 1NGÔN NGỮ THỦ TỤC
PL/SQL
Trang 2Công nghệ Oracle
GV Nguyễn Thị Hải Bình
PL/SQL là gì?
• Procedural Language extensions to SQL (PLSQL)
• Kết hợp giữa SQL và các cấu trúc điều khiển, các thủtục (procedure), hàm (function), con trỏ (cursor), ngoại
lệ (exception) và các lệnh giao tác (transaction)
2
Trang 3Công nghệ Oracle
GV Nguyễn Thị Hải Bình
Cấu trúc PL/SQL
• Ngôn ngữ PL/SQL tổ chức các lệnh theo từng khối lệnh
• Mỗi lệnh PL/SQL phải kết thúc bằng dấu ;
• Mỗi khối lệnh PL/SQL có thể chứa các khối lệnh con
• Khối lệnh bắt đầu bằng BEGIN và kết thúc bằng END
• Ghi chú: nếu thực thi khối lệnh PL/SQL trên sqlPlus thì phải thêm ký tự / sau
lệnh END
3
Trang 4Công nghệ Oracle
GV Nguyễn Thị Hải Bình
Ví dụ
4
Ghi chú: Để câu lệnh DBMS_OUTPUT.PUTLINE hoạt động, thêm
dòng lệnh SET SERVEROUTPUT ON; vào trước PL/SQL block
Trang 5Công nghệ Oracle
GV Nguyễn Thị Hải Bình
Một số ký hiệu (Delimiter)
5
Trang 6Công nghệ Oracle
GV Nguyễn Thị Hải Bình
Một số ký hiệu
6
Trang 7Công nghệ Oracle
GV Nguyễn Thị Hải Bình
Một số ký hiệu
7
Trang 8• The identifiers consist of a letter optionally followed bymore letters, numerals, dollar signs ($), underscores(_), and number signs (#) and should not exceed 30characters.
• Identifiers are not case-sensitive
8
Trang 11Công nghệ Oracle
GV Nguyễn Thị Hải Bình
Kiểu dữ liệu
11
Trang 12Công nghệ Oracle
GV Nguyễn Thị Hải Bình
Scalar Data Types and Subtypes
12
Trang 13Công nghệ Oracle
GV Nguyễn Thị Hải Bình
Numeric Data Types and Subtypes
13
Data type Description
NUMERIC(n, m) Floating type with maximum precision
of 38 decimal digitsNUMBER(n, m) Fixed-point or floating-point number
with absolute value in range 1E-130 to 1.0E126
FLOAT
REAL
INTEGER
Trang 14Công nghệ Oracle
GV Nguyễn Thị Hải Bình
Character Data Types and Subtypes
14
Data type Description
CHAR Fixed-length character string with
maximum size of 32,767 bytesVARCHAR2 Variable-length character string with
maximum size of 32,767 bytes
Trang 15Công nghệ Oracle
GV Nguyễn Thị Hải Bình
Boolean Data Types
• The BOOLEAN data type stores logical values that are used in logical operations.
• The logical values are the Boolean values TRUE and FALSE and the value NULL.
• SQL has no data type equivalent to BOOLEAN Therefore, Boolean values cannot be used in:
• SQL statements
• Built-in SQL functions (such as TO_CHAR)
• PL/SQL functions invoked from SQL statements
15
Trang 16Công nghệ Oracle
GV Nguyễn Thị Hải Bình
Datetime and Interval Types
16
Trang 17Công nghệ Oracle
GV Nguyễn Thị Hải Bình
Large Object (LOB) Data Types
17
Trang 21Công nghệ Oracle
GV Nguyễn Thị Hải Bình
Phạm vi tác dụng của biến
Biến cục bộ (Local variable)
• Được định nghĩa trong một khối lệnh con và không thểtruy cập được từ khối lệnh ngoài
Biến toàn cục (Global variable)
• Được định nghĩa ở khối lệnh ngoài cùng của chươngtrình hoặc trong package
21
Trang 22Công nghệ Oracle
GV Nguyễn Thị Hải Bình
Phạm vi tác dụng của biến
22
Trang 23Công nghệ Oracle
GV Nguyễn Thị Hải Bình
Phạm vi tác dụng của biến
23
Trang 2626
Trang 28Công nghệ Oracle
GV Nguyễn Thị Hải Bình
%ROWTYPE
• %ROWTYPE cho phép khai báo một biến kiểu bản ghi
có cùng cấu trúc với một dòng dữ liệu trong một bảngCSDL hoặc cùng cấu trúc với một dòng dữ liệu trả về từmột biến con trỏ (cursor)
28
Trang 29Công nghệ Oracle
GV Nguyễn Thị Hải Bình
%ROWTYPE – Ví dụ
29
Trang 30Công nghệ Oracle
GV Nguyễn Thị Hải Bình
Kiểu dữ liệu Record
• Kiểu dữ liệu do người dùng định nghĩa
30
Trang 31Công nghệ Oracle
GV Nguyễn Thị Hải Bình
Kiểu dữ liệu RECORD
• Kiểu dữ liệu do người dùng định nghĩa
31
Trang 34Công nghệ Oracle
GV Nguyễn Thị Hải Bình
Thứ tự ưu tiên của các phép toán
34
Trang 35Công nghệ Oracle
GV Nguyễn Thị Hải Bình
Ví dụ: tính chu vi, diện tích hình tròn
35
Trang 36Công nghệ Oracle
GV Nguyễn Thị Hải Bình
Cấu trúc rẽ nhánh IF
36
Trang 37Công nghệ Oracle
GV Nguyễn Thị Hải Bình
Cấu trúc rẽ nhánh IF
37
Trang 38Công nghệ Oracle
GV Nguyễn Thị Hải Bình
Cấu trúc rẽ nhánh IF
38
Trang 39Công nghệ Oracle
GV Nguyễn Thị Hải Bình
Cấu trúc rẽ nhánh CASE
39
Trang 40Công nghệ Oracle
GV Nguyễn Thị Hải Bình
Cấu trúc rẽ nhánh CASE
40
Trang 41Công nghệ Oracle
GV Nguyễn Thị Hải Bình
Cấu trúc rẽ nhánh CASE
41
Trang 42Công nghệ Oracle
GV Nguyễn Thị Hải Bình
Cấu trúc lặp LOOP
42
Trang 43Công nghệ Oracle
GV Nguyễn Thị Hải Bình
Cấu trúc lặp WHILE LOOP
43
Trang 44Công nghệ Oracle
GV Nguyễn Thị Hải Bình
Cấu trúc lặp FOR LOOP
44
Trang 45Công nghệ Oracle
GV Nguyễn Thị Hải Bình
REVERSE trong cấu trúc FOR LOOP
45
Trang 46Công nghệ Oracle
GV Nguyễn Thị Hải Bình
Gán nhãn cho cấu trúc lặp
46
Trang 47Công nghệ Oracle
GV Nguyễn Thị Hải Bình
Các lệnh điều khiển cấu trúc lặp
47
Trang 48Công nghệ Oracle
GV Nguyễn Thị Hải Bình
Kiểu dữ liệu TABLE
• Cho phép lưu trữ được nhiều phần tử
• Tương tự kiểu mảng trong các ngôn ngữ lập trình cócấu trúc nhưng có số phần tử không giới hạn
• Chỉ số của kiểu TABLE không nhất thiết liên tục
48
Trang 49Công nghệ Oracle
GV Nguyễn Thị Hải Bình
Kiểu dữ liệu TABLE
49
Trang 50Công nghệ Oracle
GV Nguyễn Thị Hải Bình
Các hàm của kiểu TABLE
50
Trang 54Công nghệ Oracle
GV Nguyễn Thị Hải Bình
Ví dụ
54
Trang 55Công nghệ Oracle
GV Nguyễn Thị Hải Bình
Raising Exceptions (Kích hoạt ngoại lệ)
• Exceptions are raised by the database server
automatically whenever there is any internal database
error
• Exceptions can be raised explicitly by the programmer
by using the command RAISE.
55
Trang 56Công nghệ Oracle
GV Nguyễn Thị Hải Bình
Raising Exceptions – Ví dụ
56
Trang 58Công nghệ Oracle
GV Nguyễn Thị Hải Bình
Pre-defined Exceptions
58
Trang 59Công nghệ Oracle
GV Nguyễn Thị Hải Bình
Pre-defined Exceptions
59
Trang 60Công nghệ Oracle
GV Nguyễn Thị Hải Bình
Pre-defined Exceptions
60
Trang 61Công nghệ Oracle
GV Nguyễn Thị Hải Bình
Pre-defined Exceptions
61
Trang 62• Con trỏ tiềm ẩn (implicit cursor)
• Con trỏ tường minh (explicit cursor)
62
Trang 63Công nghệ Oracle
GV Nguyễn Thị Hải Bình
Con trỏ tiềm ẩn (Implicit Cursors)
• Được tạo ra tự động khi một câu lệnh SQL được thựcthi
• Lập trình viên không thể điều khiển con trỏ tiềm ẩn
• Các câu lệnh SQL được thực hiện trong một con trỏtiềm ẩn:
Trang 64Công nghệ Oracle
GV Nguyễn Thị Hải Bình
Con trỏ tiềm ẩn (Implicit Cursors)
• Con trỏ tiềm ẩn có các thuộc tính sau:
• Các thuộc tính được truy cập thông qua cú pháp:
SQL%ten_thuoc_tinh
64
Trang 65Công nghệ Oracle
GV Nguyễn Thị Hải Bình
Con trỏ tiềm ẩn – Ví dụ
65
Trang 66Công nghệ Oracle
GV Nguyễn Thị Hải Bình
Con trỏ tường minh (Explicit Cursors)
• Là con trỏ do người dùng (người lập trình) định nghĩa
để điều khiển vùng ngữ cảnh
• Con trỏ tường minh phải được khai báo trước khi sửdụng
• Các bước sử dụng con trỏ tường minh:
• Khai báo (Declare)
• Cấp phát bộ nhớ (OPEN)
• Lấy dữ liệu (FETCH)
• Thu hồi bộ nhớ (CLOSE)
66
Trang 67Công nghệ Oracle
GV Nguyễn Thị Hải Bình
Con trỏ tường minh (Explicit Cursors)
67
Trang 68Công nghệ Oracle
GV Nguyễn Thị Hải Bình
Thuộc tính của con trỏ tường minh
%NOTFOUND (đi kèm lệnh FETCH)
• Trả về TRUE nếu đã lấy đến dòng dữ liệu cuối cùng củacon trỏ
• Trả về FALSE nếu lệnh FETCH trả về ít nhất một dòng
%FOUND (đi kèm lệnh FETCH)
• Ngược với thuộc tính %NOTFOUND
%ROWCOUNT (đi kèm lệnh FETCH)
• Trả về số dòng đã được FETCH
%ISOPEN
68
Trang 69• PL/SQL subprograms are named PL/SQL blocks that can
be invoked with a set of parameters
• PL/SQL provides two kinds of subprograms:
• Functions: these subprograms return a single value, mainly
used to compute and return a value.
• Procedures: these subprograms do not return a value
directly, mainly used to perform an action.
69
Trang 71Công nghệ Oracle
GV Nguyễn Thị Hải Bình
Ví dụ về thủ tục
71
Trang 72Công nghệ Oracle
GV Nguyễn Thị Hải Bình
Ví dụ về thủ tục
72
Trang 73Công nghệ Oracle
GV Nguyễn Thị Hải Bình
Execute and Drop a Standalone Procedure
• A standalone procedure can be called in two ways:
• Using the EXECUTE keyword
• Calling the name of the procedure from a PL/SQL block
• To delete a procedure:
• DROP PROCEDURE procedure-name;
73
Trang 74Công nghệ Oracle
GV Nguyễn Thị Hải Bình
Standalone Procedure – Ví dụ
74
Trang 76Công nghệ Oracle
GV Nguyễn Thị Hải Bình
Ví dụ về hàm
76
Trang 77Công nghệ Oracle
GV Nguyễn Thị Hải Bình
Hàm đệ quy
77
Trang 78• A package will have two mandatory parts:
• Package specification
• Package body or definition
78
Trang 79Công nghệ Oracle
GV Nguyễn Thị Hải Bình
Package Specification
• The specification is the interface to the package.
• It just DECLARES the types, variables, constants, exceptions, cursors, and subprograms that can be referenced from outside the package.
• It contains all information about the content of the package, but excludes the code for the subprograms.
• All objects placed in the specification are called public objects.
• Any subprogram not in the package specification but coded in
the package body is called a private object.
79
Trang 80• The CREATE PACKAGE BODY Statement is used forcreating the package body.
80
Trang 81Công nghệ Oracle
GV Nguyễn Thị Hải Bình
Using the Package Elements
• Syntax to access the package elements (variable,procedures, or functions)
81
Trang 82Công nghệ Oracle
GV Nguyễn Thị Hải Bình
Example: creating the package specification
82
Trang 83Công nghệ Oracle
GV Nguyễn Thị Hải Bình
Example: creating the package body
83
Trang 84Công nghệ Oracle
GV Nguyễn Thị Hải Bình
Example: Using the package
84
Trang 85Công nghệ Oracle
GV Nguyễn Thị Hải Bình
DBMS_OUTPUT
• The DBMS_OUTPUT is a built-in package that enables
you to display output, display debugging information,and send messages from PL/SQL blocks, subprograms,packages, and triggers
Trang 86Công nghệ Oracle
GV Nguyễn Thị Hải Bình
Ví dụ
86
Trang 87Công nghệ Oracle
GV Nguyễn Thị Hải Bình
Ví dụ
87
Trang 88• Triggers are, in fact, written to be executed in response
to any of the following events:
• A database manipulation (DML) statement (DELETE, INSERT,
• Triggers could be defined on the table, view, schema,
or database with which the event is associated
88
Trang 89Công nghệ Oracle
GV Nguyễn Thị Hải Bình
Benefits of Triggers
• Generating some derived column values automatically
• Enforcing referential integrity
• Event logging and storing information on table access
• Auditing
• Synchronous replication of tables
• Imposing security authorizations
• Preventing invalid transactions
89
Trang 90Công nghệ Oracle
GV Nguyễn Thị Hải Bình
Creating Triggers
90
would be executed The INSTEAD OF clause is used for creating trigger on a view.
specifies the DML operation.
that would be updated.
table associated with the trigger.
you to refer new and old values for various DML statements, like INSERT, UPDATE, and DELETE (Not available for table level triggers)
trigger, i.e., the trigger would be executed for each row being affected Otherwise the trigger will execute just once when the SQL statement is executed, which is called a table level trigger.
rows for which the trigger would fire This clause is valid only for row level triggers.
Trang 91Công nghệ Oracle
GV Nguyễn Thị Hải Bình
Example
91
Trang 92Công nghệ Oracle
GV Nguyễn Thị Hải Bình
Triggering a Trigger
92
Trang 93Công nghệ Oracle
GV Nguyễn Thị Hải Bình
Example
93
Trang 94Công nghệ Oracle
GV Nguyễn Thị Hải Bình
Example
94
Trang 96Công nghệ Oracle
GV Nguyễn Thị Hải Bình
Example
96
Trang 97Công nghệ Oracle
GV Nguyễn Thị Hải Bình
Correlation Names and Pseudorecords
• A trigger that fires at row level can access the data in
the row that it is processing by using correlation
names.
• Two default correlation names are OLD and NEW
• OLD and NEW are also called pseudorecords
table_name%ROWTYPE, where table_name is thename of the table on which the trigger is created
97
Trang 98Công nghệ Oracle
GV Nguyễn Thị Hải Bình
OLD and NEW pseudorecord field values
98
Trang 99Công nghệ Oracle
GV Nguyễn Thị Hải Bình
Drop a trigger
99