SlideShare a Scribd company logo
1. Tối ưu hóa câu lệnh SQL
– Tối ưu hóa câu lệnh truy vấn với bảng đánh partition và index
Vấn đề: Đối với những bảng có dữ liệu lớn, khi tạo bảng người thiết kế phải thực hiện một số kỹ
thuật để tăng tốc độ truy vấn dữ liệu như đánh index, partition. Khi truy vấn người lập trình phải
tuân thủ một số nguyên tắc để đảm bảo tối ưu hóa thời gian thực hiện câu lệnh:
Không nên sử dụng hàm đối với trường đánh index, partition:
1
2
3
4
-- khong nen su dung
SELECT *
FROM users
WHERE UPPER (user_name) = UPPER ('USER_NAME');
Không nên sử dụng sử dụng toán tử not like, not in, <> với trường đánh index, partition
1
2
3
4
5
6
7
8
9
10
11
12
-- khong nen su dung
SELECT *
FROM users
WHERE user_name NOT LIKE 'USER_NAME%';
-- khong nen su dung
SELECT *
FROM users
WHERE user_name NOT IN ('USER_NAME1', 'USER_NAME2', 'USER_NAME3');
-- khong nen su dung
SELECT *
FROM users
WHERE user_name <> 'USER_NAME1';
Không nên sử dụng like ‘%str’
1
2
3
4
-- khong nen su dung
SELECT *
FROM users
WHERE user_name LIKE '%USER_NAME';
Lưu ý: Các trường hợp trên không nên sử dụng do làm mất tác dụng của cột đánh index
– Khi nào dùng IN, khi nào dùng EXISTS
Vấn đề: Trong một số trường hợp dữ liệu lớn, khi cần sử dụng toán tử IN hoặc Exists trong câu
lệnh có thể tốc độ thực thi câu lệnh khác nhau tương đối lớn. Để quyết định dùng toán tử nào ta
dựa vào đánh giá sau:
Bản chất câu lệnh khi dùng toán tử IN
1
2
3
4
5
6
7
8
9
10
SELECT *
FROM t1
WHERE x IN (SELECT y
FROM t2);
--Dien giai (tuong duong voi cau lenh sau)
SELECT *
FROM t1,
(SELECT DISTINCT y
FROM t2) t2
WHERE t1.x = t2.y;
Câu lệnh này quét dữ liệu full bảng T2 khi thực hiện câu lệnh SELECT DISTINCT y FROM t2;
nếu bảng dữ liệu T2 lớn thì thời gian thực hiện câu lệnh tương đối chậm
Bản chất câu lệnh dùng Exists
1
2
3
4
5
6
7
for x in ( select * from t1 )
loop
if ( exists ( select null from t2 where y = x.x ))
then
OUTPUT THE RECORD
end if
end loop;
Câu lệnh này quét dữ liệu full bảng T1, trường hợp bảng T2 đánh index theo trường y thì tốc độ
truy vấn dữ liệu bảng T2 tương đối nhanh
 Dùng IN khi: Dữ liệu bảng T1 lớn hơn dữ liệu ở bảng T2
 Dùng Exists khi: Dữ liệu bảng T2 lớn hơn dữ liệu bảng T1, trường điều kiện được đánh
index
 Nếu dữ liệu cả 2 bảng đều lớn, hoặc tương đương nhau thì 2 cách dùng có thời gian thực
hiện tương đương nhau
2. Cấu trúc dữ liệu hình cây
Vấn đề: Bảng dữ liệu được thiết kế theo quan hệ cha – con, xây dựng cấu trúc hình cây dữ liệu,
lấy ra cấp của mỗi nút trên cây
Giải pháp: Sử dụng cấu trúc start with, connect by để lấy ra thông tin
Cấu trúc lệnh:
1
2
3
4
5
SELECT object_code, LPAD (' ', LEVEL * 5, ' ') || object_name,
CONNECT_BY_ROOT (object_code)
FROM objects
WHERE app_id = 2609
START WITH parent_id IS NULL
CONNECT BY PRIOR object_id = parent_id;
6
Trong đó:
 START WITH parent_id IS NULL: Điều kiện xác định nút gồc, có thể có nhiều nút gốc
trong trường hợp có nhiều cây
 CONNECT BY PRIOR object_id = parent_id: hướng phát triển của cây, đây là cách xác
định nút con, vế có prior là nút cha đã được xác định, vế còn lại là nút con.
 CONNECT_BY_ROOT(column_name) lấy ra giá trị trường của nút gốc
 Level: Lấy ra cấp của nút, bắt đầu từ 1
 Hàm LPAD(str1, length, str2): So sánh độ dài xâu str1 với length, nếu nhó hơn bao nhiêu
ký tự thì thêm bếnh nhiêu ký tự của xâu str2 vào bên trái xâu str1
3. Lấy ra n giá trị theo sắp xếp
Bài toán: Cho bảng SINHVIEN với 2 trường (MA_SV, DIEM), lấy ra 10 sinh viên có số điểm
cao nhất
Giải pháp:
– Cách 1: sử dụng thuộc tính rownum khi để giới hạn số lượng bản ghi lấy ra từ tập các bản ghi
đã sắp xếp tăng dần (hoặc giảm dầm).
Câu lệnh
1
2
3
4
5
SELECT *
FROM (SELECT *
FROM sinhvien
ORDER BY diem DESC)
WHERE ROWNUM <= 10
Nhận xét: Với cách sử dụng này ta lấy ra được đúng 10 bản ghi đứng đầu khi sắp xếp, trường
hợp có 20 sinh viên dẫn đầu có điểm bằng nhau thì chỉ lấy được 10 sinh viên
Lưu ý: Câu lệnh sau lấy ra 10 bản ghi nhưng không phải bản ghi có điểm lớn nhất, do thuộc tính
rownum được gán trước khi sắp xếp
1
2
3
4
SELECT *
FROM sinhvien
WHERE ROWNUM <= 10
ORDER BY diem DESC;
– Cách 2: Sử dụng hàm rank() over để đưa ra thứ tự của bản ghi
1
2
3
SELECT *
FROM (SELECT ma_sv, RANK () OVER (ORDER BY diem DESC) AS rank_diem
FROM sinhvien)
4
5
WHERE rank_diem <= 10
ORDER BY rank_diem;
Nhận xét: Câu lệnh này lấy ra danh sách sinh viên thuộc top 10, có nghĩa là có thể có nhiều hơn
10 bản ghi nếu có nhiều sinh viên trùng điểm nhau. Điểm của sinh viên được sắp xếp là gán số
thứ tự, các sinh viên có điểm giống nhau thì có số thứ tự giống nhau.
Câu lệnh này lấy ra danh sách sinh viên thuộc top 10 điểm cao nhất (có thể >10 sinh viên)
4. Sử dụng Database Link
– Vấn đề: Để truy vấn dữ liệu từ một DB khác ta thông qua đối tượng Database link
– Câu lệnh tạo Database link:
1
2
3
4
5
6
7
8
9
10
11
12
CREATE SHARED DATABASE LINK dbl_test
CONNECT TO bccs_anypay_app IDENTIFIED BY abc
AUTHENTICATED BY bccs_anypay_app IDENTIFIED BY abc
USING '(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.58.3.65)(PORT = 1521))
)
(CONNECT_DATA =
(SID = dbtest)
)
)
';
– Câu lệnh sử dụng Database link:
1
2
SELECT *
FROM <schema_name>.<table_name>@dbl_test;
5. Sử dụng lệnh Merge
Vấn đề: Khi cần insert hoặc update dữ liệu từ bảng A sang bảng B có cấu trúc tương tự nhau mà
không cần kiểm tra bản ghi đó đã tồn tại hay chưa tao dùng câu lệnh sau:
1
2
3
4
5
6
7
8
MERGE INTO test1 a
USING test2 b
ON (a.object_id = b.object_id)
WHEN MATCHED THEN
UPDATE
SET a.status = b.status
WHEN NOT MATCHED THEN
INSERT (object_id, status)
VALUES (b.object_id, b.status)
9
– Giải thích: Bảng test1, test2 có cấu trúc như nhau, câu lệnh trên dùng để đẩy dữ liệu từ bảng
test2 sang bảng test1, nếu bản ghi ở bảng test2 đã tồn tại ở test1 thì thực hiện update trường
status, ngược lại insert bản ghi mới vào bảng test1
6. Schema Trigger
– Vấn đề: Khi trong code có sử dụng các câu lệnh SQL thuần, tên bảng không đặt tên schema ở
đầu. Khi triển khai lên server, user dùng kết nối vào DB không phải là user chứa các bảng dữ
liệu
– Giải pháp: Tạm thời để chạy được các câu truy vấn với các bảng của một schema khác mà
không có tiền tố schema ở đầu ta tạo trigger set schema mặc định cho user sau khi đăng nhập =
schema chứa bảng dữ liệu
– Câu lệnh thực hiện:
1
2
3
4
5
6
CREATE OR REPLACE TRIGGER db_anypay_app_logon
AFTER LOGON ON DATABASE
WHEN (USER = 'BCCS_ANYPAY' )
BEGIN
execute immediate 'ALTER SESSION SET CURRENT_SCHEMA = ANYPAY_OWNER';
END;
7. Xóa dữ liệu trùng nhau
– Vấn đề: Khi bảng dữ liệu không có khóa chính có 2 hoặc nhiều bản ghi trùng nhau, nếu cần
xóa 1 bản ghi trong 2 hoặc nhiều bản ghi để tránh trùng lặp dữ liệu.
– Giái pháp: Để xóa 1 trong 2 bản ghi trùng nhau ta xác định các bản ghi bị lặp sau đó lấy ra 1
bản ghi dựa vào thuộc tính ROWID
– Câu lệnh thực hiện:
1
2
3
4
5
6
7
DELETE FROM users
WHERE ROWID IN (SELECT row_id
FROM (SELECT MAX (ROWID) AS row_id, COUNT (*),
user_id
FROM users
GROUP BY user_id
HAVING COUNT (*) > 1))
– Lưu ý: Nếu số bản ghi trùng nhau > 2 thì phải chạy nhiều lần để xóa hết
8. Thuộc tính rowdependencies của bảng
– Vấn đề: Với một bảng dữ liệu, khi cần biết thời gian sau cùng tác động lên bản ghi dữ liệu
– Giải pháp: Dựa vào thuộc tính ora_rowscn và sử dụng hàm scn_to_timestamp để chuyển về
kiểu date
– Ví dụ:
1
2
SELECT scn_to_timestamp (ORA_ROWSCN)
FROM staff;
– Để thông tin thuộc tính ora_rowscn với mỗi bản ghi khác nhau, khi tạo bảng ta phải đặt thuộc
tính rowdependencies cho bảng, ví dụ
1
2
3
4
5
6
7
CREATE TABLE tbl_temp
(
ID NUMBER(10),
user_name VARCHAR (20),
passwd VARCHAR (100)
)
ROWDEPENDENCIES;
9. Sử dụng select table as timestamp
– Vấn đề: Khi ta chẳng may xóa mất dữ liệu hoặc update 1 bản ghi và commit dữ liệu, ta cần
xem lại hoặc khôi phục lại bản ghi đó
– Giải pháp: Select bảng tại thời điểm trước khi xóa hoặc update dữ liệu bằng lệnh ten_bang as
of timestamp thoi_gian
– Câu lệnh:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
-- xoa du lieu
DELETE FROM staff
WHERE staff_id = 172143;
-- commit du lieu
COMMIT ;
-- hien thi lai du lieu da xoa trong vong 1 ngay
SELECT *
FROM staff AS OF TIMESTAMP SYSDATE - 1
WHERE staff_id = 172143;
-- Khoi phuc lai du lieu da xoa
INSERT INTO staff
SELECT *
FROM staff AS OF TIMESTAMP SYSDATE - 1
WHERE staff_id = 172143;
-- commit du lieu
COMMIT;
10. Thực hiện export database
– Điều kiện: Máy tính phải cài oracle_client, trong file ts_name phải có thông tin DB cần dump
Bước 1: gõ lệnh exp
Bước 2: nhập user_name/password@ts_name
Trong đó:
 User_name: user đăng nhập DB
 Password: mật khẩu đăng nhập
 Ts_name: tên Database trong file ts_name
