Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Thủ tục lưu trữ Oracle với các tham số cho mệnh đề IN

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 bản thân các phần tử của bạn sẽ không chứa chuỗi.

Một cách thay thế và có lẽ mạnh mẽ hơn là tạo một kiểu tùy chỉnh dưới dạng một bảng chuỗi. Giả sử chuỗi của bạn không bao giờ dài hơn 100 ký tự, thì bạn có thể có:

CREATE TYPE string_table AS TABLE OF varchar2(100);

Sau đó, bạn có thể chuyển một biến kiểu này vào thủ tục được lưu trữ của mình và tham chiếu trực tiếp đến nó. 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

table() hàm biến loại tùy chỉnh của bạn thành một bảng có một cột duy nhất "COLUMN_VALUE", sau đó bạn có thể coi cột này giống như bất kỳ bảng nào khác (kết hợp hoặc trong trường hợp này là các lựa chọn con).

Cái hay của điều này là Oracle sẽ tạo một phương thức khởi tạo cho bạn, vì vậy khi gọi thủ tục đã lưu trữ của bạn, bạn có thể chỉ cần viết:

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

Tôi giả định rằng bạn có thể xử lý việc tạo lệnh này theo chương trình từ C #.

Ngoài ra, tại công ty của tôi, chúng tôi có một số loại tùy chỉnh này được xác định là tiêu chuẩn cho danh sách chuỗi, đôi, int, v.v. Chúng tôi cũng sử dụng Oracle JPublisher để có thể ánh xạ trực tiếp từ các kiểu này thành các đối tượng Java tương ứng. Tôi đã xem nhanh xung quanh nhưng tôi không thể thấy bất kỳ tương đương trực tiếp nào cho C #. Tôi chỉ nghĩ rằng tôi sẽ đề 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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách hiệu quả để cập nhật tất cả các hàng trong bảng

  2. Hàm PL / SQL trong Oracle không thể thấy DBMS_AQ

  3. Đám mây Oracle:Tạo Cơ sở dữ liệu Xử lý Giao dịch Tự động (ATP)

  4. Cách làm việc với các Hàm ngày trong Oracle sql

  5. 3 cách kiểm tra kiểu dữ liệu cột trong Oracle