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

Oracle-lagret procedure med parametre for IN-klausul

Brug af CSV er nok den enkleste måde, forudsat at du kan være 100 % sikker på, at dine elementer ikke selv indeholder strenge.

En alternativ og sandsynligvis mere robust måde at gøre dette på er at oprette en brugerdefineret type som en tabel med strenge. Hvis du antager, at dine strenge aldrig var længere end 100 tegn, så kunne du have:

CREATE TYPE string_table AS TABLE OF varchar2(100);

Du kan derefter overføre en variabel af denne type til din lagrede procedure og referere den direkte. I dit tilfælde noget som dette:

FUNCTION EXECUTE_UPDATE(
    identifierList string_table,
    value int)
RETURN int
IS
BEGIN

    [...other stuff...]

    update table1 set col1 = col1 - value 
    where id in (select column_value from table(identifierList));

    RETURN SQL%ROWCOUNT;

END

table() funktion gør din brugerdefinerede type til en tabel med en enkelt kolonne "COLUMN_VALUE", som du derefter kan behandle som enhver anden tabel (det samme gør joins eller, i dette tilfælde, subselects).

Skønheden ved dette er, at Oracle vil oprette en konstruktør til dig, så når du kalder din lagrede procedure kan du blot skrive:

execute_update(string_table('foo','bar','baz'), 32);

Jeg går ud fra, at du kan håndtere at opbygge denne kommando programmatisk fra C#.

Som en sidebemærkning har vi i mit firma en række af disse brugerdefinerede typer defineret som standard for lister over strenge, doubler, ints og så videre. Vi gør også brug af Oracle JPublisher for at kunne mappe direkte fra disse typer til tilsvarende Java-objekter. Jeg kiggede hurtigt rundt, men jeg kunne ikke se nogen direkte ækvivalenter til C#. Tænkte lige, at jeg ville nævne det, hvis Java-udviklere støder på dette spørgsmål.



  1. Hvad er skema i SQL Server, og hvordan man opretter/slipper skema i SQL Server-database - SQL Server / TSQL Tutorial Del 27

  2. Sådan fjerner du "X Rows Selected" i SQLcl &SQL*Plus (Oracle)

  3. Kontroller, om filen findes eller ej i sql-serveren?

  4. Sådan søger du i en streng i SQL Server-databaser