Bước 3: Nhập số byte buffer khi dump DB, nếu để mặc định là 4096 thì nhấn Enter
Bước 4: Nhập đường dẫn lưu file dmp trên máy local, sau khi dump sẽ sinh ra file duôi dmp và
lưu trên máy
Bước 5: Lựa chọn import cả schema hay chỉ một số bảng, nếu chọn export một số bảng thì phải
nhập lần lượt từng bảng
Bước 6: Lựa chọn có export dữ liệu trong bảng hay không, nếu chọn no thì chỉ export được cấu
trúc của bảng
Bước 7: Chọn nén dữ liệu khi export hay không? mặc định chọn yes
Bước 8: Nhập tên bảng cần export
Bước 9: Nhập tên bảng tiếp theo cần export
Bước 10: Nhấn Enter để bắt đầu quá trình export dữ liệu
11. Thực hiện import database
Bước 1: Gõ lệnh imp
Bước 2: Nhập thông tin kết nối vào Database
Bước 3: Nhập đường dẫn chứa file dump
Bước 4: Nhập số by dùng cho bộ nhớ đệm, thường để mặc định
Bước 5: Lựa chọn liệt kê nội dung của file import
Bước 6: Tùy chọn bỏ qua việc import nếu gặp lỗi tạo đối tượng đã có
Bước 7: Import quyền của các user đối với các đối tượng import
Bước 8: Tùy chọn import dữ liệu của bảng
Bước 9: Tùy chọn import toàn bộ file hay chỉ import theo schema
Bước 10: Nếu bước 9 chọn No thì phải nhập schema cần import
Bước 11: Tùy chọn import một số bảng hay là tất cả các bảng trong schema
12. Tìm kiếm bản ghi bị lock và kill session lock bản ghi
– Vấn đề: Khi thực hiện thao tác với dữ liệu của bảng, một số trường hợp bản ghi bị session lock
nhưng không có thao tác commit hay rollback nên không được giải phóng. Với các bản ghi này
người dùng không thể thực hiện update hay delete được
– Giải pháp: Tìm kiếm ra session đang lock bản ghi để thực hiện kill session đó
– Câu lệnh liệt kê ra các session lock đối tượng
1
2
3
4
5
6
7
8
9
SELECT c.owner, c.object_name, c.object_type, b.SID, b.serial#, b.status,
b.osuser, b.machine,
'alter system kill session '''
|| b.SID
|| ','
|| b.serial#
|| ''' IMMEDIATE;' AS kill_sta
FROM v$locked_object a, v$session b, dba_objects c
WHERE b.SID = a.session_id AND a.object_id = c.object_id;
– Câu lệnh kill session
1ALTER SYSTEM KILL SESSION 'sid,serial#';
Trong đó: SID, Serial#: được lấy từ bảng v$session
13. Một số bảng hệ thống hay sử dụng
– Bảng v$sql: Lưu các câu lệnh tác động vào Database
– Bảng v$session: Lưu các session hiện tại đang kết nối vào DB
– Bảng v$locked_object: Lưu các đối được đang bị lock do một số thao tác cập nhật cấu trúc, dữ
liệu
– V$SPPARAMETER: Bảng lưu tham số cấu hình của hệ thống
14. Toán tử: some, any, all
– Toán tử all: Được sử dụng để so sánh giá trị của một trường với một danh sách giá trị, toán tử
all đi sau =, !=, >, <, <=, >=.
– Bài toán: Cho bảng sinh_vien với các trường ma_sv, lop, diem. Tìm tất cả các sinh viên của
lớp A có điểm lớn hơn bất kỳ sinh viên nào của lớp B
– Câu lệnh như sau:
1
2
3
4
5
SELECT *
FROM sinh_vien
WHERE lop = 'A' AND diem > ALL (SELECT diem
FROM sinh_vien
WHERE lop = 'B');
– Giải thích: khi dùng toán tử all thì giá trị của cột diem phải > bất kỳ giá trị nào trong tập được
chỉ ra sau all
– Toán tử any, some: trong oracle 2 toán tử này có ý nghĩa như nhau:
Bài toán: với bảng sinh_vien như trên, lấy ra danh sách các sinh viên lớp A có điểm lớn hơn 1
trong các sinh viên của lớp B
– Câu lệnh:
1
2
3
4
5
6
7
8
9
10
SELECT *
FROM sinh_vien
WHERE lop = 'A' AND diem > ANY (SELECT diem
FROM sinh_vien
WHERE lop = 'B');
SELECT *
FROM sinh_vien
WHERE lop = 'A' AND diem > SOME (SELECT diem
FROM sinh_vien
WHERE lop = 'B');
15. Sử dụng bảng tạm để lưu trữ dữ liệu (TEMPORARY
TABLE)
– Vấn đề: Trong một số trường hợp cần tổng hợp dữ liệu để xuất báo cáo hoặc đưa dữ liệu hiển
thị ra giao diện. Khi ta không thể dùng 1 câu lệnh để lấy ra dữ liệu mà tổng hợp qua nhiều bước
thì ta cần lưu lại dữ liệu tổng hợp sau đó lấy dữ liệu
– Giải pháp: Trong oracle hỗ trợ việc tạo một bảng tạm (temporary table) để lưu trữ dữ liệu tạm
thời với các đặc điểm:
 Thao tác: Có thể sử dụng các câu Query, DML để thao tác với Temporary Table giống
như một table bình thường.
 Lưu trữ: Temporary table sử dụng Temporary tablespace để lưu dữ liệu.
 Ảnh hưởng: Dữ liệu chỉ có hiệu lực trong phạm vi một Session hoặc một Transaction,
việc quy định bảng nằm trong câu lệnh tạo bảng:
1
2
3
4
5
6
7
8
9
10
11
-- Du lieu chi ton tai trong 1 transation
CREATE GLOBAL TEMPORARY TABLE my_temp_table (
column1 NUMBER,
column2 NUMBER
) ON COMMIT DELETE ROWS;
--du lieu ton tai trong session
CREATE GLOBAL TEMPORARY TABLE my_temp_table (
column1 NUMBER,
column2 NUMBER
) ON COMMIT PRESERVE ROWS;
 Bảo mật: Cho dù dữ liệu đã commit, mỗi session cũng chỉ thấy được dữ liệu trong session
đó
 Xung đột: Do mỗi session có phần dữ liệu riêng nên tránh được việc xung đột dữ liệu, ví
dụ như việc ghi đè dữ liệu của nhau là không xảy ra.
 Dọn rác: Temporary table tự động dọn sạch dữ liệu khi kết thúc Session hoặc
Transaction.
– Ngoài ra còn có một số đặc điểm khác như:
 Có thể tạo trigger, index trên temporary table.
 Khi dùng lệnh truncate (DDL), chỉ có dữ liệu trên session hiện tại bị mất.
 Khi export, phần cấu trúc của Temporary table cũng được export theo như table thường.
16. Dùng ký tự loại trừ trong Oracle với toán tử like
– Vấn đề: Khi sử dụng toán tử like để tìm kiếm xâu gần đúng ta thường dùng 2 ký tự thay thế là
‘%’(thay thế cho 1 chuối) và ‘_’ (thay thế cho 1 ký tự). Trường hợp ta muốn tìm kiếm theo các
trường có chứa ký tự này ta phải dùng ký tự loại trừ
– Giải quyết: Trong Oracle để dùng ký tự loại trừ sau toán tử like ta dùng toán tử escape, cú pháp
như sau:
1select * from test1 where col1 like '%_' escape '';
– Trong đó: ‘’ là ký tự loại trừ, ta có thể thay thế ký tự ‘’ bằng 1 ký tự bất kỳ ngoài ‘%’, ‘_’.
Khi sử dụng ký tự loại trừ ta làm mất ý nghĩa của ký tự thay thế đứng ngay sau nó, nó trở thành 1
ký tự thường
17. Đánh partition tự động
– Vấn đề: Đối với các bảng dữ liệu có đánh partition theo tháng hoặc theo ngày, người QTHT
thường xuyên phải đánh partition, nếu quên dữ liệu insert vào sẽ bị lỗi và có thể dẫn đến lỗi toàn
hệ thống.
– Giải pháp: Để giải quyết vấn đề trên ta thường viết thủ tục đánh partition tự động cho bảng và
đặt scheduler để chạy định kỳ. Việc đánh partition không ảnh hưởng tới các thao tác insert,
select, update, delete.
– Tư tưởng: Để đảm bảo có thể đánh partition một cách tự động ta phải đặt tên partition theo một
số quy ước:
Trong tên partition phải chứa thông tin về ngày tháng của dữ liệu
Phần đầu của tên partition phải giống nhau
– Dựa vào thông tin partition trong tên ta xác định thời gian cần đánh partition tiếp theo
Code:
1
2
3
4
5
6
7
8
9
PROCEDURE proc_create_partition
IS
CURSOR c_partition
IS
SELECT object_name,
MAX (SUBSTR (subobject_name,
LENGTH (subobject_name) - 5,
LENGTH (subobject_name)
)
) AS sub_partition
FROM user_objects
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
WHERE object_type = 'TABLE PARTITION'
AND object_name NOT LIKE 'BIN$%'
AND object_name NOT IN ('AGENT_COUNTER')
GROUP BY object_name;
v_loop_str VARCHAR (3000);
v_date DATE;
p_error VARCHAR (2000);
BEGIN
FOR v_partition IN c_partition
LOOP
v_date := TO_DATE (v_partition.sub_partition, 'yyMMdd');
WHILE v_date <=
ADD_MONTHS (TO_DATE (v_partition.sub_partition, 'yyMMdd'),
1)
LOOP
BEGIN
v_date := v_date + 1;
v_loop_str := '';
v_loop_str :=
'alter table '
|| v_partition.object_name
|| ' add partition DATA20'
|| TO_CHAR (v_date, 'yyMMdd')
|| ' values less than (to_date(''20'
|| TO_CHAR (v_date, 'yyMMdd')
|| ''',''yyyyMMdd''))';
DBMS_OUTPUT.put_line (v_loop_str);
EXECUTE IMMEDIATE v_loop_str;
v_loop_str := '';
EXCEPTION
WHEN OTHERS
THEN
p_error := 'Loi xay ra khi them partition: ' || SQLERRM;
DBMS_OUTPUT.put_line (p_error);
END;
END LOOP;
END LOOP;
END;
18. Drop scheduler đang chạy
1
2
3
4
5
BEGIN
DBMS_SCHEDULER.drop_job (job_name => 'TTPM_DBA.SESSION_VIEW_JOB',
FORCE => TRUE
);
END;
19. Mã hóa thủ tục, function trong database
– Vấn đề: Với một số thủ tục, funcion cần bảo mật thông tin. Sau khi tạo ta cần mã hóa nội dung
để người khác không xem được
– Giải pháp: Sử dụng hàm mã hóa của oracle theo cú pháp
1
2
3
BEGIN
SYS.DBMS_DDL.create_wrapped (str);
END;
– Trong đó: str là xâu chứa câu lệnh tạo thủ tục
20. Commit trong hàm khi viết package
– Vấn đề: Trong một số trường hợp khi thực hiện thao tác cập nhật dữ liệu trong một hàm ta cần
commit hoặc rollback dữ liệu nhưng không muốn làm ảnh hưởng đến các phần khác. Ví dụ đối
với hàm ghi log
– Giải pháp: Giới hạn phạm vi commit, rollback dữ liệu trong hàm bằng cú pháp PRAGMA
AUTONOMOUS_TRANSACTION
– Ví dụ:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
PROCEDURE insert_rp_log_error (
p_app VARCHAR2,
p_type VARCHAR2,
p_object VARCHAR2,
p_sta_datetime DATE,
p_end_datetime DATE,
p_description VARCHAR2
)
IS
PRAGMA AUTONOMOUS_TRANSACTION;
v_error VARCHAR2 (4000);
BEGIN
INSERT INTO cm_pos2.rp_log_error
(app, TYPE, table_name, sta_datetime, end_datetime,
description
)
VALUES (p_app, p_type, p_object, p_sta_datetime, p_end_datetime,
p_description
);
COMMIT;
EXCEPTION
19
20
21
22
23
24
25
26
WHEN OTHERS
THEN
ROLLBACK;
END;
– Với thủ tục này thì câu lệnh commit và rollback chỉ có tác dụng với các câu lệnh trong thủ tục

