P°φkaz ALTER TABLE (SQL)

Syntaxe podle normy SQL:

p°φkaz_ALTER_TABLE ::= ALTER TABLE [schema.]jmΘno_tabulky [ WB_p°φznak à ] akce {, akceWB_p°φznak ::= NO_JOURNAL | ZCR | UNIKEY | LUO | TOKEN | DETECT | REC_PRIVILS | DOCFLOW
akce ::= p°idßnφ_sloupce | odstran∞nφ_sloupce | zm∞na_sloupce | p°idßnφ_omezenφ_tabulky | odstran∞nφ_omezenφ_tabulky
p°idßnφ_sloupce ::= ADD [ COLUMN ] jmΘno_sloupce typ [ [cφl] ][ PREALLOC=n ][ EXPANDABLE ][ COLLATE uspo°ßdßnφ_°et∞zce ]
odstran∞nφ_sloupce ::= DROP [ COLUMN ] jmΘno_sloupce
zm∞na_sloupce ::= ALTER [ COLUMN ] jmΘno_sloupce akce_zm∞ny_sloupce 
akce_zm∞ny_sloupce ::= SET DEFAULT implic_hodnota | DROP DEFAULT
implic_hodnota ::= v²raz | USER | UNIQUE 
p°idßnφ_omezenφ_tabulky ::= ADD [ CONSTRAINT jmΘno_vlastnosti ] vlastnost_tabulky
vlastnost_tabulky ::= { UNIQUE | PRIMARY KEY | INDEX } (v²raz [sm∞r] {, v²raz [sm∞r] }à ) | CHECK ( podmφnka ) | omezenφ_FOREIGN_KEY
sm∞r ::= ASC | DESC
omezenφ_FOREIGN_KEY ::= FOREIGN KEY (jmΘno_sloupce {, jmΘno_sloupce}à ) REFERENCES [schema.]jmΘno_tabulky [ jmΘno_sloupce {, jmΘno_sloupce}à ] [ UPDATE_akce ] [ DELETE_akce ]
UPDATE_akce ::= ON UPDATE akce_referenΦnφ_integrity
akce_referenΦnφ_integrity ::=  SET NULL | SET DEFAULT | CASCADE | NO ACTION 
DELETE_akce ::= ON DELETE akce_referenΦnφ_integrity
odstran∞nφ_omezenφ_tabulky ::= DROP CONSTRAINT jmΘno_vlastnosti

Syntaxe podle starÜφch verzφ WinBase602 (pou₧φvß stßvajφcφ nßvrhß° tabulek):

p°φkaz_ALTER_TABLE ::= ALTER TABLE jmΘno_tabulky [ WB_p°φznak à ] akce {, akceakce ::= p°idßnφ_sloupce | odstran∞nφ_sloupce | popis_omezenφ
p°idßnφ_sloupce ::= ADD [ po°adφ ] jmΘno_sloupce typ [ [cφl] ][ PREALLOC=n ][ EXPANDABLE ][ COLLATE uspo°ßdßnφ_°et∞zce ][ VALUES " v²raz_pro_p°enos_hodnoty " ]
odstran∞nφ_sloupce ::= DROP jmΘno_sloupce
popis_omezenφ ::= CONSTRAINT [jmΘno_vlastnosti] vlastnost_tabulky


Popis

P°φkaz ALTER TABLE zm∞nφ definici zadanΘ tabulky. V odlad∞n²ch aplikacφch je nutnΘ takovΘto zm∞ny provßd∞t z rozvahou - potΘ je nezbytnΘ provΘst odpovφdajφcφ zm∞ny ve vÜech objektech (na back-endu i front-endu), kterΘ danou tabulku vyu₧φvajφ.

ALTER TABLE mß od verze 6.0c dv∞ pon∞kud odliÜnΘ podoby. O tom, jakou syntaxi server rozeznßvß, rozhoduje nastavenφ funkcφ Set_sql_option.

1) Varianta ALTER TABLE odpovφdajφcφ norm∞ SQL je rozÜφ°ena o nastavenφ p°φznak∙ tabulky, kterΘ se t²kajφ specifick²ch vlastnostφ tabulek WinBase602 (popis - viz CREATE TABLE). Oproti norm∞ umo₧≥uje v jedinΘm ALTER TABLE p°φkazu zadat i vφce akcφ odd∞len²ch Φßrkami.

P°i zm∞n∞ sloupce lze pouze zadat nebo ruÜit implicitnφ hodnotu, ostatnφ zm∞ny vlastnostφ sloupc∙ (integritnφ omezenφ, indexy apod.) se provßd∞jφ v rßmci p°idßnφ nebo odstran∞nφ obecn∞jÜφch vlastnostφ tabulky.

2) P∙vodnφ podoba p°φkazu je stßle vyu₧φvanß interaktivnφm nßvrhß°em tabulek. Tato podoba p°φkazu je vhodnß, kdy₧ m∞nφte strukturu napln∞nΘ tabulky, nebo¥ data z ruÜenΘho sloupce lze zachovat definovßnφm v²razu pro p°enos hodnoty do novΘho sloupce. TakΘ lze urΦit po°adφ vklßdanΘho sloupce mezi stßvajφcφmi sloupci (Φφslovßno od 1). V popisu_omezenφ uve∩te vÜechna omezenφ tabulky, kterΘ se majφ po skonΦenφ p°φkazu v tabulce objevit (tj. i ta, kterΘ ji₧ existovala p°ed ALTER TABLE).

POZOR!! P°i pou₧itφ interaktivnφho nßvrhß°e tabulek se automaticky nastavφ p∙vodnφ varianta syntaxe bez ohledu na nastavenφ pomocφ Set_SQL_option!!

P°idßnφ nebo odstran∞nφ indexu provßd∞jφ takΘ p°φkazy CREATE INDEX a DROP INDEX.

OdliÜnosti od normy

P°φklad (SQL varianta):

V tabulce Tab1 je t°eba odstranit sloupec A, p°idat sloupec NewCol, vytvo°it pro n∞j neunikßtnφ index a nastavit referenΦnφ integritu s nad°φzenou tabulkou Tab2, zm∞nit implicitnφ hodnotu ve sloupci D, vytvo°it primßrnφ klφΦ na sloupci B a zßrove≥ zm∞nit integritnφ omezenφ pro tento sloupec.

ALTER TABLE Tab1 
   DROP COLUMN A,
   ADD COLUMN NewCol CHAR(20) COLLATE CSISTRING,
   ALTER COLUMN D SET DEFAULT CURRENT_DATE,
   ADD PRIMARY KEY (B) ,
   ADD CONSTRAINT `Pro ref.integ.` INDEX (NewCol) ,
   DROP CONSTRAINT `Check_B`,
   ADD CONSTRAINT `Check_B` CHECK (B > 0) ,
   ADD CONSTRAINT `Tab1-Tab2` FOREIGN KEY (NewCol) REFERENCES Tab2 (Col) ON UPDATE CASCADE ON DELETE NO ACTION