Thứ Tư, 26 tháng 10, 2022

PL/SQL - Các biến

Trong chương này, chúng ta sẽ thảo luận về các biến trong PL/SQL. Một biến không là gì ngoài tên được đặt cho một vùng lưu trữ mà các chương trình của chúng ta có thể thao tác. Mỗi biến trong PL/SQL có một kiểu dữ liệu cụ thể, kiểu dữ liệu này xác định kích thước và cách bố trí bộ nhớ của biến; phạm vi giá trị có thể được lưu trữ trong bộ nhớ đó và tập hợp các hoạt động có thể được áp dụng cho biến.

Tên của một biến PL/SQL bao gồm một chữ cái được theo sau bởi các chữ cái, chữ số, dấu đô la, dấu gạch dưới và dấu số và không được vượt quá 30 ký tự. Theo mặc định, tên biến không phân biệt chữ hoa chữ thường. Bạn không thể sử dụng từ khóa PL/SQL dành riêng làm tên biến.

Ngôn ngữ lập trình PL/SQL cho phép xác định nhiều loại biến khác nhau, chẳng hạn như kiểu dữ liệu ngày giờ, bản ghi, tập hợp, v.v. mà chúng ta sẽ đề cập trong các chương tiếp theo. Đối với chương này, chúng ta hãy chỉ nghiên cứu các kiểu biến cơ bản.

Khai báo biến trong PL/SQL

Các biến PL/SQL phải được khai báo trong phần khai báo hoặc trong một gói như một biến toàn cục. Khi bạn khai báo một biến, PL/SQL cấp phát bộ nhớ cho giá trị của biến và vị trí lưu trữ được xác định bằng tên biến.

Cú pháp để khai báo một biến là:

variable_name [CONSTANT] datatype [NOT NULL] [:= | DEFAULT initial_value] 


Trong đó, tên_biến là mã định danh hợp lệ trong PL/SQL, kiểu dữ liệu phải là kiểu dữ liệu PL/SQL hợp lệ hoặc bất kỳ kiểu dữ liệu nào do người dùng xác định mà chúng ta đã thảo luận trong chương trước. Một số khai báo biến hợp lệ cùng với định nghĩa của chúng được hiển thị bên dưới:

sales number(10, 2); 

pi CONSTANT double precision := 3.1415; 

name varchar2(25); 

address varchar2(100);


Khi bạn cung cấp giới hạn kích thước, tỷ lệ hoặc độ chính xác với kiểu dữ liệu, nó được gọi là khai báo bị ràng buộc . Khai báo bị ràng buộc yêu cầu ít bộ nhớ hơn so với khai báo không bị giới hạn. Ví dụ -

sales number(10, 2); 

name varchar2(25); 

address varchar2(100); 


Khởi tạo các biến trong PL/SQL

Bất cứ khi nào bạn khai báo một biến, PL/SQL sẽ gán cho nó một giá trị mặc định là NULL. Nếu bạn muốn khởi tạo một biến có giá trị khác với giá trị NULL, bạn có thể làm như vậy trong khi khai báo, sử dụng một trong hai cách sau:

  • Từ khóa DEFAULT

  • Toán tử chuyển nhượng

Ví dụ -

counter binary_integer := 0; 

greetings varchar2(20) DEFAULT 'Have a Good Day';


Bạn cũng có thể chỉ định rằng một biến không được có giá trị NULL bằng cách sử dụng ràng buộc NOT NULL . Nếu bạn sử dụng ràng buộc NOT NULL, bạn phải chỉ định rõ ràng một giá trị ban đầu cho biến đó.

Một thực hành lập trình tốt là khởi tạo các biến đúng cách, nếu không, đôi khi các chương trình sẽ tạo ra kết quả không mong muốn. Hãy thử ví dụ sau sử dụng nhiều loại biến khác nhau:

DECLARE 

   a integer := 10; 

   b integer := 20; 

   c integer; 

   f real; 

BEGIN 

   c := a + b; 

   dbms_output.put_line('Value of c: ' || c); 

   f := 70.0/3.0; 

   dbms_output.put_line('Value of f: ' || f); 

END; 

/ 

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

Value of c: 30 

Value of f: 23.333333333333333333  


PL/SQL procedure successfully completed. 