More Related Content

What's hot

SQL report
SQL reportSQL report
SQL report
Ahmad Zahid
 
Aplicación de escritorio con java
Aplicación de escritorio con javaAplicación de escritorio con java
Aplicación de escritorio con java
Emerson Garay
 
Consultas básicas en sql server
Consultas básicas en sql serverConsultas básicas en sql server
Consultas básicas en sql server
Rodrigo Alfaro Pinto
 
Oracle EBS R12 Audit trial
Oracle EBS R12 Audit trialOracle EBS R12 Audit trial
Oracle EBS R12 Audit trial
Feras Ahmad
 
Introduction to-sql
Introduction to-sqlIntroduction to-sql
Introduction to-sql
BG Java EE Course
 
Ordenar arreglos en java
Ordenar arreglos en javaOrdenar arreglos en java
Ordenar arreglos en java
eccutpl
 
Oracle SQL Advanced
Oracle SQL AdvancedOracle SQL Advanced
Oracle SQL Advanced
Dhananjay Goel
 
Sql
SqlSql
Oracle Table Partitioning - Introduction
Oracle Table Partitioning  - IntroductionOracle Table Partitioning  - Introduction
Oracle Table Partitioning - Introduction
MyOnlineITCourses
 
TRANSACCIONES
TRANSACCIONESTRANSACCIONES
TRANSACCIONES
Lisbeth Ocaña Bueno
 
ENTRADA Y SALIDA DE DATOS EN JAVA
ENTRADA Y SALIDA DE DATOS EN JAVAENTRADA Y SALIDA DE DATOS EN JAVA
ENTRADA Y SALIDA DE DATOS EN JAVA
Gabriel Suarez
 
Introduction to sql
Introduction to sqlIntroduction to sql
Introduction to sql
VARSHAKUMARI49
 
advanced sql(database)
advanced sql(database)advanced sql(database)
advanced sql(database)
welcometofacebook
 
oracle Sql constraint
oracle  Sql constraint oracle  Sql constraint
oracle Sql constraint
home
 
Chapter8 pl sql
Chapter8 pl sqlChapter8 pl sql
Chapter8 pl sql
Jafar Nesargi
 
Creating and Managing Tables -Oracle Data base
Creating and Managing Tables -Oracle Data base Creating and Managing Tables -Oracle Data base
Creating and Managing Tables -Oracle Data base
Salman Memon
 
ADO.NET
ADO.NETADO.NET
Shadow paging
Shadow pagingShadow paging
Shadow paging
GowriLatha1
 
Chapter 4 Structured Query Language
Chapter 4 Structured Query LanguageChapter 4 Structured Query Language
Chapter 4 Structured Query Language
Eddyzulham Mahluzydde
 
MYSQL join
MYSQL joinMYSQL join
MYSQL join
Ahmed Farag
 

What's hot (20)

SQL report
SQL reportSQL report
SQL report
 
Aplicación de escritorio con java
Aplicación de escritorio con javaAplicación de escritorio con java
Aplicación de escritorio con java
 
Consultas básicas en sql server
Consultas básicas en sql serverConsultas básicas en sql server
Consultas básicas en sql server
 
Oracle EBS R12 Audit trial
Oracle EBS R12 Audit trialOracle EBS R12 Audit trial
Oracle EBS R12 Audit trial
 
Introduction to-sql
Introduction to-sqlIntroduction to-sql
Introduction to-sql
 
Ordenar arreglos en java
Ordenar arreglos en javaOrdenar arreglos en java
Ordenar arreglos en java
 
Oracle SQL Advanced
Oracle SQL AdvancedOracle SQL Advanced
Oracle SQL Advanced
 
Sql
SqlSql
Sql
 
Oracle Table Partitioning - Introduction
Oracle Table Partitioning  - IntroductionOracle Table Partitioning  - Introduction
Oracle Table Partitioning - Introduction
 
TRANSACCIONES
TRANSACCIONESTRANSACCIONES
TRANSACCIONES
 
ENTRADA Y SALIDA DE DATOS EN JAVA
ENTRADA Y SALIDA DE DATOS EN JAVAENTRADA Y SALIDA DE DATOS EN JAVA
ENTRADA Y SALIDA DE DATOS EN JAVA
 
Introduction to sql
Introduction to sqlIntroduction to sql
Introduction to sql
 
advanced sql(database)
advanced sql(database)advanced sql(database)
advanced sql(database)
 
oracle Sql constraint
oracle  Sql constraint oracle  Sql constraint
oracle Sql constraint
 
Chapter8 pl sql
Chapter8 pl sqlChapter8 pl sql
Chapter8 pl sql
 
Creating and Managing Tables -Oracle Data base
Creating and Managing Tables -Oracle Data base Creating and Managing Tables -Oracle Data base
Creating and Managing Tables -Oracle Data base
 
ADO.NET
ADO.NETADO.NET
ADO.NET
 
Shadow paging
Shadow pagingShadow paging
Shadow paging
 
Chapter 4 Structured Query Language
Chapter 4 Structured Query LanguageChapter 4 Structured Query Language
Chapter 4 Structured Query Language
 
MYSQL join
MYSQL joinMYSQL join
MYSQL join
 

Viewers also liked

Ebook oracle-thuc-hanh-nguyen-huu-trong
Ebook oracle-thuc-hanh-nguyen-huu-trongEbook oracle-thuc-hanh-nguyen-huu-trong
Ebook oracle-thuc-hanh-nguyen-huu-trongngobacuong
 
Tai lieu quan tri he thong erp oracle
Tai lieu quan tri he thong erp oracleTai lieu quan tri he thong erp oracle
Tai lieu quan tri he thong erp oracle
Kiet Tran
 
Understand
UnderstandUnderstand
Understand
Tuấn Đông
 
Phần mềm quản lý doanh nghiệp ERP
Phần mềm quản lý doanh nghiệp ERPPhần mềm quản lý doanh nghiệp ERP
Phần mềm quản lý doanh nghiệp ERP
Cao Thừa
 
Nhom 16 big data
Nhom 16 big dataNhom 16 big data
Nhom 16 big dataDuy Phan
 
Bai kiem tra hqtcsdl Oracle khoa CNTT DHCT
Bai kiem tra hqtcsdl Oracle khoa CNTT DHCTBai kiem tra hqtcsdl Oracle khoa CNTT DHCT
Bai kiem tra hqtcsdl Oracle khoa CNTT DHCTsin216
 
Giao trinh oracle[bookbooming.com]
Giao trinh oracle[bookbooming.com]Giao trinh oracle[bookbooming.com]
Giao trinh oracle[bookbooming.com]bookbooming1
 
