sql >> Database teknologi >  >> RDS >> Oracle

ved hjælp af kommaseparerede værdier inde i IN-sætning for NUMBER kolonne

Har du virkelig brug for at returnere en kommasepareret liste? Det ville generelt være meget bedre at deklarere en samlingstype

CREATE TYPE num_table
    AS TABLE OF NUMBER;

Deklarer en funktion, der returnerer en forekomst af denne samling

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;

og brug derefter denne samling i din forespørgsel

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

Det er også muligt at bruge dynamisk SQL (hvilket @Sebas demonstrerer). Ulempen ved det er imidlertid, at hvert kald til proceduren vil generere en ny SQL-sætning, der skal parses igen, før den udføres. Det lægger også pres på bibliotekets cache, hvilket kan få Oracle til at rense mange andre genanvendelige SQL-sætninger, hvilket kan skabe mange andre ydeevneproblemer.



  1. JSON_MERGE_PATCH() vs JSON_MERGE_PRESERVE() i MySQL:Hvad er forskellen?

  2. Få det aktuelle år, den aktuelle måned og den aktuelle dag i MySQL

  3. Få værdi baseret på maks. af en anden kolonne grupperet efter en anden kolonne

  4. Sådan ændres tabelkantstilen i psql-forespørgselsresultaterne