Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Prosedur tersimpan Oracle dengan parameter untuk klausa IN

Menggunakan CSV mungkin adalah cara paling sederhana, dengan asumsi Anda dapat 100% yakin bahwa elemen Anda sendiri tidak akan berisi string.

Cara alternatif, dan mungkin lebih kuat, untuk melakukan ini adalah dengan membuat tipe kustom sebagai tabel string. Misalkan string Anda tidak pernah lebih dari 100 karakter, maka Anda dapat memiliki:

CREATE TYPE string_table AS TABLE OF varchar2(100);

Anda kemudian dapat meneruskan variabel jenis ini ke prosedur tersimpan Anda dan merujuknya secara langsung. Dalam kasus Anda, sesuatu seperti ini:

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() function mengubah jenis kustom Anda menjadi tabel dengan satu kolom "COLUMN_VALUE", yang kemudian dapat Anda perlakukan seperti tabel lainnya (begitu juga bergabung atau, dalam hal ini, subpilihan).

Keindahan dari hal ini adalah Oracle akan membuat konstruktor untuk Anda, jadi saat memanggil prosedur tersimpan Anda, Anda cukup menulis:

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

Saya berasumsi bahwa Anda dapat menangani pembuatan perintah ini secara terprogram dari C#.

Sebagai tambahan, di perusahaan saya, kami memiliki sejumlah tipe kustom ini yang didefinisikan sebagai standar untuk daftar string, double, int, dan sebagainya. Kami juga menggunakan Oracle JPublisher untuk dapat memetakan langsung dari tipe ini ke objek Java yang sesuai. Saya melihat sekeliling dengan cepat tetapi saya tidak dapat melihat padanan langsung untuk C#. Saya pikir saya akan menyebutkannya jika pengembang Java menemukan pertanyaan ini.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara saya mencatat/melacak panggilan prosedur tersimpan Oracle dengan nilai parameter?

  2. 12.2 Fitur Baru RAC/GI

  3. Garis bawah tidak berfungsi di klausa seperti Oracle

  4. Oracle - Tabel klon - Struktur, batasan data, dan semuanya

  5. Bagaimana faktor pengelompokan Oracle Index dihitung