Oracle
 sql >> база данни >  >> RDS >> Oracle

Съхранена процедура на Oracle с параметри за IN клауза

Използването на CSV е може би най-простият начин, ако приемем, че можете да сте 100% сигурни, че вашите елементи няма да съдържат низове.

Алтернативен и вероятно по-стабилен начин да направите това е да създадете персонализиран тип като таблица с низове. Ако предположим, че вашите низове никога не са били по-дълги от 100 знака, тогава бихте могли да имате:

CREATE TYPE string_table AS TABLE OF varchar2(100);

След това можете да предадете променлива от този тип във вашата съхранена процедура и да я препратите директно. Във вашия случай нещо подобно:

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() функцията превръща вашия персонализиран тип в таблица с една колона "COLUMN_VALUE", която след това можете да третирате като всяка друга таблица (така и присъединяванията или в този случай подизбиранията).

Красотата на това е, че Oracle ще създаде конструктор за вас, така че когато извиквате вашата съхранена процедура, можете просто да напишете:

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

Предполагам, че можете да се справите с изграждането на тази команда програмно от C#.

Като настрана, в моята компания имаме редица от тези персонализирани типове, дефинирани като стандартни за списъци с низове, двойни, ints и така нататък. Ние също така използваме Oracle JPublisher, за да можем да картографираме директно от тези типове в съответните Java обекти. Огледах се набързо, но не можах да видя никакви преки еквиваленти за C#. Просто реших да го спомена, в случай че Java разработчиците попаднат на този въпрос.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Актуализиране на таблицата на Oracle от макрос на Excel VBA с помощта на ODBC връзка

  2. Грешка при инсталиране на клиента на Oracle – пътят е твърде дълъг

  3. Функция COALESCE() в Oracle

  4. SQL*Plus как да приема текстова променлива от подкана?

  5. Оракул. Как да изведем дата и час?