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

Thực thi ngay lập tức với loại không phải Sql

Nó phụ thuộc vào ý bạn muốn nói về 'giải pháp thay thế' Kiểu sẽ phải được khai báo ở mức SQL, không phải trong một khối PL / SQL (có lẽ là một gói trong trường hợp này). Điều này sẽ hoạt động, ví dụ:

CREATE OR REPLACE TYPE t_error_msgs AS TABLE OF VARCHAR2(2000)
/

CREATE OR REPLACE PACKAGE p42 AS
  FUNCTION handler RETURN t_error_msgs;
END p42;
/

CREATE OR REPLACE PACKAGE BODY p42 AS
  FUNCTION handler RETURN t_error_msgs IS
  BEGIN
    RETURN null; -- put real data here, obviously...
  END handler;
END p42;
/

DECLARE
  v_error_msg t_error_msgs;
  v_function varchar2(30);
BEGIN
  v_function := 'p42.handler';
  EXECUTE IMMEDIATE 'BEGIN :result := ' || v_function || '; END;'
    USING OUT v_error_msg;
END;
/

Ngoài ra, bạn có thể xem xét lại liệu bạn có thực sự cần điều này để trở nên năng động hay không. Có lẽ bạn đang chuyển hoặc bằng cách nào đó đang xác định hàm để gọi khi đang di chuyển và điền v_function . Nếu có một danh sách tương đối ngắn các giá trị có thể có thì có thể đơn giản hơn nếu có case với các lệnh gọi hàm tĩnh riêng lẻ.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kiểm tra ràng buộc Oracle SQL giữa 2 bảng

  2. Phân vùng và Dấu nước Cao trong Oracle

  3. Cài đặt NLS_LANG cho trình điều khiển mỏng JDBC?

  4. Hàm HEXTORAW () hoạt động như thế nào? Thuật toán là gì?

  5. Lỗi khi lưu và nhận blob từ cơ sở dữ liệu SQL oracle