Sử dụng CSV có lẽ là cách đơn giản nhất, giả sử bạn có thể chắc chắn 100% rằng các yếu tố của bạn sẽ không tự chứa chuỗi.
Cách thay thế và có lẽ mạnh mẽ hơn, cách thực hiện việc này là tạo loại tùy chỉnh dưới dạng bảng chuỗi. Giả sử chuỗi của bạn không bao giờ dài hơn 100 ký tự, sau đó bạn có thể có:
CREATE TYPE string_table AS TABLE OF varchar2(100);
Sau đó bạn có thể vượt qua một biến kiểu này thành thủ tục lưu trữ của bạn và tham khảo trực tiếp. Trong trường hợp của bạn, một cái gì đó như thế này:
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
Chức năng table()
biến kiểu tùy chỉnh của bạn vào một bảng với một cột duy nhất "COLUMN_VALUE", sau đó bạn có thể coi như bất kỳ bảng khác (để làm tham gia hoặc trong này case, subselects).
Vẻ đẹp của việc này là Oracle sẽ tạo ra một constructor cho bạn, vì vậy khi gọi thủ tục lưu trữ của bạn, bạn chỉ đơn giản là có thể viết:
execute_update(string_table('foo','bar','baz'), 32);
Tôi giả định rằng bạn có thể xử lý việc xây dựng lệnh này programatically từ C#.
Là một sang một bên, tại công ty của tôi, chúng tôi có một số loại tùy chỉnh được định nghĩa là tiêu chuẩn cho danh sách các chuỗi, tăng gấp đôi, int và v.v. Chúng tôi cũng sử dụng Oracle JPublisher để có thể ánh xạ trực tiếp từ các loại này vào các đối tượng Java tương ứng. Tôi đã có một cái nhìn nhanh chóng xung quanh nhưng tôi không thể nhìn thấy bất kỳ tương đương trực tiếp cho C#. Chỉ cần nghĩ rằng tôi muốn đề cập đến nó trong trường hợp các nhà phát triển Java gặp phải câu hỏi này.
Ghi chú nhanh - CSV sẽ không hoạt động bởi chính nó, vì Oracle sẽ coi nó là một chuỗi. – sarsnake
Không nên là '... từ string_table (identifierList)); ... '? –