Avatar billede bigbendk Nybegynder
04. december 2000 - 17:34 Der er 24 kommentarer og
1 løsning

Rename et field i en tabel

Hvodan renamer jeg lige et field i en tabel, uden at bruge andet end ren sql sætninger?, Og det skal virker på Oracle
Avatar billede pnielsen Nybegynder
04. december 2000 - 17:48 #1
Mener du en column ?

SQL> desc emp2
Name                            Null?    Type
------------------------------- -------- ----
EMPNO                          NOT NULL NUMBER(4)
ENAME                                    VARCHAR2(10)
JOB                                      VARCHAR2(9)
MGR                                      NUMBER(4)
HIREDATE                                DATE
SAL                                      NUMBER(7,2)
COMM                                    NUMBER(7,2)
DEPTNO                                  NUMBER(2)

SQL> alter table emp2
  2  add (salary number(7,2));

Table altered.

SQL> update emp2
  2  set salary=sal;

14 rows updated.

SQL> commit;

Commit complete.

SQL> desc emp2
Name                            Null?    Type
------------------------------- -------- ----
EMPNO                          NOT NULL NUMBER(4)
ENAME                                    VARCHAR2(10)
JOB                                      VARCHAR2(9)
MGR                                      NUMBER(4)
MGR                                      NUMBER(4)
HIREDATE                                DATE
SAL                                      NUMBER(7,2)
COMM                                    NUMBER(7,2)
DEPTNO                                  NUMBER(2)
SALARY                                  NUMBER(7,2)

Ellers må du skrive igen :)
Avatar billede stigc Nybegynder
04. december 2000 - 17:51 #2
ALTER TABLE table_name
ADD column_name datatype

ALTER TABLE table_name
DROP column_name

Avatar billede stigc Nybegynder
04. december 2000 - 17:52 #3
Avatar billede bigbendk Nybegynder
04. december 2000 - 18:07 #4
pnielsen  -> Det virker ok, men når jeg skal slette den gamle kopi, får jeg Keyword missing, nogen ide hvofor det sker:
ALTER TABLE TEST DROP TABLE FIELDTEST

Table: TEST findes
og field FIELDTEST findes i tabel
Avatar billede stigc Nybegynder
04. december 2000 - 18:12 #5
du skal i skrive table navn foran dit tabelfield!
Avatar billede stigc Nybegynder
04. december 2000 - 18:13 #6
ALTER TABLE TEST DROP FIELDTEST
Avatar billede bigbendk Nybegynder
04. december 2000 - 18:14 #7
Som: ALERT TABLE TEST DROP TEST.FIELDTEST???
Avatar billede bigbendk Nybegynder
04. december 2000 - 18:15 #8
stigc: Virker ikke
Avatar billede stigc Nybegynder
04. december 2000 - 18:18 #9
det er i hvet tilfælde den rigtige syntakst: \"ALTER TABLE TEST DROP FIELDTEST\", sammenlignet med \"ALTER TABLE table_name DROP column_name \"

Må være noget andet der er galt...
Avatar billede bigbendk Nybegynder
04. december 2000 - 18:19 #10
hmm... måske jeg kan sagtens oprette nye felter i databasen, men lige at fjerne dem, det vil den sku ikke være med til
Avatar billede stigc Nybegynder
04. december 2000 - 18:29 #11
jeg har lig prøvet det her på min mySSL database, og det hele virkede fint:

databasen hedde privat,
tabellen hedder adresse
og jeg opretter og bagefter slettet feltet: \"test\"

alter table privat.adresse add test varchar(30);
alter table privat.adresse drop test;


håber det kan hjælpe dig lidt!!!!!

Avatar billede stigc Nybegynder
04. december 2000 - 18:30 #12
det er selvfølgelig en mySQL-database!
Avatar billede pnielsen Nybegynder
04. december 2000 - 22:46 #13
Sorry, at jeg først svare nu. Jeg har ikke været hjemme før nu :(

Inden du gør noget vil jeg anbefale dig at tage en export af tabellen,
eller lave en kopi (create table test as select * from DINTABEL;).

stigc: er det ikke nøjagtigt det samme de to ting du nævner?
>>\"ALTER TABLE TEST DROP FIELDTEST\",
>>\"ALTER TABLE table_name DROP column_name \"
Hvis nu din tabel hedder test og din kolonne hedder fieldtest!  ;-)
men faktisk hedder den:
\"ALTER TABLE table_name DROP COLUMN column_name;\"
eller
ALTER TABLE TEST DROP COLUMN FIELDTEST;

For at være sikker på hvad din fejl betyder, vil jeg bede dig skrive den Ora-xxxx fejl du får!
Men umiddelbart lyder det som om det er en ora-905, og den kan du løse ved ovenstående!

Håber det hjælper... ellers skriver du bare :-)
Avatar billede driften.dk Nybegynder
05. december 2000 - 09:17 #14
Jeg kan jo kun give pnielsen ret, MEN ... Der er et par ting, du skal være opmærksom på:
1) At droppe et felt og lægge det til igen ændrer på din tabelstruktur, så du muligvis får problemer med rækkefølgen af dine felter.
2) At droppe felter generelt, kan give problemer med genbrug af plads i databasen, lidt afhængig af hvilke typer felter du dropper / gendanner.
3)At droppe / gendanne et felt er IKKE en rename af et felt. Og hvad gør du med data i dette felt - de data skal vel bruges??

