Trong bài này bạn sẽ được học một loại biến rất hay đó là biến table trong SQL Server, biến này có thể hiểu là một bảng tạm thời trong một chương trình SQL dùng để lưu trữ các row dữ liệu có các column đã định sẵn.
Mục lục
- 1. Biến table là gì?
- 2. Một số cách sử dụng biến table
- Insert
- Select
- 3. Ưu điểm và nhược điểm của biến table
- Nhược điểm
- Ưu điểm
- 4. Sử dụng biến table trong function
1. Biến table là gì?
Biến table là một loại biến đặc biệt dùng để lưu trữ nhiều dòng dữ liệu, nó có chức năng gần giống như bảng tạm Temporary Tables, nghĩa là bạn có thể insert
và select
dữ liệu của nó.
Vì nó cũng là một biến nên chỉ tồn tại trong phạm vi khai báo của nó. Ví dụ bạn khai báo trong procedure, function hoặc trigger thì biến chỉ sử dụng được trong đó mà thôi, sau khi chạy xong nó sẽ biến mất.
Để khai báo biến table thì bạn sử dụng từ khóa DECLARE với cú pháp sau:
1 2 3 | DECLARE @table_variable_name TABLE ( column_list ); |
Trong đó:
column_list
chính là danh sách các column của table, cấu trúc giống như việc bạn khai báo một bảng thông thường.@table_variable_name
là tên của table, luôn bắt đầu bằng kí tự@
Hãy xem ví dụ dưới đây:
1 2 3 4 5 | DECLARE @product_table TABLE ( product_name VARCHAR ( MAX ) NOT NULL , brand_id INT NOT NULL , list_price DEC (11,2) NOT NULL ); |
Như bạn thấy cách khai báo cũng tương tự như lệnh Create Table, bởi vì bản chất nó cũng là một table, chỉ khác là nó chỉ tồn tại trong một phạm vi nhất định.
2. Một số cách sử dụng biến table
Chúng ta có những thao tác chính như insert, select.
Insert
Để thêm data thì ta sử dụng lệnh INSERT
nếu thêm một row dữ liệu, sử dụng INSERT INTO
nếu muôn thêm từ một câu truy vấn khác. Như ví dụ dưới dây mình sẽ thêm từ một câu truy vấn.
1 2 3 4 5 6 7 8 9 | INSERT INTO @product_table SELECT product_name, brand_id, list_price FROM production.products WHERE category_id = 1; |
Select
Giống như temporary table, bạn có thể thực hiện câu lệnh select trên biến table.
1 2 3 4 | SELECT * FROM @product_table; |
Kế quả sẽ trả về danh sách sản phẩm như hình dưới đây.
3. Ưu điểm và nhược điểm của biến table
Vì chỉ là một biến thông thường nên sẽ có rất nhiều hạn chế.
Nhược điểm
Thứ nhất, bạn sẽ phải khai báo cấu trúc column ngay câu lệnh tạo biến, bạn không thể sử dụng ALTER TABLE
để thay đổi cấu trúc của bảng.
Thứ hai, nó chỉ phù hợp với việc lưu trữ dữ liệu nhỏ, nếu lưu trữ dữ liệu quá lớn thì sẽ truy vấn rất chậm.
Thứ ba, không nên sử dụng nó là một biến đầu vào hoặc biến đầu ra ở procedure, tuy nhiên bạn có thể return nó trong function.
Thứ tư, bạn không thể tạo chỉ mục trên bảng tạm.
Thứ 5, nếu bạn muốn thực hiện phép JOIN
trên bảng tạm thì bạn phải đặt lại bí danh cho nó bằng từ khóa AS
. Hãy xem ví dụ dưới đây.
1 2 3 4 5 6 7 | SELECT brand_name, product_name, list_price FROM brands b INNER JOIN @product_table pt ON p.brand_id = pt.brand_id; |
Ưu điểm
Sử dụng biến table trong procedure giúp chương trình hoạt động tốt hơn bởi SQL Server sẽ ít phải biên dịch hơn so với sử dụng bảng tạm.
Biến table sử dụng ít tài nguyên hơn.
Tương tự như bảng tạm thời, các biến bảng sẽ sống trong cơ sở dữ liệu tempdb chứ không phải trong bộ nhớ.
4. Sử dụng biến table trong function
Hãy xem ví dụ dưới đây, đây là một function có tên là ufnSplit
và nó sẽ trả về một variable table.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | CREATE OR ALTER FUNCTION udfSplit( @string VARCHAR ( MAX ), @delimiter VARCHAR (50) = ' ' ) RETURNS @parts TABLE ( idx INT IDENTITY PRIMARY KEY , val VARCHAR ( MAX ) ) AS BEGIN DECLARE @ index INT = -1; WHILE (LEN(@string) > 0) BEGIN SET @ index = CHARINDEX(@delimiter , @string) ; IF (@ index = 0) AND (LEN(@string) > 0) BEGIN INSERT INTO @parts VALUES (@string); BREAK END IF (@ index > 1) BEGIN INSERT INTO @parts VALUES ( LEFT (@string, @ index - 1)); SET @string = RIGHT (@string, (LEN(@string) - @ index )); END ELSE SET @string = RIGHT (@string, (LEN(@string) - @ index )); END RETURN END |
Và đây là cách gọi đến hàm này.
1 2 3 4 | SELECT * FROM udfSplit( 'foo,bar,baz' , ',' ); |
Kế quả sẽ nhưu hình sau:
Như vậy là mình đã giới thiệu xong cách sử dụng biến table (tvariable able), hy vọng qua bài này bạn sẽ hiểu được những ưu điểm và nhược điểm của nó, đồng thời phân biệt được temporary table và variable table.
* KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE trực tiếp từ tôi giúp bạn bước đầu trở thành những chuyên gia DBA, đủ kinh nghiệm đi thi chứng chỉ OA/OCP, đặc biệt là rất nhiều kinh nghiệm, bí kíp thực chiến trên các hệ thống Core tại VN chỉ sau 1 khoá học.
* CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
* Chi tiết tham khảo:
https://bit.ly/oaz_w
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile/Zalo: 0902912888
👨 Facebook: https://www.facebook.com/BinhOracleMaster
👨 Inbox Messenger: https://m.me/101036604657441 (profile)
👨 Fanpage: https://www.facebook.com/tranvanbinh.vn
👨 Inbox Fanpage: https://m.me/tranvanbinh.vn
👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam
👨 Website: https://www.tranvanbinh.vn
👨 Blogger: https://tranvanbinhmaster.blogspot.com
🎬 Youtube: https://www.youtube.com/@binhguru
👨 Tiktok: https://www.tiktok.com/@binhguru
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhguru
👨 Podcast: https://www.podbean.com/pu/pbblog-eskre-5f82d6
👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội
=============================
oracle tutorial, học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,sql tutorial, khóa học pl/sql tutorial, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail,oracle RAC, ASM, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, postgresql tutorial, mysql tutorial, mariadb tutorial, ms sql server tutorial, nosql, mongodb tutorial, oci, cloud, middleware tutorial, hoc solaris tutorial, hoc linux tutorial, hoc aix tutorial, unix tutorial, securecrt, xshell, mobaxterm, putty