Rumah > Artikel > pangkalan data > Bagaimana untuk mengubah suai medan dalam pangkalan data oracle
Dalam Oracle, anda boleh menggunakan pernyataan "ALTER TABLE MODIFY" untuk mengubah suai medan Nilai lalai untuk lajur, ungkapan yang mengubah suai lajur maya, dsb.
Persekitaran pengendalian tutorial ini: sistem Windows 7, versi Oracle 11g, komputer Dell G3.
Dalam Oracle, anda boleh menggunakan pernyataan "ALTER TABLE MODIFY
" untuk mengubah suai medan dan menukar takrifan medan sedia ada.
Untuk menukar takrif lajur dalam jadual, gunakan sintaks lajur ALTER TABLE MODIFY
seperti berikut: Pernyataan
ALTER TABLE 表名 MODIFY 字段名 需要执行的操作;
adalah mudah. Untuk mengubah suai lajur jadual, anda perlu menentukan nama lajur, nama jadual dan operasi yang akan dilakukan.
Oracle membolehkan anda melakukan pelbagai operasi, tetapi yang berikut ialah operasi utama yang biasa digunakan:
Ubah suai keterlihatan lajur
Benarkan atau tidak benarkan nilai NULL
Pendekkan atau kembangkan saiz lajur
Tukar nilai lalai bagi lajur
Ungkapan yang mengubah suai lajur maya
Untuk mengubah suai berbilang lajur, gunakan sintaks berikut:
ALTER TABLE 表名 MODIFY ( 字段名1 action, 字段名2 action, ... );
Pertama , buat jadual baharu bernama accounts
untuk demo:
-- 12c语法 CREATE TABLE accounts ( account_id NUMBER GENERATED BY DEFAULT AS IDENTITY, first_name VARCHAR2(25) NOT NULL, last_name VARCHAR2(25) NOT NULL, email VARCHAR2(100), phone VARCHAR2(12) , full_name VARCHAR2(51) GENERATED ALWAYS AS( first_name || ' ' || last_name ), PRIMARY KEY(account_id) );
Kedua , masukkan beberapa baris ke dalam jadual accounts
:
INSERT INTO accounts(first_name,last_name,phone) VALUES('Trinity', 'Knox', '410-555-0197'); INSERT INTO accounts(first_name,last_name,phone) VALUES('Mellissa', 'Porter', '410-555-0198'); INSERT INTO accounts(first_name,last_name,phone) VALUES('Leeanna', 'Bowman', '410-555-0199');
Ketiga , sahkan operasi sisipan dengan menggunakan pernyataan SELECT
berikut:
SELECT * FROM accounts;
Laksanakan pernyataan pertanyaan di atas dan dapatkan hasil berikut -
1. Ubah suai keterlihatan lajur
Dalam Oracle 12c , lajur jadual boleh ditakrifkan sebagai Halimunan atau kelihatan. Lajur halimunan tidak boleh digunakan untuk pertanyaan, seperti:
SELECT * FROM table_name;
atau
DESCRIBE table_name;
Lajur halimunan tidak ditemui.
Walau bagaimanapun, lajur halimunan boleh disoal dengan menyatakannya secara eksplisit dalam pertanyaan:
SELECT invisible_column_1, invisible_column_2 FROM table_name;
Lajur jadual boleh dilihat secara lalai. Lajur halimunan boleh ditakrifkan semasa membuat jadual atau menggunakan pernyataan lajur ALTER TABLE MODIFY
.
Sebagai contoh, pernyataan berikut menjadikan lajur full_name
tidak kelihatan:
ALTER TABLE accounts MODIFY full_name INVISIBLE;
Laksanakan pertanyaan data dalam jadual sekali lagi dan dapatkan keputusan berikut -
Pernyataan berikut mengembalikan data dalam semua lajur jadual accounts
kecuali lajur full_name
:
SELECT * FROM accounts;
Ini kerana lajur full_name
tidak kelihatan. Untuk menukar lajur daripada tidak kelihatan kepada kelihatan, gunakan pernyataan berikut:
ALTER TABLE accounts MODIFY full_name VISIBLE;
2. Benarkan atau tidak benarkan contoh nol
Yang berikut kenyataan menukar lajur email
untuk menerima nilai bukan nol (not null
):
ALTER TABLE accounts MODIFY email VARCHAR2( 100 ) NOT NULL;
Walau bagaimanapun, Oracle mengeluarkan ralat berikut:
SQL Error: ORA-02296: cannot enable (OT.) - null values found
kerana apabila menukar lajur daripada tersedia Apabila menukar null
kepada not null
, anda mesti memastikan bahawa data sedia ada mematuhi kekangan baharu (iaitu, jika NULL
tidak boleh diterima dalam data asal).
Untuk menyelesaikan masalah ini, kemas kini nilai lajur email
dahulu:
UPDATE accounts SET email = LOWER(first_name || '.' || last_name || '@oraok.com') ;
Perhatikan bahawa fungsi LOWER() menukar rentetan kepada huruf kecil .
Kemudian tukar kekangan pada lajur email
:
ALTER TABLE accounts MODIFY email VARCHAR2( 100 ) NOT NULL;
Sekarang ia sepatutnya berfungsi seperti yang diharapkan.
3 Kembangkan atau pendekkan saiz contoh lajur
Andaikan anda ingin menambah kod antarabangsa pada lajur phone
, untuk contoh: awalan tambah 86
. Sebelum mengubah suai nilai lajur, kita mesti mengembangkan saiz lajur phone
menggunakan pernyataan berikut:
ALTER TABLE accounts MODIFY phone VARCHAR2( 24 );
Kini, kita boleh mengemas kini data untuk nombor telefon:
UPDATE accounts SET phone = '+86 ' || phone;
Kemas kini Pengesahan kenyataan berikut:
SELECT * FROM accounts;
Dalam hasil pelaksanaan pernyataan pertanyaan di atas, anda sepatutnya dapat melihat bahawa nombor telefon asal mempunyai kod kawasan antarabangsa yang diawali dengan 86
.
Untuk memendekkan saiz lajur, pastikan semua data dalam lajur sesuai dengan saiz baharu.
Contohnya, cuba mengurangkan saiz lajur phone
kepada 12
aksara:
ALTER TABLE accounts MODIFY phone VARCHAR2( 12 );
Pangkalan Data Oracle mengeluarkan ralat berikut:
SQL Error: ORA-01441: cannot decrease column length because some value is too big
Untuk menyelesaikan Masalahnya, pertama sekali, ialah kod antarabangsa (iaitu: 86
) hendaklah dialih keluar daripada nombor telefon:
UPDATE accounts SET phone = REPLACE( phone, '+86 ', '' );
Fungsi REPLACE() menggantikan subrentetan dengan yang baharu satu. Dalam kes ini ia akan menggantikan 86
dengan rentetan kosong.
Kemudian pendekkan saiz lajur phone
:
ALTER TABLE accounts MODIFY phone VARCHAR2( 12 );
4 Ubah suai lajur maya
Andaikan seperti berikut Isikan nama penuh dalam format kedua-dua lajur:
last_name, first_name
Untuk melakukan ini, anda boleh menukar ungkapan lajur maya full_name
seperti berikut:
ALTER TABLE accounts MODIFY full_name VARCHAR2(52) GENERATED ALWAYS AS (last_name || ', ' || first_name);
以下语句验证修改:
SELECT * FROM accounts;
执行上面查询语句,可以看到以下结果
5. 修改列的默认值
添加一个名为status
的新列,默认值为1
到accounts
表中。参考以下语句 -
ALTER TABLE accounts ADD status NUMBER( 1, 0 ) DEFAULT 1 NOT NULL ;
当执行了该语句,就会将accounts
表中的所有现有行的status
列中的值设置为1
。
要将status
列的默认值更改为0
,请使用以下语句:
ALTER TABLE accounts MODIFY status DEFAULT 0;
可以在accounts
表中添加一个新行来检查status
列的默认值是0
还是1
:
INSERT INTO accounts ( first_name, last_name, email, phone ) VALUES ( 'Julia', 'Madden', 'julia.madden@oraok.com', '410-555-0200' );
现在,查询accounts
表中的数据:
SELECT * FROM accounts;
执行上面查询语句,应该看类似下面的结果
正如所看到的那样,ID
为4
的账户的status
列的值是0
。
推荐教程:《Oracle教程》
Atas ialah kandungan terperinci Bagaimana untuk mengubah suai medan dalam pangkalan data oracle. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!