HVIS du ABSOLUT må og skal rename et felt, kan det faktisk godt lade sig gøre, MEN det er ikke supporteret af Oracle, så hvis du skal slippe afsted med det, er det pine-død nødvendigt at gøre det på en test-database ført (ikke bare en test tabel!!). Det generelle problem er at få Oracle til at forstå, at objecterne stadig er valide trods navneforandring i felt.

En \"lettere\" vital ting:
Før rename af et felt, skal du være SIKKER på, at der ikke er nogen afhængige stumper i basen, der refererer til felt-navnet (f.eks i views, triggers o.lign). Disse skal gendannes med det/de ny(e) feltnavne efter rename.

Meget kort fortalt, skal du pille direkte i dictionary (SYS.COL$) og derefter slette referencerne til din tabel i IDL$-tabellerne under SYS.

Derefter skal du checke for invalide objecter genne DBA_OBJECTS og re-compilere de invalide.

Hvis dette ikke er nok for dig, må du jo lige \"banke på\" igen, men husk: Det ER altså en risikabel operation, som du bliver nødt til at test HVER GANG du opgraderer din database, hvis det er noget du bruger bare en gang imellem.
Avatar billede bigbendk Nybegynder
05. december 2000 - 11:18 #15
jeg får følgende fejl når jeg prøver at lave en drop.

Forbindelse er oprettet til :
Oracle8i Release 8.1.6.0.0 - Production
JServer Release 8.1.6.0.0 - Production

SQL> ALTER TABLE GRP_TEST DROP COLUMN EUR;
ALTER TABLE GRP_TEST DROP COLUMN EUR
*
FEJL i linie 1:
ORA-00406: COMPATIBLE parameter needs to be 8.1.0.0.0 or greater
Avatar billede driften.dk Nybegynder
05. december 2000 - 11:23 #16
Jamen det er helt korrekt! Du skal have
COMPATIBLE=8.1.6
sat i din init<sid>.ora ellers får du ikke funktionaliteten af den højere version med.

COMPATIBLE er desværre nok en af de mest oversete parametre i Oracle (Selvom der er ca. 500 stk.).
Avatar billede driften.dk Nybegynder
05. december 2000 - 11:27 #17
I version 8 er default COMPATIBLE=8.0.0, dvs. basen kører rent som en 8.0.0 - Ikke sjovt, når der er brug for funktionaliteten fra f.eks en 8.1.5 eller 8.1.7.
Avatar billede pnielsen Nybegynder
05. december 2000 - 13:52 #18
hmmmm.. jeg syntes egentligt at det er lidt ringe at du ikke deler pointene ud!!!
Jeg gav dig dit svar! .. hvad er takken ?

Den løsning som driften.dk foreslår, er ikke supporteret!!! Det er aldrig tilladt at ændre i data dictonary!
Jeg vil fraråde dig meget at bruge den løsning!... og det ser også ud til at du bruger den JEG foreslår!

Bare min holdning... ØV!
Avatar billede driften.dk Nybegynder
05. december 2000 - 14:04 #19
Måske er du liiidt pernitten!

Jeg skrev faktisk en løsning på det egentlige spørgsmål OG at denne metode ikke er supportet af Oracle. Jeg har pt. ikke selv stillet spørgsmål her og ved derfor ikke om det faktisk er muligt at dele point ud.

Det er lidt dårlig, du ikke respekter bigbendk\'s valg, men hvis du er så nidkær om dine point, så skal jeg da gerne stille et dummy-spørgsmål til 250 point, som du kan få lov at svare på, for jeg besvarer egentlig ikke spørgsmål for pointenes skyld.

- Og det er så min holdning..!
Avatar billede pnielsen Nybegynder
05. december 2000 - 14:17 #20
Kald mig hvad du vil.. det er ikke derfor jeg er her(kaste lagkage)!

Det ER muligt at dele point ud, og det er det jeg syntes er lidt ... ok .. meget forkert,
ikke er blevet gjort.

Du har ret i dine kommentarer, men det egentlige svar gav jeg jo rent faktisk... ok der var lige compatible parameteren :)

Nu har jeg været her på siden i meget lang tid efterhånden, og den er bygget om omkring at man bliver lønnet med point, det er det der gør det lidt sjovt... men ok.. velkommen til!

Avatar billede driften.dk Nybegynder
05. december 2000 - 14:20 #21
Tak skal du have - men vil du have de point eller ej?
Avatar billede pnielsen Nybegynder
05. december 2000 - 14:23 #22
Det var bigbens valg at du skulle have dem!

Så lad os nu glemme det, sez :)
Avatar billede driften.dk Nybegynder
05. december 2000 - 14:26 #23
OK! :))
Avatar billede bigbendk Nybegynder
05. december 2000 - 14:28 #24
Jeg anede ikke at man kunne dele spørgsmålen mellem flere.. sorry my bad, begge jeres forskal var \'gyldige\' til at få point - sorry
Avatar billede bigbendk Nybegynder
05. december 2000 - 14:28 #25
Forslag even
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester