Thứ Tư, 8 tháng 1, 2020

Bài 1.PL/SQL cơ bản - Các yếu tố cơ bản, các phép toán

Bài 1.PL/SQL cơ bản - Các yếu tố cơ bản, các phép toán

1.    Comment:
/* … */
--
2.    Khai báo biến
SET SERVEROUTPUT ON
DECLARE
Myname VARCHAR2(20);
BEGIN
DBMS_OUTPUT.PUT_LINE('My name is: '||Myname);
Myname := 'John';
DBMS_OUTPUT.PUT_LINE('My name is: '||Myname);
END;
/



·         INTO: đổ dữ liệu vào biến
declare
    result number;
begin
    SELECT (HISAL*12) INTO result FROM SCOTT.SALGRADE WHERE grade = 4;
    DBMS_OUTPUT.PUT_LINE(result);
end;
/

DECLARE
emp_hiredate employees.hire_date%TYPE;
emp_salary employees.salary%TYPE;
BEGIN
SELECT hire_date, salary
INTO emp_hiredate, emp_salary
FROM employees
WHERE employee_id = 100;
END;
/
·         Khai báo hằng
DECLARE
v_char CONSTANT VARCHAR2(10) := 'Hello World';
 v_number CONSTANT NUMBER := 123;
BEGIN
NULL;
END;

·         Toán tử:
·         Ghép tiếp các cột dữ liệu
Toán tử ghép tiếp chuỗi (||) cho phép ghép tiếp dữ liệu trong các cột khác nhau của cùng một dòng dữ liệu với nhau thành một chuỗi. Ta có thể có nhiều toán tử ghép chuỗi trong cùng một column alias.
Ví dụ:
SELECT empno||ename EMPLOYEE FROM emp;

·         Ghép tiếp chuỗi ký tự
Trong mệnh đề SELECT, ta có thể thực hiện ghép tiếp bất kỳ ký tự nào, biểu thức hay số nào mà không phải là column hoặc column alias.
Ví dụ:
SELECT empno || ename || ‘ WORK IN DEPARTMENT ’
|| deptno ‘Employee Detail’
FROM emp;

·         Để kiểm tra có phải NULL hay không dùng các toán tử IS NULL hoặc IS NOT NULL
The Relational Operators: =, <>, !=, ~=, <, >, <=, >=
Operator
Example
Usage
=
IF A = B THEN
The equality operator.
<> 
IF A <> B THEN
The inequality operator.
!=
IF A != B THEN
Another inequality operator, synonymous with <>.
~=
IF A ~= B THEN
Another inequality operator, synonymous with <>.
< 
IF A < B THEN
The less than operator.
> 
IF A > B THEN
The greater than operator.
<=
IF A <= B THEN
The less than or equal to operator.
>=
IF A >= B THEN
The greater than or equal to operator.
LIKE
IF A LIKE B THEN
The pattern-matching operator.
BETWEEN
IF A BETWEEN B AND C THEN
Checks to see if a value lies within a specified range of values.
IN
IF A IN (B,C,D) THEN
Checks to see if a value lies within a specified list of values.
IS NULL
IF A IS NULL THEN
Checks to see if a value is null.


True Expressions
False Expressions
5 = 5
5 = 3
'AAAA' = 'AAAA'
'AAAA ' = 'AAAA'
5 != 3
5 <> 5
'AAAA ' ~= 'AAAA'
'AAAA' ~= 'AAAA'
10 < 200
10.1 < 10.05
'Jeff' < 'Jenny'
'jeff' < 'Jeff'
TO_DATE('15-Nov-61' < '15-Nov-97')
TO_DATE('1-Jan-97' < '1-Jan-96')
10.1 <= 10.1
10 <= 20
'A' <= 'B'
'B' <= 'A'
TO_DATE('1-Jan-97') <= TO_DATE('1-Jan-97)
TO_DATE('15-Nov-61') <= TO_DATE('15-Nov-60)

Để tìm những nhân viên có tên có chuỗi 'A_B'
SELECT ename FROM emp WHERE ename LIKE '%A\_B%'; ESCAPE '\'

Vì ký hiệu "_" dùng để đại diện cho một ký tự bất kỳ nên nếu không có mệnh đề ESCAPE, câu lệnh trên sẽ tìm tất cả các nhân viên tên AAB, ABB, ACB, v.v...
·          Toán tử tập hợp
UNION: Kết hợp kết quả của nhiều câu hỏi với nhau, chỉ giữ lại một đại diện cho các mẫu tin trùng nhau.
UNION ALL: Kết hợp kết quả của nhiều câu hỏi với nhau, các mẫu tin trùng nhau cũng được lặp lại
INTERSET:Lấy phần giao các kết quả của nhiều câu hỏi

MINUS: Lấy kết quả có trong câu hỏi thứ nhất mà không có trong câu hỏi thứ hai (câu hỏi sau toán tử MINUS)

·         Toán tử khác:
NOT IN: Không thuộc
ANY và SOME: So sánh một giá trị với mỗi giá trị trong một danh sách hay trong kết quả trả về của câu hỏi con, phải sau toán tử =
ALL:So sánh một giá trị với mọi giá trị trong danh sách hay trong kết quả trả về của câu hỏi con.
EXISTS: Trả về TRUE nếu có tồn tại.
SELECT * FROM emp
WHERE sal = ANY (SELECT sal FROM emp WHERE deptno=30);

SELECT * FROM emp
WHERE sal >= ALL (select distinct sal From emp
Where deptno =30)
Order by sal desc;

SELECT ENAME, SAL, JOB, DEPTNO
FROM EMP
WHERE SAL > SOME (SELECT DISTINCT SAL
FROM EMP
WHERE DEPTNO =30)
ORDER BY SAL DESC;


Tìm những người có nhân viên
SELECT EMPNO, ENAME, JOB, DEPTNO
FROM EMP E
WHERE EXISTS (SELECT EMPNO FROM EMP WHERE EMP.MGR = E.EMPNO);

·         Constant
You cannot use SYSDATE in the condition of a CHECK constraint
5.    Từ khóa
·         DEFINE:

·         Chuyển đổi kiểu dữ liệu (converision)
Explicit (Tường minh)
– TO_CHAR
– TO_DATE
– TO_NUMBER
– TO_TIMESTAMP
Implicit (internal, tự động)






@ Trần Văn Bình - Founder of Oracle DBA AZ #OraAz #OracleDBAAz #OracleTutorial