Rumah  >  Artikel  >  pangkalan data  >  Bagaimana untuk mengubah suai medan dalam pangkalan data oracle

Bagaimana untuk mengubah suai medan dalam pangkalan data oracle

青灯夜游
青灯夜游asal
2022-03-02 18:13:5118296semak imbas

Dalam Oracle, anda boleh menggunakan pernyataan "ALTER TABLE MODIFY" untuk mengubah suai medan Nilai lalai untuk lajur, ungkapan yang mengubah suai lajur maya, dsb.

Bagaimana untuk mengubah suai medan dalam pangkalan data oracle

Persekitaran pengendalian tutorial ini: sistem Windows 7, versi Oracle 11g, komputer Dell G3.

Cara mengubah suai medan dalam pangkalan data Oracle

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,
    ...
);

Oracle ALTER TABLE MODIFY Column Contoh

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 -

Bagaimana untuk mengubah suai medan dalam pangkalan data oracle

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 -

Bagaimana untuk mengubah suai medan dalam pangkalan data oracle

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 .

Bagaimana untuk mengubah suai medan dalam pangkalan data oracle

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;

执行上面查询语句,可以看到以下结果 

Bagaimana untuk mengubah suai medan dalam pangkalan data oracle

5. 修改列的默认值

添加一个名为status的新列,默认值为1accounts表中。参考以下语句 -

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;

执行上面查询语句,应该看类似下面的结果 

Bagaimana untuk mengubah suai medan dalam pangkalan data oracle

正如所看到的那样,ID4的账户的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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn