18. november 2009 - 17:19Der er
2 kommentarer og 1 løsning
update med select statement
Jeg skal hente nogle oplysninger fra en tabel, og lægge dem over i en anden tabel, via en UPDATE kommando:
UPDATE BO10000T SET (LAENGDE) = (SELECT nvl(C.DATA_PRECISION,C.DATA_LENGTH) FROM COLS C WHERE BO.TABEL_NAVN = C.TABLE_NAME AND BO.KOLONNE_NAVN = C.COLUMN_NAME)
Feltet LAENGDE i BO10000t tabellen tillader ikke null. Ud fra denne sætning burde det så kun være rækker med tabel_navn og kolonne_navn der i forvejen findes i BO10000T der bliver opdateret. Og alligevel får jeg alligevel fejlen: ORA-01407: kan ikke opdatere ("BO10000T"."LAENGDE") til NULL
- altså prøver den at opdatere rækker der ikke findes i BO10000T.
prøv at tilføje et AND not isnull(C.DATA_LENGTH) eller lav noget (SELECT nvl(C.DATA_PRECISION,SELECT nvl(C.DATA_LENGTH,0)) så du ikke kører videre med data, hvor data_length er tom
Kan ikke lige se hvad BO. er, men nu skriver jeg alligevel noget:
Lige nu opdaterer den ALLE rækker, også dem hvor sin (SELECT ...) ikke finder nogen rækker. Og der hvor den ikke finder rækker forsøger den at opdatere med NULL. Så prøv at sætte en WHERE clause på din UPDATE. Du kan jo bruge det samme du allerede har lavet og teste fx:
UPDATE bo10000t SET laengde = (SELECT ...) WHERE (SELECT ...) IS NOT NULL;
Alternativt kunne du opdatere med 0 (ikke null mentallet 0) hvor du ikke finder en værdi.
Umiddelbart kan jeg bedst lide svaret fra claes57 med select nvl(...) altsp fange en null-værdi så tidligt som muligt. Men det er smag og behag.
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.