1. Trang chủ
  2. » Giáo Dục - Đào Tạo

bài giảng hệ quản trị cơ sở dữ liệu- chương 9: views và lập trình trong SQL - ths. nguyễn minh vi

97 875 1
Tài liệu đã được kiểm tra trùng lặp

Đ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

Tiêu đề Views and Programming in SQL
Trường học Unknown University or Institution
Chuyên ngành Database Management Systems
Thể loại Lecture notes
Năm xuất bản Unknown Year
Thành phố Unknown City
Định dạng
Số trang 97
Dung lượng 1,98 MB

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

Nội dung

Views virtual tables trong SQL • View: là một bảng đơn được tạo ra từ các bảng cơ sở hoặc từ các view được tạo trước – View không tồn tại vật lý vì vậy view còn gọi là bảng ảo.. Views v

Trang 1

Chương 9

Views & Lập trình trong SQL

1

Trang 2

Views (virtual tables) trong SQL

• View: là một bảng đơn được tạo ra từ các

bảng cơ sở hoặc từ các view được tạo trước – View không tồn tại vật lý vì vậy view còn gọi là bảng ảo

– Đơn giản hoá việc truy cập dữ liệu

– Chọn dữ liệu cần thiết ứng với mổi user, đảm bảo

an toàn dữ liệu

– Dùng để Import và export

– View là một đối tượng của CSDL

Trang 3

Views (virtual tables) trong SQL

• Cú pháp tạo view:

Ví dụ:

CREATE VIEW view_name [(column[ , n ])]

AS select_statement [ WITH CHECK OPTION ]

CREATE VIEW WORKS_ON1

AS SELECT FNAME, LNAME, PNAME, HOURS

FROM EMPLOYEE, PROJECT, WORKS_ON

WHERE SSN=ESSN AND PNO=PNUMBER;

Trang 4

Views (virtual tables) trong SQL

Ví dụ:

CREATE VIEW DEPTJNFO

(DEPT_NAME,NO_OF_EMPS,TOTAL_SAL)

AS SELECT DNAME, COUNT (*), SUM (SALARY)

FROM DEPARTMENT, EMPLOYEE

WHERE DNUMBER=DNO

GROUP BY DNAME;

Trang 5

Views (virtual tables) trong SQL

Ví dụ:

CREATE TABLE WORKS_ON_NEW AS

SELECT FNAME, LNAME, PNAME, HOURS

FROM EMPLOYEE, PROJECT, WORKS_ON WHERE SSN=ESSN AND PNO=PNUMBER

GROUP BY PNAME;

Trang 6

Views (virtual tables) trong SQL

• Câu lệnh select trong view không được

chứa:

– Mệnh đề ORDER BY

– Mệnh đề COMPUTE VÀ COMPUTE BY

– Các bảng tạm không được tham chiếu trong

view không dùng select Into trong view

– Các trigger và chỉ mục không được tạo ra trên

view

6

Trang 7

Views (virtual tables) trong SQL

Trang 9

Lập trình trong SQL

• Kiểu dữ liệu: Có 2 loại

– Kiểu dữ liệu của hệ thống (System - supplied data type)

– Kiểu dữ liệu do người dùng định nghĩa (User- defined data type)

• Reference to object:

Server.database.owner.object

Trang 10

Biến

• Biến cục bộ (Local variable)

– Cú pháp khai báo:

– Ví dụ: DECLARE @EmpIDVar int

DECLARE@ VariableName var_type

Trang 11

Biến

– Gán giá trị cho biến: Khi một biến được khai báo thì

giá trị của nó là Null

– Ví dụ 1:

DECLARE @temp_name varchar(20)

SELECT @temp_name = companyname

FROM customers

WHERE customerid = ‘adsff’

SET @VariableName = expression

or

SELECT{@VariableName=expression} [,…n]

Trang 12

Biến

– Ví dụ 2:

DECLARE @temp_city varchar(10) SET @temp_city = ‘london’

SELECT * FROM Customers

WHERE city = @temp_city

Trang 14

– Không gán giá trị cho biến toàn cục

– Biến toàn cục không có kiểu

– Tên biến được bắt đầu với @@

Trang 15

Biến

• Một số biến toàn cục thông dụng

– @@SERVERNAME: trả về tên của server

