sql >> Databáze >  >> RDS >> Oracle

alter table upravit sloupec v databázi Oracle

My můžete změnit  datový typ sloupce v tabulce pomocí alter table upravit sloupec v oracle

ALTER TABLE název_tabulkyMODIFY název_sloupce ;

Akce může být mnoho věcí, například
(a) změnit typ dat
(b) Zkrátit nebo rozšířit typ dat
(c) Změnit výchozí hodnotu
(d) Změnit na povolit null nebo ne null
(e) Viditelnost sloupce
(d) Modifikace virtuálního sloupce
Začněme jeden po druhém

Oracle MODIFY změna datového typu sloupce

Datový typ změny sloupce můžete upravit pouze v případě, že je sloupec prázdný

SQL> CREATE TABLE Books_master( Book_Id NUMBER(6,0),Titul VARCHAR2(50),Autor VARCHAR2(50),ISBN VARCHAR2(25),BCost NUMBER(6,0),Publish_Year NUMBER(4,0) ,CONSTRAINT Books_master_PK PRIMARY KEY (Book_Id),CONSTRAINT Books_master_UK1 UNIQUE (titul, autor),CONSTRAINT Books_master_UK2 UNIQUE (ISBN));Tabulka vytvořena

Protože je tabulka prázdná, můžeme upravit datový typ změny sloupce

SQL> změnit tabulku Books_master upravit ISBN NUMBER(6,0);Table altered.SQL> upravit tabulku Books_master upravit ISBN VARCHAR2(25);Tabulka změněna.

Vložíme nějaká data

SQL> INSERT INTO Books_master (ID_knihy, název, autor, ISBN, BCost, Publish_Year) VALUES (10, 'Kompletní/pohodlné', 'Ketan Bhagat', 'ISBN 978-93-80349-92-3', 195 , 2013);1 řádek vytvořen.commit;

Nyní se znovu pokuste upravit sloupec a změnit datový typ

SQL> změnit tabulku Books_master upravit ISBN NUMBER(6,0); upravit tabulku Books_master upravit ISBN NUMBER(6,0)*CHYBA na řádku 1:ORA-01439:sloupec, který má být upraven, musí být prázdný, aby se změnil datový typ 

Nyní můžeme tento sloupec vynulovat a tento příkaz úspěšně spustit

SQL> aktualizace Books_master set ISBN=null;1 řádek aktualizován.SQL> commit;Commit complete.SQL> alter table Books_master upravit ISBN NUMBER(6,0);Tabulka změněna.

Co nyní dělat, pokud chceme data zachovat, existuje několik možností
(a) Přidat nový sloupec jako nový datový typ, zkopírovat data do tohoto sloupce, odstranit starý sloupec, přejmenovat nový sloupec jako skutečný název sloupce:

alter table books_master add ISBN1 number;update books_master set ISBN1=to_number(ISBN);alter table drop sloupec ISBN;alter table přejmenování sloupce ISBN1 na ISBN;

(b) Použijte DBMS_REDEFINITION a znovu sestavte svou tabulku pomocí nových sloupců

Oracle MODIFY sloupec Zkraťte nebo rozšiřte datový typ (alter table upravit velikost sloupce oracle)

To se používá, když chceme změnit VARCHAR bajty nebo znaky.
Příklad

Zde zvyšujeme délku VARCHAR z 50 na 100

SQL> změnit tabulku Books_master upravit název VARCHAR2(100);Tabulka změněna.

Nyní, pokud se snažíme zkrátit délku ze 100 na 10

SQL> změnit tabulku Books_master upravit název VARCHAR2(10);změnit tabulku Books_master upravit název VARCHAR2(10)*ERROR na řádku 1:ORA-01441:nelze snížit délku sloupce, protože některá hodnota je příliš velká

K tomu dochází, protože existující data se do této velikosti nevejdou. Buď tedy může zvětšit délku nebo aktualizovat tento sloupec

