Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Zidentyfikuj numery telefonów w iteracji PL/SQL

Po co tu pętla? Musisz ponownie napisać oświadczenie o aktualizacji na coś takiego:

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

Następnie powtórz to samo dla 3, 2 i 1 w następujący sposób (dla 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));

AKTUALIZACJA:

Aby wykonać zadanie, możesz też przejść w pętli 4 do 1

  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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. nie można zapisać danych o dużym rozmiarze za pomocą UTL_FILE.PUT_LINE

  2. Uzyskaj dostęp do Oracle Apex ze zdalnej maszyny

  3. CONNECT BY lub zapytania hierarchiczne w RDBMS innych niż Oracle

  4. Konwersja stref czasowych w zapytaniu SQL

  5. Dzielenie dużej liczby wierszy na mniejsze zapytania? Równoległość