– @@ROWCOUNT: số dòng chịu tác dụng của câu lệnh cuối cùng

– @@ERROR: trả về chỉ số index của lỗi

– @@IDENTITY: trả về định danh

Trang 16

return end

Trang 18

Cách thực thi câu lệnh SQL

• Batches: là một tập các câu lệnh SQL gửi đến

server và được thực thi tại cùng một thời điểm

– Nếu một câu lệnh trong batch bị lỗi thì SQL server

sẽ không thực thi tất cả những câu lệnh trong batches

– Mỗi batch không thể chứa tất cả những câu lệnh sau: CREATE PROCEDURE, CREATE TRIGGER, CREATE VIEW, CREATE RULE, CREATE DEFAULT

Trang 21

Cách thực thi câu lệnh SQL

• Cấu trúc của Transaction:

BEGIN TRANSACTION [<transaction_name>]

[WITH MARK <description>]…

Trang 22

VALUES(‘BU1122’,’Teach Yourself SQL’,’business’,

‘9988’, $35.00, $1000,10,4501,’a great book’) SELECT *from titleauthor

COMMIT TRAN

Trang 24

Cấu trúc điều khiển

Trang 25

Cấu trúc điều khiển

• BEGIN …END

BEGIN

{sql_statement | statement_ block}

END

Trang 26

Cấu trúc điều khiển

• Ví dụ:

IF ( SELECT COUNT(*) FROM authors

WHERE contract =0) >0

BEGIN PRINT 'These authors do not have contracts on file: ' SELECT au_lname, au_fname, au_id

FROM authors WHERE contract=0 END

ELSE

BEGIN PRINT 'All authors have contracts on file.' END

Trang 27

Cấu trúc điều khiển

Trang 28

Cấu trúc điều khiển

END

Trang 29

Cấu trúc điều khiển

END

PRINT 'Too much for the market to bear'

Trang 30

Cấu trúc điều khiển

Trang 31

Cấu trúc điều khiển

Trang 32

Cấu trúc điều khiển

WHEN 'business' THEN 'Business'

WHEN 'psychology' THEN 'Psychology'

WHEN 'trad_cook' THEN 'Traditional Cooking

ELSE 'Not yet categorized‘

END

CAST(title AS varchar(25)) AS 'Shortened Title',

price AS Price FROM titles WHERE price IS NOT NULL ORDER BY type, price COMPUTE AVG(price) BY type

Trang 33

Cấu trúc điều khiển

0.1 END

FROM [Order Details]

ORDER BY Quantity, ProductId

Trang 34

Cấu trúc điều khiển

integer_expression : return value

WAITFOR { DELAY 'time' | TIME 'time' }

Trang 35

Cấu trúc điều khiển

Ví dụ:

BEGIN

WAITFOR TIME '22:20' EXECUTE update_all_stats END

Trang 36

Cấu trúc điều khiển

• RAISERROR

RAISERROR ({msg_id | msg_str} { , severity , state }

[ , argument [ , n ] ] )

[ WITH option [ , n ] ]

Trang 37

Thủ tục (Stored Procedures)

và Hàm (Function)

Trang 38

– Stored procedures có thể được tạo trong CSDL và tái sử dụng

– Thủ tục nhận tham số đầu vào và trả về một kết quả

Trang 39

Loại Stored procedures

• System SP (sp): được lưu trữ trong CSDL Master,

nhưng có thể thực thi ở bất kỳ CSDL nào

– sp_helptext: In nội dung của rule, a default, an

unencrypted stored procedure, user-defined function, trigger, computed column, or view

Trang 40

Loại Stored procedures

Extended SP (xp): được tạo từ ngôn ngữ khác

(C++, ) và được sử dụng như một thủ tục của SQL Server

User_defined :

‒Local sp: là đối tượng trong CSDL dùng để

thực thi các tác vụ, có thể tạo trong CSDL master

