sql >> Database >  >> RDS >> Oracle

door komma's gescheiden waarden gebruiken in de IN-clausule voor kolom NUMBER

Moet je echt een door komma's gescheiden lijst retourneren? Het zou over het algemeen veel beter zijn om een ​​verzamelingstype aan te geven

CREATE TYPE num_table
    AS TABLE OF NUMBER;

Declareer een functie die een instantie van deze verzameling retourneert

CREATE OR REPLACE FUNCTION get_nums
  RETURN num_table
IS
  l_nums num_table := num_table();
BEGIN
  for i in 1 .. 10
  loop
    l_nums.extend;
    l_nums(i) := i*2;
  end loop;
END;

en gebruik die verzameling vervolgens in uw zoekopdracht

SELECT *
  FROM users_table
 WHERE user_id IN (SELECT * FROM TABLE( l_nums ));

Het is ook mogelijk om dynamische SQL te gebruiken (wat @Sebas laat zien). Het nadeel hiervan is echter dat elke aanroep van de procedure een nieuwe SQL-instructie genereert die opnieuw moet worden geparseerd voordat deze wordt uitgevoerd. Het zet ook de bibliotheekcache onder druk, waardoor Oracle tal van andere herbruikbare SQL-instructies kan wissen, wat kan leiden tot tal van andere prestatieproblemen.



  1. JSON_CONTAINS() Voorbeelden in MySQL

  2. Een tussenliggende MySQL- of MariaDB-master vervangen door een Binlog-server met MaxScale

  3. Opslag van SQLite-database met Android en Phonegap

  4. Hoe de huidige instellingen voor puntopdrachten in SQLite te tonen