Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Cara Memotong TABEL di Oracle

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 adalah nama tabel dan Anda harus menjadi pemilik tabel atau memiliki hak istimewa sistem Drop TABLE untuk memotong tabel
-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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. bagaimana cara mendeklarasikan %ROWTYPE dari variabel yang merupakan SYS_REFCURSOR yang diketik dengan lemah?

  2. Kembalikan nilai dari skrip sql ke skrip shell

  3. DBCA Buat Database buruk REMOTE_LISTENER

  4. SELECT SUM mengembalikan baris ketika tidak ada catatan

  5. Mengapa DECODE Oracle memberi saya nilai yang berbeda dari NVL?