sql >> Databasteknik >  >> RDS >> Oracle

Identifiera telefonnummer i en PL/SQL-iteration

Vad är behovet av en slinga här? Du måste skriva om ditt uppdateringsutlåtande till något i stil med detta:

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

Upprepa sedan samma sak för 3, 2 och 1 enligt följande (för 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));

UPPDATERING:

Du kan också gå igenom 4 till 1 för att uppnå uppgiften

  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. Att returnera frågeresultat i fördefinierad ordning

  2. Använder bindningsvariabler med dynamisk SELECT INTO-sats i PL/SQL

  3. Oracle Sequence genererar inte det kontinuerliga numret

  4. Välj alla alternativvärden php mysql