[Oracle] Insert when - pomocy

0

Witam wszystkich

Chcę użyć polecenia INSERT WHEN by wstawić dane do tabeli ppc_address_area używając pola ukey z tabeli ppv_property_lpg i dwóch 'sztywnych' wartości ('M3' oraz 'CMW3').

insert 
when (ppv_property_lpg.ukey = ppc_address_area.ukey 
	and ppv_property_lpg.ward = '19') then
into 	ppc_address_area(ukey, dept, area)
values (ppv_property_lpg.ukey, 'M3, 'CMW3)
select * from ppv_property_lpg;
select * from ppc_address_area ;

Dostaję komunikat ORA-00911:invalid character

Spróbowałem więc zrobic to inaczej:

INSERT INTO ppc_address_area 
	(ukey, dept, area)
VALUES(
	(SELECT ppv_property_lpg.ukey FROM ppv_property_lpg 
	WHERE (ppv_property_lpg.ukey = ppc_address_area.ukey 
	and ppv_property_lpg.ward = '19'))
	, 'M3', 'CMW3'
	)	

Ale tym razem dostałem komunikat ORA-01400:Cannot insert NULL into ("PPSV"."PPC_ADDRESS_AREA"."UKEY")

Proszę o pomoc. Jestem początkujący...

0

napisz "własnemi słowami" co i przy jakich warunkach chcesz wstawić bo warunek ppv_property_lpg.ukey = ppc_address_area.ukey jest dla mnie bez sensu

0
Misiekd napisał(a)

napisz "własnemi słowami" co i przy jakich warunkach chcesz wstawić bo warunek ppv_property_lpg.ukey = ppc_address_area.ukey jest dla mnie bez sensu

tabela1 (ppc_address_area)
tabela2 (ppv_property_lpg)

Chcę dodać do tabela1 wiersze, jeżeli w tabela2 w polu 'ward' występuje wartość 19 i gdy pole 'ukey' w obu tabelach jest takie samo, np. 'UI/9000'.

0
Tomecky napisał(a)
Misiekd napisał(a)

napisz "własnemi słowami" co i przy jakich warunkach chcesz wstawić bo warunek ppv_property_lpg.ukey = ppc_address_area.ukey jest dla mnie bez sensu

tabela1 (ppc_address_area)
tabela2 (ppv_property_lpg)

Chcę dodać do tabela1 wiersze, jeżeli w tabela2 w polu 'ward' występuje wartość 19 i gdy pole 'ukey' w obu tabelach jest takie samo, np. 'UI/9000'.

Przepraszam piszę głupoty. tabela1.ukey = tabela2.ukey nie jest prawdą, ponieważ w tabela1 nie ma jeszcze wartości w polu ukey.
Czyli chodzi o to, żeby wypełnić tabela1 danymi, jeżeli w tabela2 w polu 'ward' występuje wartość 19 Dane te to: ukey z tabela2 oraz 'm3' i 'cmw3'

0
INSERT INTO ppc_address_area (ukey, dept, area)
SELECT ukey, 'm3', 'cmw3' FROM tabela2 WHERE ward = 19
0
Misiekd napisał(a)
INSERT INTO ppc_address_area (ukey, dept, area)
SELECT ukey, 'm3', 'cmw3' FROM tabela2 WHERE ward = 19

Dzięki wielkie - zadziałało (nie miało innego wyjścia). :-)
Na podstawie twojego kodu, po wprowadzeniu pewnych zmian, mój jest następujący:

INSERT INTO ppc_address_area (ukey,dept,area)
(SELECT ukey,
	'M3',		
	(CASE 
		WHEN ppv_property_lpg.ward = '1'  THEN 'CME7'
		WHEN ppv_property_lpg.ward = '2'  THEN 'CME5'
		WHEN ppv_property_lpg.ward = '3'  THEN 'CME4'
		WHEN ppv_property_lpg.ward = '4'  THEN 'CME5'
		WHEN ppv_property_lpg.ward = '5'  THEN 'CMW3'
		WHEN ppv_property_lpg.ward = '6'  THEN 'CME4'
		WHEN ppv_property_lpg.ward = '7'  THEN 'CME7'
		WHEN ppv_property_lpg.ward = '8'  THEN 'CMW1'
		WHEN ppv_property_lpg.ward = '9'  THEN 'CME6'
		WHEN ppv_property_lpg.ward = '10' THEN 'CME4'
		WHEN ppv_property_lpg.ward = '11' THEN 'CMW1'
		WHEN ppv_property_lpg.ward = '12' THEN 'CME6'
		WHEN ppv_property_lpg.ward = '13' THEN 'CME6'
		WHEN ppv_property_lpg.ward = '14' THEN 'CME7'
		WHEN ppv_property_lpg.ward = '15' THEN 'CMW1'
		WHEN ppv_property_lpg.ward = '16' THEN 'CMW2'
		WHEN ppv_property_lpg.ward = '17' THEN 'CMW2'
		WHEN ppv_property_lpg.ward = '18' THEN 'CMW3'
		WHEN ppv_property_lpg.ward = '19' THEN 'CMW3'
		WHEN ppv_property_lpg.ward = '20' THEN 'CMW2'
		
	END)
FROM 
	ppv_property_lpg
WHERE
	ward = '1'  OR
	ward = '2'  OR
	ward = '3'  OR
	ward = '4'  OR
	ward = '5'  OR
	ward = '6'  OR
	ward = '7'  OR
	ward = '8'  OR
	ward = '9'  OR
	ward = '10' OR
	ward = '11' OR
	ward = '12' OR
	ward = '13' OR
	ward = '14' OR
	ward = '15' OR
	ward = '16' OR
	ward = '17' OR
	ward = '18' OR
	ward = '19' OR
	ward = '20' 		
0

WHERE
ward = '1' OR
ward = '2' OR
ward = '3' OR
ward = '4' OR
ward = '5' OR
ward = '6' OR
ward = '7' OR
ward = '8' OR
ward = '9' OR
ward = '10' OR
ward = '11' OR
ward = '12' OR
ward = '13' OR
ward = '14' OR
ward = '15' OR
ward = '16' OR
ward = '17' OR
ward = '18' OR
ward = '19' OR
ward = '20'

Nie mogłeś dać
where ward between 1 and 20
?

0
MłodyDuchem napisał(a)

Nie mogłeś dać
where ward between 1 and 20
?

Pole ward jest stringiem

0

A nie możesz rzutować?

1 użytkowników online, w tym zalogowanych: 0, gości: 1