SQL> změnit tabulku Books_master upravit název VARCHAR2(20);Tabulka změněna.

Výchozí hodnota sloupce Oracle MODIFY

pokud musíme upravit výchozí hodnotu sloupce

SQL> změnit tabulku BOOKS_MASTER upravit BCOST výchozí 1000;Tabulka změněna.

Nyní příště, pokud dojde k nějakému vložení a BCOST je null, bude mít výchozí hodnotu 1000

změnit tabulku BOOKS_MASTER upravit BCOST výchozí 1000;Tabulka altered.SQL> INSERT INTO Books_master (ID_knihy, název, autor, ISBN,_rok vydání) VALUES (21, 'Podvod', 'Dan', 123,2001); 1 řádek vytvořen .SQL> commit;Commit complete.SQL> vyberte BCOST z Books_master kde book_id=21;BCOST-----1000 

Oracle MODIFY sloupec NULL nebo NOT NULL

Můžeme upravit sloupec tak, aby umožňoval null nebo ne null

SQL> desc books_masterName Null? Typ---- --- ----BOOK_ID NOT NULL NUMBER(6)TITLE VARCHAR2(20)AUTHOR VARCHAR2(50)ISBN NUMBER(6)BCOST NOT NULL NUMBER(6)PUBLISH_YEAR NUMBER(4)SQL> alter table BOOKS_MASTER upravit PUBLISH_YEAR není null;Tabulka altered.SQL> desc books_masterName Null? Typ---- ---- -----BOOK_ID NOT NULL NUMBER(6)TITLE VARCHAR2(20)AUTHOR VARCHAR2(50)ISBN NUMBER(6)BCOST NOT NULL NUMBER(6)PUBLISH_YEAR NOT NULL NUMBER(4) 

Pokud se měníte na not null, měli bychom mít existující hodnotu, jinak se to nezdaří

Viditelnost sloupců Oracle MODIFY

Viditelnost sloupce můžeme změnit pomocí Upravit sloupec

SQL> desc books_masterName Null? Typ---- ---- -----BOOK_ID NOT NULL NUMBER(6)TITLE VARCHAR2(20)AUTHOR VARCHAR2(50)ISBN NUMBER(6)BCOST NOT NULL NUMBER(6)PUBLISH_YEAR NOT NULL NUMBER(4) SQL změnit tabulku BOOKS_MASTER upravit PUBLISH_YEAR neviditelné;Tabulka změněna.Nyní se sloupec stane neviditelnýmSQL> desc books_masterName Null? Typ---- ---- ----BOOK_ID NOT NULL NUMBER(6)TITLE VARCHAR2(20)AUTHOR VARCHAR2(50)ISBN NUMBER(6)BCOST NOT NULL NUMBER(6)SQL> upravit tabulku BOOKS_MASTER upravit PUBLISH_YEAR viditelné;Tabulka změněna. Nyní je sloupec viditelnýSQL> desc books_masterName Null? Typ--- ----- -----BOOK_ID NOT NULL NUMBER(6)TITLE VARCHAR2(20)AUTHOR VARCHAR2(50)ISBN NUMBER(6)BCOST NOT NULL NUMBER(6)PUBLISH_YEAR NOT NULL NUMBER(4) 

Doufám, že se vám líbí tento příspěvek v tabulce Oracle alter, upravte sloupec. Uveďte prosím zpětnou vazbu

Také čte
změnit tabulku přidat sloupec oracle
změnit tabulku přejmenovat sloupec oracle
vypustit sloupec v oracle
https://docs.oracle.com/cd/B28359_01/server.111/b28286/ statement_3001.htm


  1. Databáze SQLite poskytuje varovný automatický index na <název_tabulky> (sloupec) Po upgradu systému Android L

  2. Pole objektů třídy VBA Ms-Access

  3. Používejte relační databáze MySQL na Fedoře 13

  4. Omezení paměti v SQL Server 2016 SP1