0
ターゲット・スキーマアドレスここで、plzは数値であり、plzはvarchar2のソース・スキーマです。pl/sql-ORA-01702 - 無効な番号
次のコードは、ORA-01722 - 数値エラーが無効ですが、理由を特定できません。 '26189'や '38108'のような約30のplzと5つのヌル値があります。あなたは私たちを与えた
create or replace
procedure f1_get_adresses is
cursor c_adresse is
select id, strasse, hausnummer, to_number(to_nchar(postleitzahl))
as postleitzahl, ort, land
from db2_lsg2.f1_adresse;
rec c_adresse%rowtype;
counter number(10);
val_plz number(10);
begin
for rec in c_adresse
loop
-- PLZ
select count(*) into counter from postleitzahl
where plz = rec.postleitzahl and ort = rec.ort;
if counter = 0 then
if rec.postleitzahl is null then
val_plz := 0;
else
val_plz := rec.postleitzahl;
end if;
insert into postleitzahl (plz, ort) values (rec.ort, val_plz);
end if;
-- Land
select count(*) into counter from land
where land_name = rec.land;
if counter = 0 then
insert into land (land_name) values (rec.land);
end if;
--Adresse
select count(*) into counter from adresse
where strasse = rec.strasse
and hausnummer = rec.hausnummer
and plz = rec.postleitzahl
and (select land_name from land where land_name = rec.land) = rec.land;
if counter = 0 then
insert into adresse (strasse, hausnummer, plz, land_id)
values (
rec.strasse,
rec.hausnummer,
rec.postleitzahl,
(select land_id from land where land_name = rec.land)
);
end if;
end loop;
end;
すべきではありませんか? – Flukey
番号として郵便番号(PLZ)を保存するのはなぜですか?そうすれば、数字は先行ゼロで保存されていないので、 '01067'のようなPLZを保存することはできませんが、正しいPLZでは先行ゼロが必要です。ターゲット表のデータ型を 'varchar2'にも変更する必要があります。 –