Hdsd quan triwebjoomla
Hdsd quan triwebjoomlaHdsd quan triwebjoomla
Hdsd quan triwebjoomlaViet Tran
 
Tập trung hay là chết
Tập trung hay là chếtTập trung hay là chết
Tập trung hay là chếtbookbooming1
 
ZK framework
ZK frameworkZK framework
AntoanbaomatQQQQQQQQQ
AntoanbaomatQQQQQQQQQAntoanbaomatQQQQQQQQQ
AntoanbaomatQQQQQQQQQ
Viet Tran
 
OCP Advisor Tips on How to Become OCP
OCP Advisor Tips on How to Become OCPOCP Advisor Tips on How to Become OCP
OCP Advisor Tips on How to Become OCP
Mohan Dutt
 
All Oracle DBAs have to know about Unix Memory Monitoring
All Oracle DBAs have to know about Unix Memory MonitoringAll Oracle DBAs have to know about Unix Memory Monitoring
All Oracle DBAs have to know about Unix Memory Monitoring
Yury Velikanov
 
Tài liệu data warehouse vietsub
Tài liệu data warehouse  vietsubTài liệu data warehouse  vietsub
Tài liệu data warehouse vietsub
hoangdat1361
 
Bài 3: Ngôn ngữ truy vân có cấu trúc (SQL) - Giáo trình FPT
Bài 3: Ngôn ngữ truy vân có cấu trúc (SQL) - Giáo trình FPTBài 3: Ngôn ngữ truy vân có cấu trúc (SQL) - Giáo trình FPT
Bài 3: Ngôn ngữ truy vân có cấu trúc (SQL) - Giáo trình FPT
MasterCode.vn
 

Viewers also liked (15)

Ebook oracle-thuc-hanh-nguyen-huu-trong
Ebook oracle-thuc-hanh-nguyen-huu-trongEbook oracle-thuc-hanh-nguyen-huu-trong
Ebook oracle-thuc-hanh-nguyen-huu-trong
 
Tai lieu quan tri he thong erp oracle
Tai lieu quan tri he thong erp oracleTai lieu quan tri he thong erp oracle
Tai lieu quan tri he thong erp oracle
 
Understand
UnderstandUnderstand
Understand
 
Phần mềm quản lý doanh nghiệp ERP
Phần mềm quản lý doanh nghiệp ERPPhần mềm quản lý doanh nghiệp ERP
Phần mềm quản lý doanh nghiệp ERP
 
Nhom 16 big data
Nhom 16 big dataNhom 16 big data
Nhom 16 big data
 
Bai kiem tra hqtcsdl Oracle khoa CNTT DHCT
Bai kiem tra hqtcsdl Oracle khoa CNTT DHCTBai kiem tra hqtcsdl Oracle khoa CNTT DHCT
Bai kiem tra hqtcsdl Oracle khoa CNTT DHCT
 
Giao trinh oracle[bookbooming.com]
Giao trinh oracle[bookbooming.com]Giao trinh oracle[bookbooming.com]
Giao trinh oracle[bookbooming.com]
 
Hdsd quan triwebjoomla
Hdsd quan triwebjoomlaHdsd quan triwebjoomla
Hdsd quan triwebjoomla
 
Tập trung hay là chết
Tập trung hay là chếtTập trung hay là chết
Tập trung hay là chết
 
ZK framework
ZK frameworkZK framework
ZK framework
 
AntoanbaomatQQQQQQQQQ
AntoanbaomatQQQQQQQQQAntoanbaomatQQQQQQQQQ
AntoanbaomatQQQQQQQQQ
 
OCP Advisor Tips on How to Become OCP
OCP Advisor Tips on How to Become OCPOCP Advisor Tips on How to Become OCP
OCP Advisor Tips on How to Become OCP
 
All Oracle DBAs have to know about Unix Memory Monitoring
All Oracle DBAs have to know about Unix Memory MonitoringAll Oracle DBAs have to know about Unix Memory Monitoring
All Oracle DBAs have to know about Unix Memory Monitoring
 
Tài liệu data warehouse vietsub
Tài liệu data warehouse  vietsubTài liệu data warehouse  vietsub
Tài liệu data warehouse vietsub
 
Bài 3: Ngôn ngữ truy vân có cấu trúc (SQL) - Giáo trình FPT
Bài 3: Ngôn ngữ truy vân có cấu trúc (SQL) - Giáo trình FPTBài 3: Ngôn ngữ truy vân có cấu trúc (SQL) - Giáo trình FPT
Bài 3: Ngôn ngữ truy vân có cấu trúc (SQL) - Giáo trình FPT
 

Similar to Tip oracle

Cơ sở dữ liệu postgres
Cơ sở dữ liệu postgresCơ sở dữ liệu postgres
Cơ sở dữ liệu postgres
TechMaster Vietnam
 
csdl bai-thuchanh_02
csdl bai-thuchanh_02csdl bai-thuchanh_02
csdl bai-thuchanh_02
kikihoho
 
Qtu.vn sql - chuong 7
Qtu.vn  sql - chuong 7Qtu.vn  sql - chuong 7
Qtu.vn sql - chuong 7Hoang le Minh
 
02 stack queue
02 stack queue02 stack queue
02 stack queuelanheo04
 
Bài tập CTDL và GT 3
Bài tập CTDL và GT 3Bài tập CTDL và GT 3
Bài tập CTDL và GT 3
Hồ Lợi
 
Chuan viet code va thiet ke giao dien trong C#
Chuan viet code va thiet ke giao dien trong C#Chuan viet code va thiet ke giao dien trong C#
Chuan viet code va thiet ke giao dien trong C#Kuli An
 
Mô hình 3 lớp trong C#
Mô hình 3 lớp trong C#Mô hình 3 lớp trong C#
Mô hình 3 lớp trong C#
Trung Thành Nguyễn
 
slide_Chuong 3_ (1).ppt
slide_Chuong 3_ (1).pptslide_Chuong 3_ (1).ppt
slide_Chuong 3_ (1).ppt
23TrnhMDuynD16CNPM3
 
Cai tien trong lenh t sql cua sql server 2008 (2)
Cai tien trong lenh t sql cua sql server 2008 (2)Cai tien trong lenh t sql cua sql server 2008 (2)
Cai tien trong lenh t sql cua sql server 2008 (2)
khanhtoankmz
 
Training sql1
Training sql1Training sql1
Training sql1
Đông Đô
 
Huong dan 8 o so
Huong dan 8 o soHuong dan 8 o so
Huong dan 8 o so
shjdunglv
 
Bài 2 Làm quen với môi trường PHP và MySQL (phần 2) - Giáo trình FPT
Bài 2 Làm quen với môi trường PHP và MySQL (phần 2) - Giáo trình FPTBài 2 Làm quen với môi trường PHP và MySQL (phần 2) - Giáo trình FPT
Bài 2 Làm quen với môi trường PHP và MySQL (phần 2) - Giáo trình FPT
MasterCode.vn
 
b34-dml-sql-190213084703.pdf
b34-dml-sql-190213084703.pdfb34-dml-sql-190213084703.pdf
b34-dml-sql-190213084703.pdf
QuyVo27
 
Lappj trình hướng đối tượng
Lappj trình hướng đối tượngLappj trình hướng đối tượng
Lappj trình hướng đối tượng
Hưởng Nguyễn
 
csdl - buoi7-8-9
csdl - buoi7-8-9csdl - buoi7-8-9
csdl - buoi7-8-9
kikihoho
 
Thiet Ke Co So Du Lieu2
Thiet Ke Co So Du Lieu2Thiet Ke Co So Du Lieu2
Thiet Ke Co So Du Lieu2
Vo Oanh
 
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3
pisu412
 
NhomX.docx
NhomX.docxNhomX.docx
NhomX.docx
PhmQuang71
 
Access: Chuong III Thiet ke truy van Query.ppt
Access: Chuong III Thiet ke truy van Query.pptAccess: Chuong III Thiet ke truy van Query.ppt
Access: Chuong III Thiet ke truy van Query.ppt
PhamThiThuThuy1
 

Similar to Tip oracle (20)

Cơ sở dữ liệu postgres
Cơ sở dữ liệu postgresCơ sở dữ liệu postgres
Cơ sở dữ liệu postgres
 
csdl bai-thuchanh_02
csdl bai-thuchanh_02csdl bai-thuchanh_02
csdl bai-thuchanh_02
 
Qtu.vn sql - chuong 7
Qtu.vn  sql - chuong 7Qtu.vn  sql - chuong 7
Qtu.vn sql - chuong 7
 
02 stack queue
02 stack queue02 stack queue
02 stack queue
 
Bài tập CTDL và GT 3
Bài tập CTDL và GT 3Bài tập CTDL và GT 3
Bài tập CTDL và GT 3
 
Chuan viet code va thiet ke giao dien trong C#
Chuan viet code va thiet ke giao dien trong C#Chuan viet code va thiet ke giao dien trong C#
Chuan viet code va thiet ke giao dien trong C#
 
Mô hình 3 lớp trong C#
Mô hình 3 lớp trong C#Mô hình 3 lớp trong C#
Mô hình 3 lớp trong C#
 
slide_Chuong 3_ (1).ppt
slide_Chuong 3_ (1).pptslide_Chuong 3_ (1).ppt
slide_Chuong 3_ (1).ppt
 
Cai tien trong lenh t sql cua sql server 2008 (2)
Cai tien trong lenh t sql cua sql server 2008 (2)Cai tien trong lenh t sql cua sql server 2008 (2)
Cai tien trong lenh t sql cua sql server 2008 (2)
 
Training sql1
Training sql1Training sql1
Training sql1
 
Huong dan 8 o so
Huong dan 8 o soHuong dan 8 o so
Huong dan 8 o so
 
Bài 2 Làm quen với môi trường PHP và MySQL (phần 2) - Giáo trình FPT
Bài 2 Làm quen với môi trường PHP và MySQL (phần 2) - Giáo trình FPTBài 2 Làm quen với môi trường PHP và MySQL (phần 2) - Giáo trình FPT
Bài 2 Làm quen với môi trường PHP và MySQL (phần 2) - Giáo trình FPT
 
Co ban ve_matlab
Co ban ve_matlabCo ban ve_matlab
Co ban ve_matlab
 
b34-dml-sql-190213084703.pdf
b34-dml-sql-190213084703.pdfb34-dml-sql-190213084703.pdf
b34-dml-sql-190213084703.pdf
 
