Truncate Table di Oracle adalah perintah yang berguna. Ini digunakan untuk menghapus semua baris dalam tabel plus melepaskan ruang yang dialokasikan ke tabel. Berikut adalah beberapa poin penting mengenai tabel Truncate
- Kita dapat menggunakan memotong tabel perintah untuk menghapus semua baris dalam tabel dan membebaskan semua ruang penyimpanan yang dialokasikan ke tabel. Ini me-reset tanda air yang tinggi dari tabel
- Perintah ini tidak dapat dikembalikan
- Anda harus menjadi pemilik tabel untuk menjalankan operasi
- Memotong tabel adalah perintah DDL dan tidak mengaktifkan pemicu penghapusan
- Kami juga dapat menghapus semua baris dalam tabel dengan perintah delete, tetapi tidak melepaskan ruang penyimpanan yang dialokasikan ke tabel
- Saat Anda memotong tabel, Oracle Database secara otomatis menghapus semua data dalam indeks tabel dan semua informasi INSERT jalur langsung tampilan yang terwujud yang terkait dengan tabel
Memotong Sintaks tabel di Oracle
Truncate table <table name> [CASCADE] [[ PRESERVE | PURGE] MATERIALIZED VIEW LOG ]] [[ DROP | REUSE]] STORAGE ];
-Di mana
-Penyimpanan dijatuhkan secara default jika bahkan tidak ditentukan. Jika Anda ingin menghemat ruang, Anda dapat menyimpan penyimpanan, lalu menggunakan kembali penyimpanan
Jika Anda memotong tabel skema lain, gunakan seperti ini
Truncate table <owner>.<table name>
Contoh
Truncate table EMP; Truncate table SCOTT.EMP; Truncate table SCOTT.EMP reuse storage;
Cara memberikan tabel terpotong di Oracle
Tidak ada hak istimewa tabel terpotong di Oracle. Anda perlu memberikan hak istimewa Jatuhkan tabel apa pun untuk memberikan tabel terpotong di Oracle. Jatuhkan tabel apa pun dilengkapi dengan banyak hak istimewa lainnya. Jadi, ini mungkin tidak mungkin dalam semua kasus. Anda dapat mengatasi tantangan ini dengan membuat prosedur dan memberikan eksekusi pada prosedur itu. Mari kita pahami dengan contoh
Misalkan Anda ingin memberikan tabel terpotong dari satu pengguna USER1 ke pengguna lain USER2
Jika Anda mencoba untuk memotong tabel secara sederhana, maka Anda akan menemukan Kesalahan
conn user2/pass
truncate table user1.EMP
*
ERROR at line 1:
ORA-01031: insufficient privileges
Sekarang mari kita coba melakukan hal ini melalui prosedur dan memberikan hak istimewa di atasnya
Conn user1/pass create or replace procedure trunc_t( p_table in VARCHAR2) is v_count pls_integer; BEGIN select count(*) into v_count from user_tables where table_name = p_table; if ( v_count = 1 ) then execute immediate 'truncate table '|| p_table; else raise_application_error( -20001, 'table does not exists' ); end if; END; / grant execute on trunc_t to user2; Conn user2/pass exec trunc_t('EMP');
Jika Anda tidak ingin melakukan hal ini, maka Anda harus memberikan hak istimewa untuk menjatuhkan tabel apa pun
conn system/<pass>
grant drop any table to user2;
Memotong Kaskade Tabel
- Sebelum Oracle 12c, Anda tidak dapat memotong tabel induk dari batasan kunci asing yang diaktifkan. Jika Anda mencobanya, Anda akan mendapatkan ORA-02266 . Anda harus menonaktifkan batasan sebelum memotong tabel. Pengecualiannya adalah Anda dapat memotong tabel jika batasan integritas bersifat referensi sendiri.
- Dengan Oracle 12c R1, Oracle telah memperkenalkan klausa Cascade untuk Truncate. Kami harus Menentukan CASCADE yang memungkinkan Anda untuk secara rekursif memotong tabel dalam hierarki Jika Anda menghilangkan klausa ini, dan batasan integritas referensial seperti itu ada, maka database mengembalikan kesalahan dan tidak memotong tabel. Mari kita pahami tabel terpotong ini dengan kaskade dengan contoh
CREATE TABLE "EMP"
( "EMPNO" NUMBER(6,0),
"ENAME" VARCHAR2(10),
"JOB" VARCHAR2(9),
"MGR" NUMBER(4,0),
"HIREDATE" DATE,
"SAL" NUMBER(7,2),
"COMM" NUMBER(7,2),
"DEPTNO" NUMBER(2,0),
CONSTRAINT "PK_EMP" PRIMARY KEY ("EMPNO"),
CONSTRAINT "FK_DEPTNO" FOREIGN KEY ("DEPTNO")
REFERENCES "DEPT" ("DEPTNO") ON DELETE CASCADE ENABLE
);
CREATE TABLE "DEPT"
( "DEPTNO" NUMBER(2,0),
"DNAME" VARCHAR2(14),
"LOC" VARCHAR2(13),
CONSTRAINT "PK_DEPT" PRIMARY KEY ("DEPTNO")
;
SQL> desc emp
Name Null? Type
----------------------------------------- -------- -----------------------
EMPNO NOT NULL NUMBER(6)
ENAME VARCHAR2(10)
JOB VARCHAR2(9)
MGR NUMBER(4)
HIREDATE DATE
SAL NUMBER(7,2)
COMM NUMBER(7,2)
DEPTNO NUMBER(2)SQL>
SQL> desc dept
Name Null? Type
----------------------------------------- -------- -----------------------
DEPTNO NOT NULL NUMBER(2)
DNAME VARCHAR2(14)
LOC VARCHAR2(13)
SQL>
insert into DEPT values(10, 'ACCOUNTING', 'NEW YORK');
insert into dept values(20, 'RESEARCH', 'DALLAS');
insert into dept values(30, 'RESEARCH', 'DELHI');
insert into dept values(40, 'RESEARCH', 'MUMBAI');
insert into emp values( 7698, 'BLAKE', 'MANAGER', 7839, to_date('1-5-2007','dd-mm-yyyy'), 2850, null, 10 );
insert into emp values( 7782, 'CLARK', 'MANAGER', 7839, to_date('9-6-2008','dd-mm-yyyy'), 2450, null, 10 );
insert into emp values( 7788, 'SCOTT', 'ANALYST', 7566, to_date('9-6-2012','dd-mm-yyyy'), 3000, null, 20 );
insert into emp values( 7789, 'TPM', 'ANALYST', 7566, to_date('9-6-2017','dd-mm-yyyy'), 3000, null, null );
insert into emp values( 7560, 'T1OM', 'ANALYST', 7567, to_date('9-7-2017','dd-mm-yyyy'), 4000, null, 20 );
insert into emp values( 7790, 'TOM', 'ANALYST', 7567, to_date('9-7-2017','dd-mm-yyyy'), 4000, null, null );
SQL> select * from emp;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
7698 BLAKE MANAGER 7839 01-MAY-07 2850 10
7782 CLARK MANAGER 7839 09-JUN-08 2450 10
7788 SCOTT ANALYST 7566 09-JUN-12 3000 20
7789 TPM ANALYST 7566 09-JUN-17 3000
7790 TOM ANALYST 7567 09-JUL-17 4000
4534 xyz 1000 20
4576 abc 1000
7560 T1OM ANALYST 7567 09-JUL-17 4000 20
SQL> truncate table dept;
truncate table dept
*
ERROR at line 1:
ORA-02266: unique/primary keys in table referenced by foreign keys
SQL>
SQL> truncate table dept cascade;
Table truncated.
Penting untuk dicatat bahwa batasan kunci asing harus memiliki ON DELETE CASCADE agar ini berfungsi. Penting untuk diperhatikan bahwa truncate table dengan cascade tidak hanya menghapus data dari tabel DEPT saja tetapi juga menghapus tabel EMP.
select * from DEPT; no rows Selected select * from EMP; no rows Selected
tabel terpotong Oracle vs hapus
Memotong | Hapus |
Hapus semua baris dari tabel | Dapat digunakan untuk menghapus satu atau lebih baris dari sebuah tabel |
Perintah DDL dan tidak menyala Saat pemicu DELETE | Perintah DML dan aktifkan pemicu Hapus |
Ini me-reset tanda Highwater di tabel | Itu tidak mengubah tanda air tinggi di tabel |
Tidak dapat dikembalikan | Dapat dikembalikan |
Lebih cepat | lebih lambat |
Tidak dapat menentukan di mana klausa di sini | Di mana klausa dapat ditentukan |
Anda memiliki opsi untuk menyimpan atau melepaskan penyimpanan yang dialokasikan untuk segmen tersebut | Tidak ada opsi ini. Penyimpanan tetap sama |
Semoga posting ini bermanfaat untuk tabel terpotong di Oracle
Artikel Terkait
Oracle Buat tabel
periksa ukuran tabel di Oracle
Oracle tampilkan semua tabel
Hapus dari tabel di Oracle
https://docs.Oracle.com/cd/B28359_01/server. 111/b28286/statements_10007.htm