PL/SQL (Procedural Language/Structured Query Language) là một ngôn ngữ lập trình lập trình hướng thủ tục sử dụng cho Oracle SQL. Nó là một mở rộng của Oracle SQL.
Bạn đang xem: Pl/Sql Là Gì ? Sự Khác Nhau Giữa Oracle Và Sql Server Sự Khác Nhau Giữa Oracle Và Sql Server
PL/SQL bao gồm các thành phần ngôn ngữ hướng thủ tục bao gồm điều kiện và vòng lặp. Nó cho phép khai báo hằng số và biến, thủ tục và các hàm, kiểu dữ liệu và biến của các kiểu dữ liệu, và các trigger. Nó có thể sử lý các ngoại lệ (lỗi tại thời gian chạy). Mảng cũng được hỗ trợ nâng cấp để sử dụng cho các tập hợp trong PL/SQL. Từ phiên bản 8 trở đi nó bao gồm thêm các tính năng hướng đối tượng. Nó có thể tạo một đơn vị PL/SQL như thủ tục, hàm, package, kiểu dữ liệu, triggers, những thứ được lưu trữ trong database được tái sử dụng bởi các ứng dụng bất kỳ giao tiếp với ứng dụng Oracle.
Chú ý: Các hình minh họa dưới đây tôi sử dụng công cụ PL/SQL Developer phiên bản 8.x, tuy nhiên cũng không có khác biệt nếu bạn sử dụng PL/SQL Developer phiên bản 10.x hoặc một phiên bản khác.
Để có thể tiếp cận nhanh với PL/SQL bạn cần có một công cụ lập trình. Theo kinh nghiệm làm việc của tôi bạn có thể sử dụng PL/SQL Developer, đây là một công cụ trực quan làm việc với Oracle và để lập trình PL/SQL.
Trong tài liệu này tôi sử dụng LearningSQL (Một database nhỏ dùng để hướng dẫn học SQL trong website o7planning.org). Bạn có thể tạo database này theo hướng dẫn dưới đây:
Mỗi lệnh SQL kềt thúc bằng dấu chấm phẩy (;)Các lệnh thuộc "ngôn ngữ định nghĩa dữ liệu" (Data Definition Language - DDL) không được sử dụng trong PL/SQLLệnh SELECT.. INTO trả về nhiều dòng có thể gây ra exception ( > 1 dòng).Lệnh SELECT .. INTO không trả về dòng nào có thể gây ra exceptionCác lệnh thuộc "ngôn ngữ thao tác trên dữ liệu" (Data Manipulation Language - DML) có thể tác động trên nhiều dòng dữ liệu.Sử dụng toán tử := để giá giá trị cho một biến.
-- Lệnh gán giá trị cho biếnx := 1;-- Lệnh Insert:Insert into Department (Dept_Id, Dept_No, Dept_Name, Location) values (1, "D1", "HR", "Chicago");-- Bắt ngoại lệ:Begin Select Dept.Dept_Id into v_Dept_Id from Department Dep;Exception when too_many_rows then Dbms_Output.put_line("Error:"||Sqlerrm);End;......
Declare -- Phần khai báo - Không bắt buộc- -- Khai báo các biến sử dụng trong phần thân v_Location Varchar2(100);Begin -- Phần thân của khối lệnh -- Đoạn lệnh thực hiện v_Location := "Chicago"; -- ....Exception -- Phần xử lý lỗi - Không bắt buộc -- Bắt để sử lý các ngoại lệ khác nhau. When No_Data_Found Then -- Ngoại lệ khi câu lệnh SELECT .. INTO không trả về dòng nào -- (Không bắt buộc phải bắt) -- Sử lý gì đó tại đây. -- Hoặc để lệnh null nếu không cần sử lý. Null; When Too_Many_Rows Then -- Ngoại lệ khi câu lệnh SELECT .. INTO trả về nhiều dòng -- (Không bắt buộc phải bắt) Null; When Others Then -- Các ngoại lệ khác Null;End;
Ở đây tôi giới thiệu tổng quan về các lệnh cơ bản của PL/SQL. Bạn sẽ hiểu hơn về nó thông qua các ví dụ ở các phần tiếp theo.
If v_Option = 1 Then v_Action := "Run";Elsif v_Option = 2 Then v_Action := "Backup";Elsif v_Option = 3 Then v_Action := "Stop";Else v_Action := "Invalid";End If;
Declare v_Result Number; -- Khai báo một biến có giá trị 50 v_a Number := 50; -- Khai báo một biến có giá trị 100 v_b Number := 100;Begin -- In ra màn hình Console Dbms_Output.Put_Line("v_a= " || v_a); -- In ra màn hình Console Dbms_Output.Put_Line("v_b= " || v_b); -- Tính tổng v_Result := v_a + v_b; -- In ra màn hình Console Dbms_Output.Put_Line("v_Result= " || v_Result);End;
Nhấn biểu tượng
PLS_INTEGER | Số tự nhiên có dấu 32 bit nằm trong khoảng -2,147,483,648 tới 2,147,483,647. Xem thêm: Lao Động Hợp Đồng 68 Là Gì, Hợp Đồng 68 Có Phải Là Viên Chức Không |
BINARY_INTEGER | Số tự nhiên có dấu 32 bit nằm trong khoảng -2,147,483,648 tới 2,147,483,647. |
BINARY_FLOAT | Kiểu dấu chấm động số thực với độ chính xác đơn (Single-precision) |
BINARY_DOUBLE | Kiểu dấu chấm động số thực với độ chính xác gấp đôi (Double-precision) |
NUMBER(prec, scale) | Kiểu dấu chấm cố định (Fixed-point) với giá trị tuyệt đối từ 1E-130 tới (không bao gồm) 1.0E126. Một biến NUMBER cũng có thể mô tả 0. |
DEC(prec, scale) | Kiểu dấu chấm cố định, tiêu chuẩn ANSI với độ chính xác tối đa 38 số thâp phân. |
DECIMAL(prec, scale) | Kiểu dấu chấm cố định, tiêu chuẩn IBM với độ chính xác tối đa 38 số thập phân. |
NUMERIC(pre, secale) | Loại số thực (Floating type) với độ chính xác tối đa 38 số thập phân. |
DOUBLE PRECISION | Loại số chấm động, số thực, tiêu chuẩn ANSI với độ chính xác 126 số nhị phân (khoảng 38 số thập phân). |
FLOAT | Loại số chấm động, số thực tiêu chuẩn ANSI và IBM với độ chính xác tối đa 126 số nhị phân (khoảng 38 số thập phân). |
INT | Kiểu số nguyên, tiêu chuẩn ANSI với độ chính xác tối đa 38 chữ số thập phân |
INTEGER | Kiểu số nguyên, tiêu chuẩn ANSI và IBM với độ chính xác 38 chữ số thập phân |
SMALLINT | Số nguyên từ -32768 --> 32767 |
REAL | Kiểu số chấm động, số thực, với độ chính xác tối đa 63 số nhị phân (Khoảng 18 số thập phân). |
Kiểu số | Khai báo sử dụng |
Number | v_Amount Number(15,2)v_Salary Number; |
Integer | v_Age Integer; |
Float | v_Amount Float; |
Double | |
Real |