Avatar billede kronsj Nybegynder
18. november 2009 - 17:19 Der 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.

Hvordan det?

Håber at spørgsmålet er forstået?
Avatar billede claes57 Ekspert
18. november 2009 - 18:40 #1
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
Avatar billede steber Nybegynder
19. november 2009 - 07:38 #2
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;
Avatar billede petersen7913 Forsker
05. december 2009 - 13:59 #3
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.
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