‒Temporary sp: local (tên bắt đầu với #) và

global (tên bắt đầu với ##)

Trang 41

Tạo stored procedures

• Cú pháp:

CREATE PROC [EDURE ] procedure_name

[ ; number ] [ { @parameter data_type }

[ VARYING ] [ = default ] [ OUTPUT ] ] [, n ]

[ WITH { RECOMPILE | ENCRYPTION |

RECOMPILE, ENCRYPTION } ]

[FOR REPLICATION ]

AS sql_statement [ n ]

Trang 42

Tạo stored procedures

FROM Orders AS Ord JOIN [Order Details] AS OrDet ON (Ord.OrderID = OrDet.OrderID)

GROUP BY Ord.EmployeeID

Trang 43

Thực thi stored Procedures

• Execute : Dùng để thực thi

– User-defined function

– System procedure

– User-defined stored procedure,

– Extended stored procedure

Trang 44

Thực thi stored Procedures

Trang 45

Thực thi stored Procedures

Trang 46

Hiệu chỉnh stored Procedures

Trang 47

Hiệu chỉnh stored Procedures

FROM dbo.orders

WHERE RequiredDate<GETDATE()and shippeddate is null

ORDER BY RequiredDate

Trang 48

Xóa stored Procedures

• Cú pháp:

DROP PROC owner.stored_procedure_name

Trang 49

Tham số trong stored Procedures

Input parameter:

CREATE PROCEDURE procedure_name

[@parameter_name data_type] [=default_value] [WITH option]

AS

sql_statement [ n]

Trang 50

Tham số trong stored Procedures

Ví dụ1:

CREATE PROC dbo.MovieByRating

@rating varchar(5) = NULL

AS SELECT rating , title FROM movie

WHERE rating = @rating ORDER BY title

Trang 51

Tham số trong stored Procedures

Ví dụ 2:

CREATE PROC sp_name

@parameter data_type =value

AS

IF @parameter IS NULL

BEGIN

PRINT ‘Message Line 1’

PRINT ‘Message Line 2’

RETURN END

SELECT statement

GO

51

Trang 52

Viết thủ tục có tham số a, b dạng input để giải phương trình bậc nhất ax+b=0

create proc ptbn @a int,@b int

as if(@a=0) print 'Phuong trinh vo nghiem.' else

print 'phuong trinh co nghiem la:‘

+cast(cast(-@b as float)/@a as nvarchar(12))

go

Trang 53

Tham số trong stored Procedures

• Output parameter:

CREATE PROCEDURE procedure_name

[@parameter_name data_type] [=default_value]

OUTPUT

[WITH option]

AS

sql_statement [ n]

Trang 54

Tham số trong stored Procedures

Ví dụ:

CREATE PROC count_row

@movie_count int OUTPUT

AS

SELECT @movie_count = COUNT(*) FROM Movie

GO

• Sp execution with output parameter: a variable must

be declared to stored the return value of the output parameter

DECLARE @num int

EXEC count_row @num OUTPUT

SELECT @num

Trang 55

Quản lý lỗi

• sp_addmessage: Lưu thông báo lỗi mới do

người dùng định nghĩa trong một thể hiện của Database Engine

– Thông báo lỗi có thể được xem bằng sys.messages

• Cú pháp: sp_addmessage [ @msgnum= ] msg_id , [

@severity= ] severity , [ @msgtext= ] 'msg'

[ , [ @lang= ] 'language' ]

[ , [ @with_log= ] { 'TRUE' | 'FALSE' } ]

[ , [ @replace= ] 'replace' ]

Trang 57

Quản lý lỗi

Example: Display an error message when delete a customer

CREATE PROC DeleteCust

@cust_num nvarchar(5) = null

AS

IF EXISTS (SELECT customerID FROM Orders

WHERE customerID like @cust_num)

BEGIN

RAISERROR (50001, 10, 1) RETURN

END DELETE FROM Customers WHERE customerID like @cust_num

GO

Trang 59

Quản lý lỗi

• @@ERROR và @@ROWCOUNT: sử dụng để

xác nhận tính hợp lệ của câu lệnh UPDATE

– Giá trị của @@ERROR được kiểm tra cho bất kỳ dấu hiệu của một lỗi

– Giá trị của @@ROWCOUNT được sử dụng để chắc chắn lệnh cập nhật thành công vào các dòng trong bảng

Trang 60

Hàm (FUNCTION)

• Hàm hệ thống (System function):

 aggregate funtion: avg(), count(), count(*),

sum(), max(), min(),

 Other function: getdate(), month(), upper(),

user_name(),@@rowcount,

• Hàm do người dùng định nghĩa (User-defined function):

Cho phép định nghĩa một hàm T-SQL mà nó có thể chấp nhận một hoặc nhiều tham số và trả về một giá trị đơn hoặc một bảng giá trị

Trang 61

Hàm (FUNCTION)

• Có 3 loại hàm do người dùng định nghĩa:

– Scalar: trả về một giá trị đơn dựa trên giá trị đầu vào

– Multi-statement Table-valued: trả về một tập các dòng

– Inline Table-valued: trả về một tập các dòng

Trang 62

Hàm (FUNCTION)

• Scalar function:

CREATE FUNCTION [ owner_name ] function_name

( [ { @parameter_name [AS] scalar_parameter_data_type [= default ] } [ , n ] ] )

Trang 63

WHERE month(orderdate)= @monthOrd RETURN @Ordnum

END

GO

Trang 66

od.ProductID WHERE c.CategoryID= @Categoryid

GROUP BY c CategoryName,p.ProductName)

Trang 67

Hàm (FUNCTION)

• Multistatement Table-valuesd

CREATE FUNCTION [owner_name.]function_name

([{@parameter_name [AS] data_type [=default]} [ ,…n ]])

END

Trang 68

Ví dụ:

CREATE FUNCTION Contacts(@suppliers bit=0)

RETURNS @Contacts TABLE (ContactName nvarchar(30), Phone nvarchar(24), ContactType nvarchar(15))

Trang 69

Hàm (FUNCTION)

• Thực thi:

SELECT * FROM CONTACTS(1) ORDER BY ContactName

Trang 70

TRIGGERS-CURSOR

Trang 71

Trigger

• Trigger là một loại thủ tục đặc biệt, tự động thực thi khi một sự kiện xãy ra trong database server

• DML triggers: thực thi khi người dùng cố hiệu chỉnh dữ liệu thông qua một sự kiện ngôn ngữ thao tac dữ liệu (DML)

• DML events gồm: các câu lệnh INSERT, UPDATE, or DELETE trên bảng hoặc view

Trang 72

{ { FOR | AFTER | INSTEAD OF }

{ [DELETE] [,] [ INSERT ] [, ] [ UPDATE ] }

Trang 73

Tạo trigger

– Schema_name: tên của lược đồ chứa trigger

– Table | view: tên bảng hoặc View mà trên đó

trigger thực thi

– WITH ENCRYPTION: mã hóa trigger

FOR | AFTER | INSTEAD OF: loại trigger

Trang 74

Tạo trigger

• AFTER triggers hoặc FOR trigger :

– Thực thi sau khi thực hiện insert/ delete các dòng trong table, gọi là reactive, chỉ tạo trên table

– Khi tạo trigger nếu không chỉ định rõ thì mặc định

là AFTER Trigger

74

Trang 75

Tạo trigger

• INSTEAD OF triggers: kiểm tra trứơc khi thực

hiện Insert/Delete, gọi là proactive, tạo trên table và view

– Table1 có trigger1, table2 có trigger2, nếu thao

tác trên table1 có liên quan đến table2 thì trigger2 tự động thực thi, gọi là trigger lồng (Nested Trigger)

Trang 76

Thực thi sau khi :

+ xử lý ràng buộc + thực hiện xong hành động I/U/D phát sinh trigger

- Thi hành trước khi:

+ Xử lý ràng buộc + Thay thế hành động phát sinh trigger

- Không xây dựng được trên table có áp dụng cascade delete/ update

Trang 77

Tạo trigger

– {[DELETE] [ , ] [INSERT] [ , ] [UPDATE] }: chỉ định thao tác mà khi thực hiện thì trigger tự động thực thi

• Khi Insert mẫu tin mới vào Table thì mẫu tin mới

đó cũng lưu trong table INSERTED

• Khi Delete mẫu tin trong table: Thì các mẫu tin bị

xoá đó được di chuyển sang table DELETED

• Khi Update mẫu tin trong table: thì table đó và

table INSERTED đều chứa mẫu tin có nội dung mới, còn DELETED chứa mẫu tin có nội dung cũ

Trang 78

– NOT FOR REPLICATION

• Trigger sẽ không thực hiện khi bảng có liên quan đến kỹ thuật sao chép nhân bản (relication)

• sql_statement: câu lệnh SQL chứa điều kiện và hành

động của triiger

Trang 79

Tạo trigger

Ví dụ: tạo một trigger hiển thị số dòng được chèn vào bảng Nhomsach

CREATE TRIGGER Thongbaomautin

ON NHOMSACH FOR INSERT

Trang 83

Ví dụ:

CREATE TRIGGER Trg_NgayLap_NgayGiaoHD

ON Hoadon AFTER INSERT

AS

DECLARE @NgayLapHD DateTime, @NgayGiao DateTime

SELECT @NgayLapHD=hd.NGayLapHD,NgayGiao=hd.NgayGiaoNhan FROM HoaDon hd INNER JOIN Inserted i ON hd.MaHD=i.Mahd

If @NgayGiao<@NgayLapHD

BEGIN

RAISERROR(500103,10,1) ROLLBACK TRANSACTION

END

Trang 84

Ví dụ: AFTER TRIGGERS

CREATE TRIGGER Trg_Xoa_HD

ON Hoadon AFTER DELETE

AS

SET NOCOUNT ON

IF EXISTS (SELECT * FROM Deleted)

BEGIN

DELETE CT_HOADON WHERE CT_HOADON.MaHD

IN (SELECT hd.MaHD FROM HoaDon hd INNER JOIN Deleted d ON hd.MaHD=d.Mahd) RAISERROR('Cac chi tiet HD da bi xoa',10,1)

END

SET NOCOUNT ON

Trang 85

{ { FOR | AFTER | INSTEAD OF }

{ [DELETE] [,] [ INSERT ] [, ] [ UPDATE ] }

Trang 86

Hiệu chỉnh Triggers

Ví dụ:

ALTER TABLE [Order Details]

DISABLE TRIGGER ALL

• Xóa trigger:

– DROP TRIGGER Trigger_Name

Trang 87

Con trỏ

• Con trỏ là vùng làm việc tạm được tạo trong bộ nhớ

hệ thống khi câu lệnh SQL được thực thi

• Con trỏ chứa thông tin của câu lệnh select, sau khi cursor được định vị trên một dòng, các hoạt động có thể thực hiện trên dòng đó hoặc khối các dòng bắt đầu từ vị trí con trỏ

• Con trỏ có thể chứa nhiều hơn một dòng nhưng chỉ thao tác trên một dòng tại một thời điểm

Trang 89

Khai báo con trỏ

Trang 90

– Lấy mẫu tin hoặc điều hướng cursor (FETCH)

– Dữ liệu trong dòng hiện hành có thể được hiệu chỉnhnếu cần thiết

– Đóng cursor nhưng vẫn tồn tại

– Giải phóng Cursor(deallocate) khi không dùng nữa

90

Trang 92

Sử dụng con trỏ

• Delete data by cursor:

• Close cursor:

• DEALLOCATE: Removes a cursor reference

DELETE <Ten Table>

WHERE CURRENT OF <Cur_Name>

CLOSE cursor_name

DEALLOCATE cursor_name

Trang 93

• Ví dụ:

DECLARE MyCursor CURSOR FOR

SELECT c.CustomerID,c.Companyname,c.contactname,

o.OrderID,o.OrderDate FROM Customers c, Orders o WHERE c.CustomerID = o.CustomerID

FOR UPDATE

Open cursor

OPEN MyCursor

DECLARE @cid VARCHAR( 8), @c VARCHAR( 80), @o INT,

@od DATETIME, @cn VARCHAR( 80) FETCH NEXT FROM MyCursor INTO @cid, @c, @cn, @o, @od

SELECT @cid

BEGIN TRANSACTION

UPDATE Customers SET CompanyName = 'q'

WHERE CURRENT OF Mycursor

DEALLOCATE MyCursor

SELECT * FROM Customers

ROLLBACK TRANSACTION

Trang 94

3.List the three main approaches to database programming What are the advantagesand disadvantages of each approach?

Trang 95

Review questions

4 What is the impedance mismatch problem?

Which of the three programming approaches minimizes this problem?

5 Describe the concept of a cursor and how it is

used in embedded SQL

6 What is SQLJ used for? Describe the two

types of iterators available in SQL

Trang 96

Review questions

• State which of the following queries and updates would be allowed on the view If a query or update would be allowed, show what the corresponding query or update on the base relations would look like, and give its result when appliedto the database of Figure 5.6

Ngày đăng: 02/07/2014, 17:44

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm