Avatar billede dakine Nybegynder
24. februar 2003 - 10:48 Der er 9 kommentarer og
1 løsning

INSERT - SELECT-Statment med default værdier.

Hej med jer.

Jeg skal kopiere al data fra en tabel over til en anden.
Dette kan gøres med:
INSERT INTO sales
  SELECT * FROM latest_data;

Mit problem er så bare, at i den nye tabel er der tilføjet 2 NOT NULL kolonner mere. Disse skal naturligvis have en værdi. Kan de sættes til nogle default værdier?

Altså noget i stil med:
INSERT INTO sales(NewCol1='abc', NewCol2='def')
  SELECT * FROM latest_data;

(Alternativt må man fjerne sine NOL NULL imens man flytter data og oprette dem igen bagefter).
Avatar billede the_bma_man Nybegynder
24. februar 2003 - 10:53 #1
Du kan bruge en default constraint som den ene mulighed.
alternativt, og måske bedre, mener jeg du bare kan lave
INSERT INTO sales SELECT *, 0, 0 from latest_data;
Avatar billede ehf Nybegynder
24. februar 2003 - 10:57 #2
Du bliver sikkert nødt til at komme et alias p *
insert into sales select a.*, 0, 0 from latest_data a;
Avatar billede dakine Nybegynder
24. februar 2003 - 11:08 #3
0, 0 repræsentere altså på en måde de to NOT NULL kolonner i tabellen Sales!

Hvordan vil Oracle læse disse "0, 0"? Jeg kunne bedre se logikken hvis den vendte om!
INSERT INTO sales(0, 0)
  SELECT *from latest_data;
Avatar billede the_bma_man Nybegynder
24. februar 2003 - 11:16 #4
Nej.
Når du laver en insert into uden at angive felter, så lister du jo ikke felter.
Når du laver en insert into sales(0,0) forventer den to felter, der begge hedder 0.

0,0 er bare værdierne til de to felter, der ikke må være null.
Resten taget fra latest_data
Avatar billede dakine Nybegynder
24. februar 2003 - 12:21 #5
Det har jeg ikke kunnet få til at virke!
Jeg har nu også svært ved at se hvordan Oracle skulle vide hvilke kolonner der refereres til.

Til gengæld virke denne statment.
INSERT INTO table2(col1, col2, col3, col4, col5, col6, col7, col8)
  SELECT(col1, col2, col3,'111', col4, '222', col5, col6)
Avatar billede the_bma_man Nybegynder
24. februar 2003 - 14:57 #6
insert into table2(col1, col2, col3, col4..., coln)
select col1, 'jubii', col2, col3, ..., conn-1 from table1

Det virker.
Avatar billede sluppermanden Nybegynder
30. marts 2003 - 12:05 #7
Når du opretter en tabel kan du sætte default værdier på
f.eks.

CREATE OR REPLACE TABLE latest_data2 (
data_navn varchar2(30);
data1 varchar2(30) NOT NULL DEFAULT 'NO DATA';
data2 varchar2(30) NOT NULL DEFAULT 'NO DATA';

i denne tabel ville det være muligt at lave det her

Insert into latest_data2 values('data nummmer 1');
Avatar billede sluppermanden Nybegynder
30. marts 2003 - 12:06 #8
der mangler lige ); i create stamententet :-)
Avatar billede genvej Nybegynder
23. juli 2003 - 13:06 #9
det var dog en frygtelig masse ballade for ingenting ;-)....

Brug NVL!!!

SELECT TIMES_LENT FROM JD11.BOOK
times_lent 
10 
 

19 
98 
12 
 
12 
56 

SELECT NVL(TIMES_LENT,0) FROM JD11.BOOK
nvl(times_lent,0) 
10 


19 
98 
12 

12 
56 

The above two SELECT statements show the difference in the result set after using NVL to replace a NULL with some value that adds to the readability of the result set.
Avatar billede dakine Nybegynder
24. juli 2003 - 07:30 #10
Hej.
Hmmn. Jeg havde helt glemt, at jeg overhovedet have oprettet dette spørgsmål i sin tid, men fint nok. :o)

NVL betyder her blot, at hvis der ikke findes en værdi for 'times_lent' returneres 0. Er det ikke sådan?

Lad os så få lukket denne sag. Tak for dit svar.
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