0

plzが数値であるターゲットスキーマアドレスと、plzがvarchar2であるソーススキーマがあります。

次のコードはORA-01722-無効な番号エラーをスローしますが、理由を特定できません。'26189'または'38108'のような約30plzと5つのnull値があります。

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;
4

1 に答える 1

3

あなたが私たちに与えた詳細はあまりないので、推測しましょう..タイプはrec.ort何ですか?

insert into postleitzahl (plz, ort) values (rec.ort, val_plz); 

(異なる順序)ではないはずです

insert into postleitzahl (plz, ort) values (val_plz, rec.ort);  ?
于 2012-03-09T11:11:19.603 に答える