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ý typNyní 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říkladZde 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