-- Ví dụ: Script PL/SQL thêm 1 triệu row vào bảng employees (bảng partition hoặc không partition)
-- Tạo bảng bang_to partition theo ngày
CREATE TABLE bang_to(
EmployeesID int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255),
create_date date
)
TABLESPACE DATA
PARTITION BY RANGE (create_date)
(
PARTITION DATA20230101 VALUES LESS THAN (TO_DATE('2023-01-02 00:00:00', 'YYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
TABLESPACE DATA2023);
-- Add partition hết năm 2023
DECLARE
v_nam NUMBER (4) := 2023;
v_owner varchar2 (50) := 'oaz18';
v_tablename VARCHAR2 (50) := 'bang_to';
v_date_from date := to_date('02/01/2023','dd/mm/yyyy');
v_date_to date := to_date('31/12/2023','dd/mm/yyyy');
v_numday number(5);
v_tablespace varchar2(50):='DATA';
BEGIN
v_numday:=v_date_to-v_date_from;
FOR i IN 0 .. v_numday
LOOP
DBMS_OUTPUT.put_line ('alter table '||v_owner||'.'|| v_tablename || ' add PARTITION DATA' ||to_char(v_date_from+i,'YYYYMMDD')||' VALUES LESS THAN (TO_DATE('''|| to_char(v_date_from+i+1,'YYYY-MM-DD')||' 00:00:00'',''SYYYY-MM-DD HH24:MI:SS'', ''NLS_CALENDAR=GREGORIAN'')) LOGGING TABLESPACE DATA'|| to_char(v_date_from+i,'YYYY')||';');
END LOOP;
END;
-- Them du lieu deu co cac partition theo ngay
declare
v_commit number;
v_reset_date number;
v_start date := to_date('01/01/2023','dd/mm/yyyy');
BEGIN
FOR v_LoopCounter IN 1..1000000 LOOP
if v_start = to_date('31/12/2023','dd/mm/yyyy') then
v_start := to_date('01/01/2023','dd/mm/yyyy');
end if;
INSERT INTO bang_to(EmployeesID, LastName, FirstName, Address, City,create_date)
VALUES (TO_CHAR(v_LoopCounter),'Name'||v_LoopCounter,'FirstName'||v_LoopCounter,'HANOI','HANOI',v_start);
v_start := v_start+1;
if v_commit=1 then
commit;
v_commit :=1;
end if;
END LOOP;
END;
--Them 10.000 row cho ngay hien tai (vd 20/06/2023)
BEGIN
FOR v_LoopCounter IN 1..10000 LOOP
INSERT INTO bang_to(EmployeesID, LastName, FirstName, Address, City, create_date)
VALUES (TO_CHAR(v_LoopCounter),'Name'||v_LoopCounter,'FirstName'||v_LoopCounter,'HANOI','HANOI', sysdate);
END LOOP;
COMMIT;
END;
-- Có thể Tạo bảng employees không partition
CREATE TABLE bang_to(
EmployeesID int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
TABLESPACE DATA
;
EmployeesID int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
TABLESPACE DATA
;
Thêm ít nhất 1.000.000 dòng dữ liệu vào bảng, sau đó kiểm tra dung lượng bảng (trường byte trong dba_segments).
BEGIN
FOR v_LoopCounter IN 1..1000000 LOOP
INSERT INTO bang_to(EmployeesID, LastName, FirstName, Address, City)
VALUES (TO_CHAR(v_LoopCounter),'Name'||v_LoopCounter,'FirstName'||v_LoopCounter,'HANOI','HANOI');
END LOOP;
COMMIT
END;
-- Ví dụ 1: Tạo bảng với 1.000.000 row hoặc hơn (sửa điều kiện bên dưới) rất dễ dàng
CREATE TABLE my_temp_table (
id NUMBER,
description VARCHAR2(20)
);
-- Insert dữ liệu
INSERT INTO my_temp_table
WITH data AS (
SELECT 1 AS id
FROM dual
CONNECT BY level < 10000
)
SELECT rownum, TO_CHAR(rownum)
FROM data a, data b
WHERE rownum <= 1000000;
-- Ví dụ 2: Tạo bảng với 1.000.000 row hoặc hơn (sửa điều kiện bên dưới) rất dễ dàng và test update
-- Thêm dữ liệu
create table test_update(id number, name varchar2(100), description varchar2(4000)) storage initial(48M next 4m); SQL> declare v_n number; v_name number; v_desc number; i number; begin for i in 1..1000000 LOOP insert into test_update(id, name, description) values(i, 'Test Name'||i, 'Test Name '||i||' description '); END LOOP; end; / Elapsed: 00:04:277.23 The above script will insert 1 million rows. SQL> select count(*) from test_update where description like '%5 description%'; COUNT(*) ---------- 100000 Elapsed: 00:00:02.63
-- Update SQL> create table test_update_rowids as select rowid rid, description from test_update where description like '%5 description%'; Elapsed: 00:00:54.58 The table test_update_rowids stores the rowids and the new values that has to be updated. ie 100000 rows needs to be updated. SQL> declare begin for c1 in(select rid, description from test_update_rowids) LOOP update test_update set description=c1.description||' after update' where rowid=c1.rid; END LOOP; end; /
-- Ví dụ 4:
begin for i in 1..100 loop insert /*+ append parallel (huge,12) */ into dw_huge huge (ID ,SOURCEID ,TIMESTAMPSOURCELT ,TIMESTAMPSOURCEUTC ,FRACTIONOFASECOND) select /*+ parallel (o,12) */ dw_huge_seq.nextval ,object_id ,sysdate ,sysdate+1/24 ,0 from all_objects o; commit; end loop; end;
/
-- Ví dụ 5:
create table big_table as select rownum id, OWNER, OBJECT_NAME, SUBOBJECT_NAME, OBJECT_ID, DATA_OBJECT_ID, OBJECT_TYPE, CREATED, LAST_DDL_TIME, TIMESTAMP, STATUS, TEMPORARY, GENERATED, SECONDARY from all_objects a where 1=0 / alter table big_table nologging; declare l_cnt number; l_rows number := &1; begin insert /*+ append */ into big_table select rownum, OWNER, OBJECT_NAME, SUBOBJECT_NAME, OBJECT_ID, DATA_OBJECT_ID, OBJECT_TYPE, CREATED, LAST_DDL_TIME, TIMESTAMP, STATUS, TEMPORARY, GENERATED, SECONDARY from all_objects a where rownum <= &1; l_cnt := sql%rowcount; commit; while (l_cnt < l_rows) loop insert /*+ APPEND */ into big_table select rownum+l_cnt, OWNER, OBJECT_NAME, SUBOBJECT_NAME, OBJECT_ID, DATA_OBJECT_ID, OBJECT_TYPE, CREATED, LAST_DDL_TIME, TIMESTAMP, STATUS, TEMPORARY, GENERATED, SECONDARY from big_table where rownum <= l_rows-l_cnt; l_cnt := l_cnt + sql%rowcount; commit; end loop; end; / alter table big_table add constraint big_table_pk primary key(id) / begin dbms_stats.gather_table_stats ( ownname => user, tabname => 'BIG_TABLE' ) cascade => TRUE ); end; / select count(*) from big_table;
-- Ví dụ 6:
SQL Monitor
Rows Processed : 1,000M (1B)Time to Complete : 36minsIO Requests : 444KIO Bytes : 458GB
Code
create table big_table
as
select rownum id,
OWNER, OBJECT_NAME, SUBOBJECT_NAME,
OBJECT_ID, DATA_OBJECT_ID,
OBJECT_TYPE, CREATED, LAST_DDL_TIME,
TIMESTAMP, STATUS, TEMPORARY,
GENERATED, SECONDARY
from all_objects a
where 1=0
/
alter table big_table nologging;
declare
l_cnt number;
l_rows number := &1;
begin
insert /*+ append */
into big_table
select rownum,
OWNER, OBJECT_NAME, SUBOBJECT_NAME,
OBJECT_ID, DATA_OBJECT_ID,
OBJECT_TYPE, CREATED, LAST_DDL_TIME,
TIMESTAMP, STATUS, TEMPORARY,
GENERATED, SECONDARY
from all_objects a
where rownum <= &1;
l_cnt := sql%rowcount;
commit;
while (l_cnt < l_rows)
loop
insert /*+ APPEND */ into big_table
select rownum+l_cnt,
OWNER, OBJECT_NAME, SUBOBJECT_NAME,
OBJECT_ID, DATA_OBJECT_ID,
OBJECT_TYPE, CREATED, LAST_DDL_TIME,
TIMESTAMP, STATUS, TEMPORARY,
GENERATED, SECONDARY
from big_table
where rownum <= l_rows-l_cnt;
l_cnt := l_cnt + sql%rowcount;
commit;
end loop;
end;
/
-- Ví dụ 7:
CREATE TABLE TRANSACTION (transaction_id, start_time)
AS SELECT LEVEL rn,SYSDATE
FROM DUAL
CONNECT BY LEVEL<=1000000
* 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
=============================
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