Tải bản đầy đủ (.pdf) (46 trang)

Tài liệu Thủ tục lưu trữ và Hàm - Store Procedures ppt

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (226.5 KB, 46 trang )

Thủ tục lưu trữ và Hàm
Store Procedures

Định nghĩa thủ tục lưu trữ,hàm
Ưu điểm của thủ tục lưu trữ,hàm
Tạo lập thực thi thủ tục lưu trữ,hàm
Tham số trong thủ tục lưu trữ,hàm
Biến cục bộ
Cấu trúc điều khiển


Là một nhóm các câu lệnh

Được biên dịch trước → thực hiện một
nhiệm vụ cụ thể.

Được viết bởi:

Người phát triển CSDL.

DBA – Database Administrator

Hỗ trợ cho công việc quản trị CSDL

Lập trình theo module
Thực thi nhanh hơn các lệnh T-SQL
Làm giảm lưu lượng trên mạng
Tăng cường bảo mật
Xem các thủ tục lưu trữ
của một database
select routine_type, routine_name


from information_schema.routines
where routine_schema='csdl_qldthi';
Khai báo thủ tục
CREATE [DEFINER = { user |
CURRENT_USER }] PROCEDURE
sp_name ([proc_parameter[, ]])
[characteristic ] routine_body

Khai báo hàm
CREATE [DEFINER = { user |
CURRENT_USER }] FUNCTION sp_name
([func_parameter[, ]]) RETURNS type
[characteristic ] routine_body


Trong đó:
proc_parameter: là kiểu của tham số
[ IN | OUT | INOUT ] param_name type
type: Kiểu dữ liệu hợp lệ trong MySQL
routine_body: Những câu lệnh hợp lệ

Khai báo thủ tục – ví dụ
DELIMITER $$
DROP PROCEDURE IF EXISTS `Hello` $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `Hello`()
BEGIN
select 'Hello World';
END $$
DELIMITER ;
Gọi thủ tục

CALL sp_name([parameter[, ]])
CALL sp_name[()]
Ví dụ
CALL Hello()
CALL Hello('Marry')

 
Làm cho các chương trình mềm dẻo
hơn và hữu dụng hơn
Được đặt trong cặp dấu ngoặc đơn
sau thủ tục với cú pháp:
mode parameter_name datatype
Lưu ý: Mode có 3 giá trị IN, OUT, INOUT
riêng đối với function chỉ có tham
số kiểu IN

!"#
Có 3 kiểu tham số:
Chỉ đọc (Read-only) (mặc định)
Chỉ ghi (Write – only)
Vừa đọc vừa ghi (read - write)

Khai báo thủ tục - vd1
DELIMITER $$
DROP PROCEDURE IF EXISTS `Hello_in` $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `Hello_in`(
$%&''()
BEGIN
set chao = 'Daisy';
select concat('Hello ',chao);

END $$
DELIMITER ;

)*
set @name='Marry';
CALL Hello_in(@name);
select @name;
!+,-
Thực thi từng câu query
Nhận xét sự thay đổi của biến @name???

./ 0$&
DELIMITER $$
DROP FUNCTION IF EXISTS `test_baitap`.`test_f` $$
CREATE FUNCTION `test_baitap`.`test_f` (name varchar(50))
RETURNS varchar(50)
BEGIN
declare str1 varchar(50);
select concat('hello ',name) into str1;
return str1;
END $$
DELIMITER ;

)*0$&
1232! test_f('mary')
4 5
Set @a =``;
Set @a:=test_f('mary');
4 5
Set @a=``;

select @a:= test_f('mary');

Khai báo thủ tục – ví dụ 2
62378729::
69;<<9;!26=927>2?711@4A B @::
!92C262>729D@ @E@  @<9;!26=92
@4A B @%&$%&''( F$%&''((
G2)7
AFDH6IHJ
AA %&HHF(J
26::
62378729J

)*0$KF
set @str1='Hello';
CALL Hello_out(@str1,@name);
select @name;
Câu hỏi:
Thực thi từng câu query
Nhận xét sự thay đổi của biến @name

./ 0$L
62378729::
69;<<9;!26=927>2?711@4A B @::
!92C262>729D@ @E@  @<9;!26=92
@4A B @%  $%&''((
G2)7
A DH6IHJ
AA %H4A H (J
26::

62378729J

)*
set @chao='Marry';
CALL Hello_in_out(@chao);
select @chao;
!+,-
Thực thi từng câu query
Nhận xét sự thay đổi của biến @name

GM/
Được khai báo bên trong thủ tục
Cú pháp:
DECLARE variable_name
[,variable_name ] datatype
[DEFAULT value];
Vd: declare name varchar(50) default 'hey'

!  !  
(Điều khiển rẽ nhánh)

!NOPQ"#
R ARS

Một biểu thức

Sự kết hợp cuả nhiều biểu thức sử dụng toán tử
logic
8I1T3UFVNOPQ
"#


IF ….THEN

CASE

!NO7>
IF expression THEN commands [ELSEIF
expression THEN commands ] [ELSE
commands] END IF;

Cấu trúc IF – dạng 1
7>AWXA 42 FYYY267>J
ZK&-
DELIMITER $$
DROP PROCEDURE IF EXISTS `test`.`IF_DANG1` $$
CREATE PROCEDURE `test`.`IF_DANG1` (num1 int)
BEGIN
if num1 = 0 then
select 'một số bằng o';
end if;
END $$
DELIMITER ;

×