sql >> Databáze >  >> RDS >> Oracle

Identifikujte telefonní čísla v iteraci PL/SQL

K čemu je zde potřeba smyčka? Musíte přepsat prohlášení o aktualizaci na něco takového:

UPDATE t_numbers tn
   SET tn.country = (SELECT ic.country
                       FROM int_codes ic
                      WHERE ic.int_code = substr(tn.phone_number, 1, 4))
 WHERE tn.country is null
   AND EXISTS (SELECT 1
                 FROM int_codes ic
                WHERE ic.int_code = substr(tn.phone_number, 1, 4));

Poté opakujte totéž pro 3, 2 a 1 následovně (pro 3):

UPDATE t_numbers tn
   SET tn.country = (SELECT ic.country
                       FROM int_codes ic
                      WHERE ic.int_code = substr(tn.phone_number, 1, 3))
 WHERE tn.country is null
   AND EXISTS (SELECT 1
                 FROM int_codes ic
                WHERE ic.int_code = substr(tn.phone_number, 1, 3));

AKTUALIZACE:

Můžete také procházet 4:1, abyste dosáhli úkolu

  begin
    for i in 1..4 loop
      UPDATE t_numbers tn
       SET tn.country = (SELECT ic.country
                           FROM int_codes ic
                          WHERE ic.int_code = substr(tn.phone_number, 1, (5-i)))
     WHERE tn.country is null
       AND EXISTS (SELECT 1
                     FROM int_codes ic
                    WHERE ic.int_code = substr(tn.phone_number, 1, (5-i)));
    end loop;
  END;


  1. Zaokrouhlování na 2 desetinná místa v SQL

  2. pgsql return table ERROR:odkaz na sloupec je nejednoznačný

  3. Proč MySQL vrací některé floats ve vědecké notaci, ale ne jiné?

  4. Django ORM, vložte žádné datum a čas jako 0 do MySQL