Lappj trình hướng đối tượng
Lappj trình hướng đối tượngLappj trình hướng đối tượng
Lappj trình hướng đối tượng
 
csdl - buoi7-8-9
csdl - buoi7-8-9csdl - buoi7-8-9
csdl - buoi7-8-9
 
Thiet Ke Co So Du Lieu2
Thiet Ke Co So Du Lieu2Thiet Ke Co So Du Lieu2
Thiet Ke Co So Du Lieu2
 
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3
 
NhomX.docx
NhomX.docxNhomX.docx
NhomX.docx
 
Access: Chuong III Thiet ke truy van Query.ppt
Access: Chuong III Thiet ke truy van Query.pptAccess: Chuong III Thiet ke truy van Query.ppt
Access: Chuong III Thiet ke truy van Query.ppt
 

Recently uploaded

CHUYÊN ĐỀ DẠY THÊM HÓA HỌC LỚP 10 - SÁCH MỚI - FORM BÀI TẬP 2025 (DÙNG CHUNG ...
CHUYÊN ĐỀ DẠY THÊM HÓA HỌC LỚP 10 - SÁCH MỚI - FORM BÀI TẬP 2025 (DÙNG CHUNG ...CHUYÊN ĐỀ DẠY THÊM HÓA HỌC LỚP 10 - SÁCH MỚI - FORM BÀI TẬP 2025 (DÙNG CHUNG ...
CHUYÊN ĐỀ DẠY THÊM HÓA HỌC LỚP 10 - SÁCH MỚI - FORM BÀI TẬP 2025 (DÙNG CHUNG ...
Nguyen Thanh Tu Collection
 
trắc nhiệm ký sinh.docxddddddddddddddddd
trắc nhiệm ký sinh.docxdddddddddddddddddtrắc nhiệm ký sinh.docxddddddddddddddddd
trắc nhiệm ký sinh.docxddddddddddddddddd
my21xn0084
 
BÀI TẬP DẠY THÊM HÓA HỌC LỚP 12 - CẢ NĂM - THEO FORM THI MỚI BGD 2025 (DÙNG C...
BÀI TẬP DẠY THÊM HÓA HỌC LỚP 12 - CẢ NĂM - THEO FORM THI MỚI BGD 2025 (DÙNG C...BÀI TẬP DẠY THÊM HÓA HỌC LỚP 12 - CẢ NĂM - THEO FORM THI MỚI BGD 2025 (DÙNG C...
BÀI TẬP DẠY THÊM HÓA HỌC LỚP 12 - CẢ NĂM - THEO FORM THI MỚI BGD 2025 (DÙNG C...
Nguyen Thanh Tu Collection
 
Biểu tượng trăng và bầu trời trong tác phẩm của Nguyễn Quang Thiều
Biểu tượng trăng và bầu trời trong tác phẩm của Nguyễn Quang ThiềuBiểu tượng trăng và bầu trời trong tác phẩm của Nguyễn Quang Thiều
Biểu tượng trăng và bầu trời trong tác phẩm của Nguyễn Quang Thiều
lamluanvan.net Viết thuê luận văn
 
tiếng việt dành cho sinh viên ngoại ngữ h
tiếng việt dành cho sinh viên ngoại ngữ htiếng việt dành cho sinh viên ngoại ngữ h
tiếng việt dành cho sinh viên ngoại ngữ h
huynhanhthu082007
 
BÀI TẬP BỔ TRỢ TIẾNG ANH I-LEARN SMART WORLD 9 CẢ NĂM CÓ TEST THEO UNIT NĂM H...
BÀI TẬP BỔ TRỢ TIẾNG ANH I-LEARN SMART WORLD 9 CẢ NĂM CÓ TEST THEO UNIT NĂM H...BÀI TẬP BỔ TRỢ TIẾNG ANH I-LEARN SMART WORLD 9 CẢ NĂM CÓ TEST THEO UNIT NĂM H...
BÀI TẬP BỔ TRỢ TIẾNG ANH I-LEARN SMART WORLD 9 CẢ NĂM CÓ TEST THEO UNIT NĂM H...
Nguyen Thanh Tu Collection
 
BÁO CÁO CUỐI KỲ PHÂN TÍCH THIẾT KẾ HƯỚNG ĐỐI TƯỢNG - NHÓM 7.docx
BÁO CÁO CUỐI KỲ PHÂN TÍCH THIẾT KẾ HƯỚNG ĐỐI TƯỢNG - NHÓM 7.docxBÁO CÁO CUỐI KỲ PHÂN TÍCH THIẾT KẾ HƯỚNG ĐỐI TƯỢNG - NHÓM 7.docx
BÁO CÁO CUỐI KỲ PHÂN TÍCH THIẾT KẾ HƯỚNG ĐỐI TƯỢNG - NHÓM 7.docx
HngL891608
 
YHocData.com-bộ-câu-hỏi-mô-phôi.pdf đầy đủ
YHocData.com-bộ-câu-hỏi-mô-phôi.pdf đầy đủYHocData.com-bộ-câu-hỏi-mô-phôi.pdf đầy đủ
YHocData.com-bộ-câu-hỏi-mô-phôi.pdf đầy đủ
duyanh05052004
 
Từ ngữ về con người và chiến tranh trong Nhật ký Đặng Thùy Trâm.pdf
Từ ngữ về con người và chiến tranh trong Nhật ký Đặng Thùy Trâm.pdfTừ ngữ về con người và chiến tranh trong Nhật ký Đặng Thùy Trâm.pdf
Từ ngữ về con người và chiến tranh trong Nhật ký Đặng Thùy Trâm.pdf
Man_Ebook
 
[NBV]-CHUYÊN ĐỀ 3. GTLN-GTNN CỦA HÀM SỐ (CÓ ĐÁP ÁN CHI TIẾT).pdf
[NBV]-CHUYÊN ĐỀ 3. GTLN-GTNN CỦA HÀM SỐ (CÓ ĐÁP ÁN CHI TIẾT).pdf[NBV]-CHUYÊN ĐỀ 3. GTLN-GTNN CỦA HÀM SỐ (CÓ ĐÁP ÁN CHI TIẾT).pdf
[NBV]-CHUYÊN ĐỀ 3. GTLN-GTNN CỦA HÀM SỐ (CÓ ĐÁP ÁN CHI TIẾT).pdf
NamNguynHi23
 
Halloween vocabulary for kids in primary school
Halloween vocabulary for kids in primary schoolHalloween vocabulary for kids in primary school
Halloween vocabulary for kids in primary school
AnhPhm265031
 
PLĐC-chương 1 (1).ppt của trường ĐH Ngoại thương
PLĐC-chương 1 (1).ppt của trường  ĐH Ngoại thươngPLĐC-chương 1 (1).ppt của trường  ĐH Ngoại thương
PLĐC-chương 1 (1).ppt của trường ĐH Ngoại thương
hieutrinhvan27052005
 
100 DẪN CHỨNG NGHỊ LUẬN XÃ HỘiI HAY.docx
100 DẪN CHỨNG NGHỊ LUẬN XÃ HỘiI HAY.docx100 DẪN CHỨNG NGHỊ LUẬN XÃ HỘiI HAY.docx
100 DẪN CHỨNG NGHỊ LUẬN XÃ HỘiI HAY.docx
khanhthy3000
 
Tuyển tập 9 chuyên đề bồi dưỡng Toán lớp 5 cơ bản và nâng cao ôn thi vào lớp ...
Tuyển tập 9 chuyên đề bồi dưỡng Toán lớp 5 cơ bản và nâng cao ôn thi vào lớp ...Tuyển tập 9 chuyên đề bồi dưỡng Toán lớp 5 cơ bản và nâng cao ôn thi vào lớp ...
Tuyển tập 9 chuyên đề bồi dưỡng Toán lớp 5 cơ bản và nâng cao ôn thi vào lớp ...
Bồi Dưỡng HSG Toán Lớp 3
 
THONG BAO nop ho so xet tuyen TS6 24-25.pdf
THONG BAO nop ho so xet tuyen TS6 24-25.pdfTHONG BAO nop ho so xet tuyen TS6 24-25.pdf
THONG BAO nop ho so xet tuyen TS6 24-25.pdf
QucHHunhnh
 
Smartbiz_He thong MES nganh may mac_2024june
Smartbiz_He thong MES nganh may mac_2024juneSmartbiz_He thong MES nganh may mac_2024june
Smartbiz_He thong MES nganh may mac_2024june
SmartBiz
 
DANH SÁCH XÉT TUYỂN SỚM_NĂM 2023_học ba DPY.pdf
DANH SÁCH XÉT TUYỂN SỚM_NĂM 2023_học ba DPY.pdfDANH SÁCH XÉT TUYỂN SỚM_NĂM 2023_học ba DPY.pdf
DANH SÁCH XÉT TUYỂN SỚM_NĂM 2023_học ba DPY.pdf
thanhluan21
 
Từ vay mượn trong tiếng Anh trên các phương tiện tin đại chúng
Từ vay mượn trong tiếng Anh trên các phương tiện tin đại chúngTừ vay mượn trong tiếng Anh trên các phương tiện tin đại chúng
Từ vay mượn trong tiếng Anh trên các phương tiện tin đại chúng
MinhSangPhmHunh
 
bài dự thi chính luận 2024 đảng chọn lọc.docx
bài dự thi chính luận 2024 đảng chọn lọc.docxbài dự thi chính luận 2024 đảng chọn lọc.docx
bài dự thi chính luận 2024 đảng chọn lọc.docx
HiYnThTh
 

Recently uploaded (19)

CHUYÊN ĐỀ DẠY THÊM HÓA HỌC LỚP 10 - SÁCH MỚI - FORM BÀI TẬP 2025 (DÙNG CHUNG ...
CHUYÊN ĐỀ DẠY THÊM HÓA HỌC LỚP 10 - SÁCH MỚI - FORM BÀI TẬP 2025 (DÙNG CHUNG ...CHUYÊN ĐỀ DẠY THÊM HÓA HỌC LỚP 10 - SÁCH MỚI - FORM BÀI TẬP 2025 (DÙNG CHUNG ...
CHUYÊN ĐỀ DẠY THÊM HÓA HỌC LỚP 10 - SÁCH MỚI - FORM BÀI TẬP 2025 (DÙNG CHUNG ...
 
trắc nhiệm ký sinh.docxddddddddddddddddd
trắc nhiệm ký sinh.docxdddddddddddddddddtrắc nhiệm ký sinh.docxddddddddddddddddd
trắc nhiệm ký sinh.docxddddddddddddddddd
 
BÀI TẬP DẠY THÊM HÓA HỌC LỚP 12 - CẢ NĂM - THEO FORM THI MỚI BGD 2025 (DÙNG C...
BÀI TẬP DẠY THÊM HÓA HỌC LỚP 12 - CẢ NĂM - THEO FORM THI MỚI BGD 2025 (DÙNG C...BÀI TẬP DẠY THÊM HÓA HỌC LỚP 12 - CẢ NĂM - THEO FORM THI MỚI BGD 2025 (DÙNG C...
BÀI TẬP DẠY THÊM HÓA HỌC LỚP 12 - CẢ NĂM - THEO FORM THI MỚI BGD 2025 (DÙNG C...
 
Biểu tượng trăng và bầu trời trong tác phẩm của Nguyễn Quang Thiều
Biểu tượng trăng và bầu trời trong tác phẩm của Nguyễn Quang ThiềuBiểu tượng trăng và bầu trời trong tác phẩm của Nguyễn Quang Thiều
Biểu tượng trăng và bầu trời trong tác phẩm của Nguyễn Quang Thiều
 
tiếng việt dành cho sinh viên ngoại ngữ h
tiếng việt dành cho sinh viên ngoại ngữ htiếng việt dành cho sinh viên ngoại ngữ h
tiếng việt dành cho sinh viên ngoại ngữ h
 
BÀI TẬP BỔ TRỢ TIẾNG ANH I-LEARN SMART WORLD 9 CẢ NĂM CÓ TEST THEO UNIT NĂM H...
BÀI TẬP BỔ TRỢ TIẾNG ANH I-LEARN SMART WORLD 9 CẢ NĂM CÓ TEST THEO UNIT NĂM H...BÀI TẬP BỔ TRỢ TIẾNG ANH I-LEARN SMART WORLD 9 CẢ NĂM CÓ TEST THEO UNIT NĂM H...
BÀI TẬP BỔ TRỢ TIẾNG ANH I-LEARN SMART WORLD 9 CẢ NĂM CÓ TEST THEO UNIT NĂM H...
 
BÁO CÁO CUỐI KỲ PHÂN TÍCH THIẾT KẾ HƯỚNG ĐỐI TƯỢNG - NHÓM 7.docx
BÁO CÁO CUỐI KỲ PHÂN TÍCH THIẾT KẾ HƯỚNG ĐỐI TƯỢNG - NHÓM 7.docxBÁO CÁO CUỐI KỲ PHÂN TÍCH THIẾT KẾ HƯỚNG ĐỐI TƯỢNG - NHÓM 7.docx
BÁO CÁO CUỐI KỲ PHÂN TÍCH THIẾT KẾ HƯỚNG ĐỐI TƯỢNG - NHÓM 7.docx
 
YHocData.com-bộ-câu-hỏi-mô-phôi.pdf đầy đủ
YHocData.com-bộ-câu-hỏi-mô-phôi.pdf đầy đủYHocData.com-bộ-câu-hỏi-mô-phôi.pdf đầy đủ
YHocData.com-bộ-câu-hỏi-mô-phôi.pdf đầy đủ
 
Từ ngữ về con người và chiến tranh trong Nhật ký Đặng Thùy Trâm.pdf
Từ ngữ về con người và chiến tranh trong Nhật ký Đặng Thùy Trâm.pdfTừ ngữ về con người và chiến tranh trong Nhật ký Đặng Thùy Trâm.pdf
Từ ngữ về con người và chiến tranh trong Nhật ký Đặng Thùy Trâm.pdf
 
[NBV]-CHUYÊN ĐỀ 3. GTLN-GTNN CỦA HÀM SỐ (CÓ ĐÁP ÁN CHI TIẾT).pdf
[NBV]-CHUYÊN ĐỀ 3. GTLN-GTNN CỦA HÀM SỐ (CÓ ĐÁP ÁN CHI TIẾT).pdf[NBV]-CHUYÊN ĐỀ 3. GTLN-GTNN CỦA HÀM SỐ (CÓ ĐÁP ÁN CHI TIẾT).pdf
[NBV]-CHUYÊN ĐỀ 3. GTLN-GTNN CỦA HÀM SỐ (CÓ ĐÁP ÁN CHI TIẾT).pdf
 
Halloween vocabulary for kids in primary school
Halloween vocabulary for kids in primary schoolHalloween vocabulary for kids in primary school
Halloween vocabulary for kids in primary school
 
PLĐC-chương 1 (1).ppt của trường ĐH Ngoại thương
PLĐC-chương 1 (1).ppt của trường  ĐH Ngoại thươngPLĐC-chương 1 (1).ppt của trường  ĐH Ngoại thương
PLĐC-chương 1 (1).ppt của trường ĐH Ngoại thương
 
100 DẪN CHỨNG NGHỊ LUẬN XÃ HỘiI HAY.docx
100 DẪN CHỨNG NGHỊ LUẬN XÃ HỘiI HAY.docx100 DẪN CHỨNG NGHỊ LUẬN XÃ HỘiI HAY.docx
100 DẪN CHỨNG NGHỊ LUẬN XÃ HỘiI HAY.docx
 
Tuyển tập 9 chuyên đề bồi dưỡng Toán lớp 5 cơ bản và nâng cao ôn thi vào lớp ...
Tuyển tập 9 chuyên đề bồi dưỡng Toán lớp 5 cơ bản và nâng cao ôn thi vào lớp ...Tuyển tập 9 chuyên đề bồi dưỡng Toán lớp 5 cơ bản và nâng cao ôn thi vào lớp ...
Tuyển tập 9 chuyên đề bồi dưỡng Toán lớp 5 cơ bản và nâng cao ôn thi vào lớp ...
 
THONG BAO nop ho so xet tuyen TS6 24-25.pdf
THONG BAO nop ho so xet tuyen TS6 24-25.pdfTHONG BAO nop ho so xet tuyen TS6 24-25.pdf
THONG BAO nop ho so xet tuyen TS6 24-25.pdf
 
Smartbiz_He thong MES nganh may mac_2024june
Smartbiz_He thong MES nganh may mac_2024juneSmartbiz_He thong MES nganh may mac_2024june
Smartbiz_He thong MES nganh may mac_2024june
 
DANH SÁCH XÉT TUYỂN SỚM_NĂM 2023_học ba DPY.pdf
DANH SÁCH XÉT TUYỂN SỚM_NĂM 2023_học ba DPY.pdfDANH SÁCH XÉT TUYỂN SỚM_NĂM 2023_học ba DPY.pdf
DANH SÁCH XÉT TUYỂN SỚM_NĂM 2023_học ba DPY.pdf
 
Từ vay mượn trong tiếng Anh trên các phương tiện tin đại chúng
Từ vay mượn trong tiếng Anh trên các phương tiện tin đại chúngTừ vay mượn trong tiếng Anh trên các phương tiện tin đại chúng
Từ vay mượn trong tiếng Anh trên các phương tiện tin đại chúng
 
bài dự thi chính luận 2024 đảng chọn lọc.docx
bài dự thi chính luận 2024 đảng chọn lọc.docxbài dự thi chính luận 2024 đảng chọn lọc.docx
bài dự thi chính luận 2024 đảng chọn lọc.docx
 

Tip oracle

  • 1. 1. Tối ưu hóa câu lệnh SQL – Tối ưu hóa câu lệnh truy vấn với bảng đánh partition và index Vấn đề: Đối với những bảng có dữ liệu lớn, khi tạo bảng người thiết kế phải thực hiện một số kỹ thuật để tăng tốc độ truy vấn dữ liệu như đánh index, partition. Khi truy vấn người lập trình phải tuân thủ một số nguyên tắc để đảm bảo tối ưu hóa thời gian thực hiện câu lệnh: Không nên sử dụng hàm đối với trường đánh index, partition: 1 2 3 4 -- khong nen su dung SELECT * FROM users WHERE UPPER (user_name) = UPPER ('USER_NAME'); Không nên sử dụng sử dụng toán tử not like, not in, <> với trường đánh index, partition 1 2 3 4 5 6 7 8 9 10 11 12 -- khong nen su dung SELECT * FROM users WHERE user_name NOT LIKE 'USER_NAME%'; -- khong nen su dung SELECT * FROM users WHERE user_name NOT IN ('USER_NAME1', 'USER_NAME2', 'USER_NAME3'); -- khong nen su dung SELECT * FROM users WHERE user_name <> 'USER_NAME1'; Không nên sử dụng like ‘%str’ 1 2 3 4 -- khong nen su dung SELECT * FROM users WHERE user_name LIKE '%USER_NAME'; Lưu ý: Các trường hợp trên không nên sử dụng do làm mất tác dụng của cột đánh index – Khi nào dùng IN, khi nào dùng EXISTS Vấn đề: Trong một số trường hợp dữ liệu lớn, khi cần sử dụng toán tử IN hoặc Exists trong câu lệnh có thể tốc độ thực thi câu lệnh khác nhau tương đối lớn. Để quyết định dùng toán tử nào ta dựa vào đánh giá sau: Bản chất câu lệnh khi dùng toán tử IN
  • 2. 1 2 3 4 5 6 7 8 9 10 SELECT * FROM t1 WHERE x IN (SELECT y FROM t2); --Dien giai (tuong duong voi cau lenh sau) SELECT * FROM t1, (SELECT DISTINCT y FROM t2) t2 WHERE t1.x = t2.y; Câu lệnh này quét dữ liệu full bảng T2 khi thực hiện câu lệnh SELECT DISTINCT y FROM t2; nếu bảng dữ liệu T2 lớn thì thời gian thực hiện câu lệnh tương đối chậm Bản chất câu lệnh dùng Exists 1 2 3 4 5 6 7 for x in ( select * from t1 ) loop if ( exists ( select null from t2 where y = x.x )) then OUTPUT THE RECORD end if end loop; Câu lệnh này quét dữ liệu full bảng T1, trường hợp bảng T2 đánh index theo trường y thì tốc độ truy vấn dữ liệu bảng T2 tương đối nhanh  Dùng IN khi: Dữ liệu bảng T1 lớn hơn dữ liệu ở bảng T2  Dùng Exists khi: Dữ liệu bảng T2 lớn hơn dữ liệu bảng T1, trường điều kiện được đánh index  Nếu dữ liệu cả 2 bảng đều lớn, hoặc tương đương nhau thì 2 cách dùng có thời gian thực hiện tương đương nhau 2. Cấu trúc dữ liệu hình cây Vấn đề: Bảng dữ liệu được thiết kế theo quan hệ cha – con, xây dựng cấu trúc hình cây dữ liệu, lấy ra cấp của mỗi nút trên cây Giải pháp: Sử dụng cấu trúc start with, connect by để lấy ra thông tin Cấu trúc lệnh: 1 2 3 4 5 SELECT object_code, LPAD (' ', LEVEL * 5, ' ') || object_name, CONNECT_BY_ROOT (object_code) FROM objects WHERE app_id = 2609 START WITH parent_id IS NULL CONNECT BY PRIOR object_id = parent_id;
  • 3. 6 Trong đó:  START WITH parent_id IS NULL: Điều kiện xác định nút gồc, có thể có nhiều nút gốc trong trường hợp có nhiều cây  CONNECT BY PRIOR object_id = parent_id: hướng phát triển của cây, đây là cách xác định nút con, vế có prior là nút cha đã được xác định, vế còn lại là nút con.  CONNECT_BY_ROOT(column_name) lấy ra giá trị trường của nút gốc  Level: Lấy ra cấp của nút, bắt đầu từ 1  Hàm LPAD(str1, length, str2): So sánh độ dài xâu str1 với length, nếu nhó hơn bao nhiêu ký tự thì thêm bếnh nhiêu ký tự của xâu str2 vào bên trái xâu str1 3. Lấy ra n giá trị theo sắp xếp Bài toán: Cho bảng SINHVIEN với 2 trường (MA_SV, DIEM), lấy ra 10 sinh viên có số điểm cao nhất Giải pháp: – Cách 1: sử dụng thuộc tính rownum khi để giới hạn số lượng bản ghi lấy ra từ tập các bản ghi đã sắp xếp tăng dần (hoặc giảm dầm). Câu lệnh 1 2 3 4 5 SELECT * FROM (SELECT * FROM sinhvien ORDER BY diem DESC) WHERE ROWNUM <= 10 Nhận xét: Với cách sử dụng này ta lấy ra được đúng 10 bản ghi đứng đầu khi sắp xếp, trường hợp có 20 sinh viên dẫn đầu có điểm bằng nhau thì chỉ lấy được 10 sinh viên Lưu ý: Câu lệnh sau lấy ra 10 bản ghi nhưng không phải bản ghi có điểm lớn nhất, do thuộc tính rownum được gán trước khi sắp xếp 1 2 3 4 SELECT * FROM sinhvien WHERE ROWNUM <= 10 ORDER BY diem DESC; – Cách 2: Sử dụng hàm rank() over để đưa ra thứ tự của bản ghi 1 2 3 SELECT * FROM (SELECT ma_sv, RANK () OVER (ORDER BY diem DESC) AS rank_diem FROM sinhvien)
  • 4. 4 5 WHERE rank_diem <= 10 ORDER BY rank_diem; Nhận xét: Câu lệnh này lấy ra danh sách sinh viên thuộc top 10, có nghĩa là có thể có nhiều hơn 10 bản ghi nếu có nhiều sinh viên trùng điểm nhau. Điểm của sinh viên được sắp xếp là gán số thứ tự, các sinh viên có điểm giống nhau thì có số thứ tự giống nhau. Câu lệnh này lấy ra danh sách sinh viên thuộc top 10 điểm cao nhất (có thể >10 sinh viên) 4. Sử dụng Database Link – Vấn đề: Để truy vấn dữ liệu từ một DB khác ta thông qua đối tượng Database link – Câu lệnh tạo Database link: 1 2 3 4 5 6 7 8 9 10 11 12 CREATE SHARED DATABASE LINK dbl_test CONNECT TO bccs_anypay_app IDENTIFIED BY abc AUTHENTICATED BY bccs_anypay_app IDENTIFIED BY abc USING '(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.58.3.65)(PORT = 1521)) ) (CONNECT_DATA = (SID = dbtest) ) ) '; – Câu lệnh sử dụng Database link: 1 2 SELECT * FROM <schema_name>.<table_name>@dbl_test; 5. Sử dụng lệnh Merge Vấn đề: Khi cần insert hoặc update dữ liệu từ bảng A sang bảng B có cấu trúc tương tự nhau mà không cần kiểm tra bản ghi đó đã tồn tại hay chưa tao dùng câu lệnh sau: 1 2 3 4 5 6 7 8 MERGE INTO test1 a USING test2 b ON (a.object_id = b.object_id) WHEN MATCHED THEN UPDATE SET a.status = b.status WHEN NOT MATCHED THEN INSERT (object_id, status) VALUES (b.object_id, b.status)
  • 5. 9 – Giải thích: Bảng test1, test2 có cấu trúc như nhau, câu lệnh trên dùng để đẩy dữ liệu từ bảng test2 sang bảng test1, nếu bản ghi ở bảng test2 đã tồn tại ở test1 thì thực hiện update trường status, ngược lại insert bản ghi mới vào bảng test1 6. Schema Trigger – Vấn đề: Khi trong code có sử dụng các câu lệnh SQL thuần, tên bảng không đặt tên schema ở đầu. Khi triển khai lên server, user dùng kết nối vào DB không phải là user chứa các bảng dữ liệu – Giải pháp: Tạm thời để chạy được các câu truy vấn với các bảng của một schema khác mà không có tiền tố schema ở đầu ta tạo trigger set schema mặc định cho user sau khi đăng nhập = schema chứa bảng dữ liệu – Câu lệnh thực hiện: 1 2 3 4 5 6 CREATE OR REPLACE TRIGGER db_anypay_app_logon AFTER LOGON ON DATABASE WHEN (USER = 'BCCS_ANYPAY' ) BEGIN execute immediate 'ALTER SESSION SET CURRENT_SCHEMA = ANYPAY_OWNER'; END; 7. Xóa dữ liệu trùng nhau – Vấn đề: Khi bảng dữ liệu không có khóa chính có 2 hoặc nhiều bản ghi trùng nhau, nếu cần xóa 1 bản ghi trong 2 hoặc nhiều bản ghi để tránh trùng lặp dữ liệu. – Giái pháp: Để xóa 1 trong 2 bản ghi trùng nhau ta xác định các bản ghi bị lặp sau đó lấy ra 1 bản ghi dựa vào thuộc tính ROWID – Câu lệnh thực hiện: 1 2 3 4 5 6 7 DELETE FROM users WHERE ROWID IN (SELECT row_id FROM (SELECT MAX (ROWID) AS row_id, COUNT (*), user_id FROM users GROUP BY user_id HAVING COUNT (*) > 1)) – Lưu ý: Nếu số bản ghi trùng nhau > 2 thì phải chạy nhiều lần để xóa hết 8. Thuộc tính rowdependencies của bảng – Vấn đề: Với một bảng dữ liệu, khi cần biết thời gian sau cùng tác động lên bản ghi dữ liệu – Giải pháp: Dựa vào thuộc tính ora_rowscn và sử dụng hàm scn_to_timestamp để chuyển về
  • 6. kiểu date – Ví dụ: 1 2 SELECT scn_to_timestamp (ORA_ROWSCN) FROM staff; – Để thông tin thuộc tính ora_rowscn với mỗi bản ghi khác nhau, khi tạo bảng ta phải đặt thuộc tính rowdependencies cho bảng, ví dụ 1 2 3 4 5 6 7 CREATE TABLE tbl_temp ( ID NUMBER(10), user_name VARCHAR (20), passwd VARCHAR (100) ) ROWDEPENDENCIES; 9. Sử dụng select table as timestamp – Vấn đề: Khi ta chẳng may xóa mất dữ liệu hoặc update 1 bản ghi và commit dữ liệu, ta cần xem lại hoặc khôi phục lại bản ghi đó – Giải pháp: Select bảng tại thời điểm trước khi xóa hoặc update dữ liệu bằng lệnh ten_bang as of timestamp thoi_gian – Câu lệnh: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 -- xoa du lieu DELETE FROM staff WHERE staff_id = 172143; -- commit du lieu COMMIT ; -- hien thi lai du lieu da xoa trong vong 1 ngay SELECT * FROM staff AS OF TIMESTAMP SYSDATE - 1 WHERE staff_id = 172143; -- Khoi phuc lai du lieu da xoa INSERT INTO staff SELECT * FROM staff AS OF TIMESTAMP SYSDATE - 1 WHERE staff_id = 172143; -- commit du lieu COMMIT;
  • 7. 10. Thực hiện export database – Điều kiện: Máy tính phải cài oracle_client, trong file ts_name phải có thông tin DB cần dump Bước 1: gõ lệnh exp Bước 2: nhập user_name/password@ts_name Trong đó:  User_name: user đăng nhập DB  Password: mật khẩu đăng nhập  Ts_name: tên Database trong file ts_name Bước 3: Nhập số byte buffer khi dump DB, nếu để mặc định là 4096 thì nhấn Enter Bước 4: Nhập đường dẫn lưu file dmp trên máy local, sau khi dump sẽ sinh ra file duôi dmp và lưu trên máy Bước 5: Lựa chọn import cả schema hay chỉ một số bảng, nếu chọn export một số bảng thì phải nhập lần lượt từng bảng Bước 6: Lựa chọn có export dữ liệu trong bảng hay không, nếu chọn no thì chỉ export được cấu trúc của bảng Bước 7: Chọn nén dữ liệu khi export hay không? mặc định chọn yes Bước 8: Nhập tên bảng cần export Bước 9: Nhập tên bảng tiếp theo cần export Bước 10: Nhấn Enter để bắt đầu quá trình export dữ liệu 11. Thực hiện import database Bước 1: Gõ lệnh imp Bước 2: Nhập thông tin kết nối vào Database Bước 3: Nhập đường dẫn chứa file dump Bước 4: Nhập số by dùng cho bộ nhớ đệm, thường để mặc định Bước 5: Lựa chọn liệt kê nội dung của file import Bước 6: Tùy chọn bỏ qua việc import nếu gặp lỗi tạo đối tượng đã có Bước 7: Import quyền của các user đối với các đối tượng import Bước 8: Tùy chọn import dữ liệu của bảng Bước 9: Tùy chọn import toàn bộ file hay chỉ import theo schema Bước 10: Nếu bước 9 chọn No thì phải nhập schema cần import Bước 11: Tùy chọn import một số bảng hay là tất cả các bảng trong schema 12. Tìm kiếm bản ghi bị lock và kill session lock bản ghi – Vấn đề: Khi thực hiện thao tác với dữ liệu của bảng, một số trường hợp bản ghi bị session lock nhưng không có thao tác commit hay rollback nên không được giải phóng. Với các bản ghi này người dùng không thể thực hiện update hay delete được – Giải pháp: Tìm kiếm ra session đang lock bản ghi để thực hiện kill session đó – Câu lệnh liệt kê ra các session lock đối tượng
  • 8. 1 2 3 4 5 6 7 8 9 SELECT c.owner, c.object_name, c.object_type, b.SID, b.serial#, b.status, b.osuser, b.machine, 'alter system kill session ''' || b.SID || ',' || b.serial# || ''' IMMEDIATE;' AS kill_sta FROM v$locked_object a, v$session b, dba_objects c WHERE b.SID = a.session_id AND a.object_id = c.object_id; – Câu lệnh kill session 1ALTER SYSTEM KILL SESSION 'sid,serial#'; Trong đó: SID, Serial#: được lấy từ bảng v$session 13. Một số bảng hệ thống hay sử dụng – Bảng v$sql: Lưu các câu lệnh tác động vào Database – Bảng v$session: Lưu các session hiện tại đang kết nối vào DB – Bảng v$locked_object: Lưu các đối được đang bị lock do một số thao tác cập nhật cấu trúc, dữ liệu – V$SPPARAMETER: Bảng lưu tham số cấu hình của hệ thống 14. Toán tử: some, any, all – Toán tử all: Được sử dụng để so sánh giá trị của một trường với một danh sách giá trị, toán tử all đi sau =, !=, >, <, <=, >=. – Bài toán: Cho bảng sinh_vien với các trường ma_sv, lop, diem. Tìm tất cả các sinh viên của lớp A có điểm lớn hơn bất kỳ sinh viên nào của lớp B – Câu lệnh như sau: 1 2 3 4 5 SELECT * FROM sinh_vien WHERE lop = 'A' AND diem > ALL (SELECT diem FROM sinh_vien WHERE lop = 'B'); – Giải thích: khi dùng toán tử all thì giá trị của cột diem phải > bất kỳ giá trị nào trong tập được chỉ ra sau all – Toán tử any, some: trong oracle 2 toán tử này có ý nghĩa như nhau: Bài toán: với bảng sinh_vien như trên, lấy ra danh sách các sinh viên lớp A có điểm lớn hơn 1 trong các sinh viên của lớp B – Câu lệnh:
  • 9. 1 2 3 4 5 6 7 8 9 10 SELECT * FROM sinh_vien WHERE lop = 'A' AND diem > ANY (SELECT diem FROM sinh_vien WHERE lop = 'B'); SELECT * FROM sinh_vien WHERE lop = 'A' AND diem > SOME (SELECT diem FROM sinh_vien WHERE lop = 'B'); 15. Sử dụng bảng tạm để lưu trữ dữ liệu (TEMPORARY TABLE) – Vấn đề: Trong một số trường hợp cần tổng hợp dữ liệu để xuất báo cáo hoặc đưa dữ liệu hiển thị ra giao diện. Khi ta không thể dùng 1 câu lệnh để lấy ra dữ liệu mà tổng hợp qua nhiều bước thì ta cần lưu lại dữ liệu tổng hợp sau đó lấy dữ liệu – Giải pháp: Trong oracle hỗ trợ việc tạo một bảng tạm (temporary table) để lưu trữ dữ liệu tạm thời với các đặc điểm:  Thao tác: Có thể sử dụng các câu Query, DML để thao tác với Temporary Table giống như một table bình thường.  Lưu trữ: Temporary table sử dụng Temporary tablespace để lưu dữ liệu.  Ảnh hưởng: Dữ liệu chỉ có hiệu lực trong phạm vi một Session hoặc một Transaction, việc quy định bảng nằm trong câu lệnh tạo bảng: 1 2 3 4 5 6 7 8 9 10 11 -- Du lieu chi ton tai trong 1 transation CREATE GLOBAL TEMPORARY TABLE my_temp_table ( column1 NUMBER, column2 NUMBER ) ON COMMIT DELETE ROWS; --du lieu ton tai trong session CREATE GLOBAL TEMPORARY TABLE my_temp_table ( column1 NUMBER, column2 NUMBER ) ON COMMIT PRESERVE ROWS;  Bảo mật: Cho dù dữ liệu đã commit, mỗi session cũng chỉ thấy được dữ liệu trong session đó  Xung đột: Do mỗi session có phần dữ liệu riêng nên tránh được việc xung đột dữ liệu, ví dụ như việc ghi đè dữ liệu của nhau là không xảy ra.  Dọn rác: Temporary table tự động dọn sạch dữ liệu khi kết thúc Session hoặc Transaction.
  • 10. – Ngoài ra còn có một số đặc điểm khác như:  Có thể tạo trigger, index trên temporary table.  Khi dùng lệnh truncate (DDL), chỉ có dữ liệu trên session hiện tại bị mất.  Khi export, phần cấu trúc của Temporary table cũng được export theo như table thường. 16. Dùng ký tự loại trừ trong Oracle với toán tử like – Vấn đề: Khi sử dụng toán tử like để tìm kiếm xâu gần đúng ta thường dùng 2 ký tự thay thế là ‘%’(thay thế cho 1 chuối) và ‘_’ (thay thế cho 1 ký tự). Trường hợp ta muốn tìm kiếm theo các trường có chứa ký tự này ta phải dùng ký tự loại trừ – Giải quyết: Trong Oracle để dùng ký tự loại trừ sau toán tử like ta dùng toán tử escape, cú pháp như sau: 1select * from test1 where col1 like '%_' escape ''; – Trong đó: ‘’ là ký tự loại trừ, ta có thể thay thế ký tự ‘’ bằng 1 ký tự bất kỳ ngoài ‘%’, ‘_’. Khi sử dụng ký tự loại trừ ta làm mất ý nghĩa của ký tự thay thế đứng ngay sau nó, nó trở thành 1 ký tự thường 17. Đánh partition tự động – Vấn đề: Đối với các bảng dữ liệu có đánh partition theo tháng hoặc theo ngày, người QTHT thường xuyên phải đánh partition, nếu quên dữ liệu insert vào sẽ bị lỗi và có thể dẫn đến lỗi toàn hệ thống. – Giải pháp: Để giải quyết vấn đề trên ta thường viết thủ tục đánh partition tự động cho bảng và đặt scheduler để chạy định kỳ. Việc đánh partition không ảnh hưởng tới các thao tác insert, select, update, delete. – Tư tưởng: Để đảm bảo có thể đánh partition một cách tự động ta phải đặt tên partition theo một số quy ước: Trong tên partition phải chứa thông tin về ngày tháng của dữ liệu Phần đầu của tên partition phải giống nhau – Dựa vào thông tin partition trong tên ta xác định thời gian cần đánh partition tiếp theo Code: 1 2 3 4 5 6 7 8 9 PROCEDURE proc_create_partition IS CURSOR c_partition IS SELECT object_name, MAX (SUBSTR (subobject_name, LENGTH (subobject_name) - 5, LENGTH (subobject_name) ) ) AS sub_partition FROM user_objects
  • 11. 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 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 WHERE object_type = 'TABLE PARTITION' AND object_name NOT LIKE 'BIN$%' AND object_name NOT IN ('AGENT_COUNTER') GROUP BY object_name; v_loop_str VARCHAR (3000); v_date DATE; p_error VARCHAR (2000); BEGIN FOR v_partition IN c_partition LOOP v_date := TO_DATE (v_partition.sub_partition, 'yyMMdd'); WHILE v_date <= ADD_MONTHS (TO_DATE (v_partition.sub_partition, 'yyMMdd'), 1) LOOP BEGIN v_date := v_date + 1; v_loop_str := ''; v_loop_str := 'alter table ' || v_partition.object_name || ' add partition DATA20' || TO_CHAR (v_date, 'yyMMdd') || ' values less than (to_date(''20' || TO_CHAR (v_date, 'yyMMdd') || ''',''yyyyMMdd''))'; DBMS_OUTPUT.put_line (v_loop_str); EXECUTE IMMEDIATE v_loop_str; v_loop_str := ''; EXCEPTION WHEN OTHERS THEN p_error := 'Loi xay ra khi them partition: ' || SQLERRM; DBMS_OUTPUT.put_line (p_error); END; END LOOP; END LOOP; END; 18. Drop scheduler đang chạy
  • 12. 1 2 3 4 5 BEGIN DBMS_SCHEDULER.drop_job (job_name => 'TTPM_DBA.SESSION_VIEW_JOB', FORCE => TRUE ); END; 19. Mã hóa thủ tục, function trong database – Vấn đề: Với một số thủ tục, funcion cần bảo mật thông tin. Sau khi tạo ta cần mã hóa nội dung để người khác không xem được – Giải pháp: Sử dụng hàm mã hóa của oracle theo cú pháp 1 2 3 BEGIN SYS.DBMS_DDL.create_wrapped (str); END; – Trong đó: str là xâu chứa câu lệnh tạo thủ tục 20. Commit trong hàm khi viết package – Vấn đề: Trong một số trường hợp khi thực hiện thao tác cập nhật dữ liệu trong một hàm ta cần commit hoặc rollback dữ liệu nhưng không muốn làm ảnh hưởng đến các phần khác. Ví dụ đối với hàm ghi log – Giải pháp: Giới hạn phạm vi commit, rollback dữ liệu trong hàm bằng cú pháp PRAGMA AUTONOMOUS_TRANSACTION – Ví dụ: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 PROCEDURE insert_rp_log_error ( p_app VARCHAR2, p_type VARCHAR2, p_object VARCHAR2, p_sta_datetime DATE, p_end_datetime DATE, p_description VARCHAR2 ) IS PRAGMA AUTONOMOUS_TRANSACTION; v_error VARCHAR2 (4000); BEGIN INSERT INTO cm_pos2.rp_log_error (app, TYPE, table_name, sta_datetime, end_datetime, description ) VALUES (p_app, p_type, p_object, p_sta_datetime, p_end_datetime, p_description ); COMMIT; EXCEPTION
  • 13. 19 20 21 22 23 24 25 26 WHEN OTHERS THEN ROLLBACK; END; – Với thủ tục này thì câu lệnh commit và rollback chỉ có tác dụng với các câu lệnh trong thủ tục