Hejsa, Jeg kan ikke huske om man kan omdøbe en kolonne, når man først har kaldt den noget, men du kan oprette en ny, og derefter droppe den gamle. ALTER TABLE tabelnavn ADD COLUMN original varchar2(500)
Ok - når jeg går ind og laver en select table_name from all_tables så kommer der 1500 navn.
Den tabel jeg søger efter dukker også op. Så vil jeg jo gerne se hvad tabellen indeholder og har prøvet med en select * from tabelnavn .. men dette virker ikke
Når du skriver at "dette virker ikke" - hvad betyder det mere præcist? Kommer der en fejlmelding - i givet fald hvilken - eller kommer der ikke noget data?
Hvis der ikke kommer noget data, så prøv med
SELECT COUNT(*) FROM <tabelnavn>
Hvis du får at vide at der er 0 rækker i din tabel - ja, så er tabellen tom.
ok .. fandt selv ud af, at der skal stå select * from brugernavn.tabelnavn - så kommer tabellen frem.
Men nu blev det hele lidt mere teknisk end frygtet. Tabellen indeholder 4 kolonner og det er kun de 2 der er relevante for det jeg skal have rettet
Den hedder "parent" - og næste "type" 1003 Udbedring
I kolonen "parent" skal alle med "1003" rettes fra "udbedring" til "problem" - der 16 rækker ned, som altså skal rettes fra "udbedring" til "problem"
Problemet er at der andre steder i tabellen findes andre "parent" numre, som også har "udbedring" som felt - hvor det dog er rigtig nok.
Det andet og sidste der skal rettes er tilgengæld lidt lettere .. formoder jeg. I kolonnen "type" er der nogle steder skrevet "årdag" istedet for "årsag" - denne fejl er skrevet 50 gange i denne kolonne og skal bare rettes til "årsag"
UPDATE <tabelnavn> SET type='Problem' WHERE parent=1003;
Ovenstående har jeg kørt og den ændrede 16 rækker - hvilket godt kan passe. Kigger jeg i tabellen igen, står det dog stadig forkert - skal man først lave en commit eller ?
UPDATE <tabelnavn> SET type='Årsag' WHERE type='Årdag';
Den kan ikke finde nogen rækker - "årsag" skal som nævnt erstatte "årdag" - men så vidt jeg kan se bør det være rigtig nok eller ?
Det bliver mærkeligere og mærkeligere, for du skrev at der kun var 50 rækker der stod ÅRDAG i. Så enten er der 14 rækker indeholdende noget andet end ÅRDAG i type-feltet, men hvor type-feltet består af fem bogstaver og slutter på RDAG. Eller også var der alligevel flere end 50 rækker.
Du kan evt. lave en ny optælling af fordelingen af type-feltet ved
SELECT type, COUNT(*) FROM <tabelnavn> GROUP BY type ORDER BY 1;
Hvis du derefter er overbevist om at de 64 rækker alle indeholder 'ÅRDAG' i type-feltet, kan du opdatere dem til 'ÅRSAG' ved at skrive
UPDATE <tabelnavn> SET type='Årsag' WHERE type LIKE '_RDAG';
OK - det er sku lidt mærkeligt. Jeg kørte nedestående
SELECT type, COUNT(*) FROM <tabelnavn> GROUP BY type ORDER BY 1; Hvor den viser der er 64 steder med Årsag - men istedet for at starte med "Å" ligner det et kors - altså lige a la et "+"
Nu har jeg så rettet det til "Årsag" - men kigger jeg nu i Sqlplus worksheet står der bare en firkantet kasse og så "rsag"
Det er helt sikkert noget tegnsæt-fnidder mellem dit klient-program (sql worksheet eller hvad du nu bruger) og databasen. Hvis du har adgang til isqlplus, er det (for mig at se) den sikreste/nemmeste måde at se dine data på, da dette program er Unicode-baseret.
Hvis du vil være sikker på at der nu står ÅRSAG på samme måde som der før stod ÅRDAG, så gentag:
SELECT DUMP(type) FROM <tabelnavn> WHERE failurelist=1036;
Den skal nu returnere 197,82,83,65,71.
Hvis ikke den gør det, står der noget andet end 'ÅRSAG'
Nu ved jeg jo ikke hvad "de samme tal" betyder. Der har været forskellige undervejs. Men hvis det tredje tal er 68, står der stadig Årdag. Har du commit'tet din ændring?
Normalt tilgås isqlplus på URL'en http://<servernavn>:5560/isqlplus - men det afhænger selvfølgelig af den aktuelle installation, hvilken port isqlplus lytter på
Det kommer noget bag på mig at du får "743" med en SELECT dump(). Normalt returnerer dump værdierne fra hver enkelt byte, men 743 kan ikke være i én byte.
For at komme videre, skal du have fat i databasens tegnsæt. Prøv lige med
SELECT DUMP(type,1010) FROM <tabelnavn> WHERE failurelist=1036;
- så skulle tegnsættet gerne dukke op sammen med værdierne fra de enkelte bytes.
Derefter skulle det være muligt at finde ud af hvad 'Å' er i databasens tegnsæt. Hvis vi antager at Å har værdien 197 (det havde den oprindeligt), så kan du nu skrive
UPDATE <tabelnavn> SET type=CHR(197) || 'rsag' WHERE type LIKE '_RDAG';
- så skulle der meget gerne blive klemt et 'Å' ned i dit type-felt. Om du så kan se det igen med det værktøj du nu bruger til at læse med er åbenbart mere tvivlsomt. Men det vigtigste er vel også at databasen indeholder det rigtige.
SELECT DUMP(type,1010) FROM <tabelnavn> WHERE failurelist=1036;
Kommer med følgende svar: WE8IS08859P1, 143,82,83,65,71
Når jeg kører den her: UPDATE <tabelnavn> SET type=CHR(197) || 'rsag' WHERE type LIKE '_RDAG';
Finder den ingen rækker at opdaterer
Hvordan er det forresten man kan fortryde en handling/kommando (altså inden man har committed) - nu er der ikke sket nogen skade endnu, men det kunne jo ske ;)
Det ser ud som om at du nu faktisk har fået opdateret dine 'Årdag' til 'Årsag. I hvert fald er 143,82,83,65,71 de numeriske værdier for Å,r,s,a,g når din database anvender ISO8859P1 (i MSWIN1252 hedder 'Å' 197).
Så et eller andet er gået godt undervejs! Det er også derfor dit UPDATE-statement ikke finder nogle rækker at opdatere - de er blevet ændret.
Hvis du skal fortryde en kommando, hedder det ROLLBACK (i stedet for COMMIT).
Synes godt om
Ny brugerNybegynder
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.