Phạm vi biến trong PL/SQL

PL/SQL cho phép lồng các khối, tức là mỗi khối chương trình có thể chứa một khối bên trong khác. Nếu một biến được khai báo trong một khối bên trong, thì nó không thể truy cập vào khối bên ngoài. Tuy nhiên, nếu một biến được khai báo và có thể truy cập được đối với khối bên ngoài, thì biến đó cũng có thể truy cập được đối với tất cả các khối bên trong lồng nhau. Có hai loại phạm vi thay đổi -

  • Biến cục bộ - Các biến được khai báo trong một khối bên trong và không thể truy cập vào khối bên ngoài.

  • Biến toàn cục - Các biến được khai báo trong khối ngoài cùng hoặc một gói.

Ví dụ sau cho thấy việc sử dụng các biến Cục bộ và Toàn cục ở dạng đơn giản của nó:

DECLARE 

   -- Global variables  

   num1 number := 95;  

   num2 number := 85;  

BEGIN  

   dbms_output.put_line('Outer Variable num1: ' || num1); 

   dbms_output.put_line('Outer Variable num2: ' || num2); 

   DECLARE  

      -- Local variables 

      num1 number := 195;  

      num2 number := 185;  

   BEGIN  

      dbms_output.put_line('Inner Variable num1: ' || num1); 

      dbms_output.put_line('Inner Variable num2: ' || num2); 

   END;  

END; 

/

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

Outer Variable num1: 95 

Outer Variable num2: 85 

Inner Variable num1: 195 

Inner Variable num2: 185  


PL/SQL procedure successfully completed. 


Gán kết quả truy vấn SQL cho các biến PL/SQL

Bạn có thể sử dụng câu lệnh SELECT INTO của SQL để gán giá trị cho các biến PL/SQL. Đối với mỗi mục trong danh sách CHỌN , phải có một biến tương ứng, loại tương thích trong danh sách INTO . Ví dụ sau minh họa khái niệm. Hãy để chúng tôi tạo một bảng có tên CUSTOMERS -

( Đối với câu lệnh SQL, vui lòng tham khảo hướng dẫn SQL )

CREATE TABLE CUSTOMERS( 

   ID   INT NOT NULL, 

   NAME VARCHAR (20) NOT NULL, 

   AGE INT NOT NULL, 

   ADDRESS CHAR (25), 

   SALARY   DECIMAL (18, 2),        

   PRIMARY KEY (ID) 

);  


Table Created 

Bây giờ chúng ta hãy chèn một số giá trị vào bảng -

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 

VALUES (1, 'Ramesh', 32, 'Ahmedabad', 2000.00 );  


INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 

VALUES (2, 'Khilan', 25, 'Delhi', 1500.00 );  


INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 

VALUES (3, 'kaushik', 23, 'Kota', 2000.00 );

  

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 

VALUES (4, 'Chaitali', 25, 'Mumbai', 6500.00 ); 

 

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 

VALUES (5, 'Hardik', 27, 'Bhopal', 8500.00 );  


INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 

VALUES (6, 'Komal', 22, 'MP', 4500.00 );

Chương trình sau đây gán các giá trị từ bảng trên cho các biến PL/SQL bằng mệnh đề SELECT INTO của SQL:

DECLARE 

   c_id customers.id%type := 1; 

   c_name  customers.name%type; 

   c_addr customers.address%type; 

   c_sal  customers.salary%type; 

BEGIN 

   SELECT name, address, salary INTO c_name, c_addr, c_sal 

   FROM customers 

   WHERE id = c_id;  

   dbms_output.put_line 

   ('Customer ' ||c_name || ' from ' || c_addr || ' earns ' || c_sal); 

END; 

/ 

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

Customer Ramesh from Ahmedabad earns 2000  


PL/SQL procedure completed successfully


=============================
* 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: 0902912888
⚡️ Skype: tranbinh48ca
👨 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: http://bit.ly/ytb_binhoraclemaster
👨 Tiktok: https://www.tiktok.com/@binhoraclemaster?lang=vi
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhoracle
👨 Đị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

=============================
PL/SQL, 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,khóa học pl/sql, 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 dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, middleware, hoc solaris, hoc linux, hoc aix, unix, securecrt, xshell, mobaxterm, putty

ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master